PowerShell执行Get-ComputerInfo时SystemName字段为空如何解决?
问题原因
- 你当前使用的
Get-ComputerInfocmdlet 不支持直接通过管道传入计算机名查询远程设备,脚本实际返回的全部是本地计算机的信息,computers.csv内的远程设备列表没有生效 - 本地环境下
Get-ComputerInfo返回的SystemName字段本身就存在空值的已知表现
解决方案
方案1:使用Get-CimInstance查询(推荐)
该cmdlet原生支持远程批量查询,返回结果稳定,不需要额外配置远程执行策略即可使用(仅需远程设备放通WMI查询权限):
$computers = Get-Content 'C:\New folder\computers.csv' Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $computers | Select-Object ` @{Name='SystemName';Expression={$_.PSComputerName}}, @{Name='WindowsProductName';Expression={$_.Caption}}, @{Name='WindowsVersion';Expression={$_.Version}} | Format-List
方案2:配合Invoke-Command使用Get-ComputerInfo
如果需要保留Get-ComputerInfo的其他字段查询能力,可以通过远程执行命令的方式调用,会自动填充对应设备的SystemName:
$computers = Get-Content 'C:\New folder\computers.csv' Invoke-Command -ComputerName $computers -ScriptBlock { Get-ComputerInfo | select SystemName, WindowsProductName, WindowsVersion } | Format-List SystemName, WindowsProductName, WindowsVersion
注意事项
- 所有批量远程查询操作均需要执行账号拥有对应远程设备的访问权限
- 方案2需要远程设备提前开启WinRM服务并放通对应防火墙规则
内容的提问来源于stack exchange,提问作者user14029480
相关产品推荐
相关产品推荐

