代码之家  ›  专栏  ›  技术社区  ›  Slyons

Powershell get installed程序脚本不返回计算机名

  •  1
  • Slyons  · 技术社区  · 7 年前

    我正在尝试从一组远程服务器上获取已安装程序的列表。我可以获取程序名,但无法返回系统名。下面是我的脚本。

    $computerfile = get-content "D:\Users\Admin\Docs\PrimaryServers.txt"
    ForEach ($computer in $computerfile) {
    Get-WmiObject Win32_Product -ComputerName $computer |
      Select-Object SystemName,Name,Version,PackageName,Installdate,Vendor |
      Format-Table -AutoSize
      }
    

    下面是我的输出

    enter image description here

    2 回复  |  直到 7 年前
        1
  •  0
  •   BenH    7 年前

    -ComputerName 可以采用名称数组,因此通过循环,您将增加时间,因为循环将是串行的,而将数组用于computername将是并行的。

    其次,最好使用CIM cmdlet代替WMI cmdlet。默认情况下,它们在WSMAN上运行,更容易使用。

    第三,Win32_产品强制进行一致性检查,因此读取 Uninstall registry keys 通常是优越的。

    最后一点 SystemName 不是由返回的属性名称 Get-WMIObject . PSComputerName 是你要找的房产,你可以 Calculated Property 从它。

    $computerfile = get-content "D:\Users\Admin\Docs\PrimaryServers.txt"
    Get-CimInstance Win32_Product -ComputerName $Computerfile |
        Select-Object @{n=SystemName;e={$_.PSComputerName}},Name,Version,PackageName,Installdate,Vendor |
        Format-Table -AutoSize
    
        2
  •  0
  •   Alex Sarafian    7 年前

    另一种方法是使用 Invoke-Command 其中,它会自动扩展结果,并使用 PSComputerName

    块1是我用于x32和x64实现的方法 . 考虑将其作为替代方案,因为我对拟议的实现有一些问题。

    $block1={
        # Query x64 bit applications
        $queryPath="HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*"
        Get-ItemProperty $queryPath | Select-Object -Property DisplayName, Publisher, InstallDate, DisplayVersion
    
        # Query x32 bit applications
        $queryPath="HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*"
        Get-ItemProperty $queryPath | Select-Object -Property DisplayName, Publisher, InstallDate, DisplayVersion
    }
    

    块2是关于这个问题的拟议方法

    $block2={
        Get-CimInstance Win32_Product | Select-Object Name,Version,PackageName,Installdate,Vendor
    }
    

    对于任何一个 $block1 $block2 在服务器列表上远程执行

    Invoke-Command -ComputerName $computernames -ScriptBlock $block1
    

    一张唱片是这样的

    DisplayName    : Microsoft Visual C++ 2013 x86 Additional Runtime - 12.0.21005
    Publisher      : Microsoft Corporation
    InstallDate    : 20161202
    DisplayVersion : 12.0.21005
    PSComputerName : MECDEVAPP01
    RunspaceId     : 4b8cc747-da25-4c6e-b108-0ca3138c0335
    
    推荐文章