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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:15:16