Powershell | 用变量替换 mailNickname

Powershell | 用变量替换 mailNickname

尝试用所有用户的 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。$UserSet-ADUserGet-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)"}} 

相关内容