You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本优化:消除AD用户MemberOf中VPN组重复显示问题

解决PowerShell脚本中VPN组重复显示的问题

优化后的完整脚本

# 仅执行一次AD查询,获取用户所有组信息
$user = Get-ADUser $sam -Properties MemberOf
# 统一提取所有组名,避免重复拆分DN
$allGroups = $user.MemberOf | ForEach-Object { $_.Split(",")[0].Split("=")[1] }

# 显示VPN安全组
Write-Output "`nVPN安全组"
Write-Output "-------------------"
$vpnGroups = $allGroups | Where-Object { $_ -imatch 'Azure' }
$vpnGroups | ForEach-Object { $_ }
Write-Output "`n共找到 $($vpnGroups.Count) 个VPN安全组"

# 显示排除VPN组后的其他安全组
Write-Output "`n其他安全组"
Write-Output "---------------"
$otherGroups = $allGroups | Where-Object { $_ -notin $vpnGroups }
$otherGroups | ForEach-Object { $_ }

核心优化点

  • 减少AD查询:只调用一次Get-ADUser,避免重复访问Active Directory,提升脚本效率
  • 统一组名提取:在第一步就把所有组的DN转换成组名,避免后续重复执行字符串拆分操作
  • 消除冗余:用-notin运算符从所有组中排除已筛选出的VPN组,确保其他组列表无重复内容
  • 简化逻辑:拆分VPN组和其他组的逻辑清晰分离,便于后续维护

原问题根源

  1. 原脚本两次调用Get-ADUser做重复查询,属于不必要的性能浪费
  2. 第二部分脚本未对VPN组做过滤,导致已在VPN列表中展示的组再次出现在其他组结果里

内容的提问来源于stack exchange,提问作者kila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:10:28