Я построил это, который работает нормально, для запуска и отображения требуется около 7-9 секунд.
Мне интересно, есть ли более быстрый / оптимальный способ создания этого пользовательского объекта?
Как видите, я хочу получить всю информацию о драйверах от Win32_PNPsigneddriver
, но к этому я добавляю два других свойства из Win32_PNPentity
(configmanagererrorcode
и status
) на основе DeviceID.
Таким образом, конечный объект содержит все драйверы и показывает, есть ли ошибка для устройства, использующего этот драйвер.
$poste = "COMPUTER1234"
$DriversUp = Get-WmiObject -computername $poste Win32_PNPsigneddriver |
Where-Object {$_.DeviceName -ne $null}
$Devices = Get-WmiObject -computername $poste Win32_PNPentity
$DriversDevices = foreach ($driver in $DriversUp) {
$driver |
Select-Object DeviceClass, Manufacturer, DeviceName,
FriendlyName, DriverName, InfName,
@{name='Status';expression={$Devices | Where-Object {$_.DeviceID -eq "$($driver.DeviceID)"} | Select-Object -ExpandProperty status}},
@{name='ConfigManagerErrorCode';expression={$Devices | Where-Object {$_.DeviceID -eq "$($driver.DeviceID)"} | Select-Object -ExpandProperty ConfigManagerErrorCode}},
@{name='DriverDate';expression={[DateTime]::ParseExact(($_.DriverDate).Split('.')[0], "yyyyMMddHHmmss", [System.Globalization.CultureInfo]::InvariantCulture)}},
DriverVersion
}
$DriversDevices |
Sort-Object DeviceClass |
Out-GridView -Title "$poste - Drivers utilisés"
Как я и сказал, все уже отлично работает. Однако мне любопытно узнать, есть ли более быстрый способ!