2017-02-20 123 views
0

我使用以下PowerShell腳本來確定最終用戶在其計算機上安裝的應用程序(除了圖像安裝的默認應用程序之外)。在PowerShell中過濾CSV文件中的內容

當前,該腳本收集舊計算機上的應用程序列表,並粘貼其下的默認應用程序列表(來自DefaultApps.csv)。然後我在Excel中打開它,添加條件格式以查找重複條目並隱藏/刪除這些行。然後,我剩下一份我需要在新用戶的計算機上安裝的內容列表,其中不包含圖像安裝的任何內容。

我想要做的是修改腳本,以便PowerShell將篩選出它找到的任何重複條目。我在網上發現了一些能夠清除如何刪除其中一個條目的地方,但這在這種情況下不會有幫助。我非常想讓PowerShell從遠程PC拉取應用程序列表,然後刪除DefaultApps.csv中存在的任何條目。

我不確定從哪裏開始,因爲除了此腳本中的內容外,我還沒有做過太多編輯CSV文件的工作。有人能指導我如何實現這一目標的正確方向嗎?如果你知道我應該看的cmdlet/switch,或者如果你有一個解釋這個的頁面的鏈接,那將是一個好的開始。

$PCListOld = Get-Content F:\PCList-Old.txt 
ForEach ($PC in $PCListOld) { 
    $AppList = Get-WmiObject -Computer $PC Win32_Product | Sort-Object Name | Select-Object Name 
    $AppList | Export-CSV C:\Scripts\AppLists\$PC.csv -NoTypeInformation 
    Import-CSV C:\Scripts\AppLists\DefaultApps.csv | Export-CSV C:\Scripts\AppLists\$PC.csv -Append 
} 

回答

1

我不知道從哪裏開始的這一點,因爲我沒有做太多與編輯CSV文件

但是你不嘗試編輯CSV文件,SOOOO ...不要將默認應用程序放在輸出中,因此您不必將其過濾掉。如果它在默認的應用程序中,請不要將應用程序放在輸出中。

$DefaultApps = Import-CSV C:\Scripts\AppLists\DefaultApps.csv 

$PCListOld = Get-Content F:\PCList-Old.txt 
ForEach ($PC in $PCListOld) 
{ 
    $AppList = Get-WmiObject -Computer $PC Win32_Product | Sort-Object Name | Select-Object Name 
    $AppList | Where-Object {$_.Name -notin $DefaultApps.Name} | Export-CSV C:\Scripts\AppLists\$PC.csv -NoTypeInformation 
} 

未經測試,但大致如此。

PS。 NB。

+0

還不如包括如何從註冊表在這一點上搜索:http://stackoverflow.com/questions/29813325/powershell-search-software-installed/ 29814134#29814134 – Matt

+0

到目前爲止,這似乎工作得很好。儘管在DefaultApps.csv中,唯一的問題是「Intel?Trusted Connect Service Client」出現在結果中。 「?」可以嗎?在入口處以某種方式拋棄它?我沒有收到任何錯誤,但每次csv導出後$ LASTEXITCODE都是1,即使我猜它應該是0,因爲沒有任何錯誤出現? – Andrew

+0

@Andrew我不確定lastexitcode 1是從哪裏來的,即使WHERE過濾器失敗了,也不應該這樣做。過濾器應該用於問號,考慮''b'' -in @('a','b?','c')'起作用。我懷疑它實際上不是一個問號,而是一個註冊或版權或商標符號 - (R) - 例如'Intel®',您的默認應用程序電子表格未正確編碼(是否以ASCII編碼保存?) 。 – TessellatingHeckler