PowerShell技巧:禁用指定OU用户时如何排除子OU
解决方法:禁用指定OU用户并排除子OU,及定时运行设置
一、直接可用的修改版脚本
你原来的脚本默认会递归搜索指定OU下的所有子树(SearchScope默认值是Subtree),所以连子OU里的用户也一起禁用了。只要添加-SearchScope OneLevel参数,就能只搜索指定OU的直接用户,子OU内的用户不会被选中:
Get-ADUser -Filter * -SearchBase "ou=MainOU, ou=User, ou=Test, dc=local, dc=us" -SearchScope OneLevel | Disable-ADAccount
参数说明
-SearchScope OneLevel:限定搜索范围为指定OU的直接子对象,不会递归遍历子OU。-Filter *:匹配目标OU下的所有用户账户。-SearchBase:指定要操作的目标OU的完整LDAP路径。
二、进阶:排除特定子OU的场景(扩展学习)
如果你的需求不是完全排除所有子OU,而是要排除某几个特定的子OU,可以通过过滤用户的DistinguishedName(DN属性)实现。比如要排除ou=ExcludeOU, ou=MainOU, ou=User, ou=Test, dc=local, dc=us这个子OU的用户,脚本如下:
$targetOU = "ou=MainOU, ou=User, ou=Test, dc=local, dc=us" $excludeOU = "ou=ExcludeOU, ou=MainOU, ou=User, ou=Test, dc=local, dc=us" Get-ADUser -Filter * -SearchBase $targetOU | Where-Object { # 检查用户的DN是否不包含排除OU的完整路径 $_.DistinguishedName -notlike "*$excludeOU*" } | Disable-ADAccount
这种方法适用于需要递归搜索目标OU,但要跳过特定子OU的场景,核心是用Where-Object过滤掉DN中包含排除OU标识的用户。
三、设置每周五晚自动运行
通过Windows任务计划程序实现定时执行:
- 打开「任务计划程序」→点击「创建任务」
- 常规选项卡:填写任务名称(如“每周五禁用指定OU用户”),勾选「不管用户是否登录都要运行」,并选择「使用最高权限运行」(避免AD操作权限不足)
- 触发器选项卡:点击「新建」,选择「每周」,设置为每周五,指定运行时间(如20:00),勾选「启用」
- 操作选项卡:点击「新建」,操作选择「启动程序」,程序/脚本填写
powershell.exe,添加参数填写:
(先把修改后的脚本保存为-ExecutionPolicy Bypass -File "C:\Scripts\Disable-ADUsers.ps1"Disable-ADUsers.ps1,替换成你实际的保存路径) - 设置选项卡:按需勾选「允许任务按需运行」等选项,点击「确定」完成配置
关键知识点总结
- 排除所有子OU的基础方法:用
-SearchScope OneLevel限制搜索范围为当前OU的直接用户。 - 灵活排除特定子OU:通过
Where-Object过滤用户的DistinguishedName属性。 - 定时运行依赖Windows任务计划程序,需确保脚本路径正确且PowerShell执行权限配置妥当。
内容的提问来源于stack exchange,提问作者Chix Omat
相关产品推荐
相关产品推荐

