Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 使用旧的Windows 2000之前的登录名而不是CN获取ADUser_Powershell_Active Directory - Fatal编程技术网

Powershell 使用旧的Windows 2000之前的登录名而不是CN获取ADUser

Powershell 使用旧的Windows 2000之前的登录名而不是CN获取ADUser,powershell,active-directory,Powershell,Active Directory,我试图在PowerShell中使用Add-ADGroupMember cmdlet,但我意识到,如果我使用CN,PS将无法识别该对象,而且它似乎只能识别Windows 2000之前的登录名 该属性的字符限制为20个字符,因此我们的一些帐户具有不同的CNs和Windows 2000之前的登录名 我的整个过程是: 步骤1:获取我的用户列表(这将为我提供旧版Windows 2000之前的登录名): 步骤2:将这些用户添加到我的安全组: $UserList = Get-Content "C:\Users

我试图在PowerShell中使用Add-ADGroupMember cmdlet,但我意识到,如果我使用CN,PS将无法识别该对象,而且它似乎只能识别Windows 2000之前的登录名

该属性的字符限制为20个字符,因此我们的一些帐户具有不同的CNs和Windows 2000之前的登录名

我的整个过程是: 步骤1:获取我的用户列表(这将为我提供旧版Windows 2000之前的登录名):

步骤2:将这些用户添加到我的安全组:

$UserList = Get-Content "C:\Users\Public\Users.txt" 
$GroupName = "MY-SEC-Group" 
$Members = Get-ADGroupMember -Identity $GroupName -Recursive | Select -ExpandProperty SAMAccountName

ForEach ($user in $UserList) 
{ 

If ($Members -contains $user)  
        { 
            Write-Host "$user is member of $GroupName" 
        }  

Else     
        { 
            Write-Host "$user is not a member. Attempting to add now, run script again for verification" 
            Add-ADGroupMember -Identity $GroupName -Members $User 
        } 
 }
对于传统登录名和CN完全相同的所有帐户,不存在任何问题。但在不同的情况下,我会得到错误“找不到对象”


是否有更好/更先进的cmdlet可供使用?可能是依赖CN而不是传统登录名的登录名?或者我现在需要将CN添加到所有脚本中吗?

Get-ADGroupMember返回指向ActiveDirectory中具体用户的对象,这些对象包含不同的字段,包括DiscriminatedName、SamAccountName、SID、Name等。在代码中,您创建了一个名为(不是SamAccountName)的txt文件,但在Get-ADGroupMember中使用了SamAccountName。因此,您只需将名称与SamAccountName值进行比较(这是不正确的)

替换

select name |  Out-file C:\Users\Public\Users.txt 

SamAccountName(与SID一样)是AD中唯一的属性-
因此,您应该在代码中使用它。

您的
Get ADUser
命令正在选择
name
,而不是
SamAccountName
。您的
Get-ADGroupMember
正在收集
SamAccountName
Name
SamAccountName
不一样。如果在两个查询中比较
SamAccountName
,将得到相同的数据
SamAccountName
是被截断的属性。
select name |  Out-file C:\Users\Public\Users.txt 
select SamAccountName |  Out-file C:\Users\Public\Users.txt