Board logo

标题: [问题求助] 怎么通过powershell获取远程计算机上的软件列表? [打印本页]

作者: xiaoliang6688    时间: 2014-7-24 17:16     标题: 怎么通过powershell获取远程计算机上的软件列表?

在AD中,怎么通过powershell获取远程计算机上的安装软件列表。
谁知道,拜谢!
小弟急用。
作者: 彪叔    时间: 2014-7-24 17:23

同求 同求同求 同求同求 同求
作者: DAIC    时间: 2017-5-24 09:23

我想之前分享过如何使用WMI查询的方式获取安装的软件列表:
  1. Get-WmiObject win32_product
复制代码
小弟以前只知道WMI查询慢,很慢,从来没有体会过它会慢到让人抓狂,近乎崩溃。一个同事在他的机器上运行后,运行了两个小时,仍然没有结束,也没有一行结果返回。

这使我不得不投入到注册表的怀抱了。要扫描注册表,PowerShell表示没有任何压力。但是唯一需要我们小心的就是这里可能会有三个路径:
1. HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
2. HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall
3. HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

第一个表示的是机器级别的软件。
第二个表示仅限当前用户安装的软件(ClickOne程序默认可以从这个路径下查询)。
第三个和第一个类似,只是只可能出现在64位操作系统上。

具体的调用函数可以参考:
  1. <#
  2. .Synopsis
  3.    Get installed software list by retrieving registry.
  4. .DESCRIPTION
  5.    The function return a installed software list by retrieving registry from below path;
  6.    1.'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall'
  7.    2.'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall'
  8.    3.'HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall'
  9.    Author: Mosser Lee (http://www.pstips.net/author/mosser/)
  10. .EXAMPLE
  11.    Get-InstalledSoftwares
  12. .EXAMPLE
  13.    Get-InstalledSoftwares  | Group-Object Publisher
  14. #>
  15. function Get-InstalledSoftwares
  16. {
  17.     #
  18.     # Read registry key as product entity.
  19.     #
  20.     function ConvertTo-ProductEntity
  21.     {
  22.         param([Microsoft.Win32.RegistryKey]$RegKey)
  23.         $product = '' | select Name,Publisher,Version
  24.         $product.Name =  $_.GetValue("DisplayName")
  25.         $product.Publisher = $_.GetValue("Publisher")
  26.         $product.Version =  $_.GetValue("DisplayVersion")
  27.         if( -not [string]::IsNullOrEmpty($product.Name)){
  28.             $product
  29.         }
  30.     }
  31.     $UninstallPaths = @(,
  32.     # For local machine.
  33.     'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall',
  34.     # For current user.
  35.     'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall')
  36.     # For 32bit softwares that were installed on 64bit operating system.
  37.     if([Environment]::Is64BitOperatingSystem) {
  38.         $UninstallPaths += 'HKLM:SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall'
  39.     }
  40.     $UninstallPaths | foreach {
  41.         Get-ChildItem $_ | foreach {
  42.             ConvertTo-ProductEntity -RegKey $_
  43.         }
  44.     }
  45. }
复制代码
转自:PowerShell快速高效地获取安装的软件列表
http://www.pstips.net/get-installedsoftwares.html




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2