Write-Output отправляет вывод в конвейер.Он принимает ввод через конвейер или аргумент, но не оба, так что вы можете сделать это:
Write-Output "Test"
или это:
"Test" | Write-Output
но не это:
"Test" | Write-Output "Test"
Решение:
Get-ChildItem $path -Recurse | where {
$_.Name -match '.+?\.log\.(\d{4})-(\d{2})-(\d{2})$' -and $_.LastWriteTime -lt $deleteDate
} | foreach {
# Write-Host writes to the console only
Write-Host "Deleting $($_.Name)"
Remove-Item $_
}
Помните, что Remove-Item ожидает строковый аргумент, поэтому все, что вы передадите, будетпреобразован в строку.Приведение объекта FileInfo
к строке может не всегда возвращать полный путь (из-за его реализации ToString()
) в зависимости от того, как он был создан!
В приведенном выше примере безопасноиспользуйте, но это, например, вызовет исключение (если ваш текущий рабочий каталог не $path
):
(Get-Item $path).GetFiles() | foreach { Remove-Item $_ }
Так что всегда безопаснее использовать $_.FullName
.