次の方法で共有


Start-Process

ローカル コンピューター上の 1 つ以上のプロセスを開始します。

構文

Start-Process
     [-FilePath] <string>
     [[-ArgumentList] <string[]>]
     [-Credential <pscredential>]
     [-WorkingDirectory <string>]
     [-LoadUserProfile]
     [-NoNewWindow]
     [-PassThru]
     [-RedirectStandardError <string>]
     [-RedirectStandardInput <string>]
     [-RedirectStandardOutput <string>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-UseNewEnvironment]
     [-Environment <hashtable>]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Start-Process
     [-FilePath] <string>
     [[-ArgumentList] <string[]>]
     [-WorkingDirectory <string>]
     [-PassThru]
     [-Verb <string>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-Environment <hashtable>]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]

説明

Start-Process コマンドレットは、ローカル コンピューターで 1 つ以上のプロセスを開始します。 既定では、 Start-Process は、現在のプロセスで定義されているすべての環境変数を継承する新しいプロセスを作成します。

プロセスで実行するプログラムを指定するには、実行可能ファイルまたはスクリプト ファイル、またはコンピューター上のプログラムを使用して開くことができるファイルを入力します。 実行可能でないファイルを指定 Start-ProcessInvoke-Item コマンドレットと同様に、ファイルに関連付けられているプログラムを起動します。

Start-Processのパラメーターを使用して、ユーザー プロファイルの読み込み、新しいウィンドウでのプロセスの開始、代替資格情報の使用などのオプションを指定できます。

例 1: 既定値を使用するプロセスを開始する

次の使用例は、現在のフォルダー内の Sort.exe ファイルを使用するプロセスを開始します。 このコマンドでは、既定のウィンドウ スタイル、作業フォルダー、資格情報など、すべての既定値が使用されます。

Start-Process -FilePath "sort.exe"

例 2: テキスト ファイルを印刷する

次の使用例は、 C:\PS-Test\MyFile.txt ファイルを出力するプロセスを開始します。

Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print

例 3: 項目を新しいファイルに並べ替えるプロセスを開始する

次の使用例は、 TestSort.txt ファイル内のアイテムを並べ替え、 Sorted.txt ファイル内の並べ替えられたアイテムを返すプロセスを開始します。 エラーは、 SortError.txt ファイルに書き込まれます。 UseNewEnvironment パラメーターは、プロセスが独自の環境変数で実行されることを指定します。

$processOptions = @{
    FilePath = "sort.exe"
    RedirectStandardInput = "TestSort.txt"
    RedirectStandardOutput = "Sorted.txt"
    RedirectStandardError = "SortError.txt"
    UseNewEnvironment = $true
}
Start-Process @processOptions

この例では、スプラッティングを使用してパラメーターをコマンドレットに渡します。 詳細については、「 about_Splatting」を参照してください。

例 4: 最大化されたウィンドウでプロセスを開始する

この例では、 Notepad.exe プロセスを開始します。 ウィンドウが最大化されて、プロセスが完了するまでそのまま維持されます。

Start-Process -FilePath "notepad" -Wait -WindowStyle Maximized

例 5: 管理者として PowerShell を起動する

この例では、 Run as administrator オプションを使用して PowerShell を起動します。

Start-Process -FilePath "powershell" -Verb RunAs

例 6: 異なる動詞を使用してプロセスを開始する

この例では、プロセスの開始時に使用できる動詞を検索する方法を示します。 使用可能な動詞は、プロセスで実行されるファイルのファイル名拡張子によって決まります。

$startExe = New-Object System.Diagnostics.ProcessStartInfo -Args powershell.exe
$startExe.verbs

open
runas
runasuser

この例では、New-Objectを使用して、PowerShell プロセスで実行されるファイルpowershell.exeSystem.Diagnostics.ProcessStartInfo オブジェクトを作成します。 ProcessStartInfo オブジェクトの Verbs プロパティは、OpenおよびRunAs動詞をpowershell.exe、または.exe ファイルを実行する任意のプロセスで使用できることを示します。

例 7: プロセスへの引数の指定

どちらのコマンドも Windows コマンド インタープリターを起動し、Program Files フォルダーで dir コマンドを発行します。 このフォルダー名にはスペースが含まれているため、値はエスケープされた引用符で囲む必要があります。 最初のコマンドは、文字列を ArgumentList として指定します。 2 番目のコマンドは文字列配列です。

Start-Process -FilePath "$env:comspec" -ArgumentList "/c dir `"%SystemDrive%\Program Files`""
Start-Process -FilePath "$env:comspec" -ArgumentList "/c","dir","`"%SystemDrive%\Program Files`""

例 8: Linux でデタッチされたプロセスを作成する

Windows では、 Start-Process は起動シェルとは別に実行されたままの独立したプロセスを作成します。 Windows 以外のプラットフォームでは、新しく開始されたプロセスが起動したシェルにアタッチされます。 起動シェルが閉じられると、子プロセスが終了します。

Unix に似たプラットフォームで子プロセスが終了しないように、 Start-Processnohupと組み合わせることができます。 次の例では、起動セッションを閉じた後も存続する PowerShell on Linux のバックグラウンド インスタンスを起動します。 nohup コマンドは、現在のディレクトリ内のファイル nohup.outで出力を収集します。

# Runs for 2 minutes and appends output to ./nohup.out
Start-Process nohup 'pwsh -noprofile -c "1..120 | % { Write-Host . -NoNewline; sleep 1 }"'

この例では、 Start-Process は Linux nohup コマンドを実行しています。これにより、デタッチされたプロセスとして pwsh が起動されます。 詳細については、Wikipedia の nohup 記事を参照してください。

例 9: プロセスの環境変数をオーバーライドする

既定では、 Start-Processを使用すると、現在のセッションと同じ環境変数を使用して新しいプロセスが作成されます。 Environment パラメーターを使用して、これらの変数の値をオーバーライドできます。

この例では、 FOO 環境変数が foo 値としてセッションに追加されます。

この例では、 Start-Process 3 回実行され、毎回 FOO の値が返されます。 最初のコマンドは環境変数をオーバーライドしません。 2 番目のコマンドでは、 FOObar に設定されています。 3 番目のコマンドでは、 FOO$null に設定され、削除されます。

$env:FOO = 'foo'
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$env:FOO'
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$env:FOO' -Environment @{
    FOO  = 'bar'
}
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$env:FOO' -Environment @{
    FOO  = $null
}

foo
bar

パラメーター

-ArgumentList

このコマンドレットがプロセスを開始するときに使用するパラメーターまたはパラメーター値を指定します。 引数は、スペースで区切られた引数を持つ単一の文字列として、またはコンマで区切られた文字列の配列として受け取ることができます。 コマンドレットは、配列を 1 つの文字列に結合し、配列の各要素を 1 つのスペースで区切ります。

ArgumentList 値が新しいプロセスに渡されるときに、PowerShell 文字列の外側の引用符は含まれません。 パラメーターまたはパラメーター値にスペースまたは引用符が含まれている場合は、エスケープされた二重引用符で囲む必要があります。 詳細については、「 about_Quoting_Rules」を参照してください。

最適な結果を得るには、すべての引数と必要な引用符文字を含む 1 つの ArgumentList 値を使用します。

型:String[]
Aliases:Args
配置:1
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Confirm

コマンドレットの実行前に確認を求めるメッセージが表示されます。

型:SwitchParameter
Aliases:cf
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Credential

この処理を実行するアクセス許可を持つユーザー アカウントを指定します。 既定では、コマンドレットは現在のユーザーの資格情報を使用します。

User01Domain01\User01 などのユーザー名を入力するか、Get-Credential コマンドレットによって生成されたPSCredential オブジェクトを入力します。 ユーザー名を入力すると、パスワードの入力を求められます。

資格情報は PSCredential オブジェクトに格納され、パスワードは SecureString として格納されます。

Note

SecureString データ保護の詳細については、「 SecureString のセキュリティ保護方法」を 参照してください。

型:PSCredential
Aliases:RunAs
配置:Named
規定値:Current user
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Environment

プロセスのオーバーライドする 1 つ以上の環境変数をハッシュ テーブルとして指定します。 ハッシュ テーブルのキーとして環境変数の名前と目的の値を指定します。 環境変数の設定を解除するには、その値を $nullとして指定します。

指定された変数は、プロセスで置き換えられます。 PATH環境変数を指定すると、$PSHOMEの値に置き換えられ、その後にこのパラメーターから指定した値が続きます。 Windows では、コマンドは新しい値の後にマシンスコープとユーザースコープの PATH の値を追加します。

このパラメーターは PowerShell 7.4 で追加されました。

型:Hashtable
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-FilePath

プロセスで実行されるプログラムのオプションのパスとファイル名を指定します。 コンピューター上のプログラムに関連付けられている実行可能ファイルまたはドキュメントの名前 ( .txt.doc ファイルなど) を入力します。 このパラメーターは必須です。

システム コマンドに対応しないファイル名のみを指定する場合は、 WorkingDirectory パラメーターを使用してパスを指定します。

型:String
Aliases:PSPath, Path
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-LoadUserProfile

このコマンドレットは、現在のユーザーの HKEY_USERS レジストリ キーに格納されている Windows ユーザー プロファイルを読み込みます。 このパラメーターは、Windows 以外のシステムには適用されません。

このパラメーターは、PowerShell プロファイルには影響しません。 詳細については、「about_Profiles」を参照してください。

型:SwitchParameter
Aliases:Lup
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-NoNewWindow

現在のコンソール ウィンドウで新しいプロセスを開始します。 Windows の既定では、PowerShell によって新しいウィンドウが開きます。 Windows 以外のシステムでは、新しいウィンドウは表示されません。

同じコマンドで NoNewWindow パラメーターと WindowStyle パラメーターを使用することはできません。

このパラメーターは、Windows 以外のシステムには適用されません。

型:SwitchParameter
Aliases:nnw
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-PassThru

コマンドレットが開始した各プロセスのプロセス オブジェクトを返します。 既定では、このコマンドレットは出力を生成しません。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-RedirectStandardError

ファイルを指定します。 このコマンドレットは、プロセスによって生成されたエラーを、指定したファイルに送信します。 パスとファイル名を入力します。 既定では、エラーはコンソールに表示されます。

型:String
Aliases:RSE
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-RedirectStandardInput

ファイルを指定します。 このコマンドレットは、指定されたファイルから入力を読み取ります。 入力ファイルのパスとファイル名を入力します。 既定では、入力はキーボードから取得されます。

型:String
Aliases:RSI
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-RedirectStandardOutput

ファイルを指定します。 このコマンドレットは、プロセスによって生成された出力を、指定したファイルに送信します。 パスとファイル名を入力します。 既定では、出力はコンソールに表示されます。

型:String
Aliases:RSO
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-UseNewEnvironment

このコマンドレットが、プロセスに指定された新しい環境変数を使用することを示します。 既定では、開始プロセスは、親プロセスから継承された環境変数で実行されます。

Windows では、 UseNewEnvironment を使用すると、新しいプロセスが開始されるのは、 Machine スコープに定義されている既定の環境変数のみです。 これにより、 $env:USERNAMESYSTEM に設定されるという副作用があります。 User スコープの変数は含まれません。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Verb

このコマンドレットがプロセスを開始するときに使用する動詞を指定します。 使用できる動詞は、プロセスで実行されるファイルのファイル名拡張子によって決まります。

次の表に、いくつかの一般的なプロセス ファイルの種類の動詞を示します。

ファイルのタイプ 動詞
.cmd EditOpenPrintRunAsRunAsUser
.exe OpenRunAsRunAsUser
.txt OpenPrintPrintTo
.wav Open, Play

プロセスで実行されるファイルで使用できる動詞を検索するには、 New-Object コマンドレットを使用して、ファイルの System.Diagnostics.ProcessStartInfo オブジェクトを作成します。 使用可能な動詞は、ProcessStartInfo オブジェクトの Verbs プロパティにあります。 詳細については、例を参照してください。

このパラメーターは、Windows 以外のシステムには適用されません。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Wait

このコマンドレットは、指定されたプロセスとその子孫が完了するまで待機してから、より多くの入力を受け入れることを示します。 このパラメーターは、コマンド プロンプトを抑制するか、プロセスが完了するまでウィンドウを保持します。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-WhatIf

コマンドレットの実行時に発生する内容を示します。 コマンドレットは実行されません。

このパラメーターは、PowerShell 6.0 で導入されました。

型:SwitchParameter
Aliases:wi
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-WindowStyle

新しいプロセスに使用されるウィンドウの状態を指定します。 既定値は Normal です。 このパラメーターの有効値は、次のとおりです。

  • Normal
  • Hidden
  • Minimized
  • Maximized

同じコマンドで WindowStyle および NoNewWindow パラメーターを使用することはできません。

このパラメーターは、Windows 以外のシステムには適用されません。 Windows 以外のシステムで使用する場合、新しいウィンドウは表示されません。

型:ProcessWindowStyle
指定可能な値:Normal, Hidden, Minimized, Maximized
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-WorkingDirectory

新しいプロセスを開始する場所を指定します。

指定しない場合、コマンドレットの既定値は、 FilePath パラメーターで指定された完全修飾場所になります。 FilePath パラメーターの値が完全修飾されていない場合、呼び出し元プロセスの現在の作業ディレクトリが既定値になります。

ワイルドカードはサポートしていません。 パスには、ワイルドカードとして解釈される文字を含めてはなりません。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

None

このコマンドレットにオブジェクトをパイプすることはできません。

出力

None

既定では、このコマンドレットは出力を返しません。

Process

PassThru パラメーターを使用すると、このコマンドレットは Process オブジェクトを返します。

メモ

PowerShell には、 Start-Processの次のエイリアスが含まれています。

  • すべてのプラットフォーム
    • saps
  • Windows
    • start

ネイティブ コマンドは、オペレーティング システムにインストールされている実行可能ファイルです。 これらの実行可能ファイルは、PowerShell などの任意のコマンド ライン シェルから実行できます。 通常は、bashcmd.exe の場合とまったく同じようにコマンドを実行します。 Start-Process コマンドレットは、任意のネイティブ コマンドを実行するために使用できますが、コマンドの実行方法を制御する必要がある場合にのみ使用してください。

Start-Process は、Windows 以外のプラットフォームで GUI プログラムを実行する場合に便利です。 たとえば、 Start-Process gedit を実行して、GNOME デスクトップ環境の一般的なグラフィカル テキスト エディターを起動します。

既定では、Start-Processはプロセスをに起動します。 新しいプロセスがまだ実行されている場合でも、制御はすぐに PowerShell に返されます。

  • ローカル システムでは、起動されたプロセスは呼び出し元プロセスとは独立して動作します。
  • リモート システムでは、 Start-Process コマンドの直後にリモート セッションが終了すると、新しいプロセスが終了します。 そのため、リモート セッションで Start-Process を使用することはできません。これは、起動されたプロセスがセッションを上回ると予想されます。

リモート セッションで Start-Process を使用する必要がある場合は、 Wait パラメーターを使用して呼び出します。 または、他の方法を使用して、リモート システムに新しいプロセスを作成することもできます。

Wait パラメーターを使用する場合、Start-Processはプロセス ツリー (プロセスとそのすべての子孫) が終了するまで待機してから制御を返します。 これは、指定されたプロセスが終了するまで待機する Wait-Process コマンドレットの動作とは異なります。

Windows では、 Start-Process の最も一般的なユース ケースは、 Wait パラメーターを使用して、新しいプロセスが終了するまで進行状況をブロックすることです。 Windows 以外のシステムでは、コマンド ライン アプリケーションの既定の動作は Start-Process -Waitと同等であるため、これはほとんど必要ありません。

このコマンドレットは、System.Diagnostics.Process クラスの Start メソッドを使用して実装されます。 このメソッドの詳細については、「 Process.Start メソッド」を参照してください。