WMI Export-CSV为IP地址创建System.String(动态选择对象)

时间:2013-03-08 16:35:13

标签: powershell

此代码在导出为CSV时会导致IPAddress字段的“System.String []”输出。我知道对此的修复是加入字段,但我根据用户选择的设置动态选择对象,所以我不知道如何解决它。任何帮助表示赞赏。

$colItems = GWMI Win32_NetworkAdapterConfiguration -computername $PCname  -namespace "root\CimV2" -filter "IpEnabled = TRUE" 

###Define Settings Array
$settings_array = @()
Foreach ($objItem in $chklstGetMIPRet.CheckedItems)
{$settings_array += [String]$objItem}
#####

###Export to CSV
$colItems | Select-Object -Property $settings_array | export-  csv "$ScriptDir\Exports\$Outputfile" -NoType           

$ chklstGetMIPRet是一个检查列表框,用户可以选择要显示的WMI类。 $ chklstGetMIPRet.CheckedItems包含该检查列表框中当前检查的所有值。因此,foreach会通过,并且对于每个已检查的项目,将该值添加到$ settings_array

编辑:

此代码有效:

$prop_list = @{"MACAddress" = "MACAddress"}
$prop_list += @{"Caption" = "Caption}
$prop_list += @{"IPAddress" = $colItems.IPAddress -join ', '}

Foreach ($objItem in $chklstGetMIPRet.CheckedItems)
 {$exp_settings_array += $prop_list[$objItem]}

$colItems | Select-Object -Property $exp_settings_array | export-csv "$ScriptDir\Exports\$Outputfile" -NoType 

除非导出时,我使用标签正确获取Caption和MACaddress,但IPAddress只是将实际IP导出到没有标签的顶行。

1 个答案:

答案 0 :(得分:0)

我不确定你将如何实现这一点,但根本原因是该字段实际上是一个字符串数组。这将为您提供一个示例:

$colItems = GWMI Win32_NetworkAdapterConfiguration -computername $PCname  -namespace "root\CimV2" -filter "IpEnabled = TRUE"
$settings_array = @()
$settings_array += 'DHCPEnabled'
$settings_array += @{n='IPAddress';e={$_.IPAddress -join ', '}}
$colItems | Select-Object -Property $settings_array

显然,您必须将其用于代码中的$ chklstGetMIPRet.CheckedItems属性。

在您的情况下,我建议使用一个哈希表,该哈希表具有与checkitems和值相匹配的键,这些键表示要添加到该项的属性数组的确切内容。例如(未经测试,因为我没有时间模拟表单来测试它):

$ph = @{n='IPAddress';e={$_.IPAddress -join ', '}
$propertyLookup = @{'DHCPEnabled' = 'DHCPEnabled';
                        'IPAddress' = $ph
                       }

然后在构建属性数组的foreach中为您提供查找哈希:

$settings_array += $propertyLookup[$objItem]