![在 foreach 循环内设置 aduser](https://linux22.com/image/683020/%E5%9C%A8%20foreach%20%E5%BE%AA%E7%8E%AF%E5%86%85%E8%AE%BE%E7%BD%AE%20aduser.png)
我正在尝试使用以下脚本更改 AD 帐户上的三项内容。我希望它使帐户过期、更改属性并将禁用帐户附加到当前描述中。除了附加描述外,它执行所有操作。目前,脚本只是用已禁用帐户替换描述字段,而不是将其附加到已有内容中。
$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 文件只有一列电子邮件地址。
任何帮助都将受到赞赏。
谢谢
答案1
您的问题是命令$($_.Description)
的部分为Set-ADUser
空。原因是Get-ADUser
默认情况下不会检索帐户的描述。您需要在命令中明确请求它,如下所示:
get-aduser -filter { mail -eq $user } -Properties Description
您的另一个问题是,您没有在最终循环中正确引用已禁用的用户。您当前正在使用ForEach ($user in $DisabledUsers)
which means 来访问每个用户的属性,这些属性需要以 为前缀,$user.MyProperty
而不是$_.MyProperty
。如果要使用表示$_
法,则需要将 for 循环的样式更改为:
$DisabledUsers | ForEach-Object {
您也可以将其缩短为:
$DisabledUsers | % {
最后,你说你想附加(添加到末尾)您的文本到当前描述,但您的代码目前正在尝试前置(添加到开头)。假设您确实想要附加,则需要将描述字符串定义更改为:
-Description "$($_.Description) Disabled Account"