导入无表头CSV批量设置AD用户Kerberos加密属性失效排查
故障根因
- 无表头CSV直接用
Import-Csv导入时,cmdlet会默认把文件第一行识别为列名表头,导入生成的对象不存在samaccountname属性,传给Set-ADUser -Identity的参数值为空,PowerShell对这类空参数传递默认不会抛出显性错误,导致命令静默执行失败。 - 部分版本的ActiveDirectory模块对
KerberosEncryptionType参数的多值传参解析存在兼容问题,直接逗号分隔传值可能出现参数绑定异常。
修复方案
两种方案任选其一即可,推荐方案2适配单值纯列表的场景,容错性更高:
方案1:手动指定CSV表头导入
给Import-Csv加-Header参数手动指定列名,同时显式声明枚举值组合避免参数解析问题:
Import-Csv -Path "C:\Users\admin\Desktop\user.csv" -Header "samaccountname" | ForEach-Object { Set-ADUser -Identity $_.samaccountname -KerberosEncryptionType ([Microsoft.ActiveDirectory.Management.KerberosEncryptionType]::AES128 -bor [Microsoft.ActiveDirectory.Management.KerberosEncryptionType]::AES256) }
方案2:直接读取纯文本行(推荐)
你的文件每行仅存储一个账号名,本质是纯文本列表,不需要走CSV解析逻辑,直接读行容错性更高,还会自动跳过空行:
Get-Content -Path "C:\Users\admin\Desktop\user.csv" | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } | ForEach-Object { Set-ADUser -Identity $_.Trim() -KerberosEncryptionType AES128, AES256 }
配置校验
执行完成后,可抽取任意目标用户运行以下命令,确认Kerberos加密属性配置生效:
Get-ADUser -Identity <替换为待校验用户samaccountname> -Properties KerberosEncryptionType | Select-Object Name, samaccountname, KerberosEncryptionType
注意事项
- 执行命令前请确认已加载ActiveDirectory模块,且运行账号拥有目标AD用户的属性修改权限
- 域内存在Windows Server 2008以下版本域控、或Windows XP/Server 2003以下版本终端时,请勿随意禁用RC4加密类型,否则会出现Kerberos认证失败问题
内容的提问来源于stack exchange,提问作者chkdsk
相关产品推荐
相关产品推荐

