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

Get-Credential を使用してみましたか? パスワードを保存してファイルに保存し、後で使用することができます

$password = Get-Credential $password.Password

于 2012-08-01T13:49:55.723 に答える
1
  1. を に変換するSecureStringと、このオブジェクトでメンバー関数をString使用できます。trim()これは、他のチェックを実行したい場合にも便利です (パスワードの複雑さ...)

    $NewUserPassword = ([Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($NewUserPassword))).trim()
    
  2. または、オブジェクトlengthのプロパティを使用することもできます。重要:スペースのみを含むパスワードの長さは 0 より大きくなります。SecureString

于 2012-08-01T13:11:00.630 に答える