次のようなスクリプトがあります。
$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
}
}
ただし、csvファイルにデータを追加していないようなので、すべての結果を$ out_fileに出力することはできません。オンラインで見つけた多くのこと、アイデア、提案を試しました。どれも動作していないようで、ここではかなり簡単なものがないように感じます。これにデータをファイルに追加させる方法はありますか?もしそうなら、それをそのように機能させるための例またはコードの断片を提供できますか?エクスポートされるデータを出力されるファイルに追加するための方法であるだけで、すべてのコードやそれらの行に沿った何かの書き換えを求めているのではありません。
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
-appendがPowershell v2.0で壊れているDmitry Sotikovsの回避策を使用: http://dmitrysotnikov.wordpress.com/2010/01/19/export-csv-append/
ただし、manojldsの優れたソリューションをお勧めします。
Suneが述べたように、PowerShell v3のExport-CsvにはAppendフラグがありますが、文字エンコーディング保護なしです。コードがすべての新しいデータを新しいCSVファイルに書き込んでいるため、manojldsは正しいです。
その間、あなたはcan 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以降は、次を使用できます。
Export-Csv $out_file -append -notypeinformation -encoding "unicode"