试图用自己的samaccountnamereplace所有用户的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设置为空白。 任何想法? 谢谢
要用最less的代码更改来解决问题,您应该在Set-ADUser调用中将您的$SAM引用更改为$User 。 您当前将mailNickName设置为由Get-ADUser返回的用户对象,而不是您正在迭代的sAMAccountName。
你的variables名称有点混乱,因为它们的命名与实际代表的名称有些相反。 在你的代码中, $SAM实际上是一个ADUser对象列表,除了samaccountname之外,它们的所有属性都被过滤掉了。 foreach循环中的$Uservariables实际上是每个用户对象的samaccountnamestring。
这是你的代码的一个小的变化与变化的variables名称和多余的select语句删除。
$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 } }
以下是通过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)"}}