Get-Date - примеры работы с датой в Powershell


22 июля 2019


Get-Date - примеры работы с датой в Powershell

 

Get-Date возвращает в Powershell дату и время.  С помощью этого командлета мы можем получить нужное нам значение формата Datetime, что поможет нам выполнять, например, сравнение дат.

Т.е. выполнение команды без ключей вернет нам текущую дату в powershell:

Get-Date

Время и дата в Powershell Get-Date

Если нам нужно получить какую-то другую дату формата Datetime, то надо установить ее с помощью этого команды:

Get-Date -Year 2030 -Month 8 -Day 9 -Hour 10 -Minute 11 -Second 12

Powershell получение даты

Если мы не установим какое-то значение, например Year (год), то он возьмется текущий.

Навигация по статье:
Прибавление у убавление в дате
Преобразование в строку и из строки
Форматирование даты
Сравнение дат
Другие примеры работ

 

Как минусовать день в Powershell Get-Date

Получим свойства и методы этого объекта:

Get-Date | Get-Member

Get-Date свойства и методы 

Все методы - это то что мы можем сделать с датой. Для примера получим дату минус один день от сегодняшнего числа:

(Get-Date).AddDays(-1)

Или прибавить дни через AddDays:

$result = (Get-Date).AddDays(365)

Если мы прибавим, допустим, часы больше чем в сутках, то у нас изменится и день:

$result = (Get-Date).AddHours(30)

Таким же образом мы можем добавлять и убирать такие элементы дат:

  • AddDays - дни
  • AddHours - часы
  • AddMilliseconds - миллисекунды
  • AddMinutes - минуты
  • AddMonths - месяца
  • AddSeconds - секунды
  • AddYears - года

 

Преобразование в Powershell даты в строку и из строки

Так же как и во всех других языках мы можем преобразовать тип даты. Для того что бы преобразовать в строку у нас есть несколько методов:

Get-Date string formats преобразование в строку

  • ToLongDateString - строка с днем недели и именем месяца
  • ToLongTimeString - показывает часы, минуты и время
  • ToShortDateString - возвращает только дату
  • ToShortTimeString - вернет только часы и минуты
  • ToString - вернут полную дату и время

Каждый из этих методов вызывается так:

(Get-Date).ToLongDateString()

Или на примере какой-то другой даты с переменной:

$yesterday = Get-Date -Month 6 -Year 2225
$yesterday.ToLongDateString()

Powershell Get-Date в строку

Для того что бы получить дату из строки  нужно использовать ключ date:

Get-Date -Date "1/1/2019"

Если мы не установим время или дату, то значение возьмется текущее:

Get-Date -Date "10:15"

Powershell Get-Date to string дата в строку

Нужно учитывать, что формат даты в таком варианте исполнения будет тем, который установлен в системных настройках. В моем случае американский и поэтому идет месяц, день, год. Если стоит русский будет день, месяц и год. Увидеть эту настройку можно так:

Get-WinSystemLocale

 

Получение частей даты и времени через ключ Format в Powershell Get-Date

Возможно получить только день недели или час от времени и для этого нужно использовать Format или один из методов. Так я получу год:

Get-Date -Format "yyyy"

Или аналогично, но уже используя свойство:

(Get-Date).year

Используя Format всегда возвращается тип данных string, а не DateTime.

У нас есть еще множество свойств, кроме Year, которые мы можем получать:

Powershell Format date форматирование даты

Выведем день недели ( 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*"

Время создания файла powershell Get-ChildItem

Либо у получить это значение так:

(Get-Date).GetType()

посмотреть тип данных Powershell

Для примера сравним в 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)

New-TimeSpan Get-Date

Применение этому можно найти, например, открытым пользователями через SMB файлам или очень долго запущенным процессам. 

На примере процессов:

New-TimeSpan Get-Process

...

Теги: #powershell


Популярные тэги
Каналы
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.