PowerShell Core ( 6 +)におけるパスワード生成


PowerShell(Windows PowerShellのように)で、ユーザーパスワードを生成する一般的に参照される方法は、システムからMembership.GeneratePasswordメソッドを呼び出すことです.Webアセンブリ.
Add-Type -AssemblyName System.Web
# Generate random password
[System.Web.Security.Membership]::GeneratePassword(8,2)
これはすべてのよくて良いですが、System.Webは一部ではありません.PowerShellコア( 6 +)が依存するネットコア.
フレットノット.
箱の中にビルトインパスワード生成方法がない間、それは我々自身を書くために多くをとりません.
強いランダムパスワードを生成するキーはcryptographic random number generatorを使用することです.

Don't roll your own crypto


ミートGet-Random.-SetSeedパラメタがない場合、Get-Randomは暗号化RandomNumberGeneratorからその種を取ります.そして、それは我々のシナリオに適しています.
一般的なパスワード制限を満たすために以下の要件を満たすパスワードを生成しましょう.
  • 少なくとも12文字長い
  • は、次の4から3を必要とします.
  • 小文字です.
  • 大文字です.
  • 数(0 - 9).
  • シンボル(!@#$%^&*).
  • $symbols = '!@#$%^&*'.ToCharArray()
    $characterList = 'a'..'z' + 'A'..'Z' + '0'..'9' + $symbols
    
    function GeneratePassword {
        param(
            [ValidateRange(12, 256)]
            [int] 
            $length = 14
        )
    
        do {
            $password = -join (0..$length | % { $characterList | Get-Random })
            [int]$hasLowerChar = $password -cmatch '[a-z]'
            [int]$hasUpperChar = $password -cmatch '[A-Z]'
            [int]$hasDigit = $password -match '[0-9]'
            [int]$hasSymbol = $password.IndexOfAny($symbols) -ne -1
    
        }
        until (($hasLowerChar + $hasUpperChar + $hasDigit + $hasSymbol) -ge 3)
    
        $password | ConvertTo-SecureString -AsPlainText
    }
    
    論理は、許可されたリストからランダムに文字を選択することです
    指定された長さ、およびパスワードが制限を満たすまでしようとし続ける.
    このスクリプトがあなたのニーズのためにあまりに遅いならば、here is a slightly altered faster version(マックブックプロ2015の上で10 msの代わりに~ 0.4 ms).