web-dev-qa-db-ja.com

Powershell ISEでスクリプトに必要なパラメータを渡す方法は?

タイトルを参照してください。

スクリプトのヘッドで必要なパラメーターを指定しました。

param ($G_ARCHIVE = $(throw "Need file to upload!"),
       $G_LOGFILE = $(throw "Need logfile!"))

Powershell ISEでスクリプトをデバッグする場合:これらのパラメーターを入力するにはどうすればよいですか?

69
eckes

コマンドペインを使用します。 ISEエディターでスクリプトファイルを開き、ブレークポイント(F9)を設定します。次に、コマンドペインで、必要なパラメーターを指定してこのスクリプトを呼び出すコマンドを入力します。 ISEでこれを行う別の(組み込みの)方法はないと思います。

70
Roman Kuzmin
  1. Windows Powershell ISEでスクリプト(myscript.ps1)を開きます
  2. 押す F9 検査する変数で(デバッグ)。たとえば、$ outputText変数が割り当てられている以下のサンプルの2行目
  3. [シェル]ウィンドウで、スクリプトの相対パスとパラメーター値を指定します。例えば:。\ myscript.ps1 "my value"
  4. Enterキーを押す(ヒットする必要はありません) F5
  5. 黄色で強調表示されたデバッグブレークポイントを確認できます。目的の変数にカーソルを置いて、現在の値を調べます。

A sample showing PowerShell debugging with ISE and command parameter

22
Ashraf Alam

別の方法があります。 _$PSDefaultParameterValues_自動変数を使用して(v3以降)存在し、コマンドレットとadvanced関数に新しいデフォルト引数を提供できます(しません)通常の機能で動作します)。ただし、ISEでデバッグする場合でも、スクリプトに対しては機能します。高度な関数の場合と同様に、[CmdletBinding()]または[Parameter()]を宣言する必要があります。

あなたの例では、

_[CmdletBinding()]
param ($G_ARCHIVE = $(throw "Need file to upload!"),
$G_LOGFILE = $(throw "Need logfile!"))
_

iSEプロンプトで次のようなものを実行します。

_$PSDefaultParameterValues.add("ExampleScript.ps1:G_ARCHIVE","File-to-upload.txt")
$PSDefaultParameterValues.add("ExampleScript.ps1:G_LOGFILE","Example.log")
_

実行時に自動実行されるスクリプトブロックにパラメーター値を設定することもできます。

_$PSDefaultParameterValues["ExampleScript.ps1:G_LOGFILE"]={
  "Example-{0:yyMMddHHmm}.log" -f [datetime]::Now
}
_

変数はハッシュテーブルであり、すべての標準構文が適用されます。ただし、keyには、スクリプト(または高度な機能またはコマンドレット)の名前とそれに続くコロン、次にパラメーター名。複数のスクリプトまたはコマンドにデフォルトを設定し、それぞれに複数のパラメーターを設定できます(各パラメーターは新しいテーブルエントリです)。

このようにすることで、ただヒットすることができます F5 通常のようにスクリプトを実行します。パラメーターは変数から取得されるため、何も入力する必要はありません。

_$PSDefaultParameterValues_のその他の使用例は、コマンドで_-Count_パラメーターを指定しない限り、Get-Historyが最後の10エントリのみを取得するようにカスタマイズすることです。エントリは現在のセッションでのみ保持されるため、 profile にカスタマイズを追加する必要があります。プロンプトで_Get-Help about_Parameters_Default_Values_と入力して詳細を読むか、 TechNet で同じ情報を表示できます。

15