1. ホーム
  2. powershell

[解決済み】PowerShellでユーザー入力を求めるプロンプトを表示する

2022-04-06 04:03:36

質問

パスワードやファイル名など、一連の入力を求めるプロンプトを表示したい。

を使う例があります。 host.ui.prompt というのは感覚的にわかるのですが、その返り値がわからないのです。

PowerShellでユーザー入力を取得するための良い方法はありますか?

どのように解決するのですか?

Read-Host は、ユーザーから文字列の入力を得るためのシンプルなオプションです。

$name = Read-Host 'What is your username?'

パスワードを隠すには、次のようにします。

$pass = Read-Host 'What is your password?' -AsSecureString

パスワードをプレーンテキストに変換する場合。

[Runtime.InteropServices.Marshal]::PtrToStringAuto(
    [Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass))

が返す型については $host.UI.Prompt() にパイプすることで、戻り値の型を知ることができます。 Get-Member (例えば $results | gm ). 結果は、キーが FieldDescription オブジェクトが使用される。リンク先の例で最初のプロンプトの結果にアクセスするには、次のように入力します。 $results['String Field'] .

メソッドを呼び出さずに情報にアクセスするには、括弧をオフにします。

PS> $Host.UI.Prompt

MemberType          : Method
OverloadDefinitions : {System.Collections.Generic.Dictionary[string,psobject] Pr
                    ompt(string caption, string message, System.Collections.Ob
                    jectModel.Collection[System.Management.Automation.Host.Fie
                    ldDescription] descriptions)}
TypeNameOfValue     : System.Management.Automation.PSMethod
Value               : System.Collections.Generic.Dictionary[string,psobject] Pro
                    mpt(string caption, string message, System.Collections.Obj
                    ectModel.Collection[System.Management.Automation.Host.Fiel
                    dDescription] descriptions)
Name                : Prompt
IsInstance          : True

$Host.UI.Prompt.OverloadDefinitions を実行すると、そのメソッドの定義が表示されます。各定義は、以下のように表示されます。 <Return Type> <Method Name>(<Parameters>) .