PowerShell运行AD改密脚本提示Identity参数为空报错如何解决
报错原因
- PowerShell远程执行存在作用域隔离限制:
Invoke-Command内的ScriptBlock运行在远程服务器的独立会话环境中,默认无法直接读取本地脚本定义的$user、$pass变量,远程会话中这两个变量值为$null,因此Set-ADAccountPassword的Identity参数接收到空值,触发校验报错。
解决方法
两种可直接落地的修改方案,任选其一即可:
方案1:使用$using:作用域修饰符(最简便)
直接在脚本块中引用本地变量时,添加using:前缀,明确告知PowerShell该变量来自本地会话作用域,修改后的Invoke-Command代码如下:
Invoke-Command -Session $session -ScriptBlock {Set-ADAccountPassword -Identity $using:user -Reset -NewPassword $using:pass}
方案2:使用-ArgumentList传参(兼容性更好)
通过Invoke-Command的-ArgumentList参数将本地变量按顺序传递给远程脚本块,脚本块内用param接收参数,适合需要兼容旧版本PowerShell的场景,代码示例:
Invoke-Command -Session $session -ScriptBlock { param($remoteUser, $remotePass) Set-ADAccountPassword -Identity $remoteUser -Reset -NewPassword $remotePass } -ArgumentList $user, $pass
额外校验建议
修改后如果仍有报错,可先确认你传入的$user参数值是Active Directory可识别的合法身份标识,支持的格式包括SAM账号名、用户DN、用户对象GUID、用户UPN等。
内容的提问来源于stack exchange,提问作者Antonio Matheus
相关产品推荐
相关产品推荐

