本記事では、 System.Management.Automation.Host.PSHostUserInterface で定義されているユーザの入力を促す Prompt メソッドを使用してみます。参考にPSHostUserInterface のMSDNドキュメントのリンクを以下に掲載します。
MSDNドキュメントのリンク
http://msdn.microsoft.com/en-us/library/system.management.automation.host.pshostuserinterface(VS.85).aspx
具体的に使ってみるメソッドは、 次のメソッドです。
メソッド | 説明 |
Prompt | 1以上の入力項目を取得します |
PromptForChoice | 複数の選択項目から選択された項目を取得します |
PromptForCredential | ユーザの資格情報の取得します |
PromptForCredential メソッドは実際のところGet-Credential コマンドレットと同じです。
1. サンプルプログラム
PSHostUserInterfacePromptTest.ps1 というファイルを作成して、実行してみました。ユーザ資格情報はSecureString 型ですが、サンプルスクリプトではプレーンテキストに戻す方法も紹介しています。
########################################################## # ファイル名: PSHostUserInterfacePromptTest.ps1 # # PSHostUserInterface の Prompt メソッドを使ってみる ########################################################## # System.Management.Automation.Host.PSHostUserInterface.Prompt Method # 複数の入力を受け取る場合に使用する $descriptions = New-Object 'System.Collections.ObjectModel.Collection`1[System.Management.Automation.Host.FieldDescription]' $desc = New-Object System.Management.Automation.Host.FieldDescription "名前" $descriptions.Add($desc) $desc = New-Object System.Management.Automation.Host.FieldDescription "連絡先" $descriptions.Add($desc) $caption = "連絡先情報入力" $message = "名前と連絡先を入力して下さい" $returnValue = $host.UI.Prompt($caption, $message, $descriptions) Write-Host "入力された情報" $returnValue["名前"] $returnValue["連絡先"] # System.Management.Automation.Host.PSHostUserInterface.PromptForChoice Method # 複数の項目から1つの項目を選択する $caption = "個人設定" $message = "好きな色を選択して下さい" $choices = New-Object 'System.Collections.ObjectModel.Collection`1[System.Management.Automation.Host.ChoiceDescription]' $choice = New-Object System.Management.Automation.Host.ChoiceDescription "赤(&R)", "血の色ダイスキ" $choices.Add($choice) $choice = New-Object System.Management.Automation.Host.ChoiceDescription "青(&B)", "アオミドロダイスキ" $choices.Add($choice) $choice = New-Object System.Management.Automation.Host.ChoiceDescription "黄(&Y)", "黄猿" $choices.Add($choice) $returnValue = $host.UI.PromptForChoice($caption, $message, $choices, 1) Write-Host "PromptForChoice の結果" Write-Host "選択されたインデックス $returnValue , $($choices[$returnValue].Label)" # System.Management.Automation.Host.PSHostUserInterface.PromptForCredential Method # ユーザの資格情報を取得する Get-Credential コマンドレットと同じ $caption = "ユーザ情報入力" $prompt = "ユーザの資格情報を入力してください" $credential = $host.UI.PromptForCredential($caption, $prompt, "$Env:USERDOMAIN\$Env:UserName", $null) # $credential.Password は SecureString なのでパスワードテキストを調べることはできない $credential.Password # でもみれちゃう # 方法1 $credential.GetNetworkCredential().Password # 方法2 [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($credential.Password))
実行結果は次のようになります。Prompt メソッドで複数の入力を行い、 PromptForChoice で選択項目から1つ選択します。 PromptForCredential でユーザ情報を入力します。PromptForCredential は Get-Credential コマンドレットで同じことが行えます。
好きな色を選択する処理を行ったと、下図のユーザ情報入力ダイアログが表示されます。
2. まとめ
説明は以上です。 $host.UI のプロパティが実装しているPSHostUserInterface インタフェースには、入出力に関連するさまざまなメソッドが定義されています。今回はPrompt を使用してみました。