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