about_PowerShell_exe
簡単な説明
powershell.exe
コマンドライン インターフェイスの使用方法について説明します。 コマンド ライン パラメーターを表示し、構文について説明します。
詳細な説明
PowerShell 7 のコマンド ライン オプションについては、 about_Pwshを参照してください。
SYNTAX
PowerShell[.exe]
[-PSConsoleFile <file> | -Version <version>]
[-NoLogo]
[-NoExit]
[-Sta]
[-Mta]
[-NoProfile]
[-NonInteractive]
[-InputFormat {Text | XML}]
[-OutputFormat {Text | XML}]
[-WindowStyle <style>]
[-EncodedArguments <Base64EncodedArguments>]
[-EncodedCommand <Base64EncodedCommand>]
[-ConfigurationName <string>]
[-File - | <filePath> <args>]
[-ExecutionPolicy <ExecutionPolicy>]
[-Command - | { <script-block> [-args <arg-array>] }
| { <string> [<CommandParameters>] } ]
PowerShell[.exe] -Help | -? | /?
パラメーター
すべてのパラメーターでは大文字と小文字が区別されません。
-File - | <filePath><args>
Fileの値は、-
またはファイルパスと省略可能なパラメーターにすることができます。 Fileの値が-
の場合、コマンドは標準入力から読み取られます。
File の値がファイルパスの場合、スクリプトは新しいセッションのローカル スコープ ("ドット ソース") で実行されるため、スクリプトによって作成される関数と変数がその新しいセッションで使用できるようになります。 スクリプト ファイルパスと任意のパラメーターを入力します。 File must コマンドの最後のパラメーターです。 File パラメーターの後に入力されたすべての値は、スクリプト ファイルパスと、そのスクリプトに渡されるパラメーターとして解釈されます。 例: -File .\Get-Script.ps1 -Domain Central
通常、スクリプトのスイッチ パラメーターは、含めるか省略するかのいずれかです。
たとえば、次のコマンドでは、Get-Script.ps1
スクリプト ファイルの All パラメーターを使用します。-File .\Get-Script.ps1 -All
まれに、パラメーターに Boolean 値を指定することが必要になる場合があります。
この方法でスクリプトを実行するときに、switch パラメーターに明示的なブール値を渡すことはできません。 この制限は、PowerShell 6 (pwsh.exe
) で削除されました。
スクリプトに渡されるパラメーターは、(現在のシェルによる解釈の後で) リテラル文字列として渡されます。 たとえば、 cmd.exe
で環境変数の値を渡す場合は、 cmd.exe
構文を使用します。 powershell.exe -File .\test.ps1 -TestParam %windir%
これに対し、cmd.exe
でpowershell.exe -File .\test.ps1 -TestParam $env:windir
を実行すると、スクリプトは現在のcmd.exe
シェルに対して特別な意味を持たないため、リテラル文字列$env:windir
を受け取ります。 環境変数参照の$env:windir
スタイルCommand パラメーター内で使用できます。これは PowerShell コードとして解釈されるためです。
同様に、Batch スクリプトから同じコマンドを実行する場合は、.\
または$PSScriptRoot
の代わりに%~dp0
を使用して、現在の実行ディレクトリ (pwsh -File %~dp0test.ps1 -TestParam %windir%
) を表します。 代わりに .\test.ps1
を使用すると、リテラル パスが見つからないため、PowerShell によってエラーがスローされます。 .\test.ps1
Note
File パラメーターは、引数値の配列を想定するパラメーターを使用するスクリプトをサポートできません。 残念ながら、これはネイティブ コマンドが引数値を取得する方法の制限です。 ネイティブ実行可能ファイル ( powershell
や pwsh
など) を呼び出すと、配列の処理がわからないため、文字列として渡されます。
Fileの値が-
の場合、コマンドは標準入力から読み取られます。
リダイレクトされた標準入力なしで powershell -File -
を実行すると、通常のセッションが開始されます。 これは、 File
パラメーターをまったく指定しない場合と同じです。 標準入力から読み取ると、入力ステートメントは PowerShell コマンド プロンプトで入力されたかのように、一度に 1 つのステートメントが実行されます。 ステートメントが正しく解析されない場合、ステートメントは実行されません。 プロセス終了コードは、最後に実行された (実行された) コマンドの状態によって決まります。 正常に実行されると、終了コードは常に 0
。 スクリプト ファイルが exit
コマンドで終了すると、プロセス終了コードは、 exit
コマンドで使用される数値引数に設定されます。
-Command
と同様に、スクリプト終了エラーが発生すると、終了コードは1
に設定されます。 ただし、 -Command
とは異なり、 Ctrl+C で実行が中断されると 終了コードは 0
。 詳細については、about_Automatic_Variablesの$LASTEXITCODE
を参照してください。
-Command
Command の値には、-
、スクリプト ブロック、または文字列を指定できます。 Command の値が-
の場合、コマンド テキストは標準入力から読み取られます。
Command パラメーターは、Command に渡された値を ScriptBlock 型として認識できる場合にのみ、実行するスクリプト ブロックを受け入れます。 これは別の PowerShell ホストからpowershell.exe
を実行する場合に可能です。 ScriptBlock 型は、既存の変数に含まれるか、式から返されるか、または中かっこ ({}
) で囲まれたリテラル スクリプト ブロックとして PowerShell ホストによって解析されてから、powershell.exe
に渡すことができます。
powershell -Command {Get-WinEvent -LogName security}
cmd.exe
では、スクリプト ブロック (または ScriptBlock 型) がないため、Command に渡される値は文字列です。 スクリプト ブロックは文字列内に記述できますが、実行される代わりに、一般的な PowerShell プロンプトで入力したのとまったく同じように動作し、スクリプト ブロックの内容が出力されます。
Command に渡された文字列は引き続き PowerShell コードとして実行されるため、スクリプト ブロックの中かっこは、cmd.exe
から実行するときに最初の場所では必要ありません。 文字列内で定義されたインライン スクリプト ブロックを実行するには、 call 演算子 &
を使用できます。
powershell.exe -Command "& {Get-WinEvent -LogName security}"
Command の値が文字列の場合、Command は pwsh の最後のパラメーターである必要があります。その後のすべての引数は、実行するコマンドの一部として解釈されるためです。
既存の PowerShell セッション内から呼び出されると、結果は、ライブ オブジェクトではなく逆シリアル化された XML オブジェクトとして親シェルに返されます。 他のシェルの場合、結果は文字列として返されます。
Command の値が-
の場合、コマンドは標準入力から読み取られます。 標準入力で Command パラメーターを使用する場合は、標準入力をリダイレクトする必要があります。 次に例を示します。
@'
"in"
"hi" |
% { "$_ there" }
"out"
'@ | powershell -NoProfile -Command -
この例を実行すると、次の出力が生成されます。
in
hi there
out
標準入力から読み取ると、PowerShell コマンド プロンプトで入力されたかのように、入力が解析され、一度に 1 つのステートメントが実行されます。 入力コードが正しく解析されない場合、ステートメントは実行されません。 -NoExit
パラメーターを使用しない限り、標準入力から読み取る入力がなくなった場合、PowerShell セッションは終了します。
プロセス終了コードは、入力内の最後の (実行された) コマンドの状態によって決まります。 終了コードは、$?
が$true
されたとき、または$?
が$false
されたときに1
されるときに0
されます。 最後のコマンドが、 0
または 1
以外の終了コードを明示的に設定する外部プログラムまたは PowerShell スクリプトである場合、その終了コードはプロセス終了コードの 1
に変換されます。 同様に、 throw
や -ErrorAction Stop
などのスクリプト終了 (runspace-terminating) エラーが発生した場合、または実行が Ctrl+C で中断されると、値 1 が返されます。
特定の終了コードを保持するには、コマンド文字列またはスクリプト ブロックに exit $LASTEXITCODE
を追加します。 詳細については、about_Automatic_Variablesの$LASTEXITCODE
を参照してください。
-ConfigurationName <string>
PowerShell を実行する構成エンドポイントを指定します。 既定の PowerShell リモート処理エンドポイントや、特定のユーザー ロール機能を持つカスタム エンドポイントなど、ローカル コンピューターに登録されている任意のエンドポイントを指定できます。
-EncodedArguments <Base64EncodedArguments>
Base64 でエンコードされた文字列バージョンのコマンド引数を受け入れます。 このパラメーターを使用して、複雑で入れ子になった引用符を必要とする引数を送信します。 Base64 表現は、UTF-16LE でエンコードされた文字列である必要があります。
-EncodedCommand <Base64EncodedCommand>
Base 64 エンコード文字列版のコマンドを許可します。 複雑な引用符や中かっこを必要とするコマンドを PowerShell に渡す場合にこのパラメーターを使用します。 文字列は UTF-16LE 文字エンコードを使用して書式設定する必要があります。
-ExecutionPolicy <ExecutionPolicy>
現在のセッションの既定の実行ポリシーを設定し、 $env:PSExecutionPolicyPreference
環境変数に保存します。 このパラメーターは、レジストリに設定されている PowerShell 実行ポリシーを変更しません。 有効な値の一覧など、PowerShell 実行ポリシーについては、「about_Execution_Policies」を参照してください。
-InputFormat {Text | XML}
PowerShell に送信されるデータの形式を記述します。 有効な値は、 Text
(テキスト文字列) または XML
(シリアル化された CLIXML 形式) です。
-Mta
マルチスレッド アパートメントを使用して、PowerShell を起動します。 このパラメーターは、PowerShell 3.0 で導入されました。 PowerShell 2.0 では、マルチスレッド アパートメント (MTA) が既定値です。 PowerShell 3.0 では、シングルスレッド アパートメント (STA) が既定値です。
-NoExit
スタートアップ コマンドを実行後、終了しません。
-NonInteractive
このスイッチは、ユーザー入力を必要としないセッションを作成するために使用されます。 これは、スケジュールされたタスクまたは CI/CD パイプラインで実行されるスクリプトに役立ちます。 Read-Host
や確認プロンプトなどの対話型機能を使用しようとすると、ステートメントがハングするのではなく、エラーが終了します。
-NoLogo
スタートアップ時に著作権の見出しを非表示にします。
-NoProfile
PowerShell プロファイルを読み込みません。
-OutputFormat {Text | XML}
PowerShell からの出力の形式を決定します。 有効な値は、 Text
(テキスト文字列) または XML
(シリアル化された CLIXML 形式) です。
-PSConsoleFile <FilePath>
指定された PowerShell コンソール ファイルを読み込みます。 コンソール ファイルの名前とパスを入力します。 コンソール ファイルを作成するには、PowerShell で Export-Console コマンドレットを使用します。
-Sta
シングルスレッド アパートメントを使用して、PowerShell を起動します。 Windows PowerShell 2.0 では、マルチスレッド アパートメント (MTA) が既定値です。 Windows PowerShell 3.0 では、シングルスレッド アパートメント (STA) が既定値です。
-Version <PowerShell バージョン>
指定したバージョンの PowerShell を起動します。 有効な値は 2.0 と 3.0 です。 指定するバージョンがシステムにインストールされている必要があります。 Windows PowerShell 3.0 がコンピューターにインストールされている場合は、"3.0" が既定のバージョンです。 それ以外の場合は、"2.0" が既定のバージョンです。 詳細については PowerShell のインストールを参照してください。
-WindowStyle <Window スタイル>
セッションのウィンドウ スタイルを設定します。 有効な値は、Normal
、Minimized
、Maximized
、および Hidden
です。
-Help、-?、/?
PowerShell.exe
のヘルプを表示します。 PowerShell セッションで PowerShell.exe
コマンドを入力する場合は、スラッシュ (/
) ではなく、コマンド パラメーターの先頭にハイフン (-
) を付けます。 cmd.exe
ではハイフンまたはスラッシュを使用できます。
REMARKS
トラブルシューティングに関する注意: PowerShell 2.0 では、PowerShell コンソールから一部のプログラムを起動すると、0xc0000142の LastExitCode で失敗します。
例
# Create a new PowerShell session and load a saved console file
PowerShell -PSConsoleFile sqlsnapin.psc1
# Create a new PowerShell V2 session with text input, XML output, and no logo
PowerShell -Version 2.0 -NoLogo -InputFormat text -OutputFormat XML
# Execute a PowerShell Command in a session
PowerShell -Command "Get-EventLog -LogName security"
# Run a script block in a session
PowerShell -Command {Get-EventLog -LogName security}
# An alternate way to run a command in a new session
PowerShell -Command "& {Get-EventLog -LogName security}"
# To use the -EncodedCommand parameter:
$command = "dir 'c:\program files' "
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -encodedCommand $encodedCommand
PowerShell