如何從 PowerShell 中的 Start-Process 獲取退出代碼

  1. 使用 -Wait 參數從 PowerShell 的 Start-Process 命令中獲取退出代碼
  2. 通過檢查 $LastExitCode 變量從 PowerShell 的 Start-Process 命令中獲取退出代碼
  3. 使用進程對象從 PowerShell 的 Start-Process 命令中獲取退出代碼
  4. 結論
如何從 PowerShell 中的 Start-Process 獲取退出代碼

在 PowerShell 中,Start-Process Cmdlet 用於啟動新進程,但獲取使用此命令啟動的進程的退出代碼並不簡單。退出代碼表示進程完成後的狀態,對於腳本用途或確定該進程是否成功都非常有價值。

在本文中,我們將探討如何從使用 Start-Process 在 PowerShell 中啟動的進程中獲取退出代碼的方法。

使用 -Wait 參數從 PowerShell 的 Start-Process 命令中獲取退出代碼

在深入如何使用 -Wait 參數獲取退出代碼之前,讓我們簡要討論一下退出代碼是什麼。退出代碼是進程在完成時返回的數值。

傳統上,退出代碼 0 表示成功執行,而非零的退出代碼則表示由執行的應用程序或腳本定義的錯誤或特定條件。

Start-Process Cmdlet 中的 -Wait 參數指示 PowerShell 等待啟動的進程完成,然後再繼續執行腳本。這對於獲取進程的退出代碼至關重要。

讓我們逐步探討如何實現這一點:

  • 要使用 -Wait 參數啟動進程並等待其完成,請使用以下語法:
    Start-Process -FilePath "YourExecutable.exe" -ArgumentList "YourArguments" -NoNewWindow -Wait
    

    "YourExecutable.exe" 替換為您要運行的可執行文件或腳本的路徑,並將 "YourArguments" 替換為進程所需的任何參數。

  • 要捕獲進程及其退出代碼,請將 Start-Process 命令存儲在變量中:
    $process = Start-Process -FilePath "YourExecutable.exe" -ArgumentList "YourArguments" -NoNewWindow -Wait -PassThru
    

    -PassThru 參數允許將進程對象保存到變量 $process 中。

  • 一旦進程完成,您可以使用存儲在變量中的進程對象的 ExitCode 屬性訪問其退出代碼:
    $exitCode = $process.ExitCode
    Write-Host "Exit code: $exitCode"
    

    Write-Host Cmdlet 用於在控制台中顯示獲得的退出代碼。

通過使用 -Wait 參數並訪問 ExitCode 屬性,您可以成功獲取從 PowerShell 中使用 Start-Process 啟動的進程的退出代碼。

這裡是一個示例腳本,說明以上提到的步驟:

# Start the process and wait for it to complete
$process = Start-Process -FilePath "notepad.exe" -NoNewWindow -Wait -PassThru

# Retrieve the exit code
$exitCode = $process.ExitCode
Write-Host "Exit code: $exitCode"

在此示例中,我們啟動 Notepad 應用程序,等待其完成,然後獲取並顯示退出代碼。

通過檢查 $LastExitCode 變量從 PowerShell 的 Start-Process 命令中獲取退出代碼

PowerShell 自動將最近執行的進程的退出代碼存儲在 $LastExitCode 變量中。這個變量可以在使用 Start-Process 啟動進程後訪問。

這裡是利用 $LastExitCode 的逐步方法:

  • 首先,使用 Start-Process Cmdlet 啟動所需的進程。以下是通用語法:
    Start-Process -FilePath "YourExecutable.exe" -ArgumentList "YourArguments" -NoNewWindow
    

    "YourExecutable.exe" 替換為您要運行的可執行文件或腳本的路徑,並將 "YourArguments" 替換為進程所需的任何參數。

  • 在進程完成後,使用 $LastExitCode 變量訪問退出代碼:
    $exitCode = $LastExitCode
    Write-Host "Exit code: $exitCode"
    

    Write-Host Cmdlet 用於在控制台中顯示退出代碼。

通過利用 $LastExitCode 變量,您可以輕鬆獲取從 PowerShell 中使用 Start-Process 啟動的進程的退出代碼。

以下是一個綜合的示例腳本,說明上述步驟:

# Start the process
Start-Process -FilePath "notepad.exe" -NoNewWindow

# Access the exit code
$exitCode = $LastExitCode
Write-Host "Exit code: $exitCode"

在這個示例中,我們啟動 Notepad 應用程序,然後使用 $LastExitCode 訪問並顯示退出代碼。

使用進程對象從 PowerShell 的 Start-Process 命令中獲取退出代碼

使用 Start-Process 時的 -PassThru 參數,Cmdlet 返回一個表示新啟動進程的 System.Diagnostics.Process 對象。然後,您可以使用該對象的 ExitCode 屬性訪問退出代碼。

這裡是實現這一點的逐步方法:

  • 啟動所需的進程,並使用 -PassThru 參數捕獲進程對象:
    $process = Start-Process -FilePath "YourExecutable.exe" -ArgumentList "YourArguments" -NoNewWindow -PassThru
    

    "YourExecutable.exe" 替換為您要運行的可執行文件或腳本的路徑,並將 "YourArguments" 替換為進程所需的任何參數。

  • 如有需要,使用 WaitForExit() 方法等待進程完成:
    $process.WaitForExit()
    

    這一步確保腳本在進程完成之前不會繼續。

  • 一旦進程完成,使用該對象的 ExitCode 屬性訪問其退出代碼:
    $exitCode = $process.ExitCode
    Write-Host "Exit code: $exitCode"
    

    Write-Host Cmdlet 用於在控制台中顯示退出代碼。

通過利用進程對象並訪問 ExitCode 屬性,您可以成功獲取從 PowerShell 中使用 Start-Process 啟動的進程的退出代碼。

這裡是一個綜合示例腳本,說明以上提到的步驟:

# Start the process and obtain a process object
$process = Start-Process -FilePath "notepad.exe" -NoNewWindow -PassThru

# Wait for the process to complete
$process.WaitForExit()

# Access the exit code
$exitCode = $process.ExitCode
Write-Host "Exit code: $exitCode"

在這個示例中,我們啟動 Notepad 應用程序,等待其完成,然後使用進程對象獲取並顯示退出代碼。

結論

從使用 PowerShell 的 Start-Process Cmdlet 啟動的進程中獲取退出代碼可以通過使用 -Wait 參數、$LastExitCode 變量或通過訪問 System.Diagnostics.Process 對象的 ExitCode 屬性來實現。

了解如何獲取退出代碼可以讓您以編程方式處理和響應進程的結果,增強您 PowerShell 腳本的自動化和可靠性。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
作者: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn