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

PowerShell调用Set-ADUser时Identity参数绑定失败问题求助

问题描述

我编写了一个PowerShell脚本,遍历Active Directory(AD)中的每位用户并生成变量$variableResult,所有步骤的日志输出均正常。最后一步需要将$variableResult写入AD用户的POBox属性,仅当属性值与$variableResult不同时执行覆盖操作,但执行时出现如下错误:

Set-ADUser: Cannot bind parameter 'Identity'. Cannot convert value "CN=xxx,OU=Windows 10,OU=UserAccounts,OU=xxx,OU=xxx,DC=xxx,DC=xxx" to type "Microsoft.ActiveDirectory.Management.ADUser". Error: "Cannot convert the "CN=xxx,OU=Windows 10,OU=UserAccounts,OU=xxx,OU=xxx,DC=xxx,DC=net" value of type "Deserialized.Microsoft.ActiveDirectory.Management.ADUser" to type "Microsoft.ActiveDirectory.Management.ADUser"."

变量$variableResult的存储值为:

PS > $variableResult                    
HQCSHOFF

我已修改脚本仅查询自身账号,故意将AD中该账号的POBox设为错误值,本应触发脚本修正操作,却仍出现上述错误,相关代码如下:

if( $user.POBox -ne $variableResult ) {
    set-aduser $user -Replace @{POBox="$variableResult"}
}
解决方案

错误原因

$user是反序列化的ADUser对象(类型为Deserialized.Microsoft.ActiveDirectory.Management.ADUser),而Set-ADUser的Identity参数仅接受原生ADUser对象(直接由Get-ADUser本地返回的对象)或用户的唯一标识(如DistinguishedName、SamAccountName、SID等)。反序列化对象无法被Set-ADUser直接识别绑定。

修复方法

有两种简单的修复方式:

  1. 使用用户唯一标识作为Identity参数
    直接传入用户的DistinguishedName或SamAccountName,这两种标识都能被Set-ADUser正确识别:

    if( $user.POBox -ne $variableResult ) {
        # 使用DistinguishedName
        set-aduser -Identity $user.DistinguishedName -Replace @{POBox=$variableResult}
    }
    

    或者更简洁的SamAccountName:

    if( $user.POBox -ne $variableResult ) {
        # 使用SamAccountName
        set-aduser -Identity $user.SamAccountName -Replace @{POBox=$variableResult}
    }
    
  2. 确保获取原生ADUser对象
    检查脚本中获取$user对象的逻辑,避免产生反序列化对象:

    • 不要通过Export-Clixml/Import-Clixml序列化/反序列化用户对象
    • 如果是远程执行获取的用户对象,改用本地直接调用Get-ADUser,或者在远程会话内完成修改操作

内容的提问来源于stack exchange,提问作者Bash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:12:40