Add-Member输出到CSV文件是System.Object []

时间:2018-04-05 12:43:48

标签: powershell

我正在尝试一个库存脚本,我正在获取子网络详细信息并将其传输到CSV文件。但输出为System.Object[]而不是IP地址。

enter image description here

我希望IP地址以原始格式传输,例如255.255.0.0

$nmconfiginfo = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $s

Add-Member -InputObject $infoObject -MemberType NoteProperty -Name "IP Subnet" -Value $nmconfiginfo.IPSubnet

2 个答案:

答案 0 :(得分:3)

IPSubnet属性包含所有返回的接口的所有IP子网的集合。例如,我的价值是:

255.255.255.0
64
255.255.252.0
64
255.255.255.0
64
255.255.240.0
64

如果您想要返回这个完整值,可以通过管道到Out-String来实现:

Add-Member -inputObject $infoObject -memberType NoteProperty -name "IP Subnet" -value ($nmconfiginfo.IPSubnet | Out-String)

但是,如果您想要特定接口的子网值,则需要先将$nmconfiginfo集合缩小到该特定接口,例如:

$nmconfiginfo = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $s | Where-Object {$_.Description -eq 'Name of the interface you want'} 

请注意,描述不一定是唯一字段(因此您可能仍会获得多个结果)。您可以考虑按其他字段进行过滤,例如IPAddress

答案 1 :(得分:2)

IPSubnet是一个数组。将这个项放入单个项目的一种方法是从各个值创建一个字符串。例如,替换:

-Value $nmconfiginfo.IPSubnet

使用:

-Value (($nmconfiginfo.IPSubnet | Where-Object {$_ -match "(\d{1,3}.){3}\d{1,3}"}) -join ';')

这将使用字符串填充属性,其中每个子网用分号分隔,省略任何无效的条目。