PowerShell Active Directory脚本开发需求:批量禁用用户并在显示名称前添加指定字符
完善PowerShell脚本:禁用AD用户并修改显示名称
没问题,我来帮你把脚本补全!你已经完成了禁用AD用户的核心逻辑,现在只需要添加修改显示名称的部分就行。下面是更新后的完整脚本,我会顺便加上一些实用的细节优化:
Import-Module ActiveDirectory # 获取目标域/域控制器地址 $Server = Read-Host "Enter Domain to query/domain controller" # 读取CSV文件并批量处理用户 Import-Csv "C:\Temp\samAccountNames.csv" | ForEach-Object { # 去除samAccountName前后的空格,避免匹配失败 $samAccountName = $_.samAccountName.Trim() # 获取用户对象,同时指定要读取DisplayName属性(默认不返回该属性) $adUser = Get-ADUser -Server $Server -Identity $samAccountName -Properties DisplayName if ($adUser) { # 第一步:禁用用户账号 $adUser | Disable-ADAccount -Server $Server # 第二步:修改显示名称,在原有名称前添加# # 可选优化:避免重复添加#(如果脚本多次运行) if (-not $adUser.DisplayName.StartsWith("#")) { $newDisplayName = "#" + $adUser.DisplayName $adUser | Set-ADUser -Server $Server -DisplayName $newDisplayName Write-Host "✅ 已处理用户 $samAccountName:禁用账号 + 更新显示名称为 $newDisplayName" } else { Write-Host "ℹ️ 用户 $samAccountName 的显示名称已以#开头,跳过修改" } } else { Write-Warning "❌ 未找到用户:$samAccountName,请检查CSV中的账号是否正确" } }
关键修改&优化说明:
- 调用
Get-ADUser时添加了-Properties DisplayName:AD用户的默认属性集合不包含DisplayName,必须显式指定才能读取和修改这个字段。 - 存储用户对象到变量
$adUser:避免重复查询AD,提升脚本执行效率,也让逻辑更清晰。 - 增加账号存在性检查:防止CSV里有无效账号导致脚本直接报错中断,同时给出明确的警告提示。
- 重复#判断逻辑:如果脚本可能被多次运行,这个判断能避免给同一个用户的显示名称重复加#(不需要的话可以直接删掉这段判断)。
- 状态输出:通过
Write-Host和Write-Warning让你能实时看到每个用户的处理结果,方便排查问题。
注意事项:
- 确保运行脚本的账号拥有禁用AD用户和修改用户属性的权限。
- 提前验证CSV文件,确保
samAccountName列的格式正确,没有多余空格或无效值。
内容的提问来源于stack exchange,提问作者Eric Moteberg
相关产品推荐
相关产品推荐

