1

我正在尝试从用户那里获取密码。

如果他什么都不输入[只按回车键],那么应该抛出警告。

$NewUserPassword = Read-Host -assecurestring "Please enter New Run time user password"

$NewUserPassword=$NewUserPassword.Trim()
If ( ($NewUserPassword -eq $null) -or ($NewUserPassword -eq "") ){

    Write-Warning "Please enter valid password. Script execution is stopped"
    Exit
}

但是脚本抛出错误如下

方法调用失败,因为 [System.Security.SecureString] 不包含名为“Trim”的方法。

但是如果我删除 trim() 方法,应用程序仍然不会抛出警告。

可能是什么原因?如何获取有效密码?

4

3 回答 3

3

您不能直接检查 SecureString 实例的值,并且String无论如何与实例进行比较都是徒劳的。但是,它有一个Length属性可用于检查它是否为空:

$NewUserPassword = Read-Host -assecurestring "Please enter New Run time user password"
If ($NewUserPassword.Length -eq 0){
    Write-Warning "Please enter valid password. Script execution is stopped"
    Exit
}
于 2012-08-01T13:09:09.973 回答
1
  1. 如果将 转换SecureString为 a String,则可以在此对象上使用trim()成员函数。如果您想执行其他检查(密码复杂性......),这也可能很方便

    $NewUserPassword = ([Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($NewUserPassword))).trim()
    
  2. 或者,您可以使用对象length的属性SecureString重要提示:仅包含空格的密码长度大于 0。

于 2012-08-01T13:11:00.630 回答
1

您是否尝试使用 Get-Credential ?您可以存储密码,将它们保存到文件中并在以后使用

$password = 获取凭据 $password.Password

于 2012-08-01T13:49:55.723 回答