我有一個基本命令,用于檢查大約 100 個服務器的最近 5 個更新并回傳它們的安裝日期。如果安裝日期為空,我想讓腳本以紅色回傳該行。
命令是
Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName $ComputerName | Select-object -Property PSComputerName, @{n='HotFix ID';e={$_.hotfixid}}, @{n='Installation Date';e={$_.installedon}} | select -Last 05
我嘗試使用格式顏色,但它不起作用。命令的輸出如下所示
PSComputerName HotFix ID Installation Date
-------------- --------- -----------------
DC1 KB4132216 10/6/2021 12:00:00 AM
DC1 KB4535680 11/3/2021 12:00:00 AM
DC1 KB4589210
DC1 KB5005698 10/6/2021 12:00:00 AM
DC1 KB5007192 11/16/2021 12:00:00 AM
沒有日期的行我想變紅。這可能嗎?
謝謝!
uj5u.com熱心網友回復:
關于您的腳本的一些評論
您正在使用,
Select -last 05但您運行的 wmi 命令不會InstalledOn按升序為您提供專案。您獲得的 5 個專案是最后 5 個,但不是從排序的角度來看。您可以將 2 個 select 陳述句組合起來以提高效率(例如:
Select -Last 5 -Property ...
現在,對于您的實際問題,我會使用 ANSI 轉義序列。使用轉義字符然后指定虛擬終端序列將允許您修改文本的顏色和其他文本屬性,例如加粗和下劃線。
這是一個修改后的腳本,它考慮了之前的評論并集成了一個轉義序列以根據需要格式化您的輸出。
$ComputerName = 'localhost'
$HotFixes = Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName $ComputerName
$ColoringCondition = {
Param($Value)
$e = [char]27 # For PS 5.1 ... In PS 7.0 , this can be removed and occurences of $e below replaced by `e
if ([String]::IsNullOrEmpty($_.'InstalledOn')) {
return "$e[5;31m$($Value)$e[0m";
}
return $Value
}
$Last5 = $HotFixes | Sort-Object -Property installedon -Descending |
Select -First 5 -Property @{'Name' = 'PSComputerName' ; 'Expression' = { . $ColoringCondition $_.PSComputerName } },
@{n = 'HotFix ID'; e = {. $ColoringCondition $_.hotfixid } },
installedon
$Last5 # Print output
輸出

更新已按
InstalledOn屬性排序(降序以便最新的顯示在最前面)并且由于這種排序,我們選擇第 5 個專案(最近的 5 個)針對所有屬性檢查著色條件,如果缺少安裝日期,則將著色添加到行的單元格值中。
注意:
如果您使用的是 Powershell 7 ,則不必宣告$e = [char]27,您可以簡單地使用`e(反引號 e)代替。
筆記2:
作為初始排序的副產品(按安裝日期排序,降序),這意味著所有安裝日期為空的更新都將排在底部,并且可能永遠不會被前 5 個選擇。我認為如果他們有一個空的安裝日期,它們可能是系統附帶的更新,可以安全地忽略,但要記住這一點。
參考:
控制臺虛擬終端序列 - 文本格式
在 Powershell 中使用 ANSI 轉義序列
Powershell - 關于特殊字符(適用于 PS 7.0 )
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/362446.html
標籤:电源外壳
