поэтому у меня есть файл CSV с 5 заголовками: имя, дата сбора, местоположение, оборудование, заметки, менеджер.
Теперь все даты моей коллекции указаны в британском формате, поэтому ДД/ММ/ГГГГ. Я хочу только импортировать данные из CSV с датами сбора, которые в будущем на 7 дней или меньше. Итак, сегодня 17/08, поэтому я хотел бы получить только данные из CSV, датированные периодом с 17/08 по 24/08.
Хотя Powershell обрабатывает объекты даты и времени в британском формате, если вы скажете об этом, я, похоже, не могу затем манипулировать датой, чтобы добавить 7 дней.
Вот мой текущий код:
$today = Get-Date
$thisWeek = $today.AddDays(7)
$thisWeekString = $thisWeek.ToString()
$dateParts = $thisweekString -split " "
$weekFinal = $dateParts[0]
$import = Import-Csv @("\\location\EmailCSV.csv") | Where-Object {$_.collectionDate -lt $weekFinal}
Powershell правильно добавляет 7 дней к дате и времени, чтобы сделать его 24/08, а затем при преобразовании его в строку и удалении из него времени он правильно устанавливает переменную как 24/08/2018. Но когда я затем иду сравнивать их в командлете Import, он просто возвращает все данные в CSV, а не даты меньше 24/08.
Я также знаю, что Powershell может сравнить их, потому что, если я создам отдельную переменную $otherDate с 24/08/2018 в ней, а затем создам оператор if, который проверяет, больше или меньше $weekFinal, чем $otherDate, он правильно выполняет оператор когда правда.
Я пробовал использовать как Where, так и Where-Object в командлете Import-Csv, но оба вернули одинаковые результаты.
Как заставить Powershell правильно сравнивать $_.collectionDate и $weekFinal для фильтрации импортированных данных из CSV?
$weekFinal
и ваши$_
будут строками. Сравнение строк, являющихся датами, требует, чтобы оба значения были известными типами, сопоставимыми, поэтому преобразование в[datetime]
может быть самым простым выходом. Ниже я добавлю ответ, который, кажется, подходит, когда я смоделировал CSV, как я полагаю, ваш. - person gravity   schedule 17.08.2018