我有一个调用 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”类型。在 line:1 char: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 文件中调用它时,它不适用于上面的错误。
谢谢