Невозможно отформатировать DHCPLeaseObtained из Win32_NetworkAdapterConfiguration с DateTime - PullRequest
0 голосов
/ 02 ноября 2018

Возникли проблемы с поиском хорошего решения с сохранением данных из Win32_NetworkAdapterConfiguration в формате DateTime. Это начинает раздражать.

Иногда я получаю сообщение об ошибке «невозможно связать». Иногда говорится, что нельзя конвертировать.

Это то, что хранится в DHCPLeaseObtained. Веб-сайт Microsoft для класса говорит, что это уже DateTime, но Get-Member и .GetType() говорят, что это String

19700101001541.000000-300

Я попытался обернуть его в Get-Date до и после работы с подстрокой, но безуспешно. Также попробовал следующее безуспешно

$NewDate = [Datetime]::ParseExact(($Configuration_Data[0].DHCPLeaseObtained), 'MM/dd/yyyy', $null)

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

$Adapter_Data = Get-WmiObject Win32_NetworkAdapter |
    Where-Object {$_.NetConnectionStatus -EQ 2} | 
    Select-Object Index

foreach ($Row in $Adapter_Data) {
    $Configuration_Data = Get-WmiObject Win32_NetworkAdapterConfiguration |
        Where-Object {$_.Index -eq $Row.Index} |
        Select-Object DHCPLeaseObtained    
}

$Configuration_Data[0].DHCPLeaseObtained

$After = (
    $Configuration_Data[0].DHCPLeaseObtained.Substring(0,4) +
    $Configuration_Data[0].DHCPLeaseObtained.Substring(4,2) +
    $Configuration_Data[0].DHCPLeaseObtained.Substring(6,2) +
    $Configuration_Data[0].DHCPLeaseObtained.Substring(8,2) +
    $Configuration_Data[0].DHCPLeaseObtained.Substring(10,2)
)

$After

Буду признателен за любую помощь или идеи относительно более простого решения, чтобы получить его в DateTime.

1 Ответ

0 голосов
/ 02 ноября 2018

Вы уже можете видеть, что формат даты и времени немного странный, «год-месяц-день-час-минута-секунда» .

Самый простой способ конвертировать даты в этом формате - использовать класс Win32_OperatingSystem следующим образом:

$os = Get-WmiObject –Class Win32_OperatingSystem
$os.ConvertToDateTime($Configuration_Data[0].DHCPLeaseObtained)

Итак, ваш полный код:

$Adapter_Data = Get-WmiObject Win32_NetworkAdapter |
    Where-Object {$_.NetConnectionStatus -EQ 2} | 
    Select-Object Index

foreach ($Row in $Adapter_Data) {
    $Configuration_Data = Get-WmiObject Win32_NetworkAdapterConfiguration |
        Where-Object {$_.Index -eq $Row.Index} |
        Select-Object DHCPLeaseObtained    
}

$os = Get-WmiObject –Class Win32_OperatingSystem
$os.ConvertToDateTime($Configuration_Data[0].DHCPLeaseObtained)

По умолчанию будет выведен объект datetime в формате:

01 November 2018 13:30:35

Выходными данными является действительный объект даты и времени:

IsPublic IsSerial Name                                     BaseType                                                                                                                 
-------- -------- ----                                     --------                                                                                                                 
True     True     DateTime                                 System.ValueType  

Ссылка: https://blogs.msdn.microsoft.com/richmac/2011/07/21/wmi-date-formats-powershell-to-the-rescue/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...