如何检索给定AD组中的用户?
我是否首先使用域,用户名和密码实例化PrincipalContext?
我正在编写一个简单的脚本,该脚本应该根据一年中的哪一周将联系人添加到通讯组。我的错误是我的脚本可以添加,objectclass:User但是当我尝试使用联系人 GUID 时,脚本给了我这个错误:
Add-ADGroupMember : Cannot find an object with identity: '123dd2345-12f0-542b-c3e6-5774bac431aa' under: 'DC=MY,DC=DOMAIN'.
At line:1 char:25
+ get-adgroup $ADGroup |  Add-ADGroupMember  -members $zvar.ObjectGUID
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (123dd2345-12f0-542b-c3e6-5774bac431aa:ADPrincipal) [Add-ADGroupMember], ADIdentityNotFoundException
    + FullyQualifiedErrorId : SetADGroupMember.ValidateMembersParameter,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember
我使用的脚本部分如下所示:
$zvar = get-adobject -filter {displayname -eq "Valentine, John (CELL)" } #this is my contact displayname that is put in a variable with necessary properties
get-adgroup "Dist - Support group" | Add-ADGroupMember  -members $zvar.ObjectGUID #this is my Distribution group, whatever the …powershell active-directory active-directory-group powershell-3.0
我在Active Directory中使用C#查询:
DirectoryEntry de = new DirectoryEntry("LDAP://" + this.rootLDAP);
DirectorySearcher ds = new DirectorySearcher(de, "(&(objectcategory=Group))");
它工作得很好.
但它返回的其中一个属性称为"samAccountType",它具有以下值:
268435456
268435457
536870912
这是什么意思?
好的,我现在的问题是我们正在尝试编写将用户添加到Active Directory中不同组的代码.这是我们写的解决方案.
部分主要方法:
string newGroup = "TestDelete";
string userName = result.Properties["cn"][0].ToString();
string adduser = ad.AddToGroup(userName, newGroup);
Console.WriteLine(String.Format("{0} : {1}",userName, adduser)); 
哪个从另一个类调用此方法:
public String AddToGroup(string userDn, string groupDn)
{
    try
    {
        DirectoryEntry ldapConnection = new DirectoryEntry("LDAP://OU=" + groupDn + ",DC=blah,DC=blah,DC=blah");
        ldapConnection.AuthenticationType = AuthenticationTypes.Secure;
        string newUser = "CN=" + userDn + "CN=Members,DC=blah,DC=blah,DC=blah";
        ldapConnection.Invoke("Add", new object[] { newUser });
        ldapConnection.CommitChanges();
        ldapConnection.Close();
        return "Success";
    }
    catch (System.DirectoryServices.DirectoryServicesCOMException E)
    {
        Console.WriteLine("Exception caught:\n\n" + E.ToString());
    }
}
它抛出异常
System.Runtime.InteropServices.COMException(0x80020006):未知名称.(来自HRESULT的异常:0x80020006(DISP_E_UNKNOWNNAME))
System.DirectoryServices.DirectoryEntry.InvokeSet(String propertyName,Object [] args)
at C:\ Users\XXX\Documents …
c# directoryservices active-directory active-directory-group windows-server-2008-r2
我正在尝试制作一个 PS 脚本,它会列出所有 Active Directory 用户组成员身份(递归)。
我已经有工作脚本:
import-module activedirectory
$users = get-aduser -Filter {Name -Like "*"} -Searchbase "ou=Users, dc=Domain" | Where-Object { $_.Enabled -eq 'True' } 
$targetFile = "D:\users.csv"
rm $targetFile
Add-Content $targetFile "User;Group"
foreach ($user in $users)
{
    $groups = Get-ADPrincipalGroupMembership $user
    foreach ($group in $groups)
    {
        $username = $user.samaccountname
        $groupname = $group.name
        $line = "$username;$groupname"
        Add-Content $targetFile $line
    }
}
但是脚本不会递归列出组,即,如果输出文件中列出的组是另一个组的一部分。
例子:
组 1:用户
组 2:组 3:用户
脚本仅显示 Group1 和 3,但不显示 2。
我应该向它以递归方式编写组成员身份的第一个脚本添加什么?
我有一个代码来检查用户是否是组的成员.我在登录时使用此功能.
请注意我有域用户和本地用户,例如.testdomain\administrator和administrator.
这是我使用的代码:
using (DirectoryEntry groupEntry = new DirectoryEntry("WinNT://./" + userGroupName + ",group"))
{
    foreach (object member in (IEnumerable)groupEntry.Invoke("Members"))
    {
        using (DirectoryEntry memberEntry = new DirectoryEntry(member))
        {
            string completeName = memberEntry.Name;
            DirectoryEntry domainValue = GUIUtility.FindDomain(memberEntry);
            if (domainValue != null)
            {
                completeName = domainValue.Name + "\\" + memberEntry.Name;
            }
            Global.logger.Info("completeName from " + userGroupName + " = " + completeName);
            if (userName.Equals(completeName, StringComparison.InvariantCultureIgnoreCase))
            {
                Global.logger.Debug("IsUserPartOfWindowsGroup returned True with username =" + userName + " , UserGroupName = …我试图通过Powershell检查计算机组成员资格.我希望能够指定某个计算机名称,并从Powershell脚本中查找该计算机所在的组.我打算在计算机上运行脚本,获取主机名,然后打印出计算机所在的AD组.有一种简单的方法吗?
编辑:所以这里的计划是让计算机检查以查看它所在的组,然后根据它所在的组分配打印机.我们有许多打印机只有3到4人使用,但由于分散性质用户无法缩小打印机的数量.我在考虑组策略,但不想创建20个不同的GPO.我想用登录/启动脚本来做这件事.我不确定这是否可行或可行.
编辑#2:这个编辑它真的很晚,但我想如果有人发现它可以帮助.我们最终在用户>首选项>控制面板>打印机对象上使用项目级别定位.我们在AD中为需要访问打印机的每组用户创建了一个帐户.虽然它确实为计算机的第一次登录创建了一个长登录过程,但仍然有效.我们还启用了点对点打印限制,因此驱动程序可以安静地从服务器加载.
嗨,我在ASP.NET应用程序中使用Active Directory和C#,如果用户在一个组或这个子组中,我希望得到一个bool.我写了一个方法,让我知道用户是否在组中但不在此子组中:(
我如何在我的方法中进行递归搜索:
我的代码:
public static bool IsUserInGroup(string dc, string User, string group) 
        {
            PrincipalContext ctx = new PrincipalContext(ContextType.Domain, dc);
            GroupPrincipal p = GroupPrincipal.FindByIdentity(ctx, group);
            UserPrincipal u = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, User);
            bool isMember = u.IsMemberOf(p); 
            return isMember; 
        }
static void Main(string[] args)
        {
            string dc = "company.com";
            string user = "test.w";
            bool isadmin = IsUserInGroup(dc, user, "TAdmin");
            bool isUser = IsUserInGroup(dc, user, "TUser");
            Console.WriteLine("Admin: " + isadmin);
            Console.WriteLine("User: " + isUser);
            Console.ReadLine();
        }
c# asp.net recursion active-directory active-directory-group
我正在尝试读取组 groupType 属性的SECURITY_ENABLED标志。问题是我使用的价值
DirectoryEntry entry...
entry.Properties["groupType"].Value;
是int32,其范围是-2,147,483,647 到 2,147,483,648(或 -0x7FFFFFFF 到 0x80000000)

因此,只要GROUP_TYPE_SECURITY_ENABLED设置了和任何其他仲裁标志,数值就会超出 int32 的范围,就会发生溢出。

有谁知道如何避免这种溢出以读取正确的值?
c# ldap integer-overflow active-directory active-directory-group