Сравните данные из ActiveDirectory и сохраните в БД - PullRequest
0 голосов
/ 24 апреля 2020

В настоящее время я создаю, что пользователь ActiveDirectory хранит до file, и он отлично работает. Сейчас я хочу, чтобы мне нужно было сопоставлять данные из ActiveDirectory и данные из database, а если статус равен 0, изменить их и сохранить в базе данных. Это означает, что если учетная запись активна = 1 не активна = 0. Пока я создаю это

using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.DirectoryServices;
using System.IO;

namespace ActiverDirectory
{
    public class Korisnik
    {
        public int Id { get; set; }
        public string Username { get; set; } //samaccountname
        public string DisplayName { get; set; } //displayname      
        public bool isEnabled { get; set; } //AccountExpires 
        public bool PassNevExp { get; set; }   //PassExpires 

    }

    class Program
    {
        static void Main(string[] args)
        {
            foreach (Korisnik korisnik in VratiKorisnike())
            {
                Console.WriteLine(korisnik);
            }

        }



        public static List<Korisnik> VratiKorisnike()
        {
            List<Korisnik> lstADUsers = new List<Korisnik>();
            string sDomainName = "saoos";
            string DomainPath = "LDAP://" + sDomainName;



            string constring = @"Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=DesignSaoOsig1;Integrated Security=True";
            string Query = "SELECT * FROM tblZaposleni_AD";
            DataTable table = new DataTable();
            SqlDataAdapter adapter = new SqlDataAdapter(Query, constring);
            adapter.Fill(table);

            string txt = "";
            string fileLoc = @"C:\output.txt";

            foreach (DataRow row in table.Rows)
            {
                string line = "";
                foreach (DataColumn column in table.Columns)
                {
                    line += "," + row[column.ColumnName].ToString();
                }
                txt += line.Substring(1);
            }
            using (var sw = new StreamWriter(fileLoc))
            {
                sw.WriteLine(txt);
            }

            Console.WriteLine("Ok");

            DirectoryEntry searchRoot = new DirectoryEntry(DomainPath);
            DirectorySearcher search = new DirectorySearcher(searchRoot);


            search.Filter = "(&(objectClass=user)(objectCategory=person))";

            search.PropertiesToLoad.Add("samaccountname"); // Username
            search.PropertiesToLoad.Add("displayname"); // display name
            search.PropertiesToLoad.Add("userAccountControl");  // isEnabled
            search.PropertiesToLoad.Add("pwdLastSet"); //passwordExpires



            DataTable resultsTable = new DataTable();
            resultsTable.Columns.Add("samaccountname");
            resultsTable.Columns.Add("displayname");
            resultsTable.Columns.Add("Neaktivan");
            resultsTable.Columns.Add("dontexpirepassword");



            SearchResult result;

            SearchResultCollection resultCol = search.FindAll();

            if (resultCol != null)
            {
                for (int counter = 0; counter < resultCol.Count; counter++)
                {
                    string UserNameEmailString = string.Empty;

                    result = resultCol[counter];

                    if (result.Properties.Contains("samaccountname")
                        && result.Properties.Contains("displayname"))
                    {
                        int userAccountControl = Convert.ToInt32(result.Properties["userAccountControl"][0]);
                        string samAccountName = Convert.ToString(result.Properties["samAccountName"][0]);

                        int isEnable;
                        int Dont_Expire_Password;

                        if (userAccountControl > 0)
                        {
                            isEnable = 0;
                        }
                        else
                        {
                            isEnable = 1;
                        }


                        if ((userAccountControl & 65536) != 0)
                        {
                            Dont_Expire_Password = 1;
                        }
                        else
                        {
                            Dont_Expire_Password = 0;
                        }

                        Korisnik korisnik = new Korisnik();
                        korisnik.Username = (result.Properties["samaccountname"][0]).ToString();
                        korisnik.DisplayName = result.Properties["displayname"][0].ToString();
                        korisnik.isEnabled = Convert.ToBoolean(result.Properties["userAccountControl"][0]);

                        //long value = (long)result.Properties["pwdLastSet"][0];
                        //DateTime pwdLastSet = DateTime.FromFileTimeUtc(value);

                        DataRow dr = resultsTable.NewRow();
                        dr["samaccountname"] = korisnik.Username.ToString();
                        dr["displayname"] = korisnik.DisplayName.ToString();
                        dr["neaktivan"] = Math.Abs(isEnable);
                        dr["dontexpirepassword"] = Dont_Expire_Password;


                        resultsTable.Rows.Add(dr);
                        lstADUsers.Add(korisnik);
                    }
                }
                var json = JsonConvert.SerializeObject(resultCol, Formatting.Indented);
                var res = json;
                Console.WriteLine("Ispis uspjesno obavljen");
                Console.ReadLine();
                File.WriteAllText(fileLoc, json);
            }
            return lstADUsers;
        }
    }
}

Пока все здесь, мне просто нужно сохранить это в [db].[table] Это немного кода который проверяет из ActiveDirectory, если UserAccount равен active или disable Если учетная запись активна в ActiveDirectory и в [db].[table], неактивна, измените статус на 1 и сохраните данные. Когда я запускаю это, я получаю правильно вывод, но статус не изменяется. Любые идеи

1 Ответ

0 голосов
/ 24 апреля 2020

Попробуйте что-то вроде этого:

    public class Korisnik
    {
        public int Id { get; set; }
        public string Username { get; set; } //samaccountname
        public string DisplayName { get; set; } //displayname      
        private bool _isEnabled { get; set; } //AccountExpires 
        public int isEnabled {
            get { return (_isEnabled == true)? 1 : 0;}
            set { _isEnabled = (value == 0) ? false : true; }
        } //AccountExpires 
        public bool PassNevExp { get; set; }   //PassExpires 

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...