我正在尝试编写一个脚本,将数组的每个元素放入.CSV中自己的单独行中。到目前为止,脚本如下所示:
$table = @()
(gci *.xml -Recurse -force | select-string -pattern "RestrictedGroups" -List | select-xml -xpath *) | sort | foreach {
$gpo = $_.Path
[xml]$xml = gc $gpo
$Name = $xml.GPO.Name
$GroupName = @($xml.GPO.Computer.ExtensionData.Extension.RestrictedGroups.GroupName.Name."#text")
$MemberOf = @($xml.GPO.Computer.ExtensionData.Extension.RestrictedGroups.MemberOf.Name."#text")
$Record = New-Object PSObject
$Record | Add-Member -MemberType NoteProperty -Name "Name" -Value $Name
$Record | Add-Member -MemberType NoteProperty -Name "GroupName" -Value $var2
$Record | Add-Member -MemberType NoteProperty -Name "MemberOf" -Value $var3
$table += $Record
}
$table | Export-CSV c:\temp\gpo.csv -NoTypeInformation -Delimiter ","
“名称”的总计数为1,其他的计数通常较高。样本输出:
Name GroupName MemberOf
1 aaa System.Object[]
2 bbb ccc
3 System.Object[] System.Object[]
如您所见,CSV中的许多值都作为“ System.Object []”输出,而不是我尝试提取的值。在某些情况下,它们会显示为我要查找的实际名称(aaa,bbb),并且我怀疑当数组中只有一个元素时就是这种情况。
使用set-content代替export-csv几乎可以正常工作,除非我这样做时,将数组的每个元素放入单个单元格中。我可以添加一个逗号定界符,但是不只是将新元素添加到下一个列单元格中,而不是下一个行单元格中。
关于如何获取它的任何想法,以便将member和LocalGroup数组的每个元素放入其各自标题下的自己的单元格中?
这是一个将针对其运行的示例XML文件:
<?xml version="1.0" encoding="utf-16"?>
<GPO xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.microsoft.com/GroupPolicy/Settings">
<Computer>
<ExtensionData>
<Extension xmlns:q1="xxx" xsi:type="q1:SecuritySettings">
<q1:RestrictedGroups>
<q1:GroupName>
<SID xmlns="http://www.microsoft.com/GroupPolicy/Types">SID</SID>
<Name xmlns="http://www.microsoft.com/GroupPolicy/Types">MemberName</Name>
</q1:GroupName>
<q1:Memberof>
<SID xmlns="http://www.microsoft.com/GroupPolicy/Types">SID2</SID>
<Name xmlns="http://www.microsoft.com/GroupPolicy/Types">MemberOf</Name>
</q1:Memberof>
</q1:RestrictedGroups>
</Extension>
</ExtensionData>
</Computer>
答案 0 :(得分:0)
从昨天开始,我也一直试图解决这个问题。到目前为止,我的快速而肮脏的解决方案是使用Add-Content
cmdlet将数据直接添加到Csv文件中。这会将阵列中的所有信息添加到一个单元块中。
您的代码看起来像是:
Add-Content -Path c:\temp\gpo.csv -Value "$name, $var2, $var3"
注意:逗号用作Csvs的列定界符。