从 CMD 文件发送 SecureString 密码到 Powershell

Jay*_*waj 1 powershell batch

我有一个 CMD 文件,我必须从中运行一个传入用户名和密码的 Powershell 脚本:即:PowerShell -File "%1" -Computer "%2" -Username "%3" -Password "%4"。反正有没有将 SecureString 密码从 CMD 发送到 powershell 脚本?

让我再补充几点,让我的困境更加清晰:所以每当我执行这个包含上述 Powershell 命令的 CMD 文件时,我都会在命令行上传递所有参数(%1% 到 %4%)的值. 现在,当我传递这些参数时,它们以明文形式传入,并且所有内容都记录到事件监视器中,ID 为 4688 且启用了高级审计。我想要的是密码在这种情况下不可见。

Rya*_*ger 5

否。 SecureString 是一种 Powershell 构造,在旧版 cmd/batch 环境中没有任何意义。

如果您不希望密码可见,您需要找到另一种方式来传递它而不是直接在命令中传递(这可能意味着修改您的 Powershell 脚本以接受纯文本密码参数)。

我见过人们做的最常见的事情是使用将PSCredential对象导出到文件Export-CliXml,然后在调用脚本的函数之前将其导入变量(通过Import-CliXml),并将变量传递给函数。这种方法的警告是导出的文件不可移植。在XML加密绑定到两个用户和机器做出口。

编辑:以下是更改 CMD 脚本以适应传递 PSCredential 的方法。我将在这里假设相对路径只是为了让事情更短。

在您的脚本开始之前,您需要将凭证导出到一个文件中。

# interactively prompt for the credential
$cred = get-credential

# export the credential object to a file
$cred | Export-Clixml .\mycred.xml
Run Code Online (Sandbox Code Playgroud)

现在,在您的 CMD 脚本中,您基本上将调用 Powershell 的方式从使用更改-File为使用,-Command以便您可以在将凭据文件传递给脚本之前将其导入回变量。

powershell.exe -C "$cred = Import-Clixml .\mycred.xml; .\%1 -Computer %2 -Credential $cred"
Run Code Online (Sandbox Code Playgroud)