2017-05-15 73 views
0

我在我的公司的IT管理員和IM試圖找出如果裝的東西,他們不應該的人......PS腳本過濾註冊表安裝的程序

要做到這一點,即時通訊使用PS訪問註冊表並輸出Uninstall項中的值列表。不過,我只是開始使用Powershell,而且對它很新穎。

最後我希望這個腳本遍歷整個域並查看註冊表值並輸出不應該安裝的程序列表。

腳本到目前爲止,我已經寫了:

$path = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\" 

Get-ChildItem -Path $path | Get-ItemProperty -Name DisplayName 

,它的輸出:

DisplayName : Intel(R) Chipset Device Software 
PSPath  : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\{C965318A-AA36-4F94-9ED5-AE5391F452B2} 
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall 
PSChildName : {C965318A-AA36-4F94-9ED5-AE5391F452B2} 
PSProvider : Microsoft.PowerShell.Core\Registry 

DisplayName : Intel(R) ME UninstallLegacy 
PSPath  : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\{DF17C0DB-76D8-4A45-B26E-674F8455B803} 
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall 
PSChildName : {DF17C0DB-76D8-4A45-B26E-674F8455B803} 
PSProvider : Microsoft.PowerShell.Core\Registry 

DisplayName : VMware Workstation 
PSPath  : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\{F4C0A853-FA3B-4404-954B-799299EB5A98} 
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall 
PSChildName : {F4C0A853-FA3B-4404-954B-799299EB5A98} 
PSProvider : Microsoft.PowerShell.Core\Registry 

非常基本的,我知道,但它確實輸出列表我想它,但無論我過濾了多少垃圾或排除了cmdlet,我無法設法讓它從列表註冊表中清除,我知道它應該在那裏。

現在我們可以說我知道,並且與英特爾芯片組和英特爾ME卸載的遺產很好,所以我不希望他們出現在名單上,但我不適合與VMware工作站,所以我希望它顯示當我運行腳本時,我該怎麼做?

+0

'(Get-ChildItem -Path $ path).Name | Split-Path -Leaf'或甚至更簡單的變體也應該如此:'Get-ChildItem -Path $ path |拆分路徑-Leaf' – JosefZ

回答

0

獲取所有顯示名稱的列表(在下一步排序,以便更好的操作):

(Get-ChildItem -Path $path | Get-ItemProperty -Name DisplayName -ErrorAction SilentlyContinue).DisplayName | Sort 

那麼,在下面的代碼片段(副本獲得的名單$allowed這裏串然而你可以在這裏添加或刪除一些項目):

$allowed = @" 
Intel(R) Chipset Device Software 
Intel(R) ME UninstallLegacy 
Intel® Trusted Connect Service Client 
Microsoft Silverlight 
NVIDIA 3D Vision Driver 376.53 
NVIDIA Control Panel 376.53 
NVIDIA Display Container 
NVIDIA Display Container LS 
NVIDIA Graphics Driver 376.53 
NVIDIA HD Audio Driver 1.3.34.17 
Windows App Certification Kit Native Components 
"@ -split [System.Environment]::NewLine 

$path = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\" 

(Get-ChildItem -Path $path | 
    Get-ItemProperty -Name DisplayName -ErrorAction SilentlyContinue).DisplayName | 
    Where-Object {$_ -notin $allowed} | Sort 
+0

謝謝你,它完美的作品。即時通訊不知道爲什麼,但當我第一次嘗試它時,它沒有做任何事......不知道什麼改變了 –

0

你想這樣的一個列表:

Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | select DisplayName, Publisher, InstallDate 

編輯: 下面是在註釋中問題的快速和骯髒的解決方案。

$a = @(Get-ItemProperty 
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | select  DisplayName, Publisher, InstallDate) 
$exclud = "Program1","Program2" 

for($i = 0; $i -le $a.Count;$i++){ 
    if($exclud -notcontains $a[$i].DisplayName){ 
     $a[$i] 
    } 
} 
+0

這實際上更好,謝謝。但是你知道我該如何改革這個列表來排除應該在那裏的節目,並且只顯示其他節目? –

+0

@ITTOM看看答案有一個例子。 – guiwhatsthat

+0

哈哈快速和骯髒是一個很好的描述,謝謝你guiwhatsthat,但我很滿意JosefZ的代碼(它也有點更優雅:)) –

相關問題