Powershell:将 SecureString (或 PSCredential) 作为脚本参数传递

Powershell: Pass SecureString (or PSCredential) as script parameter

提问人:Silex 提问时间:3/9/2023 更新时间:3/9/2023 访问量:905

问:

我有一个名为这样的脚本:script.ps1

Param([Parameter(Mandatory)][SecureString] $Password)

# do some stuffs

如果我像这样运行它,没问题:

powershell.exe -File script.ps1

但是,如果我尝试显式传递 SecureString,它将不起作用:

powershell.exe -File script.ps1 -Password (Read-Host -AsSecureString)

我怀疑您只能将经典字符串作为脚本参数传递,但我无法在任何地方找到对此的确认。

我知道你可以做到这一点,而且有效:

& ./script.ps1 -Password (Read-Host -AsSecureString)

但是,您并不总是在 powershell 会话中开始。

TL/DR:使用脚本参数时,我应该使用纯字符串作为密码吗?

PS:如果对我的情况效果更好,那也没关系PSCredential

PowerShell 参数 传递 SecureString

评论

3赞 Mathias R. Jessen 3/9/2023
可以在命令行上提交的唯一数据类型是字符串,无法在 .NET 外部构造 SecureString 实例并在启动 powershell.exe 时将其作为参数传递。您必须重构参数块以获取包含凭据的文件的路径(您可以使用Get-Credential 'dummyUserName' |Export-CliXml path\to\output.xml)
3赞 jkiiski 3/9/2023
还可以运行以在内部 PowerShell 中计算参数。powershell.exe -Command "& { .\script.ps1 -Password (Read-Host -AsSecureString) }"
0赞 mklement0 3/9/2023
好点子,@jkiiski。一个狡辩(无关紧要的旁白):没有理由使用来调用通过 () 参数传递给 PowerShell 的 CLI 的代码 - 只需直接使用。旧版本的 CLI 文档错误地建议这是必需的,但此后已得到纠正。"& { ... }"-Command-c"..."& { ... }
0赞 mklement0 3/9/2023
@Silex,在您的用例中,调用是否以允许交互式提示的方式进行?如果是这样,jkiiski 的解决方案应该有效。如果不是,是否可以选择修改脚本文件?powershell.exe
1赞 Silex 3/9/2023
是的,jkiiski 和 Mathias R. Jessen 的回答都有效。如果需要,我还可以修改脚本文件以接受字符串/xml 文件。

答: 暂无答案