Мне нужно получить дату и время удаленного хоста, включая миллисекунды, с помощью WMI.
Следующего недостаточно:
Get-WmiObject Win32_UTCTime -ComputerName MY_REMOTE_HOST
Поскольку миллисекунды НЕ реализованы в классе Win32_CurrentTime, производном от класса Win32_UTCTime:
Milliseconds
Data type: uint32
Access type: Read-only
Not implemented.
This property is inherited from Win32_CurrentTime.
(https://docs.microsoft.com/en-us/previous-versions/windows/desktop/wmitimepprov/win32-currenttime)
Буду признателен за любые другие предложения по получению этой информации с помощью WMI из Powershell или C#.
Попробуйте удаленное взаимодействие PowerShell:
$sess = New-PSSession -Credential (Get-Credential)
$dateTime = Invoke-Command -Session $sess -ScriptBlock { Get-Date -Format "o" }
Чтобы включить удаленное взаимодействие, см. Этот ссылка на сайт.
Надеюсь, это поможет.
WMI-класс win32_operatingsystem содержит свойство с именем LocalDateTime, которое также содержит миллисекунды. Однако вам нужно их преобразовать.
Простой образец:
$OS = Get-WmiObject win32_operatingSystem
$OS.ConvertToDateTime($OS.LocalDateTime)
Результатом является объект DateTime, который также содержит миллисекунды.
Кажется, это работает, но мне интересно - как это возможно, что мы извлекаем время из объекта, который, кажется, не имеет поля времени внутри? Я только что запустил «Get-WmiObject Win32_operatingsystem -ComputerName MY_REMOTE_HOST» и вернул следующие поля: (SystemDirectory, Organization, BuildNumber, RegisteredUser, SerialNumber, Versio n)
По умолчанию многие объекты WMI, которые вы запрашиваете в Powershell, показывают только подмножество свойств (поскольку Powershell имеет множество встроенных «шаблонов» для фильтрации данных). Отправив команду по конвейеру на fl * (fl - это псевдоним для списка форматов), вы можете увидеть их все. Используя Get-Member, вы также можете видеть свойства и типы данных (но не можете видеть значения).
Ответ @ bluuf - это тот, который вы должны использовать, но в качестве более сложной альтернативы вы можете получить текущую дату / время из классов WMI счетчика производительности следующим образом:
$perfTime = Get-CimInstance -Query "Select * FROM Win32_PerfRawData_PerfOS_Processor WHERE Name = '0'"
(Get-Date "01/01/1601").AddTicks($perfTimeime.Timestamp_Sys100NS)
Спасибо, но решение должно быть через WMI