PowerShellを使用したランダムパスワード生成のロック解除

パスワードを長くし、簡単に推測できないようにすることが重要です。安全なパスワードを作成する方法は知っているかもしれませんが、自動的に生成するスクリプトがあれば便利ではありませんか?Windowsを使用している場合、PowerShellを使用してランダムなパスワードジェネレータを作成できます。このジェネレータは、さまざまな長さと複雑さのパスワードを生成します!

独自のランダムなパスワードジェネレータを作成する代わりに、既にMicrosoftが提供しているGeneratePassword() .NETメソッドを使用するだけです。このメソッドは、System.Web.Security.Membershipクラスに含まれており、必要なすべての機能を備えています。

スクリプトの作成

このシンプルなスクリプトを作成するには、まずSystem.Webアセンブリを利用できるようにする必要があります。System.Web.Security.Membershipクラスは、このアセンブリの一部であり、デフォルトでは使用できません。

Add-Type -AssemblyName 'System.Web'

System.Webアセンブリを利用できるようになったら、GeneratePassword()メソッドを呼び出すことができます。

GeneratePassword()メソッドには2つの引数があります。 lengthnumberOfNonAlphanumericCharactersです。これらの引数を使用すると、PowerShellを使用してさまざまなランダムなパスワードを作成することができます。

  • Length – パスワードの文字数です。
  • numberOfNonAlphanumericCharacters – メソッドが生成する非英数字文字の数です。@、%、&などの文字を指します。

まず、希望するパスワードの長さを定義します。以下の例では、変数として10を設定し、メソッドに渡します。

$length = 10

次に、パスワードに含める非英数字の数を定義します。以下のコードスニペットでは、変数として5を設定し、メソッドに渡すことで、パスワードに5つの非アルファベット文字が含まれるようにします。

$nonAlphaChars = 5

次に、上記で定義した変数の値をGeneratePassword()メソッドに渡して呼び出します。

[System.Web.Security.Membership]::GeneratePassword($length, $nonAlphaChars)

上記のコードスニペットを実行すると、PowerShellは文字列のランダムな組み合わせを返します。これを任意の場所で使用できます。

ランダムなパスワードの長さの作成

さらにランダムさを増すために、パスワードの長さもランダムにすることもできます。Get-Randomコマンドレットを使用してランダムな整数を生成し、length引数として使用してランダムな長さのパスワードを生成します!

$minLength = 5 ## 文字
$maxLength = 10 ## 文字
$length = Get-Random -Minimum $minLength -Maximum $maxLength
$nonAlphaChars = 5
$password = [System.Web.Security.Membership]::GeneratePassword($length, $nonAlphaChars)

このパスワードをPowerShellで使用する場合、多くのコンポーネントでセキュアな文字列が必要です。パスワードをプレーンテキスト文字列として取得した後、ConvertTo-SecureStringコマンドレットを使用してセキュアな文字列に変換できます。

$secPw = ConvertTo-SecureString -String $password -AsPlainText -Force

PowerShell関数の作成

最後に、このランダムパスワードジェネレーターをさらに進化させ、上記で説明した構文をすべて覚える必要なく、どこでも使用できる関数を作成します。

function New-RandomPassword {
    param(
        [Parameter()]
        [int]$MinimumPasswordLength = 5,
        [Parameter()]
        [int]$MaximumPasswordLength = 10,
        [Parameter()]
        [int]$NumberOfAlphaNumericCharacters = 5,
        [Parameter()]
        [switch]$ConvertToSecureString
    )
    
    Add-Type -AssemblyName 'System.Web'
    $length = Get-Random -Minimum $MinimumPasswordLength -Maximum $MaximumPasswordLength
    $password = [System.Web.Security.Membership]::GeneratePassword($length,$NumberOfAlphaNumericCharacters)
    if ($ConvertToSecureString.IsPresent) {
        ConvertTo-SecureString -String $password -AsPlainText -Force
    } else {
        $password
    }
}

この機能をプロフィールに追加した後、おそらくPowerShellモジュールを使用するか、または現在のセッションにコピー/貼り付けするだけで、簡単に実行できます。

New-RandomPassword -MinimumPasswordLength 10 -MaximumPasswordLength 15 -NumberOfAlphaNumericCharacters 6 -ConvertToSecureString

Source:
https://adamtheautomator.com/random-password-generator/