Mamy niby proste polecenie:
ls -Recurse C:\Users\admin\Documents\| Select-Object Name,CreationTime | Where-Object -FilterScript {($_.CreationTime -lt (Get-Date).AddDays(-2) -and $_.Extension -eq ".txt")}
Niestety nic nie jest wyświetlane, a na pewno w tym katalogu są pliki TXT utworzone wcześniej niż 2 dni temu. O co chodzi?
ls zwraca obiekty, które mają duuużo właściwości, między innymi Name, CreationTime i Extension
Potem te obiekty przechodzą do Select, a select to chirurg, który wyciął wszystko oprócz Name i CreationTime. Czyli teraz ten obiekt ma już +/- tylko 2 właściwości: Name i CreationTime, ale nie ma Extension
Potem w Where każemy wyświetlić tylko te pliki, które mają odpwiedni CreationTime i z tym nie ma problemu, ale dodatkowo chcemy mieć określony Extension… a tej właściwości na tym etapie już nie ma.
Co zrobić? Można zmień kolejność – napierw Where a potem Select i będzie ok:
ls -Recurse C:\Users\rafal\Documents | Where-Object -FilterScript {($_.CreationTime -lt (Get-Date).AddDays(-2) -and $_.Extension -eq ".txt")} | Select-Object CreationTime,Name, Extension
Drugie rozwiązanie, to dodać do listy właściwości w poleceniu Select dodatkowej właściwości Extension:
ls -Recurse C:\Users\rafal\Documents | Select-Object CreationTime,Name, Extension | Where-Object -FilterScript {($_.CreationTime -lt (Get-Date).AddDays(-2) -and $_.Extension -eq ".txt")}