执行Set-ADUser报错“对象引用未设置为对象实例”原因咨询
AD用户脚本报错“Object reference not set to an instance of an object”解析
报错含义
这个错误属于空引用异常,本质是你传递给Set-ADUser命令的参数不符合要求——要么是值为$null的无效对象,要么是参数格式不是命令预期的类型,导致命令无法定位到对应的AD用户对象进行操作。
脚本问题分析
你的脚本存在两个关键问题引发了该报错:
- 使用
Select sAMAccountName得到的是包含sAMAccountName属性的自定义对象集合,而非直接的用户名字符串,直接把整个集合传给-Identity参数,命令无法识别出有效的用户标识。 for ($users)是错误的循环写法,PowerShell中遍历集合需要用foreach ($user in $users)语法,或者直接通过管道传递对象。
修正后的脚本
方式一:提取用户名后遍历修改
# 直接提取所有AD用户的用户名(字符串格式) $users = Get-ADUser -Filter * | Select-Object -ExpandProperty sAMAccountName # 遍历每个用户执行修改 foreach ($user in $users) { Set-ADUser -Identity $user -CannotChangePassword $false }
方式二:用管道简化操作(更高效)
# 直接通过管道传递AD用户对象给Set-ADUser,无需单独提取属性 Get-ADUser -Filter * | Set-ADUser -CannotChangePassword $false
内容的提问来源于stack exchange,提问作者Jingle Bells
相关产品推荐
相关产品推荐

