如何通过 powershell 或 cmd 计算屏幕数量

Posted

技术标签:

【中文标题】如何通过 powershell 或 cmd 计算屏幕数量【英文标题】:How to count number of screens via powershell or cmd 【发布时间】:2022-01-03 08:57:04 【问题描述】:

我想统计通过 powershell/cmd 检测到的屏幕数量。

得到以下工作,但我想计算检测为数字的屏幕数量。

@for /F "usebackq tokens=2 delims=: " %i IN (`powershell.exe Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorBasicDisplayParams ^| findstr /r /C:"Active"`) do @echo %i 

假设我连接了 2 个屏幕,这将返回以下内容。有人可以帮我将输出更改为活动屏幕的数量,而不是数字/或计算真实的数量吗?即 = 2

True 
True

【问题讨论】:

您想使用Powershell,还是使用批处理文件?选择一个。 @DanielMann powershell powershell.exe … | findstr /C:"Active" | find /C /V ""? 【参考方案1】:

您已经有了解决方案,只是无缘无故地将批处理语法与 PowerShell 混合。

@(Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorBasicDisplayParams).Length 是一个纯 PowerShell 解决方案。

如果您想将其过滤为仅活动显示,那么@(Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorBasicDisplayParams | where-object $_.Active ).Length

【讨论】:

既然 OP 想要一个 count,那么使用 .Count 属性会更合适吗?您已经在强制 CIM 调用提供一个数组... [grin]【参考方案2】:

如果您打算只使用批处理文件,请使用内部实用程序。

FOR /F "delims=:" %%a in ('wmic /namespace:\\root\wmi  path WmiMonitorBasicDisplayParams  get Active ^|findstr /n "Active"') DO @echo %%a

附: 但是请记住wmic.exe 不再是support。

【讨论】:

【参考方案3】:

我没有代表直接向@Daemon-5 添加评论,但我发现他的代码对我不起作用,因为它只报告连接了一个监视器,而我实际上有 2 个(通过扩展坞连接)。

这是我正在使用的: for /F %%M in ('wmic path Win32_PnPEntity where "Service='monitor' and Status='OK'" get DeviceID /VALUE ^| find /C "="') do (set monitors=%%M)

然后你可以简单地echo %monitors%

【讨论】:

以上是关于如何通过 powershell 或 cmd 计算屏幕数量的主要内容,如果未能解决你的问题,请参考以下文章

如何通过Powershell在域计算机上查询Active Directory而不在客户端计算机上安装RSAT工具

Win10小技巧:如何将在此处打开命令改为CMD或Powershell?

Shell、CMD、PowerShell、Bash

如何通过cmd杀死powershell进程?统一远程应用

使用 cmd.exe 或 PowerShell 或 Python 从 Windows 命名管道中读取

通过管道将 CMD 输出传递给 Powershell [重复]