我的當前項目的輸出和導出有幾個問題。我正在使用cmdlet Get-RemoteProgram
通過網絡和註冊表項獲取安裝的軟件。用CSV導出已安裝程序的輸出
這是我的代碼現在:
function Get-RemoteProgram ....
$computername = Import-Csv "C:\data\test\test.csv" |
select -ExpandProperty PCName
$regex = @("Program1|Program2|Program3")
$items = @()
foreach ($computer in $computername) {
if (Test-Connection $computer -ErrorAction SilentlyContinue -Count 1) {
$query = Get-RemoteProgram -ComputerName $computer -Property DisplayVersion |
where {$_.ProgramName -match $regex}
$obj = New-Object -Type PSObject
$obj | Add-Member -Name ("Computername") -Value $computer -MemberType NoteProperty -Force
$maxcount = $query.ProgramName.Count
if ($maxcount -gt 1) {
for ($i=0; $i -lt $maxcount; $i++) {
$progandversion = $query.ProgramName[$i] + $query.DisplayVersion[$i]
$obj | Add-Member -Name ($progandversion) -Value "Available" -MemberType NoteProperty -Force
}
} elseif ($maxcount -eq 1) {
$progandversion = $query.ProgramName + $query.DisplayVersion
$obj | Add-Member -Name ($progandversion) -Value "Available" -MemberType NoteProperty -Force
}
$obj | Add-Member -Name ("ProgrammVersion$i") -Value $query.DisplayVersion[$i] -MemberType NoteProperty -Force
$items += $obj
}
$items | Export-Csv c:\daten\inventur\output_final.csv -Append -Force
Write-Host "$computer has been checked.."
}
的問題我現在已經是我的腳本沒有列出我尋找各種不同的方案。它應該導出計算機名稱,然後 - 在同一行中 - 如果安裝了該軟件,則輸出一個可用的名稱,或者如果未找到該程序,請將其保持清潔。
這就是輸出我得到現在:
#TYPE System.Management.Automation.PSCustomObject Computername,"Program1","Program2" Computer1,"Available","Available" Computer1,"Available","Available" Computer2,, Computer1,"Available","Available" Computer3,, Computer2,, Computer1,"Available","Available"
我不知道爲什麼計算機在輸出多次。
我想有這樣的:
Computername,Program1,Program2,Program3,Program4 Computer1,Available,,Available,, Computer2,Available,,,, Computer3,,,Available, Computer4,,,,
你能幫我不知何故?
由於在C#中安裝的程序的編碼版本。 在添加了答案的第二個引號並在.txt中添加了程序之後,現在有這個輸出.. 如何讓程序檢查程序是否已安裝或未安裝在指定的計算機上在計算機列表中? – Robin
那麼,你已經很好。有可能程序名稱在某個地方有不同的拼寫,這就是爲什麼你可能會得到錯誤的輸出。同時檢查'regex'是否正確形成。 – Vesper