我有一个 CMD 文件,我必须从中运行 Powershell 脚本并传入用户名和密码:即:PowerShell -File "%1" -Computer "%2" -Username "%3" -Password "%4"。有没有办法将 SecureString 密码从 CMD 发送到 powershell 脚本?
让我再补充几点,让我的困境更清楚:因此,每当我执行包含上述 Powershell 命令的 CMD 文件时,我都会在命令行上传递所有参数(%1% 到 %4%)的值。现在,当我传递这些参数时,它们会以明文形式传递,并且所有内容都会记录到 ID 为 4688 的事件监视器中,并启用高级审核。我希望在这种情况下密码不可见。
答案1
不。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
现在在您的 CMD 脚本中,您基本上将调用 Powershell 的方式从使用更改-File
为使用-Command
,以便您可以在将凭据文件传递给脚本之前将其导入回变量。
powershell.exe -C "$cred = Import-Clixml .\mycred.xml; .\%1 -Computer %2 -Credential $cred"