使用PowerShell Out-GridView作為GUI替代

allway2發表於2020-11-08

Out-GridView是內建的powershell cmdlet,可將給定命令的輸出傳送到互動式視窗。這篇文章將討論幾種不同的用例,以及如何將它們合併到程式碼中。

為什麼要使用Out-GridView?

  • 簡單
  • 內建於PowerShell
  • 可訂製
  • 強大

參量

首先,讓我們開始討論本文中將介紹的引數和可以使用的值。

  • 輸出方式
    • 單一:這會將您的選擇限制為一個物件;如果下一條命令只能接受一個值作為輸入,請使用此選項。
    • 多個:這允許您一次選擇多個物件。如果下一條命令可以處理多個值作為輸入,請使用此選項。
    • 無:將無法選擇任何內容,如果只需要報告,請使用此選項。這是預設值。
  • 標題
    • 這是您在Out-GridView視窗中放置描述性名稱的地方。任何其他說明也應放在此處。

程式碼範例

的GitHub

有幾種將資料匯入Out-GridView的方法,以及多種從Out-GridView輸出資料的方法。我們將介紹我最常使用的方法。

方法1:直接從命令輸入,僅顯示結果

Out-GridView的最基本功能是僅向使用者顯示資料。在下面的示例中,我們執行Get-Service命令以獲取給定系統上的所有服務,然後將這些結果通過管道傳輸到Out-GridView進行檢視。我們已經為Out-GridView視窗設定了一個標題,並將outputmode設定為None,這意味著沒有“確定”或“取消”按鈕,並且沒有資料將傳遞給下一個命令。

Get-Service | Out-GridView -Title "List of all the services on this system" -OutputMode None
 

 

方法2:來自變數的輸入,單個輸出

稍微高階一點的選項將使用一個變數來儲存Get-Service命令的所有輸出,然後我們將該變數通過管道傳遞給Out-GridView。這為我們提供了更大的靈活性,並在需要時可以在指令碼的其他部分重用該變數。我們再次為Out-GridView視窗設定標題,但是這次我們將outputmode設定為Single,這意味著將有一個“確定”和“取消”按鈕,而只允許使用者選擇一個值。所選的那個值將儲存在指定的變數($ single_output)中。在此示例中,我們使用Stop-Service命令停止選定的服務。

 
$services = Get-Service ### Getting all services on the system and sending them to the services variable
$single_output = $services | Out-GridView -Title "Select the service that you want to stop" -OutputMode Single ### Sending the services variable to Out-GridView, the single service selected will be sent to single_output variable
 
Write-Host "Stopping service" $single_output.Name -BackgroundColor Cyan -ForegroundColor Black
Stop-Service $single_output.Name ### Finally the service selected will be stopped

選擇單個服務,然後單擊“確定”按鈕將導致所選服務被停止。

 

方法3:來自自定義陣列的輸入,多個輸出

稍微高階一點的選項將使用自定義陣列來儲存來自services變數的所有資料。服務變數將從Get-Service命令填充,然後通過管道傳遞到Where-Object,該物件僅包含狀態為“正在執行”的服務。該陣列將使用Foreach迴圈中的所有Running服務填充。然後將自定義陣列通過管道傳遞到Out-GridView。對於停止服務的這個簡單示例,自定義陣列並不是完全必要的,但是對於更復雜的指令碼(您需要將多個來源的資料組合在一起),它可能很有用。我們再次為Out-GridView視窗設定標題,但是這次我們將outputmode設定為Multiple這意味著在允許使用者選擇多個值的同時會有一個“確定”和“取消”按鈕。單擊所需的值時,按住CTRL可以選擇多個值。通過按CTRL + A可以選擇所有值。所選的值將儲存在指定的變數($ multiple_output)中。在此示例中,我們在Foreach迴圈中利用Stop-Service命令來停止多個選定的服務。

$custom_array = @() ### Creating an empty array to populate data in
$services = Get-Service | Select Name, Status, DisplayName, StartType | Where-Object {$_.Status -eq "Running"} ### Getting Running services on the system and sending them to the services variable
 
### Looping through all of the running services and adding them to the custom array
Foreach ($service in $services){ 
 
    ### Setting up custom array utilizing a PSObject
    $custom_array += New-Object PSObject -Property @{
    Service_Name = $service.Name
    Service_Status = $service.Status
    Service_DisplayName = $service.DisplayName
    Service_StartType = $service.StartType
    }
}
 
$multiple_output = $custom_array | Out-GridView -Title "This is using a custom array with multiple output values" -OutputMode Multiple
 
### Looping through all of the selected services and stopping the service
Foreach ($output in $multiple_output){
 
    Write-Host "Stopping service" $output.Service_Name -BackgroundColor Cyan -ForegroundColor Black
    Stop-Service $output.Service_Name ### Finally the service selected will be stopped
 
}

選擇多個服務(單擊所需服務時按住CTRL),然後單擊“確定”按鈕將導致所選服務停止。(CTRL + A全選)

 

就是這樣,感謝您的閱讀!

相關文章