PowerShell脚本导出子网至CSV显示System.Object[]而非IP地址求助
解决PowerShell资产清点脚本中子网导出为System.Object[]的问题
这个问题我碰到过不少,原因其实很简单——Win32_NetworkAdapterConfiguration的IPSubnet属性返回的是一个数组(毕竟一块网卡可能绑定多个子网),你直接把数组赋值给NoteProperty,导出CSV的时候PowerShell就会把它的类型名System.Object[]打出来,而不是实际的IP地址。
下面给你两种常用的解决思路,按需选择:
1. 只导出第一个子网地址
如果你的场景里每个网卡只需要第一个子网,直接取数组的第一个元素即可:
$nmconfiginfo = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $s # 取第一个子网,若为空则赋值空字符串避免报错 $subnet = $nmconfiginfo.IPSubnet[0] ?? '' Add-Member -InputObject $infoObject -MemberType NoteProperty -Name "IP Subnet" -Value $subnet
2. 导出所有子网(逗号分隔)
如果需要保留网卡的所有子网信息,可以用-join把数组元素拼接成字符串:
$nmconfiginfo = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $s # 把所有子网用逗号分隔拼接,无子网则显示空字符串 $subnet = if ($nmconfiginfo.IPSubnet) { $nmconfiginfo.IPSubnet -join ', ' } else { '' } Add-Member -InputObject $infoObject -MemberType NoteProperty -Name "IP Subnet" -Value $subnet
额外提示
别忘了处理那些没有IP配置的网卡(比如禁用的网卡),上面的代码里已经加了空值判断,避免出现Cannot index into a null array之类的错误。
内容的提问来源于stack exchange,提问作者jeevanreddymandali
相关产品推荐
相关产品推荐

