Le problème avec votre code est que vous utilisez Write-Host
qui envoie explicitement la sortie à la console (que vous ne pouvez pas rediriger ailleurs). La solution rapide est la suivante:
Get-ChildItem -Recurse | Where-Object { $_.lastwritetime -gt [datetime]"2017/05/01" } | foreach { "$($_.Name),$($_.lastwritetime),$((get-ACL).owner)" } > filelisting-$loc2.txt
Cette affiche une chaîne à la sortie standard (l'équivalent de l'utilisation Write-Output
). Je l'ai fait une seule chaîne qui inclut les variables que vous vouliez accéder en utilisant l'opérateur sous-expression $()
dans une chaîne entre guillemets. Cet opérateur est nécessaire pour accéder aux propriétés des objets ou pour exécuter d'autres cmdlets/code complexe (essentiellement rien de plus qu'une simple variable $) dans une telle chaîne.
Vous pouvez améliorer davantage le code en créant un résultat d'objet, ce qui vous permettrait ensuite d'exploiter d'autres cmdlets dans le pipeline, telles que Export-CSV
. Je suggère ceci:
Get-ChildItem -Recurse | Where-Object { $_.lastwritetime -gt [datetime]"2017/05/01" } | ForEach-Object {
$Properties = [Ordered]@{
Name = $_.Name
LastWriteTime = $_.LastWriteTime
Owner = (Get-ACL).Owner
}
New-Object -TypeName PSObject -Property $Properties
} | Export-CSV $Loc2.csv
Cela crée une @{}
Hashtable des propriétés que vous vouliez et utilise ensuite cette table de hachage pour créer un objet avec PowerShell New-Object
. Cet objet est ensuite renvoyé à la sortie standard, qui entre dans le pipeline. Lorsque la boucle ForEach-Object conclut tous les objets sont envoyés à Export-CSV
qui les renvoie ensuite correctement en tant que CSV (car il prend l'entrée d'objet).
En aparté, voici une lecture intéressante du créateur de PowerShell pourquoi Write-Host is considered harmful. nécessite PowerShell 3 ou supérieur. Si vous utilisez PowerShell 2, supprimez-le. Il garde simplement l'ordre des propriétés dans l'objet dans l'ordre dans lequel elles ont été définies.
Parfait! merci beaucoup pour votre réponse, a travaillé un régal! J'ai commencé à utiliser l'export-CSV pour d'autres scripts et c'est génial, je n'avais aucune idée qu'il existait haha. À votre santé. –