iT邦幫忙

0

PowerShell 文件內容比對後輸出成表格模式

各位先進打擾,小弟在編寫PowerShell時遇上的難題,因經過多次嘗試後仍然無法解決後前來求救。

目的:約五個文件檔案的內容去做比對,對相同則打圈若非則打—
檔案內容:Linux的RPM PACKER資訊。
目標:希望能輸出成Table Mode。
EX:
https://ithelp.ithome.com.tw/upload/images/20210113/201140423nHdRIL3nI.png

$path = (pwd).Path
#$path = "D:\ps\rpmlist"
$rpmdatas= Get-Content D:\ps\rpmlist\*.txt
$rpmdata= $rpmdatas | Sort-Object | select -Unique
$AllObjects = @()
$rpmdata | %{ 
    
    $AllObjects += [pscustomobject]@{

    "Name" = $_.split("`t")[0] 
    "Version" = $_.split("`t")[1] 
    "release" = $_.split("`t")[2] 
    "Arch" =  $_.split("`t")[3] 
    
    #取得所有RPM 清單
    }
    
}


Get-ChildItem $path -Filter *.txt | ForEach-Object {
    $NewItemName = $_.Name.Split("_"".")[1] #取檔案名稱為表格抬頭
    $clientrpmlist= Get-Content $_.FullName #依次開啟文件下去比對
    $checklist = $rpmdata | ForEach-Object {
        if ($_ -in $clientrpmlist) {
            Write-Output "〇" #若跟清單中的內容一致的話則打圈
            
        } else {
            Write-Output "-" #反之打-
        }
    } #比對結果丟至$checklist

    $checklist | %{
        
        $AllObjects | Add-Member -Name $NewItemName -Type NoteProperty -Value $_ -Force #將比對結果跟先前取得的抬頭按名稱放入結果 <—該行求解!
    
        }
    

}

問題:將結按照抬頭名稱放入的結果一直重覆且不對變動,經過查驗後現發該行$checklist的值只會一直丟但Add-Member那裡好像只放入第一個值。

$checklist | %{
        
        $AllObjects | Add-Member -Name $NewItemName -Type NoteProperty -Value $_ -Force 
    
        }

煩請各位先進們幫忙解惑或是提供思考方向給小弟,感謝!!

1 個回答

1
nwm310
iT邦新手 5 級 ‧ 2021-01-13 22:12:32
最佳解答
for($i=0; $i -lt $checklist.count; $i++){
    $AllObjects[$i] | Add-Member -Name $NewItemName -Type NoteProperty -Value $checklist[$i] -Force
}
narumi iT邦新手 5 級 ‧ 2021-01-14 08:55:54 檢舉

感謝大神協助,昨夜腦袋一直卡住沒想到盲點在這裡。

我要發表回答

立即登入回答