为什么将对象列表导出到CSV会返回System.Object[]?

mepcadol  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(79)

我正在努力将我的对象列表导出到csv文件。到目前为止,我有以下代码:

$accessListPath = "example.cfg"
$Outputfile = "ScriptOutput.csv"

$accessList = @()
$xml = [XML](Get-Content -Path $accessListPath)

$xml | Select-Xml -xpath "//value" | %{  
        
    $accessList += New-Object -TypeName PSObject -Property @{
        Rolle = $_.Node.roll
        Gruppe = $_.Node.group
        ADString =  $_.Node."#text".trim()
    }
} 

Export-Csv -InputObject $accessList -Path $Outputfile

字符串
对应的XML文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<ldap>
    <host>x.x.x.x
        <users>
            <user>DC=Example,DC=internal</user>
        </users>
        <rights>
            <var>distinguishedName
                <value>CN=...,OU=user,OU=...
                    <roll>2</roll>
                </value>
                <value>CN=...,OU=user,OU=...
                    <roll>5</roll>
                    <roll>18</roll>
            </value>
            <value>CN=John Doe*
                <roll>9</roll>
            </value>
            <value>CN=Domain Admin*
                <group>Administrator</group>
                <roll>1</roll>
            </value>
            <value>CN=...,OU=user,...
                <group>Example Group</group>
                <roll>8</roll>
                <roll>12</roll>
                <roll>14</roll>
                <roll>15</roll>
            </value>
        </var>
        <var>search:member=&lt;userdn&gt;
            <value>CN=group1*
                <group>01 Group XY</group>
                <roll>1</roll>
            </value>
            <value>CN=Client1,OU=*
                <roll>3</roll>
            </value>
            <value>CN=...,OU=*
                <roll>5</roll>
            </value>
            <value>CN=ImportantClient06*
                <group>06ImportantGroup</group>
                <roll>8</roll>
                <roll>11</roll>
                <roll>12</roll>
            </value>
        </var>
    </rights>
</host>


这是.csv文件中的输出:

TYPE System.Object[]                            
Count   Length  LongLength  Rank    SyncRoot    IsReadOnly  IsFixedSize IsSynchronized
49      49      49          1   System.Object[] False   True        False

vnjpjtjt

vnjpjtjt1#

尝试:

$accessList | Export-Csv -Path $Outputfile

字符串
当你指定-InputObject $accessList时,你说的是使用THIS对象。这实际上导出了数组,这就是你所看到的。当你使用$accessList | Export-CSV ...时,它将数组中的元素发送到管道中,这样所有的元素都被导出了。
另外,您可以添加-NoTypeInformation来删除TYPE ...-行。

ovfsdjhp

ovfsdjhp2#

这篇文章的答案帮助解决了我的挑战。|导出-CSV”我尝试过“|Out-String”,这导致我在我的表DataBase Plan-f51da2a1-8c5c-496c-aa44-46a259b1471aa.xml中再次使用xml文本.
在我的代码下面。它获取一个文件的名称,并显示它旁边的内容。

$table = New-Object System.Data.Datatable

[void]$table.Columns.Add("Name")
[void]$table.Columns.Add("Content")

$source="D:\test\DataAccessPlans" #location of starting directory
$files=@("*.xml") #if you want to include extensions add -include ($files) to get-ChildItem
forEach($item in $(Get-ChildItem -recurse ($source) -File -include $files) ){
    $currentContent = Get-Content -Path $item
    $currentContent | Out-String
    [void]$table.Rows.Add($item.Name,$($currentContent | Out-String))
    }
$table | Export-Csv -Path "D:\export.csv"

字符串

相关问题