Consultando o Active Directory

2

Eu sou o "cara do roteiro" no meu trabalho, o que é uma bênção e uma maldição ... Fui encarregado de gerar um script de:

Can you create a script to pull all users that have a proxy address that is not an xyz.org email address out of Active Directory.

Qual seria a melhor abordagem? Não tenho certeza de onde é o melhor lugar para procurar isso. Estou pesquisando agora, mas já que não conheço os melhores termos para usar nas minhas pesquisas ... Está demorando mais do que eu esperava encontrar algo útil.

Utilizando isso:

%SystemRoot%\SYSTEM32\rundll32.exe dsquery,OpenQueryWindow  

me dá uma ferramenta de pesquisa leve que mostra o básico do que eu quero ... o único problema é que ele não tem uma função de busca "like" ou "contém".

Euprecisodomesmotipodepesquisa...mascomacapacidadedefiltrarosendereçosdeproxyquenãocontêm"xyz.org".

    
por WernerCD 27.09.2011 / 16:10

4 respostas

2

Sua pergunta parece um trabalho para o PowerShell.

Se você não tiver o PowerShell instalado, capture aqui . O Windows 7 e o Server 2008 R2 já possuem o PowerShell instalado.

Obtenha os Comandos do Quest PowerShell para o Active Directory . Esta extensão fornece comandos úteis para scripts de todos os tipos de operações do AD.

Agora, para sua consulta:

Observação: você pode manter essa consulta muito mais simples, mas vou esticá-la um pouco para entender melhor.

# Get all Users and save it to a variable. 
#-SizeLimit 0 returns ALL users, otherwise only 1000 are returned.
# -IncludedProperties proxyaddresses makes sure the proxyaddresses are included

$allusers = Get-QADUser -SizeLimit 0 -IncludedProperties proxyaddresses

# Filter Users without a xyz.org email address and save them to a variable

$filteredusers = $allusers | where {!($_.proxyaddresses -like "*@xyz.org") -and $_.proxyaddresses}

# Sort and output the list

$filteredusers | sort Displayname | format-table Displayname, proxyaddresses -auto


# Other interesting fieldnames you could use with format-table
# GivenName, sn, mail, SamAccountName and many more
# 
# To get a list of all possible field names use: 
# $filteredusers[0] | format-list *
# This will return all fields of the first user saved in $filteredusers
    
por 28.09.2011 / 12:41
1

Esta ferramenta gratuita de relatórios do AD pode ajudar, já que você pode gerar uma lista para importar em um aplicativo de planilha para mais refinamento - eu uso isso no trabalho para gerenciar nossos sistemas:

Informações do AD - Ferramenta de relatórios do Active Directory

Uma ferramenta flexível de relatórios do Active Directory com mais de 140 relatórios internos, bem como a opção de criar os seus próprios. Com mais flexibilidade que outras ferramentas de relatório do Active Directory e uma interface moderna e amigável, o AD Info permite que você consulte facilmente seu domínio do Active Directory para obter as informações necessárias. Use uma das mais de 140 consultas que acompanham o aplicativo ou use o designer de consulta personalizada para criar sua própria consulta com base em qualquer atributo escolhido.

link

    
por 27.09.2011 / 16:22
0

usando vbscript:

    Set objRoot = GetObject("LDAP://RootDSE") 
    strDNC = objRoot.Get("DefaultNamingContext") 

    Const ADS_SCOPE_SUBTREE = 2

    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 

    objCommand.CommandText = "SELECT givenNames,sn,telephoneNunmber FROM '" & strDNC & "' WHERE objectCategory='user'" & § " And mail != '*@xyz.org'"
    Set objRecordSet = objCommand.Execute
    strResults = ""
    While Not objRecordSet.EOF
        If strResults = "" Then
            strResults = objRecordSet("givenNames") & "," & objRecordSet("sn") & "," & objRecordSet("telephoneNumber")
        Else
            strResults = strResults & VbCrLf & objRecordSet("givenNames") & "," & objRecordSet("sn") & "," & objRecordSet("telephoneNumber")
        End If
    Wend
    objRecordSet.Close

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.CreateTextFile("Results.csv", True)
    objFile.Write strResults
    objFile.Close

    MsgBox "Finished. See Results.csv"
    
por 15.09.2014 / 14:00
0

Tive bons resultados usando a a ferramenta "AdFind" . Pelo menos na configuração do AD da minha organização, "proxyAddresses" são retornados como um dos Atributos padrão e podem ser facilmente colocados em um arquivo CSV para processamento posterior, ou simplesmente encontrados para descobrir qualquer coisa que não corresponda ao xyz.org. ..

adfind -nodn -default -f "(&(name=ljwobker))" name proxyaddresses

Retorna todos os registros com meu nome (você pode curinga ou removê-lo para "todos" e, em seguida, exibe os atributos "name" e "proxyaddresses" para esse usuário. Essa consulta retorna:

[ljwobker:/home/ljwobker]$ adfind -nodn -default -f "(&(name=ljwobker))" name proxyaddresses

AdFind V01.49.00.00cpp Joe Richards ([email protected]) February 2015

Using server: server.xyz.org:389
Directory: Windows Server 2008 R2
Base DN: DC=xyz,DC=org

>name: ljwobker
>name: ljwobker
>proxyAddresses: x400:C=us;A= ;P=XYZ Org;O=Exchange;S=Wobker;G=Lawrence;
>proxyAddresses: X400:C=us;A= ;P=XYZ Org;O=Exchange;S=Wobker;G=LJ;
>proxyAddresses: SIP:[email protected]
>proxyAddresses: smtp:[email protected]
>proxyAddresses: SMTP:[email protected]

Então, se eu grep -v dos endereços xyz.org, fico apenas com o material X400 ... que, estritamente falando, atende aos seus critérios para um proxyAddress "não xyz.org", mas com toda a probabilidade você d também deseja filtrar e apenas se deixar com o material que é, na verdade, um endereço de proxy de uma organização diferente. (Eu estou supondo que é o seu objetivo real, mas a parte de filtragem deve ser simples o suficiente ...)

    
por 14.09.2016 / 21:52