【发布时间】:2015-02-02 12:46:26
【问题描述】:
我有一个调用 cmdlet 的函数
Function connect-app([string]$host, [string]$user, [SecureString]$password, [switch]$passwordfile, [switch][alias("q")]$quiet)
在这个函数内部,我检查了是否提供了$passwordfile 或$password
if ( -Not $passwordfile -and ($password -eq $null -or $password -eq ""))
{
# prompt for a password
[SecureString]$passwordenc = Read-Host -AsSecureString "Password";
}
else
{
$hash = Hash($host + "-" + $user);
[SecureString]$passwordenc = Get-Content "$env:USERPROFILE\$hash" | ConvertTo-SecureString;
}
最终,如果提供了$quiet,则调用以下 cmdlet 的变体
$expression = "Connect-Appliance -host " + $host + " -user " + $user + " -Password " + $passwordenc + " -Quiet";
Invoke-Express $expression
但由于某种原因,我一直遇到这个问题
Connect-Appliance:无法绑定参数“密码”。无法转换 “System.String”类型的“System.Security.SecureString”值 键入“System.Security.SecureString”。在行:1 字符:69 + Connect-Appliance -host 172.25.2.110 -user admin -Password System.Secur ... +~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Connect-Appliance], ParameterBindingException + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,CPowerCLI.ConnectAppliance
我不知道为什么。一开始我以为,是因为我提供了一个字符串,但变量被声明为 SecureString。
可以这样做吗?
我能做的是
$password = Read-Host -AsSecureString "Pass"
Connect-Appliance -host 172.25.2.110 -user admin -password $password -quiet
这似乎工作得很好。但是当我从 psm1 文件中调用它时,它不适用于上面的错误。
谢谢
【问题讨论】:
标签: powershell-3.0 securestring