Powershell | 用variablesreplacemailNickname

试图用自己的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)"}}