Расшифровка даты в 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"
}