Расшифровка даты в cim_bioselement, которая ясна в эквиваленте WMI?

В PowerShell, если я сделаю (gwmi win32_bios).releasedate | convertto-json, Я получил "20171221000000.000000+000", что имеет смысл - 21 декабря 2017 года.

Но если я возьму эквивалентный элемент в списке CimInstanceProperties, например,

$a = (Get-CimInstance cim_bioselement).CimInstanceProperties | `
where-object {$_.name -eq 'ReleaseDate'}

а затем осмотреть $a.value, Я получил

Wednesday, December 20, 2017 6:00:00 PM

но делает $a | ConvertTo-Json доходность

{
    "Name":  "ReleaseDate",
    "Value":  "\/Date(1513814400000)\/",
    "CimType":  13,
    "Flags":  "Property, ReadOnly, NotModified",
    "IsValueModified":  false
}

Я предполагаю, что эти две даты как-то эквивалентны, но я не имею непосредственного представления о том, какой формат для значения CIM после jsonification. Я могу взять еще несколько биографических дат с разных машин и начать анализировать, но мне было любопытно, если бы кто-нибудь знал, что это за формат: "с ног на голову".

Причина, по которой я хотел бы понять формат, состоит в том, что это то, что я получаю, если я в общем пытаюсь получить все свойства и jsonify, через

(Get-CimInstance cim_bioselement).CimInstanceProperties | convertto-json

1 ответ

Существует встроенный метод для декодирования CIMDATE:

Get-WmiObject Win32_BIOS -Property ReleaseDate | 
    Select-Object @{n='ReleaseDate';e={$_.ConvertToDateTime($_.ReleaseDate)}}

Однако, если вы не используете PowerShell v1/v2 или не столкнетесь с проблемами, вам следует использовать Get-CimInstance над Get-WmiObject так как он будет делать преобразования для вас и немного чище:

PS> Get-CimInstance Win32_BIOS -Property ReleaseDate | Select-Object ReleaseDate

ReleaseDate
-----------
8/5/2014 8:00:00 PM

Чтобы избежать глупого нестандартного синтаксиса даты JSON от Microsoft, отформатируйте дату в строку в правильном формате ISO 8601:

PS> Get-CimInstance Win32_BIOS -Property ReleaseDate |
    Select-Object @{n='ReleaseDate';e={$_.ReleaseDate.ToString('yyyy-MM-ddTHH:mm:ss.fffZ')}}

ReleaseDate
-----------
2014-08-05T20:00:00.000Z

PS> Get-CimInstance Win32_BIOS -Property ReleaseDate
    | Select-Object @{n = 'ReleaseDate'; e = {$_.ReleaseDate.ToString('yyyy-MM-ddTHH:mm:ss.fffZ')}}
    | ConvertTo-Json
{
    "ReleaseDate":  "2014-08-05T20:00:00.000Z"
}
Другие вопросы по тегам