如何确保输入密码?

时间:2012-08-01 13:00:44

标签: powershell powershell-v2.0

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

如果他只是输入任何内容[只需按下回车键],则应该发出警告。

$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()方法,应用程序仍然不会发出警告。

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

3 个答案:

答案 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)

  1. 如果您将SecureString转换为String,则可以在此对象上使用trim()成员函数。如果您想执行其他检查(密码复杂性......)

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

答案 2 :(得分:1)

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

$ password = Get-Credential $ password.Password