set-aduser在foreach循环中

我试图让下面的脚本在AD帐户上更改三件事情。 我希望它过期的帐户,更改属性,并追加禁用帐户到当前的说明。 除了追加描述之外,它完成了一切。 按照脚本,脚本只是将“描述”字段replace为“已禁用帐户”,而不是将其附加到已经存在的位置。

$Yesterday = (Get-Date).AddDays(-1) $DisableUserList = Get-Content C:\Myscripts\test.csv $DisableUsers = foreach ($user in $DisableUserList) { get-aduser -filter { mail -eq $user } } ForEach ($user in $DisableUsers) { Set-ADUser $user -Description "Disabled Account $($_.Description)" -AccountExpirationDate $Yesterday -replace @{ businesscategory = "21" } } 

.csv文件只有一列电子邮件地址。

任何帮助表示赞赏。

谢谢

你的问题是你的Set-ADUser命令的$($_.Description)部分是空的。 原因是Get-ADUser默认不检索帐户的描述。 你需要在你的命令中明确地要求这样的:

 get-aduser -filter { mail -eq $user } -Properties Description 

你的另一个问题是你没有在你的最终循环中正确地引用你的禁用用户。 您目前正在使用ForEach ($user in $DisabledUsers) ,这意味着要访问每个用户的属性,他们需要以$user.MyProperty而不是$user.MyProperty作为前缀。 如果你想使用$_符号,你需要改变你的for循环的样式为:

 $DisabledUsers | ForEach-Object { 

你也可以把它缩短为:

 $DisabledUsers | % { 

最后,你说你想追加 (添加到最后)你的文本到当前的描述,但是你的代码正在试图预先 (添加到开始)。 假设你真的想追加,你需要改变你的描述string定义为:

 -Description "$($_.Description) Disabled Account"