如何在Powershell脚本中将密码作为参数传递并转换为安全字符串

时间:2016-11-06 06:15:43

标签: powershell

我正在使用powershell脚本执行

param([string]$Server,[string]$locusername,[string]$locpassword)

$password = '$locpassword' | ConvertTo-SecureString -asPlainText -Force
$username = $locusername 
$cred = New-Object System.Management.Automation.PSCredential($username,$password)

我收到错误

  

无法将参数绑定到参数' String'因为它是null。       + CategoryInfo:InvalidData:(:) [ConvertTo-SecureString],ParameterBindingValidationException       + FullyQualifiedErrorId:ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand

5 个答案:

答案 0 :(得分:1)

正如@Swonkie在评论中已经提到的那样

无需引用参数。只需使用提供的参数即可。

param([String]$Server, [String]$locusername, [String]$locpassword)
process {
    #NOTE: no quotes on parameter $locpassword
    $secure_password = ConvertTo-SecureString -String $locpassword -AsPlainText -Force
    $credential = New-Object System.Management.Automation.PSCredential($locusername, $secure_password)
    #...other code
}

如果您仍然收到该错误,请查看$locpassword中存储的值,因为它可能已被分配$null值。

答案 1 :(得分:0)

更改此行

$password = '$locpassword' | ConvertTo-SecureString -asPlainText -Force

用这个:

$password = ($locpassword | ConvertTo-SecureString -asPlainText -Force)

答案 2 :(得分:0)

这将起作用

$password = ConvertTo-SecureString -String "******" -AsPlainText

答案 3 :(得分:-1)

而不是使用单引号使用双引号,用于字符串扩展

$password = "$locpassword" | ConvertTo-SecureString -asPlainText -Force 

完整代码:

param([string]$Server,[string]$locusername,[string]$locpassword)

$password = "$locpassword" | ConvertTo-SecureString -asPlainText -Force 
$username = $locusername 
$cred = New-Object System.Management.Automation.PSCredential($username,$password)

答案 4 :(得分:-1)

使用$ locpassword或“$ locpassword”,而非'$ locpassword';)

example here