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 | -? | /?

パラメーター

-Command

指定したコマンド (およびパラメーター) を PowerShell コマンド プロンプトで入力した場合と同様に実行し、パラメーターが指定されていない限り NoExit 終了します。

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実行するときに必要になることが少なくありません。 文字列内で定義されているインライン スクリプト ブロックを実行するには、次の呼び出し演算子& を使用できます。

powershell.exe -Command "& {Get-WinEvent -LogName security}"

Command の値が文字列の場合は、その後のすべての引数が実行するコマンドの一部として解釈されるため、コマンドは pwsh の最後のパラメーターである必要があります。

既存の PowerShell セッション内から呼び出されると、結果は、ライブ オブジェクトではなく逆シリアル化された XML オブジェクトとして親シェルに返されます。 他のシェルの場合、結果は文字列として返されます。

Command値が指定されている場合、-コマンド テキストは標準入力から読み取られます。 標準入力で Command パラメーターを使用する場合は、標準入力をリダイレクトする必要があります。 次に例を示します。

@'
"in"

"hi" |
  % { "$_ there" }

"out"
'@ | powershell -NoProfile -Command -

この例を実行すると、次の出力が生成されます。

in
hi there
out

プロセス終了コードは、スクリプト ブロック内の最後の (実行された) コマンドの状態によって決まります。 終了コードは、0次の場合または1いつ$?$?$trueです。$false 最後のコマンドが外部プログラムの場合、または終了コード以外01の終了コードを明示的に設定する PowerShell スクリプトの場合、その終了コードはプロセス終了コードに1変換されます。 特定の終了コードを保持するには、コマンド文字列またはスクリプト ブロックに追加 exit $LASTEXITCODE します。

詳細については、about_Automatic_Variables参照してください$LASTEXITCODE

同様に、値 1 は、スクリプト終了 (runspace-terminating) エラー throw (a や -ErrorAction Stop、 など) が発生した場合、または Ctrl C+実行が中断されたときに返されます。

-ConfigurationName <文字列>

PowerShell を実行する構成エンドポイントを指定します。 既定の PowerShell リモート処理エンドポイントや、特定のユーザー ロール機能を持つカスタム エンドポイントなど、ローカル コンピューターに登録されている任意のエンドポイントを指定できます。

-EncodedArguments <Base64EncodedArguments>

Base64 でエンコードされた文字列バージョンのコマンド引数を受け入れます。 このパラメーターを使用して、複雑で入れ子になった引用符を必要とする引数を送信します。 Base64 表現は、UTF-16LE でエンコードされた文字列である必要があります。

-EncodedCommand <Base64EncodedCommand>

Base 64 エンコード文字列版のコマンドを許可します。 複雑な引用符や中かっこを必要とするコマンドを PowerShell に渡す場合にこのパラメーターを使用します。 文字列は UTF-16LE 文字エンコードを使用して書式設定する必要があります。

-ExecutionPolicy <ExecutionPolicy>

現在のセッションの既定の実行ポリシーを設定し、環境変数に $env:PSExecutionPolicyPreference 保存します。 このパラメーターは、レジストリに設定されている PowerShell 実行ポリシーを変更しません。 有効な値の一覧など、PowerShell 実行ポリシーについては、「about_Execution_Policies」を参照してください。

-File - | <Filepath><Args>

File値が指定されている場合、-コマンド テキストは標準入力から読み取られます。 リダイレクトされた標準入力なしで実行すると powershell -File - 、通常のセッションが開始されます。 これは、File パラメーターをまったく指定しないのと同じです。

File の値がファイルパスの場合、スクリプトは新しいセッションのローカル スコープ ("ドット ソース") で実行されるため、スクリプトによって作成される関数と変数がその新しいセッションで使用できるようになります。 スクリプト ファイルパスと任意のパラメーターを入力します。 File は、コマンド内の最後のパラメーターにする必要があります。 File パラメーターの後に入力されたすべての値は、スクリプト ファイルパスと、そのスクリプトに渡されるパラメーターとして解釈されます。

スクリプトに渡されるパラメーターは、(現在のシェルによる解釈の後で) リテラル文字列として渡されます。 たとえば、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、PowerShell コードとして解釈されるため、Command パラメーター内で使用できます

同様に、Batch スクリプトから同じコマンドを実行する場合は、現在の実行ディレクトリではなく、または$PSScriptRoot現在の.\実行ディレクトリを表すために使用%~dp0しますpowershell.exe -File %~dp0test.ps1 -TestParam %windir%。 代わりに使用 .\test.ps1した場合、リテラル パスが見つからないため、PowerShell でエラーがスローされます .\test.ps1

File の値がファイルパスの場合、Fileパラメーター名の後に入力された文字はすべてスクリプト ファイルパスとして解釈され、その後にスクリプト パラメーターが続くため、File はコマンドの最後のパラメーターである必要があります。

File パラメーターの値には、スクリプト パラメーターと値を含めることができます。 例: -File .\Get-Script.ps1 -Domain Central

通常、スクリプトのスイッチ パラメーターは、含めるか省略するかのいずれかです。 たとえば、次のコマンドはスクリプト ファイルの All パラメーターを Get-Script.ps1 使用します。 -File .\Get-Script.ps1 -All

まれに、パラメーターにブール値を指定することが必要になる場合があります。 この方法でスクリプトを実行するときに、switch パラメーターに明示的なブール値を渡すことはできません。 この制限は、PowerShell 6 (pwsh.exe) で削除されました。

Note

File パラメーターは、引数値の配列を想定するパラメーターを使用するスクリプトをサポートできません。 残念ながら、これはネイティブ コマンドが引数値を取得する方法の制限です。 ネイティブ実行可能ファイル (またはpwshなどpowershell) を呼び出すと、配列の処理が認識されないため、文字列として渡されます。

スクリプト ファイルがコマンドで exit 終了すると、プロセス終了コードはコマンドで使用される数値引数に exit 設定されます。 通常の終了では、終了コードは常に 0.

詳細については、about_Automatic_Variables参照してください$LASTEXITCODE

-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 ) を使用しようとすると、ステートメントがハングするのではなく、エラーが終了します。

スタートアップ時に著作権の見出しを非表示にします。

-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 <ウィンドウ スタイル>

セッションのウィンドウ スタイルを設定します。 有効な値は、NormalMinimizedMaximized、および 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