Использование нескольких тегов powershell (которые обычно исключают друг друга) неоднозначно,
если вы хотите убедиться, что скрипт работает под PSv2, используйте только этот тег.
Командлет Remove-Item
напрямую принимает конвейерный ввод, поэтому я бы использовал его вместо ForEach-Object и метода объектов .delete()
.
Для параметра -File
требуется PSv3 +, альтернатива - проверка (не = !
) $_.PSIsContainer
Сценарий IMO проще для чтения разрывных строк, где PowerShell ожидает продолжения и отступа:
## Q:\Test\2019\01\22\SO_54311383.ps1
$BasePath = "D:\samples\*"
$Treshold = (Get-Date).Date.AddDays(-10)
Get-ChildItem -Path $BasePath -Recurse -Force |
Where-Object {!$_.PSIsContainer -and
$_.CreationTime -lt $Treshold} |
Remove-Item -WhatIf # -Force
Если вывод выглядит нормально, удалите -WhatIf
в последней строке.
В конечном итоге необходимый параметр -Force
закомментирован на данный момент.