Записать вывод командлета в файл с функцией регистрации без использования foreach
У меня есть командлет, подобный следующему примеру, для удаления файлов старше x дней, и функция ведения журнала (write-log), которая ведет журнал в файл:
$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"
# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
Я хочу записать, что командлет делает с каждым обработанным файлом. В обычном цикле foreach я бы добавил что-то вроде этого для регистрации процесса
if($?){
write-log -Info "File $item deleted successfully" #call my logging function that logs to a file
} else {
write-log -Info "File $item could not be deleted" #call my logging function that logs to a file
}
Как я могу регистрировать все действия, используя мою функцию регистрации и вышеупомянутый командлет?
1 ответ
Решение
Почему бы просто не объединить их в один цикл?
$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"
# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | ForEach-Object {
Remove-Item $_ -Force
if($?){
write-log -Info "File $($_.Name) deleted successfully" #call my logging function that logs to a file
} else {
write-log -Info "File $($_.Name) could not be deleted" #call my logging function that logs to a file
}
}