You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用PowerShell的Get-ADComputer筛选Windows 7及以上版本计算机

优化Active Directory Windows 7+计算机筛选命令

先帮你梳理下现有命令的可优化点,再给出更简洁高效的解决方案:

  • 多个分散的Where-Object可以合并成一个,提升代码可读性
  • 操作系统匹配的正则语法有误(-match里的*是正则量词,不是通配符,多余了)
  • 可以扩展匹配范围到Windows 11(毕竟你要的是7及以上版本)
  • 更高效的方式是用LDAP筛选器让AD服务器提前过滤数据,减少本地处理压力

方案1:优化后的本地筛选版本

把所有条件合并到一个Where-Object中,修正正则匹配逻辑:

$computers = Get-ADComputer -Properties OperatingSystem | 
    Where-Object {
        # 匹配Windows 7/8/10/11系统
        $_.OperatingSystem -match 'Windows (7|8|10|11)' -and
        # 名称必须包含连字符
        $_.Name -like "*-*" -and
        # 排除指定前缀/后缀的计算机名称
        $_.Name -notlike "V7-*" -and
        $_.Name -notlike "*-NONE" -and
        $_.Name -notlike "*-ONCALL" -and
        $_.Name -notlike "*-BLACKBAUD"
    }

方案2:更高效的LDAP筛选版本(推荐)

利用Get-ADComputer-LDAPFilter参数,让AD服务器直接返回符合条件的计算机,大幅减少网络传输和本地处理的开销:

# 构建LDAP筛选规则,所有条件在AD服务器端生效
$ldapFilter = @"
(&
    (|
        (operatingSystem=Windows 7*)
        (operatingSystem=Windows 8*)
        (operatingSystem=Windows 10*)
        (operatingSystem=Windows 11*)
    )
    (name=*-*)
    (!(name=V7-*))
    (!(name=*-NONE))
    (!(name=*-ONCALL))
    (!(name=*-BLACKBAUD))
)
"@

$computers = Get-ADComputer -Properties OperatingSystem -LDAPFilter $ldapFilter

额外说明

  • 如果你的环境需要包含Windows Server系统(比如Server 2008 R2及以上,基于Windows 7内核),可以在LDAP筛选的操作系统条件里添加(operatingSystem=Windows Server 2008 R2*)(operatingSystem=Windows Server 2012*)等对应条目
  • 大环境下LDAP筛选的性能优势非常明显,避免了先拉取全量计算机再本地过滤的冗余操作

内容的提问来源于stack exchange,提问作者Our Man in Bananas

火山引擎 最新活动