J'ai un script comme celui-ci:
$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
}
}
Cependant, je ne parviens pas à obtenir tous les résultats dans le fichier $ out_file, car il ne semble pas ajouter les données au fichier csv. J'ai essayé un certain nombre de choses, idées et suggestions trouvées en ligne. Aucun d’entre eux ne semble fonctionner et j’ai l’impression que je manque quelque chose de facile ici. Existe-t-il un moyen d’ajouter les données à un fichier? Si oui, pourriez-vous fournir un exemple ou un extrait de code pour que cela fonctionne de cette manière? Je ne demande pas une réécriture de tout le code ou quoi que ce soit dans ce sens, mais simplement un moyen d'ajouter les données exportées au fichier en sortie.
Conversion de la boucle foreach dans un foreach-objet et déplacer l'exportation csv à l'extérieur de l'objet foreach outter de sorte que vous pouvez diriger tous les objets à l'exportation csv.
Quelque chose comme ça (non testé):
$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 est cassé dans Powershell v2.0 Utilisez le travail de Dmitry Sotikovs: http://dmitrysotnikov.wordpress.com/2010/01/19/export-csv-append/
Je recommanderais cependant manojlds excellente solution!
Comme Sune l'a mentionné, le fichier Export-Csv de PowerShell v3 comporte un indicateur Append mais pas de protection pour le codage des caractères . manojlds est correct car votre code écrit toutes les nouvelles données dans un nouveau fichier CSV.
Pendant ce temps, vous pouvez ajouter des données à un fichier CSV en:
Voici un échantillon:
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
Après la version 3, vous pouvez utiliser:
Export-Csv $out_file -append -notypeinformation -encoding "unicode"