AD用户Description字段添加入职日期的PowerShell脚本报错排查
批量为AD用户Description字段添加随机入职日期
问题根源
- 筛选器未指定:
Get-ADUser默认需要筛选条件,你没加-Filter *,所以系统会提示输入筛选器,这就是你被要求输入用户名的原因。 - 语法错误:
- 属性调用写错:
$._description应该是$_.Description; - 代码语句未分隔:
$desc = ...和Set-ADUser在同一行,PowerShell无法识别; - 字符串拼接不符合要求:没有按照「年龄, 入职日期」的格式添加分隔符。
- 属性调用写错:
- 随机日期复用:原脚本只生成一次随机日期,所有用户会被设置成同一个入职日期,不符合需求。
修正后的脚本
# 定义入职日期的范围 $StartDate = Get-Date -Date "2015-01-01" $EndDate = Get-Date -Date "2022-11-11" $totalDays = ($EndDate - $StartDate).Days # 获取所有AD用户,并遍历更新Description字段 Get-ADUser -Filter * -Properties Description | ForEach-Object { # 为当前用户生成独立的随机日期 $randomDays = Get-Random -Minimum 0 -Maximum ($totalDays + 1) $randDate = $StartDate.AddDays($randomDays).ToString("yyyy-MM-dd") # 统一日期格式 # 按照要求拼接新的Description内容 $newDescription = "$($_.Description), $randDate" # 更新用户的Description字段 Set-ADUser $_.Identity -Description $newDescription }
关键说明
- 遍历所有用户:
-Filter *参数会获取域内所有AD用户,无需手动输入筛选条件; - 独立随机日期:把随机日期生成逻辑放到循环里,每个用户都会得到唯一的入职日期;
- 格式规范:用
ToString("yyyy-MM-dd")统一日期显示格式,拼接时保留原年龄并添加逗号+空格的分隔符; - 语法修正:修复了属性调用错误,拆分了合并的代码语句,确保脚本符合PowerShell语法要求。
内容的提问来源于stack exchange,提问作者ChosenLattice
相关产品推荐
相关产品推荐

