在 foreach 循环内设置 aduser

在 foreach 循环内设置 aduser

我正在尝试使用以下脚本更改 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"

相关内容