none
Script para pegar OU de todos os Usuarios do AD !! RRS feed

  • Pergunta

  • Pessoal, boa tarde.

    Preciso de um script que pega em qual o OU os usuários estão no AD e atualiza o campo Office do usuário no AD com o nome da OU sem o DN completo dela. OU seja se o usuario esta na OU ADM vai atualizar com esta informação (conforme imagem) e não com caminho completo da OU .. tipo OU=ADM, OU=Users, OU=Contoso, DC=Contoso, DC=local.

    Preciso disto porque tenho um software de impressão que ler este campo no AD, então estou montando o centro de Custo de acordo com cada departamento.

    Tentei fazer um powershell mas não consigo pegar a OU sem o DN completo.

    quarta-feira, 5 de março de 2014 17:39

Respostas

  • Leonardo,

    Hoje testei.

    O correto seria assim:

    clear
    import-module ActiveDirectory
    
    $usuarios = Get-ADUser -Filter * 
    
    foreach($u in $usuarios){
    	$Local = ($u.distinguishedName.split(",")[1]).split("=")[1]
            $Local
    	set-ADUser $u -office $Local
    
    }


    Fábio de Paula Junior

    segunda-feira, 10 de março de 2014 14:23
    Moderador

Todas as Respostas

  • Leonardo,

    Com o DN em mãos você pode usar a função Split para dividir o DN pela Virgula, assim você terá o último elemento resultante com algo como por exemplo: OU=ADM.

    Depois você ainda pode usar o split mais uma vez mas dividindo pelo sinal de igual ("="), aí você terá somente o ADM.

    Se não conseguir fazer manda o script que você já tem, fica mais fácil apenas acrescentar um detalhe no seu do que fazer do zero.

    Ref.:

    String Manipulation: Splitting and Joining Strings

    http://tasteofpowershell.blogspot.com.br/2009/08/string-manipulation-splitting-and.html


    Fábio de Paula Junior


    quarta-feira, 5 de março de 2014 22:35
    Moderador
  • Fábio, segue meu script devo ter viajado em alguma coisa não conseguir fazer preciso de ajuda.

    Estou usando o Powergui

    ## 1) Pega o DN da OU e salva no arquivo resultado
    Get-QADObject -Type OrganizationalUnit | SELECT DN | Format-Wide -Column 1 | Out-File C:\SCRIPTS\resultado.txt

    ## 2) Carrega o Valor do DN da OU
    $content = Get-Content("C:\SCRIPTS\resultado.txt")

    ## 3) Remove espaços em branco no arquivo
    $content = $content |? {$_.trim() -ne "" }

    ## 4) Apos remover espacoes em Branco gera o arquivo OU.txt
    $content | Out-File OU.txt

    ## 5) Carrega conteudo do arquivo OU.txt aqui não conseguir fazer
    $OU = Get-Content C:\SCRIPTS\OU.txt | ForEach-Object {
    Get-QADUser -SearchRoot $OU | Set-QADUser -Office $OU.name
    }


    quinta-feira, 6 de março de 2014 14:01
  • Leonardo,

    Eu não tenho esse módulo do PowerGui, eu utilizo o módulo ActiveDirectory que já vem com o Windows e nunca precisei usar nenhum complemento.

    Com ele eu faria o seguinte:

    1) Pegar os usuários que eu precise alterar

    Pra isso eu uso $VarUsuarios = get-aduser <opções>, essas opções seriam filtros como por exemplo todos os usuários de uma determinada OU. Ao final dessa execução eu teria $VarUsuarios com uma lista de usuários, e esse usuários possuem a informação de qual OU eles pertencem.

    2) Ler um por um dos usuários 

    Use um foreach para ler cada um dos usuários, exemplo: foreach ($usuario in $varUsuarios){<código>}

    3)Dentro do foreach você faz o procedimento que sugeri com o SPLIT e grava a informação como Set-ADUser.

    Dá pra você fazer a mesma coisa com o seu powergui, mas eu não sei quais os comandos equivalentes, qualquer coisa poste o seu novo código.

    Ref.:

    Módulo Active Directory

    http://blogs.msdn.com/b/rkramesh/archive/2012/01/17/how-to-add-active-directory-module-in-powershell-in-windows-7.aspx

    Get-ADUser

    http://technet.microsoft.com/en-us/library/ee617241.aspx

    Set-ADUser

    http://technet.microsoft.com/en-us/library/ee617215.aspx


    Fábio de Paula Junior



    • Editado Fábio JrModerator quinta-feira, 6 de março de 2014 19:46 Eu quis dizer SPLIT e não JOIN.
    quinta-feira, 6 de março de 2014 17:44
    Moderador
  • Fabio,

    Eu preciso alterar todos usuarios de todas as OU.

    Exemplo os usuarios que ficam na OU ADM terão o valor de ADM no campo Office.

    Exemplo os usuarios que ficam na OU FINANCEIRO terão o valor de FINANCEIRO no campo Office.

    E sucessivamente !!

    Ou seja eu não queria passar o parametro de OU por OU .. gostaria que algo mais automatizado.

    A ideia é a seguinte powershell vai pesquisar todas as OU .. depois pegar todos de cada OU e alterar o Office de acordo com a OU.

    quinta-feira, 6 de março de 2014 18:12
  • Então se não me engano é só usar 

    $usuarios = Get-ADUser -Filter * -Properties *

    Assim você vai pegar todos os usuários, com todas suas propriedades. Eu apenas comentei que era possivel fazer filtros.

    Você não precisa pesquisar OUs, pesquise usuários, o usuário tem a informação da OU.

    Veja

    import-module ActiveDirectory
    
    $usuarios = Get-ADUser -Filter * -Properties *
    
    foreach($u in $usuarios){
    
        $u.DistinguishedName
    
    }

    Tá no caminho, só falta tratar o nome distinto pra pegar só o finalzinho (como sugeri no primeiro post) e depois gravar.


    Fábio de Paula Junior

    quinta-feira, 6 de março de 2014 18:29
    Moderador
  • Fabio,

    Infelizmente não consegui fazer, precisava muito disto.

    quinta-feira, 6 de março de 2014 18:56
  • O que aconteceu?

    Manda o script.


    Fábio de Paula Junior

    quinta-feira, 6 de março de 2014 18:58
    Moderador
  • Fabio, acabei de fazer:

    Pareque que funcionou você consegue testar ae também ?

    clear
    import-module ActiveDirectory
    
    $usuarios = Get-ADUser -Filter * 
    
    foreach($u in $usuarios){
    
        $u.DistinguishedName | set-aduser -office $u.DistinguishedName.split('='',')[3]
    }



    quinta-feira, 6 de março de 2014 19:13
  • Eu não tenho como testar, mas se funcionou pra você então beleza.

    Mas parece que você usou o split apenas uma vez, eu tinha imaginado primeiro dividir pela virgula ",", pegar o ultimo elemento (use - [-1]) e depois dividir pelo (=) e novamente pegar o ultimo elemento. Agora pensei em algo mais fácil, divida apenas pelo "=" e pegue o último elemento como o [-1].


    Fábio de Paula Junior

    quinta-feira, 6 de março de 2014 19:44
    Moderador
  • Fabio,

    Como ficaria do jeito que você está dizendo, to aprendendo powershell ainda, não sei como ficaria.

    Você pode fazer ?

    quinta-feira, 6 de março de 2014 19:50
  • Eu não tenho como testar

    clear
    import-module ActiveDirectory
    
    $usuarios = Get-ADUser -Filter * 
    
    foreach($u in $usuarios){
    	$Local = $u.distinguishedName.split("=")[-1]
            $Local
    	set-ADUser $u -office $Local
    
    }

    O que eu tentei fazer foi o seguinte: a váriavel $Local recebe o último elemento do array criado a partir do nome distinto, esse foi "quebrado" em cada sinal de igual (=).

    Com a váriavel $Local preenchida eu apenas usei o Set-ADUser para atualizar o usuário.

    Não tem como aprender sem tentar.



    Fábio de Paula Junior

    sexta-feira, 7 de março de 2014 14:00
    Moderador
  • Olá Leonardo, Infelizmente não sei o script para lhe ajudar! Porém, Gostaria de mencionar que já precisei adicionar informações nos cadastros de usuário assim como vc está precisando neste momento. Se não forem muitos setores (ou seja, muitas OUs para atualizar) você pode selecionar todos os usuários de uma OU e com botão direito do mouse editar as propriedades. Ao atualizar o campo "Office" vc estará editando todos os usuários de dentro da OU. Bom, está foi minha experiência. Espero que ajude algumas pessoas. Abraço.

    Bruno Lippi - IT Professional

    sábado, 8 de março de 2014 14:05
  • Leonardo,

    Hoje testei.

    O correto seria assim:

    clear
    import-module ActiveDirectory
    
    $usuarios = Get-ADUser -Filter * 
    
    foreach($u in $usuarios){
    	$Local = ($u.distinguishedName.split(",")[1]).split("=")[1]
            $Local
    	set-ADUser $u -office $Local
    
    }


    Fábio de Paula Junior

    segunda-feira, 10 de março de 2014 14:23
    Moderador