尝试用所有用户的 samaccountname 替换 mailNickname:
Import-Module activedirectory
$SAM = (Get-ADUser -SearchBase "OU=Staged,OU=corp,DC=mycompany,DC=com" -Filter * | select samaccountname)
foreach ($User in $SAM.samaccountname)
{
Set-ADUser $User -Replace @{mailNickName = "$SAM"}
}
此脚本将 mailNickName 设置为空白。有什么想法吗?谢谢
答案1
为了以最少的代码更改来解决您的问题,您应该在调用中更改$SAM
对的引用。您当前将 mailNickName 设置为由 返回的用户对象,而不是您正在迭代的 sAMAccountName。$User
Set-ADUser
Get-ADUser
不过,您的变量名称有点令人困惑,因为它们的名称与名称实际代表的意思有些相反。您的代码中$SAM
实际上是一个 ADUser 对象列表,这些对象的所有属性都被过滤掉了,除了 samaccountname。foreach$User
循环中的变量实际上是来自每个用户对象的 samaccountname 字符串。
这是您的代码的一个小变化,其中变量名称被更改并且多余的选择语句被删除。
$users = Get-ADUser -SearchBase "OU=Staged,OU=cor,DC=mycompany,DC=com" -Filter *
foreach ($user in $users) {
Set-ADUser $user -Replace @{ mailNickName = "$($user.samaccountname)" }
}
这是另一种变体,它直接使用 的ForEach-Object
别名%
来对抗调用的结果Get-ADUser
。
Get-ADUser -SearchBase "OU=Staged,OU=cor,DC=mycompany,DC=com" -Filter * | %{
Set-ADUser $_.DistinguishedName -Replace @{ mailNickName = $_.samaccountname }
}
答案2
以下是通过 csv 使用用户的 Samaccount 名称更新所有用户的 mailNickName 的简单方法。
准备带有标题 Samaccount 和 NickName 的 csv 文件并运行以下脚本。我使用 D 盘根目录上的 book4.csv 作为我的 csv。
Import-Csv "D:\Book4.csv" | % {Get-ADUser -Identity $_.Samaccount -Properties MailNickName | Set-ADUser -Replace @{MailNickName = "$($_.NickName)"}}