我正在尝试确定是否有办法在Windows Cred Vault中获取存储的凭据,并将其传递给需要凭据的bat文件。我找到了一个非常旧的bat文件,其中包含明文形式的用户名和密码。这些用于对门户进行身份验证,并且必须由蝙蝠以明文阅读。我已经在我要使用的服务器上存储了凭据,因此可以消除此安全漏洞,但是我不确定100%如何通过密码,因为密码必须采用明文形式。这是我所拥有的:
$creds = Get-StoredCredential -Target "Username"
$password = $creds.Password
$username = $creds.UserName
Start-Process cmd.exe "/c C:\trigger.bat `"argument1`" $username $password `"Argument2`" Argument3" -NoNewWindow -Verbose
当我在行中以明文形式输入密码时,它可以工作。如果我使用$ password,则会抛出auth错误。我认为这是因为$ password是存储的PSObject,并且不会“正确”地传递给cmd。有办法解决吗?
PS:Get-StoredCredential来自CredentialManager模块。
答案 0 :(得分:2)
Get-StoredCredential
,如果在没有-AsCredentialObject
的情况下调用yields PSCredential
instances。
您正在访问的PSCredential.Password
property不是String
,而是SecureString
,因此您无法像尝试的那样检索纯文本密码。
基于Convert a secure string to plain text,您可以使用PSCredential
至get a NetworkCredential
,然后使用其Password
属性...
$password = $creds.GetNetworkCredential().Password
无论如何,当您使用$username
和$password
收到身份验证错误时,应确保这些变量包含期望的值。
答案 1 :(得分:2)
如果$creds
包含一个PSCredential
对象,那么您应该可以替换此对象:
$password = $creds.Password
与此:
$password = $creds.GetNetworkCredential().Password