Powershell WMI导出CSV为IP地址创建System.String(动态选择对象)

Powershell WMI导出CSV为IP地址创建System.String(动态选择对象),powershell,Powershell,此代码在导出为CSV时会导致IPAddress字段的“System.String[]”输出。我知道解决方法是加入该字段,但我正在根据用户选择的设置动态选择对象,因此我不确定如何解决该问题。感谢您的帮助 $colItems = GWMI Win32_NetworkAdapterConfiguration -computername $PCname -namespace "root\CimV2" -filter "IpEnabled = TRUE" ###Define Settings Arr

此代码在导出为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\u数组中

编辑:

此代码适用于:

$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 

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

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

$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属性中

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

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

$settings_array += $propertyLookup[$objItem]

我试过了,但没用<代码>$settings_array=@()Foreach($chklstGetMIPRet.CheckedItems中的objItem)$settings_array+=@{n='$objItem';e={$.$objItem-join','}}}什么是$chklstGetMIPRet.CheckedItems?它来自哪里?它装的是什么?请在您的问题中添加信息。添加为对我的问题的评论。那么错误是什么?对象的实际类型是什么?它的性质是什么?你需要自己在这里做一点工作。我只是想给你一些指导。正如我所说,我没有时间构建一个表单来测试这段代码,即使没有表单,它也会说哈希文本是不完整的。如果我在表单中尝试它,它会给我一个错误,在哈希文本中的键后面缺少一个“=”。对我来说,看起来你不能在哈希表中分配这样的值。。。如果我不包含带有@n='IPAddress';e={$\u0.IPAddress-join','}的行,它就可以正常工作;$chklstGetMIPRet是一个复选框,用户可以选择要显示的WMI类。$chklstGetMIPRet.CheckedItems包含该复选框中当前选中的所有值。因此,foreach将通过并为每个选中项将该值添加到$settings\U数组中
$settings_array += $propertyLookup[$objItem]