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

PowerShell脚本优化求助:从AD筛选合规随机用户

解决AD随机抽查员工流量时的无效账户筛选问题

我懂你要做季度员工网络流量抽查的需求,之前的PowerShell脚本虽然能从指定OU随机选10个用户,但结果里混了禁用账户、无邮箱的PRN员工这类无效数据,确实头疼。下面给你梳理问题点,再讲优化后的解决方案:

初始脚本的局限

原来的脚本只是简单拉取指定OU的所有用户再随机抽取,完全没做有效性过滤:

Get-ADUser -SearchBase "ou=ouname,ou=ouname,dc=domainname,dc=suffix" -Filter * | Select-Object -Property Name | Sort-Object{Get-Random} | select -First 10

存在的问题:

  • 没有排除已禁用的AD账户
  • 没过滤无邮箱地址的用户(这类员工通常不需要纳入流量抽查范围)
  • 未筛选活跃用户,会包含长期未登录、密码超过90天没修改的PRN员工

优化后的精准筛选脚本

我们添加三个核心筛选条件,同时优化输出字段让结果更实用:

$DateFrom = (get-Date).AddDays(-90)
Get-ADUser -Properties passwordlastset, mail -Filter {enabled -eq $True} -SearchBase "ou=ouname,dc=domainname,dc=suffix" | where { $_.passwordlastset -gt $DateFrom -and $_.mail -ne $null } | Sort-Object {Get-Random} | select name, sAMAccountName -First 10

(注:我把原脚本的-Properties *改成了-Properties passwordlastset, mail,这样只拉取需要的属性,能大幅提升脚本运行效率,避免不必要的数据传输)

脚本各部分作用解析:

  • $DateFrom = (get-Date).AddDays(-90):计算出90天前的日期,作为筛选活跃用户的时间阈值
  • -Filter {enabled -eq $True}:在AD查询阶段直接过滤禁用账户,比后续用Where-Object过滤更高效
  • -Properties passwordlastset, mail:指定拉取我们需要的两个属性(密码最后修改时间、邮箱地址)
  • Where-Object { $_.passwordlastset -gt $DateFrom -and $_.mail -ne $null }:进一步筛选出近90天修改过密码、且拥有有效邮箱的活跃用户
  • Sort-Object {Get-Random}:对符合条件的用户列表进行随机排序
  • Select-Object name, sAMAccountName -First 10:抽取前10个随机用户,同时输出用户名和SAM账户名(比只输出Name更方便后续对接系统操作)

这样跑出来的结果就全是符合要求的有效员工账户啦,完全适配你的季度抽查需求。

内容的提问来源于stack exchange,提问作者Run.Bat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:17:41