You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Get-WmiObject脚本无法获取计算机名问题求助

解决Win32_Product返回空ComputerName的问题

我之前处理过一模一样的问题!Win32_Product类的默认返回结果里,ComputerName字段确实经常是空的,但其实有两个可靠的办法能拿到正确的计算机名:

方法1:使用WMI的__SERVER属性(双下划线开头)

你之前试过_SERVER但没效果,是因为这个属性是两个下划线开头的__SERVER。我们可以通过PowerShell的计算属性,把它重命名为你需要的ComputerName字段:

Get-WmiObject -Class Win32_Product -Computer CLUKxxx,CLUKyyy,CLUKzzz | 
    Select-Object @{Name='ComputerName'; Expression={$_.__SERVER}}, Name, Version, Vendor | 
    Sort-Object Name | 
    Export-Csv "C:\CLUKxxx_yyy_zzz_Programs.csv" -NoTypeInformation

这里额外加了-NoTypeInformation参数,能避免CSV文件开头出现多余的类型注释,让输出更干净。

方法2:遍历计算机时手动绑定名称(更可靠)

如果某些情况下__SERVER也返回异常,你可以直接遍历每台计算机,把传入的计算机名手动绑定到结果里,这种方式绝对不会空:

$targetComputers = 'CLUKxxx','CLUKyyy','CLUKzzz'
$targetComputers | ForEach-Object {
    $currentPC = $_
    Get-WmiObject -Class Win32_Product -Computer $currentPC |
        Select-Object @{Name='ComputerName'; Expression={$currentPC}}, Name, Version, Vendor
} | Sort-Object Name | Export-Csv "C:\CLUKxxx_yyy_zzz_Programs.csv" -NoTypeInformation

额外提醒:Win32_Product的潜在问题

顺便提一句,Win32_Product每次调用都会触发Windows Installer的一致性检查,可能导致系统卡顿甚至弹出莫名其妙的安装/修复窗口。如果你的场景允许,推荐通过读取注册表来获取软件列表,路径是:

  • 64位软件:HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall
  • 32位软件:HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
    这种方式更高效也更安全,不过如果必须用Win32_Product,上面的两种方法都能解决你的计算机名问题。

内容的提问来源于stack exchange,提问作者Dan Goodwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:56:43