Вы приводите даты к строкам, и это дает разные результаты в консоли ISE и PowerShell.
Посмотрите на ваш from073.rar
файл:
- Дата ISE: 10/05 / 2015
- Дата консоли PowerShell: 5/10 / 2015
Вам лучше избавиться .ToShortDateString()
и сравнить даты напрямую. Смотрите этот вопрос: Powershell: Сравнение дат
Несмотря на то, что строки представлены по-разному в ISE и в консоли PowerShell, сравнение между яблоками и яблоками, поэтому результаты должны быть одинаковыми.
Да, но ваши "яблоки" в данном случае - это коды символов, которые, я уверен, не то, что вы хотели сравнить. Пример:
'a' -gt 'b'
этоfalse
, потому что характер кодa
ниже символов кодаb
.'ac' -gt 'ab'
этоtrue
, потому что характер кодa
одинаков для обеих строк, но следующий код символа левой строки (c
) больше, чем второй код символа правой строки (b
).
Итак, когда вы запускаете свой код в ISE, который использует dd/mm/yyyy
формат, ваш код просто сравнивает первую dd
часть и игнорирует mm/yyyy
, потому что это происходит одинаково. И вы получаете правильные результаты по чистой случайности. В консоли PowerShell формат даты есть mm/dd/yyyy
, поэтому ваш код ломается как следует.
Это моя новая строка:
Get-ChildItem -filter "*.rar" | Foreach-Object { if((get-date $_.lastwritetime -Format d) -lt (Get-Date -Format d )) { " " -f $_.name, (get-date $_.lastwritetime -Format d) } }
Но сравнение не работает.
Здесь вы идете снова: вы используете -Format d
, который преобразует объект даты в строку. И вы уже знаете, к чему это приводит.
Если вы хотите получить файлы старше одного дня, ваш код должен выглядеть следующим образом (обратите внимание, как сравниваются два объекта DateTime напрямую, без учета строк):
Get-ChildItem -Filter '*.rar' | Foreach-Object { if($_.LastWriteTime -lt (Get-Date).AddDays(-1)) { ' ' -f $_.Name, $_.LastWriteTime } }