我有一个CMD文件,我必须运行Powershell脚本传递用户名和密码:例如:PowerShell文件“%1” – 计算机“%2” – 用户名“%3” – 密码“%4”。 无论如何发送一个SecureString密码从CMD到PowerShell脚本?
让我再补充一点,让我的困境更加清晰:所以无论何时执行包含上述Powershell命令的CMD文件,我都会在命令行中传递所有参数(%1%到%4%)的值。 现在,当我传递这些参数时,它们将以明文forms传入,并且所有事件都会被logging到事件监视器中,ID为4688且启用了“高级审计”function。 我想要的是在这种情况下不可见的密码。
不,SecureString是一个Powershell构造,在传统的cmd / batch环境中没有意义。
如果您不希望密码可见,则需要find另一种传递方式,而不是直接在命令中(这可能意味着修改Powershell脚本以不接受纯文本密码参数)。
我见过的最常见的事情是使用Export-CliXml将PSCredential对象Export-CliXml到文件,然后在调用脚本函数(通过Import-CliXml )之前将其导入到variables中,并将该variables传递给该函数。 这种方法的警告是导出的文件是不可移植的。 XML中的encryption与导出的用户和机器都有关系 。
编辑:这是如何改变你的CMD脚本,以适应通过PSCredential。 我会在这里假设相对的path,以保持更短的时间。
在脚本启动之前,您需要将凭证导出到文件。
# interactively prompt for the credential $cred = get-credential # export the credential object to a file $cred | Export-Clixml .\mycred.xml
现在,在您的CMD脚本中,您基本上可以更改调用Powershell使用-Command和使用-Command以便您可以在将凭据文件传递给脚本之前将其导回到variables。
powershell.exe -C "$cred = Import-Clixml .\mycred.xml; .\%1 -Computer %2 -Credential $cred"