gpt4 book ai didi

powershell-3.0 - 我似乎无法将安全字符串传递给我的 cmdlet

转载 作者:行者123 更新时间:2023-12-02 03:29:50 24 4
gpt4 key购买 nike

我有一个调用 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 : Cannot bind parameter 'Password'. Cannot convert the "System.Security.SecureString" value of type "System.String" to type "System.Security.SecureString". At 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 文件中调用它时,它无法解决上述错误。

谢谢

最佳答案

你应该将安全字符串转换回 Bstring

$Password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($passwordenc))

Connect-Appliance -host 172.25.2.110 -user admin -password $password -quiet

我希望这对您有所帮助。

关于powershell-3.0 - 我似乎无法将安全字符串传递给我的 cmdlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27625676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com