Invoke-Expression
ローカル コンピューター上でコマンドまたは式を実行します。
構文
Invoke-Expression [-Command] <string> [<CommonParameters>]
説明
Invoke-Expression コマンドレットは、指定された文字列をコマンドとして評価または実行し、式またはコマンドの結果を返します。Invoke-Expression を使用しない場合、コマンド ラインで送られた文字列はそのまま返されます (エコー表示されます)。
パラメーター
-Command <string>
実行するコマンドまたは式を指定します。コマンドまたは式を入力するか、コマンドまたは式を含んでいる変数を入力します。Command パラメーターは必須です。
必須 |
true |
位置 |
1 |
既定値 |
|
パイプライン入力を許可する |
true (ByValue) |
ワイルドカード文字を許可する |
false |
<CommonParameters>
このコマンドレットは、次の共通パラメーターをサポートします: -Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer、および -OutVariable。詳細については、次を参照してください: about_Commonparameters.
入力と出力
入力値の型は、コマンドレットへのパイプが可能なオブジェクトの型です。戻り値の型は、コマンドレットによって返されるオブジェクトの型です。
入力 |
System.String または PSObject コマンドを表すオブジェクトを Invoke-Expression に対してパイプ処理できます。$input 自動変数を使用して、コマンドの入力オブジェクトを表します。 |
出力 |
PSObject 呼び出されたコマンドによって生成された出力 (Command パラメーターの値) を返します。 |
注
-- 式は、評価可能なステートメントで、Windows PowerShell コマンドなどの結果を生成します。
-- スクリプトで Invoke-Expression コマンドレットを使用する場合、適切な対策を講じてください。ユーザーが入力したコマンドを実行するために Invoke-Expression を使用する場合、コマンドを実行する前に、実行しても安全であることを確認します。通常、フリーフォームの入力を許可するのではなく、事前に定義された入力オプションを伴うスクリプトを設計することをお勧めします。
例 1
C:\PS>$command = "Get-Process"
C:\PS> $command
Get-Process
C:\PS> invoke-expression $command
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
296 4 1572 1956 20 0.53 1348 AdtAgent
270 6 1328 800 34 0.06 2396 alg
67 2 620 484 20 0.22 716 ati2evxx
1060 15 12904 11840 74 11.48 892 CcmExec
1400 33 25280 37544 223 38.44 2564 communicator
...
説明
-----------
この例は、Invoke-Expression を使用して式を評価する方法を示しています。Invoke-Expression を使用しない場合、式は出力されますが、評価されません。
最初のコマンドは、"Get-Process" の値 (文字列) を $command 変数に代入します。
2 番目のコマンドは、コマンド ラインで変数名を入力した結果を示します。Windows PowerShell は文字列をエコー表示します。
3 番目のコマンドは、Invoke-Expression を使用して文字列を評価します。
例 2
C:\PS>invoke-expression -command "C:\ps-test\testscript.ps1"
C:\PS> "C:\ps-test\testscript.ps1" | invoke-expression
説明
-----------
これらのコマンドは、Invoke-Expression を使用して、ローカル コンピューター上のスクリプト (TestScript.ps1) を実行します。これら 2 つのコマンドは同等です。最初のコマンドは、Command パラメーターを使用して実行するコマンドを指定します。2 番目のコマンドは、パイプライン演算子 (|) を使用してコマンド文字列を Invoke-Expression に渡します。
例 3
C:\PS>$cmd = 'get-process | where {$_.cpu -gt 1000}'
C:\PS> iex $command
説明
-----------
この例では、$cmd 変数に保存されたコマンド文字列を実行しています。
このコマンド文字列は、現在のオブジェクトを表す変数 $_ を含んでいるため、単一引用符で囲まれています。このコマンド文字列が二重引用符で囲まれている場合、$command 文字列に保存される前にその値で $_ 変数が置換されます。
例 4
C:\PS>$cmdlet_name = "get-eventlog"
C:\PS> $example_number = 1
C:\PS> $example_code = (get-help $cmdlet_name).examples.example[($example_number-1)].code
C:\PS> invoke-expression $example_code
説明
-----------
このコマンドは、Get-EventLog コマンドレット ヘルプ トピックの最初の例を取得して実行します。
別のコマンドレットの例を実行するには、そのコマンドレットの名前を $cmdlet_name 変数の値に設定し、$example_number 変数に実行する例の番号を設定します。例の番号が無効な場合、コマンドは失敗します。