电源壳| 用变量替换 mailNickname

1 windows powershell active-directory

尝试用他们自己的 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"}
    }
Run Code Online (Sandbox Code Playgroud)

此脚本将 mailNickName 设置为空白。任何的想法?谢谢

Rya*_*ger 5

要以最少的代码更改来解决您的问题,您应该在调用中更改对 的$SAM引用。您当前将 mailNickName 设置为由返回的用户对象,而不是您正在迭代的 sAMAccountName。$UserSet-ADUserGet-ADUser

您的变量名称有点令人困惑,因为它们的名称与名称实际代表的名称有些相反。在您的代码$SAM中实际上是一个 ADUser 对象列表,这些对象的所有属性都被过滤掉了,但 samaccountname 除外。您$User在foreach循环变量实际上是从每个用户对象的SAM帐户字符串。

这是您的代码的一个小变化,其中更改了变量名称并删除了无关的 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)" }
}
Run Code Online (Sandbox Code Playgroud)

这是另一种变体,它直接针对调用结果使用ForEach-Object%别名Get-ADUser

Get-ADUser -SearchBase "OU=Staged,OU=cor,DC=mycompany,DC=com" -Filter * | %{
    Set-ADUser $_.DistinguishedName -Replace @{ mailNickName = $_.samaccountname }
}
Run Code Online (Sandbox Code Playgroud)