#powershell #where-clause
#powershell #where-предложение
Вопрос:
это может быть очень просто для большинства программистов Powershell, но я совершенно новичок в powershell и расстраиваюсь из-за простого запроса Where-Object.
Я собираю csv из папки:
$files = Get-ChildItem $homedesktoptest*.csv -Recurse
Итак, результат выглядит следующим образом:
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 01.09.2020 11:38 16 a.csv
-a---- 01.09.2020 11:38 10 b.csv
-a---- 31.08.2020 13:39 10 c.csv
-a---- 01.09.2020 11:38 14 d.csv
-a---- 31.08.2020 13:39 14 e.csv
-a---- 31.08.2020 13:38 16 f.csv
-a---- 31.08.2020 13:40 17 g.csv
И так далее .. пока все хорошо. Но теперь мне нужны только файлы .csv, соответствующие текущей дате. Итак, для моего понимания я должен сделать:
$date = $(get-date)
$files2 = $files | Where-Object {($_.LastWriteTime -eq $date)}
Но результат в переменной files2 пуст. Я не знаю, почему:(
Ответ №1:
Несмотря на то, что Powershell будет представлять LastWriteTime
как строку при записи в host, LastWriteTime
на самом деле имеет тип DateTime
.
$files = Get-ChildItem $homedesktoptest*.csv -Recurse
$files.LastWriteTime[0].GetType()
Это означает, что, в свою очередь, ваше предложение where гласит «Получить все файлы, где LastWriteTime равно текущему времени», где текущее время — это точный момент, когда вы запустили Get-Date. Очевидно, что это всегда ничего не даст, если вам не случится записать файл в тот же самый момент, или поиграть с вашим системным временем, или в каком-либо другом крайнем случае.
Чтобы исправить это, получите объект DateTime и установите время на начало дня, вот так:
$date = (Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0)
Затем выполните поиск файлов, в которых значение LastWriteTime
больше этого значения.
$files2 = $files | Where-Object {($_.LastWriteTime -gt $date)}
Полный сценарий должен выглядеть следующим образом:
$date = (Get-Date -Hour 0 -Minute 0 -Second 0 -Millisecond 0)
$files = Get-ChildItem $homedesktoptest*.csv -Recurse
$files2 = $files | Where-Object {$_.LastWriteTime -gt $date}
$files2
Комментарии:
1. Большое вам спасибо. Итак, я был уже близок, но все же пока.. Спасибо за объяснение. Теперь я знаю, как немного лучше обрабатывать get-date 🙂