将存储的信用传递到 bat 文件

Pass Stored Creds to bat file

我想弄清楚是否有办法在 Windows Cred 保险库中获取存储的凭据并将其传递给需要凭据的 bat 文件。我发现了一个非常古老的 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 它会抛出一个身份验证错误。我假设这是因为 $password 是一个存储的 PS 对象并且没有传递给 cmd "correctly"。有解决办法吗?

PS: Get-StoredCredential 来自 CredentialManager 模块。

Get-StoredCredential, when called without -AsCredentialObject, yields PSCredential instancesPSCredential.Password property you are accessing is not a String but a SecureString,因此您无法像您尝试的那样检索明文密码。

基于 you can use the PSCredential to get a NetworkCredential and then use its Password属性...

$password = $creds.GetNetworkCredential().Password

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

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

$password = $creds.Password

有了这个:

$password = $creds.GetNetworkCredential().Password