我正在尝试从用户那里获取密码。
如果他只是输入任何内容[只需按下回车键],则应该发出警告。
$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()方法,应用程序仍然不会发出警告。
可能是什么原因?如何获得有效密码?
答案 0 :(得分: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
}
答案 1 :(得分:1)
如果您将SecureString
转换为String
,则可以在此对象上使用trim()
成员函数。如果您想执行其他检查(密码复杂性......)
$NewUserPassword = ([Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($NewUserPassword))).trim()
或者,您可以使用length
对象的SecureString
属性。 重要提示:仅包含空格的密码的长度大于0。
答案 2 :(得分:1)
您是否尝试使用Get-Credential? 您可以存储密码,将其保存到文件中并稍后使用
$ password = Get-Credential $ password.Password