楽しみのために、ユーザーが希望する数に基づいてランダムなパスワードを生成する関数を作成することにしました。スクリプトを実行するためにBeginブロックとProcessブロックを使用しています。Beginブロックには、潜在的な文字として英数字と特殊文字を含む$ characterPool変数があります。Processブロックは、ユーザーが必要とするパスワードの数を尋ね、その数のランダムな12文字のパスワードを作成します。私が最初に関数を作成したとき、それはうまく機能しました。これで、要求するパスワードの数に関係なく、2つだけが作成され、質問が再度行われます。その後、空の文字列でEnterキーを押すか、別の番号を追加すると、1つのパスワードが出力されます。
Begin
{
$characterPool = "!@#$%^&*0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".ToCharArray()
}
Process
{
[pscustomobject]@{
Password = -join ($characterPool | Get-Random -Count 12)
}
$counter = Read-Host -Prompt "How many passwords do ya want, buddy?"
1..$counter | New-RandomPassword
}
これにより、要求した数のパスワードが生成されると思います。エラーは生成されません。単に次のように表示されます。
Begin
{
$characterPool = "!@#$%^&*0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".ToCharArray()
}
Process
{
[pscustomobject]@{
Password = -join ($characterPool | Get-Random -Count 12)
}
$counter = Read-Host -Prompt "How many passwords do ya want, buddy?"
1..$counter | New-RandomPassword
}
How many passwords do ya want, buddy?: 5
Password
--------
1z@p8Jgl52yU
1#K8z2@iA!&o
How many passwords do ya want, buddy?:
Pw!C#d2xTjMu
How many passwords do ya want, buddy?:
fo*Oca9HbRQr
How many passwords do ya want, buddy?:
omzCRpwqdOfM
How many passwords do ya want, buddy?:
u5lMN!kjhzfe
How many passwords do ya want, buddy?: 6
vLaxHq945K$D
How many passwords do ya want, buddy?:
移動Read-Host
開始までのプロンプト機能をし、ループにパスワード生成ロジックを移動します。
function New-RandomPassword {
param()
[int]$counter = Read-Host -Prompt "How many passwords do ya want, buddy?"
$characterPool = "!@#$%^&*0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".ToCharArray()
$i = 0;
while($i++ -lt $counter)
{
[pscustomobject]@{
Password = -join ($characterPool | Get-Random -Count 12)
}
}
}
このようにして、関数を再帰的に呼び出す必要はありません。
個人的に$counter
変数をパラメーターに変換してから、内部で呼び出す スクリプトでユーザーにプロンプトを表示しますNew-RandomPassword
function New-RandomPassword {
param(
[ValidateRange(1,500)]
[int]$Count
)
$characterPool = "!@#$%^&*0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz".ToCharArray()
$i = 0;
while($i++ -lt $count)
{
[pscustomobject]@{
Password = -join ($characterPool | Get-Random -Count 12)
}
}
}
以下のようmklement0が指摘し、あなたも持つ式に割り当てることができRead-Host
、パラメータのデフォルト値として呼び出しを:
param(
[ValidateRange(1,500)]
[int]$Count = $(Read-Host 'How many passwords do ya want, buddy?')
)
私は個人的にこれをアンチパターンと考えており、デフォルトで1
パラメータを設定するか、パラメータをマークすることを主張したいと思いますMandatory
。
# If the caller omits the argument, 1 password is returned
param(
[ValidateRange(1,500)]
[int]$Count = 1
)
または
# Caller _must_ supply a parameter argument (the default console host will prompt the user if not, but depends on the host application)
param(
[Parameter(Mandatory = $true)]
[ValidateRange(1,500)]
[int]$Count
)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加