此代码在导出为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导出到没有标签的顶行。
答案 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]