将数组中的每个元素发送到单独的CSV行中

时间:2018-10-19 19:03:45

标签: powershell

我正在尝试编写一个脚本,将数组的每个元素放入.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>

1 个答案:

答案 0 :(得分:0)

从昨天开始,我也一直试图解决这个问题。到目前为止,我的快速而肮脏的解决方案是使用Add-Content cmdlet将数据直接添加到Csv文件中。这会将阵列中的所有信息添加到一个单元块中。

您的代码看起来像是: Add-Content -Path c:\temp\gpo.csv -Value "$name, $var2, $var3"

注意:逗号用作Csvs的列定界符。