2016-06-28 9 views
2

Я довольно близок к решению, но я просто не могу добраться туда. Я пытаюсь выполнить поиск установленных обновлений MS Office. Лучший способ, который я нашел, - найти ключ HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall.Поиск реестра в Powershell для определенных ключей и значений в пределах этих ключей

Что я тогда хочу сделать, это посмотреть только на под-ключи, такие как *{90140000-001* (что указывает на Office), и поиск каждого найденного свойства DisplayName для подкаталога для «(KB *»), который укажет, что это обновление для Office ., а не компонент

то, что я до сих пор это:

$ErrorActionPreference = "SilentlyContinue" 
Get-ChildItem "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" -Recurse | Where-Object{$_ -like "*{90140000-001*"} | foreach { 
Get-ItemProperty $_.DisplayName} 

Но он производит чистый выход

ли кто-нибудь может, пожалуйста, помогите мне закончить это от

.? 0

ответ

1

Вы можете использовать GetValue метод текущего RegistryKey для получения DisplayName:

Get-ChildItem "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\" -Recurse | 
    Where Name -like '*{90140000-001*' | foreach { 
    $_.GetValue("DisplayName") 
} 
1

Если вы хотите запросить удаленные компьютеры:

#config 
$computerName = $env:COMPUTERNAME 
$hive = "LocalMachine" 

#32-bit Office : SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall 
#64-bit Office : SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 
#Office 2013 : look for keys named "{90140000-001*" 
#Office 2016 : look for keys named "{90160000-001*" 

$regPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" 

#if remote computer is reachable 
if(Test-Connection $computerName -Quiet -Count 2 -ErrorAction 0) { 
    try { 
     #open remote registry 
     $base = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::$hive, $ComputerName) 

     #open desired key with edit permission 
     $key = $base.OpenSubKey($regPath) 

     foreach($subkeyName in $key.GetSubKeyNames()) { 
      if($subkeyName -match "{90160000-001") { 
       $subkey = $key.OpenSubKey($subkeyName) 
       $displayName = $subkey.GetValue("DisplayName") 
       if($displayName -match "\(KB") { 
        $displayName 
       } 
      } 
     } 

     #close subkey, key and registry connection 
     $subkey.Close() 
     $key.Close() 
     $base.Close() 
    } catch { 
     Throw "Remote registry is not accessible (check `$hive and `$regPath, and run this script as administrator)."    
    } 
} else { 
    Throw "Remote computer is not reachable." 
} 
+0

Спасибо, ребята, все очень полезные ответы. – JAG

+0

Добро пожаловать. Использование здесь заключается в том, чтобы принять ответ, который вы предпочитаете, щелкнув галочку рядом с ответом на ответ. – sodawillow