使用Set-ADAccountPassword时出现NullReferenceException错误的原因排查
问题原因及解决办法
核心原因
问题出在Select-Object SID这一步:你用这个命令将Get-ADUser输出的完整AD用户对象,裁剪成了仅包含SID属性的自定义对象。而Set-ADAccountPassword cmdlet无法识别这种简化对象——它需要接收完整的ADUser对象,或者通过-Identity参数明确传入可识别的用户标识(如SID字符串、用户名等)。
当你移除密码重置环节时,Select-Object SID只是输出SID值,所以能正常显示;但一旦将这种简化对象传给Set-ADAccountPassword,由于对象缺少命令运行所需的AD元数据/属性,就会触发空引用异常(NullReferenceException)。
修正后的命令
方案1:直接传递完整AD用户对象(推荐)
移除Select-Object SID,让Set-ADAccountPassword接收Get-ADUser输出的完整对象:
Get-ADUser -Filter * -SearchBase "DC=domain,DC=hu" -Properties OfficePhone, Mobile, SID | Where-Object { $_.OfficePhone -eq "888888" -or $_.Mobile -eq "888888" } | Set-ADAccountPassword -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "HvUpJP13" -Force) -PassThru | Unlock-ADAccount
方案2:通过SID字符串指定用户标识
如果需要保留SID筛选逻辑,可以用-ExpandProperty取出SID字符串,再通过ForEach-Object逐个传递给-Identity参数:
Get-ADUser -Filter * -SearchBase "DC=domain,DC=hu" -Properties OfficePhone, Mobile, SID | Where-Object { $_.OfficePhone -eq "888888" -or $_.Mobile -eq "888888" } | Select-Object -ExpandProperty SID | ForEach-Object { Set-ADAccountPassword -Identity $_ -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "HvUpJP13" -Force) -PassThru | Unlock-ADAccount }
内容的提问来源于stack exchange,提问作者Norbert Yuhas
相关产品推荐
相关产品推荐

