1

此代码在导出到 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 

除了导出时,我使用标签正确获取标题和 MAC 地址,但 IPAddress 只是将实际 IP 导出到没有标签的顶行。

4

1 回答 1

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 属性中使用它。

在您的情况下,我建议您使用一个哈希表,该哈希表的键与已检查项匹配,而值则表示要添加到该项目的属性数组中的确切内容。例如(未经测试,因为我没有时间模拟一个表格来测试它):

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

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

$settings_array += $propertyLookup[$objItem]
于 2013-03-08T16:53:34.693 回答