about_PowerShell_exe

簡単な説明

コマンド ライン インターフェイスの powershell.exe 使用方法について説明します。 コマンド ライン パラメーターを表示し、構文について説明します。

長い説明

SYNTAX

PowerShell[.exe]
    [-PSConsoleFile <file> | -Version <version>]
    [-NoLogo]
    [-NoExit]
    [-Sta]
    [-Mta]
    [-NoProfile]
    [-NonInteractive]
    [-InputFormat {Text | XML}]
    [-OutputFormat {Text | XML}]
    [-WindowStyle <style>]
    [-EncodedCommand <Base64EncodedCommand>]
    [-ConfigurationName <string>]
    [-File - | <filePath> <args>]
    [-ExecutionPolicy <ExecutionPolicy>]
    [-Command - | { <script-block> [-args <arg-array>] }
                | { <string> [<CommandParameters>] } ]

PowerShell[.exe] -Help | -? | /?

パラメーター

-PSConsoleFile <FilePath>

指定された PowerShell コンソール ファイルを読み込みます。 コンソール ファイルの名前とパスを入力します。 コンソール ファイルを作成するには、PowerShell で Export-Console コマンドレットを使用します。

-Version <PowerShell バージョン>

指定したバージョンの PowerShell を起動します。 有効な値は 2.0 と 3.0 です。 指定するバージョンがシステムにインストールされている必要があります。 Windows PowerShell 3.0 がコンピューターにインストールされている場合は、"3.0" が既定のバージョンです。 それ以外の場合は、"2.0" が既定のバージョンです。 詳細については、「 PowerShell のインストール」を参照してください。

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

-NoExit

スタートアップ コマンドを実行後、終了しません。

-Sta

シングルスレッド アパートメントを使用して、PowerShell を起動します。 Windows PowerShell 2.0 では、マルチスレッド アパートメント (MTA) が既定値です。 Windows PowerShell 3.0 では、シングルスレッド アパートメント (STA) が既定値です。

-Mta

マルチスレッド アパートメントを使用して、PowerShell を起動します。 このパラメーターは、PowerShell 3.0 で導入されました。 PowerShell 2.0 では、マルチスレッド アパートメント (MTA) が既定値です。 PowerShell 3.0 では、シングルスレッド アパートメント (STA) が既定値です。

-NoProfile

PowerShell プロファイルを読み込みません。

-NonInteractive

このスイッチは、ユーザー入力を必要としないセッションを作成するために使用されます。 これは、スケジュールされたタスクまたは CI/CD パイプラインで実行されるスクリプトに役立ちます。 対話形式の機能 (プロンプトや確認プロンプトなど) Read-Host を使用しようとすると、ハングするのではなく、ステートメントがエラーを終了します。

-InputFormat {Text | XML}

PowerShell に送信されるデータの形式を記述します。 使用できる値は、"Text" (テキスト文字列) と "XML" (シリアル化された CLIXML 形式) です。

-OutputFormat {Text | XML}

PowerShell からの出力の形式を決定します。 使用できる値は、"Text" (テキスト文字列) と "XML" (シリアル化された CLIXML 形式) です。

-WindowStyle <ウィンドウ スタイル>

セッションのウィンドウ スタイルを設定します。 使用できる値は、Normal、Minimized、Maximized、Hidden です。

-EncodedCommand <Base64EncodedCommand>

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

-ConfigurationName <文字列>

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

-File - | <Filepath><Args>

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

File の値がファイル パスの場合、スクリプトはローカル スコープ ("dot-sourced") で実行されるため、スクリプトによって作成される関数と変数は現在のセッションで使用できます。 スクリプト ファイルのパスと (存在する場合) パラメーターを入力します。 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) で削除されました。

注意

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

-ExecutionPolicy <ExecutionPolicy>

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

-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 最後のコマンドが外部プログラムまたは PowerShell スクリプトで、その終了コード以外の終了コードを 0 明示的に設定する場合、 1その終了コードはプロセス終了コードに 1 変換されます。 特定の終了コードを保持するには、コマンド文字列またはスクリプト ブロックに追加 exit $LASTEXITCODE します。

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

-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