我試圖讓這個ForEach循環搜索特定的軟件安裝在計算機上使用註冊表搜索。出於某種原因,它只能找到一個,而不是其他兩個,即使我知道並可以看到它們已安裝。 錯過了什麼。安裝PowerShell搜索軟件
Clear-Host
$Computers = hostname
$array = @()
foreach($pc in $computers){
$computername=$pc.computername
#Define the variable to hold the location of Currently Installed Programs
$UninstallKey="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
#Create an instance of the Registry Object and open the HKLM base key
$reg=[microsoft.win32.registrykey]::OpenRemoteBaseKey('LocalMachine',$computername)
#Drill down into the Uninstall key using the OpenSubKey Method
$regkey=$reg.OpenSubKey($UninstallKey)
#Retrieve an array of string that contain all the subkey names
$subkeys=$regkey.GetSubKeyNames()
#Open each Subkey and use GetValue Method to return the required values for each
ForEach($Key in $subkeys) {
$thisKey=$UninstallKey+"\\"+$key
$thisSubKey=$reg.OpenSubKey($thisKey)
#If found set variable to True for used in report
if (($thisSubKey.GetValue("DisplayName") -like "CCleaner")) {Write-Host "CCleaner = True"}
Else {Write-Host = " False"}
if (($thisSubKey.GetValue("DisplayName") -like "*7-Zip*")) {Write-Host "7Zip = True"}
Else {Write-Host = " False"}
if (($thisSubKey.GetValue("DisplayName") -like "*.NET Framework*")) {Write-Host ".NET = True"}
Else {Write-Host = " False"}
}
}
它發現DotNet和它的等於True,但7-Zip和CCleaner也安裝在我正在尋找的地方。我有一段時間看了這段代碼,看不出爲什麼。
我知道我已經將電腦設置爲主機名,我將更改爲帶有計算機列表的文件。這只是爲了目前的測試。
謝謝你,並提前。
64位操作系統?你可能有一個32位的應用程序,他們位於WoW6432Node。你的CCLeaner'''''語句沒有通配符。我會建議使用'-match'而不是''like',並刪除星號。這可能很好地解決你的問題。由於7-Zip的顯示名稱以7-Zip開頭,因此如果在文本前面加星號,我不記得'-like'是否會找到它。如果可以使用,匹配比我認爲的更好。 – TheMadTechnician
它是64位操作系統,我可能不得不迎合這兩種情況,我已經爲通配符添加了通配符並刪除了else語句。到目前爲止,它工作我認爲,我會繼續測試假軟件,看看是否應該報告回來。感謝您的答覆。 –