各位先進打擾,小弟在編寫PowerShell時遇上的難題,因經過多次嘗試後仍然無法解決後前來求救。
目的:約五個文件檔案的內容去做比對,對相同則打圈若非則打—
檔案內容:Linux的RPM PACKER資訊。
目標:希望能輸出成Table Mode。
EX:
$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
}
煩請各位先進們幫忙解惑或是提供思考方向給小弟,感謝!!
for($i=0; $i -lt $checklist.count; $i++){
$AllObjects[$i] | Add-Member -Name $NewItemName -Type NoteProperty -Value $checklist[$i] -Force
}