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 Version>

指定したバージョンの 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

ユーザーに対話的なプロンプトを表示しません。

-InputFormat {Text | XML}

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

-OutputFormat {Text | XML}

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

-WindowStyle <Window style>

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

-EncodedCommand <Base64EncodedCommand>

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

-ConfigurationName <string>

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 します。

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

-Help、-?、/?

PowerShell.exe のヘルプを表示します。 PowerShell セッションで PowerShell.exe コマンドを入力する場合は、スラッシュ (/) ではなくハイフン (-) を付けてコマンド パラメーターを追加します。 cmd.exe では、ハイフンまたはスラッシュのいずれかを使用できます。

REMARKS

トラブルシューティングに関する注意: PowerShell 2.0 では、PowerShell コンソールから一部のプログラムを起動すると、 0xc0000142の LastExitCode で 失敗します。

EXAMPLES

# 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