我有一个如下脚本:
$in_file = "C:\Data\Need-Info.csv"
$out_file = "C:\Data\Need-Info_Updated.csv"
$list = Import-Csv $in_file
ForEach ( $user in $list ) {
$zID = $user.zID
ForEach-Object { Get-QADUser -Service 'domain.local' -SearchRoot 'OU=Users,DC=domain,DC=local' -SizeLimit 75000 -LdapFilter "(&(objectCategory=person)(objectClass=user)(PersonzID=$zID))" |
Select-Object DisplayName,samAccountName,@{Name="zID";expression={$zID}} |
Export-Csv $out_file -NoTypeInformation -Force
}
}
但是,我无法将所有结果输出到$ out_file,因为它似乎没有将数据附加到csv文件。我尝试过在线发现的一些事情,想法和建议。他们似乎都没有工作,我觉得我在这里错过了一些相当容易的东西。有没有办法使这个数据附加到文件?如果是这样,您能提供一个示例或一段代码,以使其以这种方式工作吗?我并不是要求重写所有代码或其他任何代码,只是一种方法可以将正在导出的数据附加到输出的文件中。
答案 0 :(得分:10)
将foreach循环转换为foreach-object并将export-csv移动到outter foreach对象之外,以便可以将所有对象传递给export-csv。
像这样(未经测试):
$list | ForEach {
$zID = $_.zID
ForEach-Object { Get-QADUser -Service 'domain.local' -SearchRoot 'OU=Users,DC=domain,DC=local' -SizeLimit 75000 -LdapFilter "(&(objectCategory=person)(objectClass=user)(PersonzID=$zID))" |
Select-Object DisplayName,samAccountName,@{Name="zID";expression={$zID}} |
}
} |Export-Csv $out_file -NoTypeInformation -Force
答案 1 :(得分:4)
-append在Powershell v2.0中被破坏了 使用Dmitry Sotikovs的工作单:http://dmitrysotnikov.wordpress.com/2010/01/19/export-csv-append/
但我会推荐manojlds出色的解决方案!
答案 2 :(得分:3)
正如Sune所说,PowerShell v3的Export-Csv有一个Append标志,但没有字符编码保护。 manojlds是正确的,因为您的代码正在将所有新数据写入新的CSV文件。
与此同时,您可以通过以下方式将数据附加到CSV
以下是一个示例:
1..3 | ForEach-Object {
New-Object PSObject -Property @{Number = $_; Cubed = $_ * $_ * $_}
} | Export-Csv -Path .\NumTest.csv -NoTypeInformation -Encoding UTF8
# create new data
$newData = 4..5 | ForEach-Object {
New-Object PSObject -Property @{Number = $_; Cubed = $_ * $_ * $_}
} | ConvertTo-Csv -NoTypeInformation
# strip header (1st element) by assigning it to Null and collect new data
$null, $justData = $newData
# append just the new data
Add-Content -Path .\NumTest.csv -Value $justData -Encoding UTF8
# create more new data, strip header and collect just data
$null, $data = 6..9 | ForEach-Object {
New-Object PSObject -Property @{Number = $_; Cubed = $_ * $_ * $_}
} | ConvertTo-Csv -NoTypeInformation
# append the new data
Add-Content -Path .\NumTest.csv -Value $data -Encoding UTF8
# verify
Import-Csv .\NumTest.csv
# clean up
Remove-Item .\NumTest.csv
答案 3 :(得分:1)
在版本3之后,您可以使用:
Export-Csv $out_file -append -notypeinformation -encoding "unicode"