Powershell:从WMI脚本读取计算机监视器大小,然后写入列表

时间:2015-08-05 11:19:57

标签: powershell wmi

我需要获取Monitor分辨率大小的列表。我找到了这个脚本[这里]。 (http://poshcode.org/4688)。它可以在一台计算机上正常运行。但我想修改此脚本以导入客户端列表,然后导出csv列表,包括导入列表的每个客户端上可能的分辨率大小。

param($ComputerName = 'COMPUTERNAME')

$output = [PSCustomObject]@{ComputerName = $ComputerName;MonitorSizes=''}

$oWmi = Get-WmiObject -Namespace 'rootwmi' -ComputerName $ComputerName
-Query "SELECT MaxHorizontalImageSize,MaxVerticalImageSize FROM WmiMonitorBasicDisplayParams"; $sizes = @(); if ($oWmi.Count -gt 1) {
    foreach ($i in $oWmi) {
        $x = [System.Math]::Pow($i.MaxHorizontalImageSize/2.54,2)
        $y = [System.Math]::Pow($i.MaxVerticalImageSize/2.54,2)
        $sizes += [System.Math]::Round([System.Math]::Sqrt($x + $y),0)
    }##endforeach } else {
    $x = [System.Math]::Pow($oWmi.MaxHorizontalImageSize/2.54,2)
    $y = [System.Math]::Pow($oWmi.MaxVerticalImageSize/2.54,2)
    $sizes += [System.Math]::Round([System.Math]::Sqrt($x + $y),0) }##endif

$output.MonitorSizes = $sizes

$output

示例结果:

ComputerName MonitorSizes
------------ ------------
COMPUTERNAME {15,24}

ComputerName MonitorSizes
------------ ------------
PC1 {19}

1 个答案:

答案 0 :(得分:1)

这在PowerShell中非常简单。只需将代码包装在foreach循环中并迭代一个或多个计算机名称:

param(
    [string[]]$ComputerName
)

foreach($Computer in $ComputerName){

    $oWmi = Get-WmiObject -Namespace 'root\wmi' -ComputerName $Computer -Query "SELECT MaxHorizontalImageSize,MaxVerticalImageSize FROM WmiMonitorBasicDisplayParams"; 
    $sizes = @() 
    if ($oWmi.Count -gt 1) 
    {
        foreach ($i in $oWmi) {
            $x = [System.Math]::Pow($i.MaxHorizontalImageSize/2.54,2)
            $y = [System.Math]::Pow($i.MaxVerticalImageSize/2.54,2)
            $sizes += [System.Math]::Round([System.Math]::Sqrt($x + $y),0)
        }##endforeach
    }else{
        $x = [System.Math]::Pow($oWmi.MaxHorizontalImageSize/2.54,2)
        $y = [System.Math]::Pow($oWmi.MaxVerticalImageSize/2.54,2)
        $sizes += [System.Math]::Round([System.Math]::Sqrt($x + $y),0) 
    }##endif

    New-Object PSCustomObject -Property @{ComputerName = $Computer; MonitorSizes = $sizes}
}

假设您将其保存到名为GetMonitorSizes.ps1的文件中,您可以像这样使用它:

$Names = "server1","server2","server3"
.\GetMonitorSizes.ps1 -ComputerName $Names

或者如果每行都有一个带有计算机名称的文件:

$Names = Get-Content '\\server\list.txt'
.\GetMonitorSizes.ps1 -ComputerName $Names

您还可以使用Export-Csv cmdlet

将生成的对象通过管道传输到CSV文件
.\GetMonitorSizes.ps1 -ComputerName $Names | Export-Csv .\screensizes.csv -NoTypeInformation