Get-Date возвращает в Powershell дату и время. С помощью этого командлета мы можем получить нужное нам значение формата Datetime, что поможет нам выполнять, например, сравнение дат.
Т.е. выполнение команды без ключей вернет нам текущую дату в powershell:
Get-Date
Если нам нужно получить какую-то другую дату формата Datetime, то надо установить ее с помощью этого команды:
Get-Date -Year 2030 -Month 8 -Day 9 -Hour 10 -Minute 11 -Second 12
Если мы не установим какое-то значение, например Year (год), то он возьмется текущий.
Как минусовать день в Powershell Get-Date
Получим свойства и методы этого объекта:
Get-Date | Get-Member
Все методы - это то что мы можем сделать с датой. Для примера получим дату минус один день от сегодняшнего числа:
(Get-Date).AddDays(-1)
Или прибавить дни через AddDays:
$result = (Get-Date).AddDays(365)
Если мы прибавим, допустим, часы больше чем в сутках, то у нас изменится и день:
$result = (Get-Date).AddHours(30)
Таким же образом мы можем добавлять и убирать такие элементы дат:
- AddDays - дни
- AddHours - часы
- AddMilliseconds - миллисекунды
- AddMinutes - минуты
- AddMonths - месяца
- AddSeconds - секунды
- AddYears - года
Преобразование в Powershell даты в строку и из строки
Так же как и во всех других языках мы можем преобразовать тип даты. Для того что бы преобразовать в строку у нас есть несколько методов:
- ToLongDateString - строка с днем недели и именем месяца
- ToLongTimeString - показывает часы, минуты и время
- ToShortDateString - возвращает только дату
- ToShortTimeString - вернет только часы и минуты
- ToString - вернут полную дату и время
Каждый из этих методов вызывается так:
(Get-Date).ToLongDateString()
Или на примере какой-то другой даты с переменной:
$yesterday = Get-Date -Month 6 -Year 2225
$yesterday.ToLongDateString()
Для того что бы получить дату из строки нужно использовать ключ date:
Get-Date -Date "1/1/2019"
Если мы не установим время или дату, то значение возьмется текущее:
Get-Date -Date "10:15"
Нужно учитывать, что формат даты в таком варианте исполнения будет тем, который установлен в системных настройках. В моем случае американский и поэтому идет месяц, день, год. Если стоит русский будет день, месяц и год. Увидеть эту настройку можно так:
Get-WinSystemLocale
Получение частей даты и времени через ключ Format в Powershell Get-Date
Возможно получить только день недели или час от времени и для этого нужно использовать Format или один из методов. Так я получу год:
Get-Date -Format "yyyy"
Или аналогично, но уже используя свойство:
(Get-Date).year
Используя Format всегда возвращается тип данных string, а не DateTime.
У нас есть еще множество свойств, кроме Year, которые мы можем получать:
Выведем день недели ( DayOfWeek):
(Get-Date).DayOfWeek
Обратите внимание, что не всегда возвращаемый объект типа DateTime. Он может быть и численным (int) или строковым, в случае с Format.
На примере Format есть много спецификаторов:
- dddd - день недели в виде имени
- MM - номер месяца
- dd - день месяца
- yyyy - год
- HH:mm - часы и минуты
- K - Часовой пояс
- ss - секунды
Так мы выведем дату формата часы, минуты, день, месяц и год:
Get-Date -Format "HH:mm dd/MM/yyyy"
Обращаете внимание на регистр иначе получим другие значение.
Сравнение дат в Powershell
Выполнять сравнение дат можно в случае, если значение типа DateTime. Какого типа значение мы можем посмотреть двумя способами. При просмотра свойства объекта мы увидим какого типа он возвращает значение:
Get-ChildItem | Get-Member | Where-Object -Property Definition -Like "*datetime*"
Либо у получить это значение так:
(Get-Date).GetType()
Для примера сравним в powershell даты файла. На картинке выше видно, что у каждого файла есть свойство CreationTime формата DateTime. Сравним какие файлы были созданы за последние 15 дней:
Get-ChildItem -Path ".\Folder2\" | where -Property CreationTime -GT (Get-Date).AddDays(-15)
GT - говорит о том, что мы ищем значения только больше чем справа. Обо всех операторах сравнения мы говорили тут.
Мы можем сравнивать и только по дню месяца, но в случае ниже день месяца будет числом, а не датой:
Get-ChildItem -Path C:\Folder2\ | Where-Object {$_.CreationTime.Day -eq (Get-Date).Day}
Командлет Get-ChildItem мы рассматривали тут.
Другие примеры с Powershell Get-Date
Один из интересных примеров в работе с датой это командлет New-TimeSpan, который вернет время работы сервиса или любого другого объекта, если передать ему время. Для примера так он вернет значение в минутах, секундах с установленной даты:
New-TimeSpan -Start (Get-Date).AddDays(-15)
Применение этому можно найти, например, открытым пользователями через SMB файлам или очень долго запущенным процессам.
На примере процессов:
...
Подписывайтесь на наш Telegram канал
Теги: #powershell