[解決済み] Start-ProcessとWaitForExitを使ったExitCodeの取得 -Waitの代わりに
2023-05-04 16:04:29
質問
PowerShellからプログラムを実行し、終了を待って、ExitCodeにアクセスしようとしていますが、うまくいきません。私は
-Wait
と
Start-Process
というように、バックグラウンドで何らかの処理を行う必要があるためです。
以下は簡単なテストスクリプトです。
cd "C:\Windows"
# ExitCode is available when using -Wait...
Write-Host "Starting Notepad with -Wait - return code will be available"
$process = (Start-Process -FilePath "notepad.exe" -PassThru -Wait)
Write-Host "Process finished with return code: " $process.ExitCode
# ExitCode is not available when waiting separately
Write-Host "Starting Notepad without -Wait - return code will NOT be available"
$process = (Start-Process -FilePath "notepad.exe" -PassThru)
$process.WaitForExit()
Write-Host "Process exit code should be here: " $process.ExitCode
このスクリプトを実行すると
メモ帳
が起動します。 これを手動で閉じた後、終了コードが出力され、再び起動されます。
-wait
. 終了時にExitCodeは出力されません。
Starting Notepad with -Wait - return code will be available
Process finished with return code: 0
Starting Notepad without -Wait - return code will NOT be available
Process exit code should be here:
プログラムを起動してから終了を待つ間に追加処理を行えるようにする必要があるので
-Wait
. どうすれば、この処理から .ExitCode プロパティにアクセスできるようになりますか?
どのように解決するのですか?
2つの方法があると思います。
- System.Diagnostics.Process オブジェクトを手動で作成し、Start-Process を回避する。
- バックグラウンド ジョブで実行ファイルを実行します (非インタラクティブ プロセスの場合のみ!)。
以下は、どちらかを行う方法です。
$pinfo = New-Object System.Diagnostics.ProcessStartInfo
$pinfo.FileName = "notepad.exe"
$pinfo.RedirectStandardError = $true
$pinfo.RedirectStandardOutput = $true
$pinfo.UseShellExecute = $false
$pinfo.Arguments = ""
$p = New-Object System.Diagnostics.Process
$p.StartInfo = $pinfo
$p.Start() | Out-Null
#Do Other Stuff Here....
$p.WaitForExit()
$p.ExitCode
または
Start-Job -Name DoSomething -ScriptBlock {
& ping.exe somehost
Write-Output $LASTEXITCODE
}
#Do other stuff here
Get-Job -Name DoSomething | Wait-Job | Receive-Job
関連
-
[解決済み] Get-ADUser でのエラー: 無効な列挙コンテキスト
-
[解決済み] cmdletbinding()】とは何ですか、どのように機能するのですか?
-
[解決済み] Base64の文字列をデコードするには?
-
[解決済み] PowerShellでLDAPクエリ
-
[解決済み] 'Connect-MsolService' はコマンドレット名として認識されません。
-
[解決済み] PowerShell モジュールを全ユーザーに持続的にインストールする
-
[解決済み] PowerShellスクリプトから終了コードを返す
-
[解決済み] Windows Server 2016で、すべてのPowerShellセッションのコマンド履歴を確認するにはどうすればよいですか?
-
[解決済み] PowerShellの画面を各コマンドの前に自動的にクリアする方法はありますか?
-
[解決済み] Powershell プロセスの開始、タイムアウトによる待機、Kill、終了コードの取得
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Invoke-Command エラー "Parameter set cannot be resolved using specified named parameters".
-
[解決済み] Powershellを使用します。PowerShellでパスを再読み込みする
-
[解決済み] [System.Web.Security.Membership]::GeneratePassword() - Type Not found
-
[解決済み] PowerShellでSharePoint 2013の連絡先リストに項目を作成する方法は?
-
[解決済み] powershellでマウスクリックを送信するにはどうすればよいですか?
-
[解決済み] Powershell - 空のパイプ要素は許可されません。
-
[解決済み] PowerShellでLDAPクエリ
-
[解決済み] Powershellでギャラリーが利用できないというエラーが発生しました。
-
[解決済み] Get-MSolUserのフィルタリング方法
-
[解決済み] PowerShellの画面を各コマンドの前に自動的にクリアする方法はありますか?