我的脚本中有一个参数块
Param (
[Parameter(Mandatory=$True)]
[string]$FileLocation,
[Parameter(Mandatory=$True)]
[string]$password = Read-Host "Type the password you would like to set all the users to" -assecurestring
)
我可以在必填参数字段中使用 Read-Host CmdLet 吗?如果不是,我该怎么做才能确保我接受正确类型的变量类型,以便我可以将它传递给用户创建过程?
指定正确的密码类型就足够了,请尝试:
PowerShell 将“屏蔽”密码(与 read-host -asSecureString 相同)并且结果类型将是其他 cmdlet 可能需要的类型。
编辑:在最近的评论之后:解决方案,它提供了提供纯文本密码或强制用户输入密码的选项(但以相同的方式屏蔽它 Read-Host -AsSecureString 会)并且在这两种情况下最终都会获得 [Security.SecureString] . 而且,作为奖励,您会得到一些奇特的密码提示。;)
我在这里使用 Jaykul 的技巧通过提示输入安全密码来作弊。;) 这将使该参数很难在 CLI 模式下使用(-键入您的秘密密码不会按预期工作),因此它应该强制脚本的用户省略密码(并获得屏蔽提示)或指定它-接受常规字符串并将其转换为脚本逻辑中的安全字符串的密码参数。
破译你想要做什么有点困难......
编辑; 就像 Ryan 提到的那样,您目前已经将其指定为字符串......
但是在某些代码中,我在使用 Read-Host 和 SecureStrings 时使用了以下函数
在您的情况下,您可以通过执行以下操作来调用它;
编辑:鉴于评论,只是为了它的地狱......这是一种用于将上述安全字符串转换为 Powershell 中的纯文本的替代方法;
你会像这样使用它;
太总结了,你把密码隐藏起来,它是一个安全的字符串,然后你可以把它分解成纯文本以供其他地方使用,一个真实的例子是,如果某些 CLI 程序只接受以纯文本形式传递给它们的密码,这在您不想将密码硬编码到脚本中的情况下有助于实现自动化..
我不确定我是否理解...看来您已经在这样做了。通过将参数设置为强制性参数,如果您未在命令行中提供该参数,Powershell 将提示您输入该参数,并且使用 [string] 可确保可以进入该变量的唯一数据类型是 System.string。
编辑:基于 Bartek 的回答,在您的脚本中执行此操作:
然后你必须像这样向你的脚本传递一个 SecureString 对象: