将存储的Creds传递到bat文件

时间:2019-10-01 15:32:52

标签: powershell credentials

我正在尝试确定是否有办法在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模块。

2 个答案:

答案 0 :(得分:2)

Get-StoredCredential,如果在没有-AsCredentialObject的情况下调用yields PSCredential instances。 您正在访问的PSCredential.Password property不是String,而是SecureString,因此您无法像尝试的那样检索纯文本密码。

基于Convert a secure string to plain text,您可以使用PSCredentialget a NetworkCredential,然后使用其Password属性...

$password = $creds.GetNetworkCredential().Password

无论如何,当您使用$username$password收到身份验证错误时,应确保这些变量包含期望的值。

答案 1 :(得分:2)

如果$creds包含一个PSCredential对象,那么您应该可以替换此对象:

$password = $creds.Password

与此:

$password = $creds.GetNetworkCredential().Password