我正在Windows Server 2008 R2上使用PowerShell 2.0(由于SP2010而需要)。我需要从Windows凭据管理器中检索进程的凭据。我似乎无法使其工作。
我得到了这段代码:
[Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]
(new-object Windows.Security.Credentials.PasswordVault).RetrieveAll() | % { $_.RetrievePassword(); $_ }
字符串
两行代码抛出错误
Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime : Unable to find type [Windows.Security.Credentials.PasswordVault,Windows.Security.Credentials,ContentType=WindowsRuntime]: make sure that the assembly containing this type is loaded.
型
和
(new-object Windows.Security.Credentials.PasswordVault).RetrieveAll() | % {$_.RetrievePassword(); $_ }
型
我一直在尝试以某种方式导入PasswordVault类。到目前为止,Google已经失败了,我甚至无法找到它驻留在哪个程序集中。我错过了什么?
7条答案
按热度按时间nwnhqdif1#
在powershell5中键入:
字符串
然后
型
和后来
型
该模块的源代码为https://github.com/davotronic5000/PowerShell_Credential_Manager
==编辑2023 ==
原始版本已存档,请安装更新的fork:
型
查看Github repository了解更多详情。
hof1towb2#
您需要访问Win32 API才能与凭据管理器交互。
CredMan.ps1 from the Technet scripting gallery很好地证明了这一点。
对于更简单的使用模式,如仅列出主体或添加新凭据,您还可以使用
cmdkey
,这是一个用于凭据管理的内置Windows命令行实用程序为了在PowerShell中重用存储的凭据,这家伙似乎找到了一种方法,使用类似于CredMan.ps1的技术,从凭据存储中的通用凭据句柄构建
PSCredential
:Get-StoredCredentialnue99wik3#
如果任何人只是想要一个代码片段,这样他们就可以分发脚本,而不必指示最终用户安装模块或包含DLL文件,这应该可以做到。
字符串
上面的代码已经在PowerShell 7和PowerShell 5上进行了测试,但是如果你使用后者,你可能需要一个最新版本的.Net框架。
pb3s4cty4#
微软的SecretManagement and SecretStore似乎是官方的解决方案。他们是officially released on March 25, 2021。秘密可以是一个凭据。
个字符
hzbexzde5#
根据文档,Windows Server 2008 R2不支持PasswordVault类。
最低支持服务器Windows Server 2012
https://msdn.microsoft.com/library/windows/apps/windows.security.credentials.passwordvault.aspx
ni65a41a6#
我发现了一个非常好的职位,这段代码将打印所有的用户名,资源和密码
字符串
来源:Todd's post
tjvv9vkg7#
适用于 Windows PowerShell v5.1(以及 * 可能 * 更早版本)以及PowerShell (Core) 7+的解决方案:
BetterCredentials
模块available in the PowerShell Gallery提供对CredMan(Windows凭据管理器)的编程访问。您可以安装,例如,与:
字符串
-AllowClobber
是必要的,因为模块的Get-Credential
命令是用来覆盖built-in one的:它与内置的语法兼容,同时通过额外的参数提供额外的功能。值得注意的是,
-Store
开关可用于将返回的凭据存储在CredMan中。要对如何存储条目进行更多控制,请使用
Set-Credential
。Get-Credential
自动返回已存储的凭据(如果可用),并且如果最初仅指定了用户名,则也足以进行检索。以下命令与CredMan保险库显式交互,需要完整的条目 * 目标名称 *,如
Find-Credential
返回的装饰[pscredential]
示例的.Target
属性值所示。Get-Credential -Store -UserName Foo
存储的凭据,.Target
属性值为LegacyGeneric:target=MicrosoftPowerShell:user=foo
Find-Credential
默认列出所有存储的凭据;虽然它确实有一个-Filter
参数,但它受到严重限制,并且根据我的经验并不可靠(从模块版本4.5开始)-最好使用Where-Object
的 post-filtering,如this answer所示。要删除存储的凭据,请使用
Remove-Credential
。要测试CredMan保管库中是否已存在具有给定目标名称的凭据,请使用
Test-Credential
。[1]您不太可能需要这样做,但是您仍然可以调用重写的小程序,即通过
Microsoft.PowerShell.Security\Get-Credential