Показать все добавленные товары - PullRequest
0 голосов
/ 05 мая 2020

Я создаю небольшое приложение, которое выбирает пользователей из ActiveDirectory и сохраняет их в файле. Из файла, который он вставляет в базу данных, существует ли пользователь в базе данных уже или нет. Когда я запускаю приложение, оно выглядит так:

Uspjesno izvrseno !
Ukupno novi korisnika : 1
Ukupno izmjenjenih korisnika : 0
Uspjesno izvrseno !
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 1
Uspjesno izvrseno !
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 1
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0
Uspjesno izvrseno !
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 1
Uspjesno izvrseno !
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 1
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0
Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0

Каждый раз, когда l oop находит пользователя, которого он вставляет, но это выглядит раздражающим, и я не хочу смотреть столько строк в Console, мне нужно только 3 строка что-то вроде

Ukupno novi korisnika : 0
Ukupno izmjenjenih korisnika : 0

Вот и мой код

using MimeKit;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.DirectoryServices;
using System.IO;
using System.Net.Mail;
using System.Web.Mail;

namespace ADApp
{
    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; } //useraccountcontrol
        public bool PassNevExp { get; set; }   //pwdlastset 

    }

    class Program
    {

        private static readonly log4net.ILog log =
            log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        static void Main(string[] args)
        {
            log.Info("Novih korisnika: ");
            log.Info("Izmjenjeno: ");
            foreach (Korisnik korisnik in VratiKorisnike())
            {
                Console.WriteLine(korisnik);
            }
            Console.ReadLine();

            //****************Slanje mailova ************************//           
            SmtpClient mySmtpClient = new SmtpClient("smtp.gmail.com");

            // set smtp-client properties
            mySmtpClient.UseDefaultCredentials = false;
            System.Net.NetworkCredential basicAuthenticationInfo = new
            System.Net.NetworkCredential("yourusername@gmail.com", "YourGmailPassword");
            mySmtpClient.Credentials = basicAuthenticationInfo;
            mySmtpClient.EnableSsl = true;
            mySmtpClient.Port = 587;

            // add from,to mailaddresses
            MailAddress from = new MailAddress("sender@gmail.com", "IAMSender");
            MailAddress to = new MailAddress("reciver@gmail.com", "IAMReceiver");
            System.Net.Mail.MailMessage myMail = new System.Net.Mail.MailMessage(from, to);


            // set subject and encoding
            myMail.Subject = "ActiveDirectory";
            myMail.SubjectEncoding = System.Text.Encoding.UTF8;

            // set body-message and encoding
            myMail.Body = "<b>Ukupno dodanih: </b><br>Ukupno izmjenjenih:  <b>HTML</b>.";
            myMail.BodyEncoding = System.Text.Encoding.UTF8;
            // text or html
            myMail.IsBodyHtml = true;

            mySmtpClient.Send(myMail);
        }

        public void ExcStrPrc(string Username, string DisplayName, bool isEnable, bool PassNevExp)
        {

            SqlConnection conn = new SqlConnection(@"Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=DesignSaoOsig1;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("ADProcTemp", conn);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@Username", Username.ToString().Trim());
            cmd.Parameters.AddWithValue("@DisplayName", DisplayName.ToString().Trim());
            cmd.Parameters.AddWithValue("@isEnabled", Convert.ToInt32(isEnable));
            cmd.Parameters.AddWithValue("@PassNevExp", Convert.ToInt32(PassNevExp));


            cmd.Parameters.Add("@addedUser", SqlDbType.Int).Direction = ParameterDirection.Output;
            cmd.Parameters.Add("@updatedUser", SqlDbType.Int).Direction = ParameterDirection.Output;

            conn.Open();
            int k = cmd.ExecuteNonQuery();
            var addedUserCount = (int)cmd.Parameters["@addedUser"].Value;
            var updatedUserCount = (int)cmd.Parameters["@updatedUser"].Value;


            if (k != 0)
            {
                Console.WriteLine("Uspjesno izvrseno !");
            }

            Console.WriteLine($"Ukupno novi korisnika : {addedUserCount.ToString()}");
            Console.WriteLine($"Ukupno izmjenjenih korisnika : {updatedUserCount.ToString()}");

            conn.Close();
        }

        public static List<Korisnik> VratiKorisnike()
        {
            List<Korisnik> lstADUsers = new List<Korisnik>();
            string sDomainName = "saotest";
            string DomainPath = "LDAP://" + sDomainName;
            string fileLoc = @"C:\output.txt";

            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 & 2) > 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]);


                        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);

                        // Poziva se store procedura
                       Program p = new Program();
                       p.ExcStrPrc(korisnik.Username.ToString().Trim(), korisnik.DisplayName.ToString().Trim(), Convert.ToBoolean(isEnable), Convert.ToBoolean(Dont_Expire_Password));
                        lstADUsers.Add(korisnik);
                    }

                }

                var json = JsonConvert.SerializeObject(resultCol, Formatting.Indented);
                var res = json;
                File.WriteAllText(fileLoc, json);
            }
            return lstADUsers;
        }
    }
}

Я почти уверен, что ошибка исходит от for l oop, но я не знаю, как отключить this.

for (int counter = 0; counter < resultCol.Count; counter++)

Когда я перемещаю вызов функции внутри l oop, он выдает сообщение об ошибке.

Program p = new Program();
                       p.ExcStrPrc(korisnik.Username.ToString().Trim(), korisnik.DisplayName.ToString().Trim(), Convert.ToBoolean(isEnable), Convert.ToBoolean(Dont_Expire_Password));

Кто-нибудь может помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 05 мая 2020

Если вы просто хотите, чтобы в консоли отображалось меньше, вы можете закомментировать строки, в которых вы распечатываете список всех пользователей активного каталога:

 static void Main(string[] args)
    {
        log.Info("Novih korisnika: ");
        log.Info("Izmjenjeno: ");
        //foreach (Korisnik korisnik in VratiKorisnike())
        //{
        //    Console.WriteLine(korisnik); // This line is where all the output is coming from
        //}
        Console.ReadLine();

EDIT: для отображения итоговых значений указанного c, вы можете использовать LINQ, заменив его на

var vratiKorisnike = VratiKorisnike();
Console.WriteLine("novi korisnika : " + vratiKorisnike.sum(vk => vk.<replace here with field to sum>));
Console.WriteLine("izmjenjenih korisnika : " + vratiKorisnike.sum(vk => vk.<replace here with field to sum>))

EDIT 2: игнорировать предыдущее. Это беспорядочно, но вы можете добавить две частные переменные:

private static int noviKorisnika = 0;
private static int izmjenjenihKorisnika = 0;

и заменить:

if (k != 0)
{
     Console.WriteLine("Uspjesno izvrseno !");
}

//Console.WriteLine($"Ukupno novi korisnika : {addedUserCount.ToString()}");
//Console.WriteLine($"Ukupno izmjenjenih korisnika : {updatedUserCount.ToString()}");
noviKorisnika += addedUserCount;
izmjenjenihKorisnika += updatedUserCount;

conn.Close();

, а затем отобразить и сбросить их, когда закончите:

log.Info("Novih korisnika: ");
log.Info("Izmjenjeno: ");


foreach (Korisnik korisnik in VratiKorisnike())
{
     Console.WriteLine(korisnik);
}
Console.WriteLine($"Ukupno novi korisnika : " + noviKorisnika);
Console.WriteLine($"Ukupno izmjenjenih korisnika : " + izmjenjenihKorisnika);
noviKorisnika = 0;
izmjenjenihKorisnika = 0;


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