#powershell #multiple-monitors #get-wmiobject
#powershell #несколько мониторов #получить-wmiobject
Вопрос:
Вот код, который отображает информацию о мониторе, подключенном к моему компьютеру, который работает нормально.
Get-WmiObject -Namespace rootwmi -Class WmiMonitorBasicDisplayParams |
select @{ N="Computer"; E={$_.__SERVER} }, InstanceName,
@{ N="Horizonal"; E={[System.Math]::Round(($_.MaxHorizontalImageSize/2.54), 2)} },
@{ N="Vertical"; E={[System.Math]::Round(($_.MaxVerticalImageSize/2.54), 2)} },
@{N="Size"; E={[System.Math]::Round(([System.Math]::Sqrt([System.Math]::Pow($_.MaxHorizontalImageSize, 2) [System.Math]::Pow($_.MaxVerticalImageSize, 2))/2.54),2)} },
@{N="Ratio";E={[System.Math]::Round(($_.MaxHorizontalImageSize)/($_.MaxVerticalImageSize),2)} }
Что мне нужно, так это разделить вывод на монитор 1, монитор 2 и монитор 3 в зависимости от количества подключенных мониторов.
Текущий код выведет следующее:
Computer : HOME-HP
InstanceName : DISPLAYHWP31834amp;1badc1afamp;0amp;UID200195_0
Horizonal : 18.9
Vertical : 10.63
Size : 21.68
Ratio : 1.78
Computer : HOME-HP
InstanceName : DISPLAYHPN33944amp;1badc1afamp;0amp;UID224795_0
Horizonal : 20.87
Vertical : 11.81
Size : 23.98
Ratio : 1.77
Но я хочу, чтобы это было ниже
Computer : HOME-HP
Monitor 1 InstanceName : DISPLAYHWP31834amp;1badc1afamp;0amp;UID200195_0
Monitor 1 Horizonal : 18.9
Monitor 1 Vertical : 10.63
Monitor 1 Size : 21.68
Monitor 1 Ratio : 1.78
Computer : HOME-HP
Monitor 2 InstanceName : DISPLAYHPN33944amp;1badc1afamp;0amp;UID224795_0
Monitor 2 Horizonal : 20.87
Monitor 2 Vertical : 11.81
Monitor 2 Size : 23.98
Monitor 2 Ratio : 1.77
Ответ №1:
Простое решение — выполнить итерацию по массиву и отформатировать вывод:
$Monitors = Get-WmiObject -Namespace rootwmi -Class WmiMonitorBasicDisplayParams
$Count = 0
ForEach($Monitor in $Monitors){
$Count = 1
$Monitor | select @{ N="Computer"; E={$_.__SERVER} }, `
@{N="Monitor $Count InstanceName"; E={$_.InstanceName}},`
@{N="Monitor $Count Horizonal"; E={[System.Math]::Round(($_.MaxHorizontalImageSize/2.54), 2)} }, `
@{N="Monitor $Count Vertical"; E={[System.Math]::Round(($_.MaxVerticalImageSize/2.54), 2)} },
@{N="Monitor $Count Size"; E={[System.Math]::Round(([System.Math]::Sqrt([System.Math]::Pow($_.MaxHorizontalImageSize, 2) [System.Math]::Pow($_.MaxVerticalImageSize, 2))/2.54),2)} },`
@{N="Monitor $Count Ratio";E={[System.Math]::Round(($_.MaxHorizontalImageSize)/($_.MaxVerticalImageSize),2)} }
}
Редактировать:
Чтобы добавить неделю изготовления и серийный номер, необходимо объединить информацию внутри цикла for:
$Monitors = Get-WmiObject -Namespace rootwmi -Class WmiMonitorBasicDisplayParams
$MonitorIDs = Get-WmiObject -Namespace rootwmi -Class WmiMonitorID
$Count = 0
ForEach($Monitor in $Monitors){
$Count = 1
$MonitorId = ($MonitorIDs | ?{$_.InstanceName -eq $Monitor.InstanceName})
$Monitor | select @{ N="Computer"; E={$_.__SERVER} }, `
@{N="Monitor $Count InstanceName"; E={$_.InstanceName}},`
@{N="Monitor $Count Horizonal"; E={[System.Math]::Round(($_.MaxHorizontalImageSize/2.54), 2)} }, `
@{N="Monitor $Count Vertical"; E={[System.Math]::Round(($_.MaxVerticalImageSize/2.54), 2)} },
@{N="Monitor $Count Size"; E={[System.Math]::Round(([System.Math]::Sqrt([System.Math]::Pow($_.MaxHorizontalImageSize, 2) [System.Math]::Pow($_.MaxVerticalImageSize, 2))/2.54),2)} },`
@{N="Monitor $Count Ratio";E={[System.Math]::Round(($_.MaxHorizontalImageSize)/($_.MaxVerticalImageSize),2)} },`
@{N="Monitor $Count WeekOfManufacture"; E={$MonitorId.WeekOfManufacture}},`
@{N="Monitor $Count SerialNumberID"; E={$MonitorId.SerialNumberID}},`
@{N="Monitor $Count SerialNumber"; E={[System.Text.Encoding]::ASCII.GetString($MonitorId.SerialNumberID)}}
}
Комментарии:
1. Спасибо. Это сработало именно так, как я хочу. У меня есть еще один вопрос. Я также хотел бы добавить неделю изготовления и серийный номер к выводу, который использует другой класс. learn.microsoft.com/en-us/windows/desktop/wmicoreprov /…
2. Я отредактировал код, чтобы добавить неделю изготовления и серийный номер.
3. Спасибо! Ценю вашу помощь. 5 звезд.