Показать инвентарь в Powershell (Справка) - PullRequest
1 голос
/ 16 октября 2019

Я работаю в сценарии, чтобы создать отчет об инвентаризации в моей работе. Большая часть скрипта работает нормально, но у меня возникают проблемы с правильным размером монитора в дюймах.

Как я могу получить эти значения в моем текущем скрипте?

$ManufacturerHash = @{
"AAC" = "AcerView";
"ACR" = "Acer";
"ACI" = " Asus";
"APP" = "Apple Computer";
"AUO" = "Asus";
"CMO" = "Acer";
"CPQ" = "Compaq";
"DEL" = "Dell";
"HWP" = "HP";
"LEN" = "Lenovo";
"SAN" = "Samsung";
"SAM" = "Samsung";
"SNY" = "Sony";
"SRC" = "Shamrock";
"SUN" = "Sun Microsystems";
"SEC" = "Hewlett-Packard";
"TAT" = "Tatung";
"TOS" = "Toshiba";
"TSB" = "Toshiba";
"VSC" = "ViewSonic";
"UNK" = "Unknown";
"_YV" = "Fujitsu";
}

Write-Host "##Monitors##"  -ForegroundColor Green
$displayDevices = Get-WmiObject -Namespace root\WMI -Class WMIMonitorID
$DisplayParams = Get-WmiObject -Namespace root\WMI -Class WmiMonitorBasicDisplayParams

foreach ($displayDevice in $displayDevices) {
        If ([System.Text.Encoding]::ASCII.GetString($displayDevice.UserFriendlyName) -ne $null) {
            $displayModel = ([System.Text.Encoding]::ASCII.GetString($displayDevice.UserFriendlyName)).Replace("$([char]0x0000)","")
        } else {
            $displayModel = $null
        }

    $displaySerial = ([System.Text.Encoding]::ASCII.GetString($displayDevice.SerialNumberID)).Replace("$([char]0x0000)","")
    $displayManufacturer = ([System.Text.Encoding]::ASCII.GetString($displayDevice.ManufacturerName)).Replace("$([char]0x0000)","")

    $displayManufacturerFriendly = $ManufacturerHash.$displayManufacturer 

        If ($displayManufacturerFriendly -eq $null) {
            $displayManufacturerFriendly = $displayManufacturer
        }

   $MaxHorizontalImageSize = [System.Math]::Pow($monitor.MaxHorizontalImageSize, 2)
   $MaxVerticalImageSize = [System.Math]::Pow($monitor.MaxVerticalImageSize, 2)
   $inches= [System.Math]::Round(([System.Math]::Sqrt($MaxHorizontalImageSize + $MaxVerticalImageSize)/2.54))

   Write-Host "Manufacturer:"$displayManufacturerFriendly 
   Write-Host "Model:"$displayModel
   Write-Host "Serial:"$displaySerial
   Write-Host "Size: $inches inches"
   Write-Host ""

1 Ответ

0 голосов
/ 17 октября 2019

Как уже упоминалось в комментариях, вы все равно никогда не определяете $monitor.

Вы можете получить соответствующий монитор, сопоставив свойство InstanceName обоих классов:

$monitor = $monitors.Where({$_.InstanceName -eq $display.InstanceName})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...