public ServicoIncluirUsuariosAD(IComparador comparador,
                                 IConsultaOU consultaOU,
                                 IRepositorioAD repositorioAD,
                                 IRepositorioCoreSSO repositorioCoreSSO,
                                 IRepositorioADSync repositorioADSync)
 {
     this.comparador         = comparador ?? throw new ArgumentNullException(nameof(comparador));
     this.consultaOU         = consultaOU ?? throw new ArgumentNullException(nameof(consultaOU));
     this.repositorioAD      = repositorioAD ?? throw new ArgumentNullException(nameof(repositorioAD));
     this.repositorioCoreSSO = repositorioCoreSSO ?? throw new ArgumentNullException(nameof(repositorioCoreSSO));
     this.repositorioADSync  = repositorioADSync ?? throw new ArgumentNullException(nameof(repositorioADSync));
 }
        private IEnumerable <ResultadoImportacaoDTO> ResetarSenha(IEnumerable <UsuarioDTO> paraIncluir, string dominio, string diretorio, string usuario, string senha, IConsultaOU ouDestino)
        {
            List <ResultadoImportacaoDTO> resultados = new List <ResultadoImportacaoDTO>();

            Console.WriteLine($"Confirma a alteração de senha de {paraIncluir.Count()} confirma [Sim, Nao]?");
            var confirmacao = Console.ReadLine();

            if (confirmacao == "Sim")
            {
                Stopwatch crono       = Stopwatch.StartNew();
                int       i           = 0;
                string    contextoLog = Guid.NewGuid().ToString();
                foreach (var item in paraIncluir)
                {
                    ResultadoImportacaoDTO resultado = new ResultadoImportacaoDTO()
                    {
                        Usuario = item
                    };

                    try
                    {
                        var repositorio = new SME.SyncADxCoreSSO.ADSync.SMEADSync(dominio, diretorio, usuario, senha);

                        resultado.Resultado = repositorio.ResetarSenhaParaPadrao(item, contextoLog) ? ResultadoImportacao.Sucesso : ResultadoImportacao.FalhaNaoIdentificada;
                    }
                    catch (Exception ex)
                    {
                        resultado.Resultado    = ResultadoImportacao.Erro;
                        resultado.MensagemErro = ex.ToString();
                    }

                    resultados.Add(resultado);
                    i++;

                    if (i % 100 == 0)
                    {
                        Console.WriteLine($"Foram processados {i} itens - {crono.ElapsedMilliseconds / 1000} segundos");
                        crono.Restart();
                    }
                }
            }

            return(resultados);
        }
        private IEnumerable <ResultadoImportacaoDTO> IncluirNoAD(IEnumerable <UsuarioDTO> paraIncluir, string dominio, string diretorio, string usuario, string senha, IConsultaOU ouDestino)
        {
            List <ResultadoImportacaoDTO> resultados = new List <ResultadoImportacaoDTO>();

            Console.WriteLine($"Confirma a inserção de {paraIncluir.Count()} confirma [Sim, Nao]?");
            var confirmacao = Console.ReadLine();

            if (confirmacao == "Sim")
            {
                Stopwatch crono = Stopwatch.StartNew();
                int       i     = 0;
                foreach (var item in paraIncluir)
                {
                    ResultadoImportacaoDTO resultado = new ResultadoImportacaoDTO()
                    {
                        Usuario = item
                    };

                    try
                    {
                        var ouUsuario = ouDestino.MontarOUUsuario(item.Login, item.OU);

                        if (!string.IsNullOrWhiteSpace(ouUsuario))
                        {
                            var repositorio = new SME.SyncADxCoreSSO.ADSync.SMEADSync(dominio, $"{ouUsuario},{diretorio}", usuario, senha);
                            resultado.Resultado = repositorio.CriarUsuario(item) ? ResultadoImportacao.Sucesso : ResultadoImportacao.FalhaNaoIdentificada;
                        }
                        else
                        {
                            resultado.Resultado = ResultadoImportacao.NaoFoiPossivelIdentificarOU;
                        }
                    }
                    catch (Exception ex)
                    {
                        resultado.Resultado    = ResultadoImportacao.Erro;
                        resultado.MensagemErro = ex.ToString();
                    }

                    resultados.Add(resultado);
                    i++;

                    if (i % 100 == 0)
                    {
                        Console.WriteLine($"Foram processados {i} itens - {crono.ElapsedMilliseconds / 1000} segundos");
                        crono.Restart();
                    }
                }
            }

            return(resultados);
        }