我正在使用PowerShell脚本将大量用户导入AD。

其中一项是根据用户的程序号将其添加到AD安全组。通常,除非我拼写错误或其他简单的人为错误,否则此方法运行良好。但是,我们有2个安全组,每个人都必须添加到该安全组中,尽管Add-ADGroupMember在一个安全组上运行良好,但找不到另一个安全组。这是我正在使用的脚本:

$Users = Import-Csv "C:\PSScripts\Create\users.csv"
foreach ($User in $Users)
{
    $AccountName = $User.firstname + "." + $User.lastname
    $Program = $User.Program
    $HomeDrive = 'H:'
    $UserRoot = '\\twgeneral\homedrive\'
    $HomeDirectory = $UserRoot+$AccountName
    Set-ADUser $AccountName -HomeDrive $HomeDrive -HomeDirectory $HomeDirectory
    If ($AccountName -eq $AccountName)
    {
        Add-ADGroupMember -Identity "ALL_USERS" -Member $Accountname
    }
    If ($AccountName -eq $AccountName)
    {
        Add-ADGroupMember -Identity "000-All users" -Member $Accountname
    }
}

我得到此错误返回:
Add-ADGroupMember : Cannot find an object with identity: '000-All users' under:     'DC=*****,CD=local'.
At C:\psscripts\create\Groups.ps1:15 char:23
+     {ADD-ADGroupMember <<<<  -Identity "000-All users" -Member $Accountname
    + CategoryInfo          : ObjectNotFound: <000-All users:ADGroup> [Add-ADGroupMember], ADIdentityNotFoundException
    + FullyQualifiedErrorId : Cannot find an object with identity: '000-All users' under: 'DC=*****,DC=local'.,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember

但是,我可以使用ADUC图形界面将用户添加到000-所有用户组。

同样,在此之前,我正在运行一个脚本,使用SAM创建用户。显示名称;交换电子邮件帐号;密码;和域中的特定OU,并且执行没有错误,我可以进入图形界面,并在应该使用所有相关详细信息的位置查看用户权限,但是某些用户返回相同的“找不到对象”当我尝试执行确实起作用的组脚本部分ALL_USERS组时发生错误。具体来说,是用户的姓氏带有连字符,例如Markiem-Chalmers或Tatem-Brown。

我知道Add-ADGroupMember的语法是正确的,因为我从前一个字符串中复制并粘贴了该字符串,该字符串确实可以正确执行,只是将组的名称从ALL_USERS更改为000-All用户,并且我将两倍,三倍,四倍检查拼写是否正确。任何帮助将不胜感激!

最佳答案

在回答您在评论中提出的问题时:
Add-ADGroupMember只能按DN,SAM,GUID或Sid搜索;您无法直接通过该cmdlet按名称或其他属性进行搜索。

您可以在CSV条目上运行Get-ADUser以使用Name或其他方式提取SAM,但是如果问题是SAM被截断了,为什么不子字符串呢?

$limit = #The length a name can be before it gets truncated
if($AccountName.Length -gt $limit)
{
    $AccountName = $AccountName.Substring(0,$limit)
}

07-24 19:24