Записать вывод командлета в файл с функцией регистрации без использования 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
    }
}
Другие вопросы по тегам