sergey vasin

The IT blog

Использование методов ConvertToDateTime и ConvertFromDateTime объектов WMI

leave a comment »

В продолжение предыдущей темы о конвертации значений даты и времени, в этот раз поговорим об объектах WMI.

Для получения экземпляров объектов WMI нам доступны несколько способов. Один из них — это использование командлетов модуля CIMCmdlets. Например, так:

$cim = Get-CimInstance -ClassName Win32_OperatingSystem

Теперь, если мы посмотрим на значение свойства LastBootUpTime, мы увидим, что оно вполне себе похоже на объект DateTime.

$cim.LastBootUpTime

Friday, September 8, 2017 1:02:20 PM

Чтобы окончательно отбросить все сомнения, мы можем узнать тип данных этого значения при помощи метода GetType или командлета Get-Member.

$cim.LastBootUpTime.GetType().FullName

System.DateTime


$cim.LastBootUpTime | Get-Member | Select-Object -Property TypeName -Unique

TypeName
--------
System.DateTime

Однако же, если вместо командлетов CIM мы по каким-то причинам решим воспользоваться командлетами WMI (Windows XP?), то значение этого свойства будет выглядеть несколько по-другому.

$wmi = Get-WmiObject -Class Win32_OperatingSystem

$wmi.LastBootUpTime

20170908130220.494386+180

Кроме того, воспользовавшись любым из вышеприведенных способов определения типа данных этого значения, мы увидим, что это объект System.String.

$wmi.LastBootUpTime.GetType().FullName

System.String


$wmi.LastBootUpTime | Get-Member | Select-Object -Property TypeName -Unique

TypeName
--------
System.String

Для того, чтобы конвертировать его в объект DateTime, раньше нам пришлось бы действовать самостоятельно. Например, так:

$initialValue = $wmi.LastBootUpTime.Substring($wmi.LastBootUpTime.IndexOfAny('+,-'))
$resultValue = $initialValue.Substring(0,1) + ($initialValue.Substring(1) / 60)
$string = $wmi.LastBootUpTime.Replace($initialValue, $resultValue)
$formatString = 'yyyyMMddHHmmss.ffffffz'

[datetime]::ParseExact($string, $formatString, [System.Globalization.CultureInfo]'ru-ru')

Friday, September 8, 2017 1:02:20 PM

Однако, с некоторого времени объекты WMI в PowerShell содержат два дополнительных метода: ConvertToDateTime и ConvertFromDateTime, реализуемых при помощи статических методов класса System.Management.ManagementDateTimeConverter.

Первый из них, ConvertToDateTime, предназначен для конвертации возвращаемых командлетом Get-WMIObject значений даты и времени в объекты типа System.DateTime.

$wmi.ConvertToDateTime($wmi.LastBootUpTime)

Friday, September 8, 2017 1:02:20 PM

Того же самого результата мы можем добиться, обратившись к классу System.Management.ManagementDateTimeConverter напрямую:

[System.Management.ManagementDateTimeConverter]::ToDateTime($wmi.LastBootUpTime)

Friday, September 8, 2017 1:02:20 PM

Что касается второго метода, ConvertFromDateTime, результат его выполнения прямо противоположен:

$date = Get-Date

$date

Friday, September 8, 2017 1:46:41 PM

$wmi.ConvertFromDateTime($date)

20170908134641.224432+180

Или же так:

[System.Management.ManagementDateTimeConverter]::ToDmtfDateTime($date)

20170908134641.224432+180

Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Сентябрь 8, 2017 в 14:00

Опубликовано в PowerShell, WMI

Tagged with

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s