Exemple #1
0
        public static void Set_DomainObject(Args_Set_DomainObject args = null)
        {
            var SearcherArguments = new Args_Get_DomainObject
            {
                Identity        = args.Identity,
                Raw             = true,
                Domain          = args.Domain,
                LDAPFilter      = args.LDAPFilter,
                SearchBase      = args.SearchBase,
                Server          = args.Server,
                SearchScope     = args.SearchScope,
                ResultPageSize  = args.ResultPageSize,
                ServerTimeLimit = args.ServerTimeLimit,
                Tombstone       = args.Tombstone,
                Credential      = args.Credential
            };

            // splat the appropriate arguments to Get-DomainObject
            var RawObject = GetDomainObject.Get_DomainObject(SearcherArguments);

            foreach (SearchResult obj in RawObject)
            {
                var Entry = obj.GetDirectoryEntry();

                if (args.Set != null)
                {
                    try
                    {
                        foreach (var set in args.Set)
                        {
                            Logger.Write_Verbose($@"[Set-DomainObject] Setting '{set.Key}' to '{set.Value}' for object '{obj.Properties[@"samaccountname"][0]}'");

                            Entry.InvokeSet(set.Key, new[] { set.Value });
                        }
                        Entry.CommitChanges();
                    }
                    catch (Exception e)
                    {
                        Logger.Write_Warning($@"[Set-DomainObject] Error setting/replacing properties for object '{obj.Properties[@"samaccountname"][0]}' : {e}");
                    }
                }
                if (args.XOR != null)
                {
                    try
                    {
                        foreach (var xor in args.XOR)
                        {
                            var PropertyName     = xor.Key;
                            var PropertyXorValue = (int)xor.Value;
                            Logger.Write_Verbose($@"[Set-DomainObject] XORing '{PropertyName}' with '{PropertyXorValue}' for object '{obj.Properties[@"samaccountname"][0]}'");
                            var TypeName = Entry.Properties[PropertyName][0].GetType();

                            // UAC value references- https://support.microsoft.com/en-us/kb/305144
                            var PropertyValue = (int)Entry.Properties[PropertyName][0] ^ PropertyXorValue;
                            Entry.Properties[PropertyName][0] = PropertyValue;
                        }
                        Entry.CommitChanges();
                    }
                    catch (Exception e)
                    {
                        Logger.Write_Warning($@"[Set-DomainObject] Error XOR'ing properties for object '{obj.Properties[@"samaccountname"][0]}' : {e}");
                    }
                }
                if (args.Clear != null)
                {
                    try
                    {
                        foreach (var clear in args.Clear)
                        {
                            var PropertyName = clear;
                            Logger.Write_Verbose($@"[Set-DomainObject] Clearing '{PropertyName}' for object '{obj.Properties[@"samaccountname"][0]}'");
                            Entry.Properties[PropertyName].Clear();
                        }
                        Entry.CommitChanges();
                    }
                    catch (Exception e)
                    {
                        Logger.Write_Warning($@"[Set-DomainObject] Error clearing properties for object '{obj.Properties[@"samaccountname"][0]}' : {e}");
                    }
                }
            }
        }
Exemple #2
0
 public static void Set_ADObject(Args_Set_DomainObject args = null)
 {
     SetDomainObject.Set_DomainObject(args);
 }