首先,我有一個CSV檔案,其中包含了默認安裝Windows時應包含的程式串列。該CSV檔案看起來像這樣。
Name;Version;Vendor;InstallDate
64 Bit HP CIO Components Installer;18.2.4;Hewlett-Packard;20210902。
7-Zip 18.05(x64版);18. 05.00.0;Igor Pavlov;20210812。
Adobe Acrobat Reader DC;20.006.20034;Adobe Systems Incorporated;20210903。
其次,我有一個powerhell腳本,試圖將遠程計算機上的程式串列與CSV檔案中的程式串列(按名稱、版本和供應商)進行比較。它應該只輸出不匹配的程式。
比較的部分作業得很好,但現在我想給那些通過名稱和供應商匹配,但沒有通過版本匹配的輸出行著色。我怎樣才能做到這一點呢?
這是我的powerhell腳本。
$programs =@()
$programs = Get-WmiObject -computername <ComputerName> -Class Win32_Product
foreach($programs in $programs) {
foreach($defprogram in Import-Csv -Path "...defprograms.csv" -Delimiter '; ') {
if ($program.Name -eq $defprogram.Name -And $program.Version -eq $defprogram.Version -And $program.Vendor -eq $defprogram.Vendor) {
$programs = $programs -ne $program }
}}
$programs | sort-object Name | format-table -AutoSize Name,Version,Vendor,InstallDate
這就是前述腳本的輸出。
在輸出的例子中,我想把 "64 Bit HP CIO Components Installer "染成紅色。
64 Bit HP CIO Components Installer 15.2.1 Hewlett-Packard 20210909
佳能激光列印機/掃描儀/傳真機擴展調查程式 2.1.2 CANON INC. 20210216
uj5u.com熱心網友回復:
不是一個很好的解決方案,但做的是作業:
$a = @"
名稱;版本;供應商;安裝日期
64 Bit HP CIO Components Installer;18.2.4;Hewlett-Packard;20210902
7-Zip 18.05 (x64版);18.05.00.0;Igor Pavlov;20210812
Adobe Acrobat Reader DC;20.006.20034;Adobe Systems Incorporated;20210903
"@
$b = $a | Convertfrom-CSV -Delimiter '; '
$b | % {Write-Host "$($_. name);" -ForegroundColor Red -NoNewline; Write-Host "$($_.Vendor);" -NoNewline; Write-Host $($_.Installdate) ; }
uj5u.com熱心網友回復:
你可以通過讀取CSV與你需要著色的默認程式來做到這一點。
然后創建一個他們的.Name屬性的regex字串。像往常一樣使用Format-Table,但是附加上Out-String -Stream,這樣你就可以在一個變數中捕捉到結果行
# your code here:
$programs = @(Get-WmiObject -computername < ComputerName> -Class Win32_Product)
foreach($programs in $programs) {
foreach($defprogram in Import-Csv -Path "...defprograms.csv" -Delimiter '; ') {
if ($program.Name -eq $defprogram.Name -And $program.Version -eq $defprogram.Version -And $program.Vendor -eq $defprogram.Vendor) {
$programs = $programs -ne $program }
}
}
# 讀取默認程式并創建它們的Name欄位的regex字串。
$defprograms = Import-Csv -Path "...defprograms.csv" -Delimiter ' ;'
$redprograms = '({0})' -f (($defprograms.Name | ForEach-Object { [regex]::Escape($_) }) -join '|' )
# Format-Table物件陣列,并在變數`$table`中捕獲結果行。
$table = $programs | Sort-Object Name | Format-Table -AutoSize Name,Version,Vendor,InstallDate | Out-String -Stream
# 接下來回圈瀏覽這些行,找到與任何默認程式名稱相匹配的行。
switch -Regex ($table) {
"^$redprogramss*" {
Write-Host $_.Substring(0, $matches[1].Length) -NoNewline -ForegroundColor Red
Write-Host $_.Substring($matches[1] .Length)
}
默認 { $_ }
}
然后輸出將看起來像
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/326697.html
標籤:

