2

Я "сценарист" на моей работе, что является благословением и проклятием ... Мне было поручено создать сценарий:

Можете ли вы создать сценарий для извлечения всех пользователей с прокси-адресом, который не является адресом электронной почты xyz.org, из Active Directory.

Какой будет лучший подход? Я не уверен, где это лучшее место для поиска. Я исследую это сейчас, но так как я не знаю лучших терминов, чтобы использовать в моих поисках ... Это занимает у меня больше времени, чем я надеялся найти что-то полезное.

Используя это:

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

дает мне легкий поисковый инструмент, который показывает основы того, что я хочу ... единственная проблема в том, что у него нет функции поиска типа "нравится" или "содержит".

Мне нужен тот же самый поиск ... но с возможностью отфильтровывать прокси-адреса, которые не содержат "xyz.org".

4 ответа4

2

Ваш вопрос звучит как работа для PowerShell.

Если у вас не установлен PowerShell, скачайте его здесь. В Windows 7 и Server 2008 R2 уже установлен PowerShell.

Получите команды Quest PowerShell для Active Directory. Это расширение предоставляет удобные команды для сценариев всех видов операций AD.

Теперь по вашему запросу:

Примечание: вы можете сделать этот запрос намного проще, но я его немного растяну для лучшего понимания.

# 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
1

Это бесплатное средство создания отчетов AD может помочь, поскольку вы можете сгенерировать список для импорта в приложение для работы с электронными таблицами, чтобы улучшить его - я использую его на работе для управления нашими системами:

AD Info - средство отчетности Active Directory

Гибкий инструмент отчетов Active Directory с более чем 140 встроенными отчетами, а также возможностью создавать свои собственные. Обладая большей гибкостью, чем другие инструменты отчетности Active Directory, и современным дружественным интерфейсом, AD Info позволяет легко запрашивать информацию в вашем домене Active Directory. Используйте один из 140+ запросов, которые поставляются с приложением, или используйте пользовательский конструктор запросов, чтобы создать собственный запрос на основе любых выбранных вами атрибутов.

http://www.cjwdev.co.uk/Software/ADReportingTool/Info.html

0

У меня были хорошие результаты с помощью инструмента "AdFind". По крайней мере, в настройках AD моей организации "proxyAddresses" возвращаются в качестве одного из стандартных атрибутов, и их можно легко вставить в файл CSV для последующей обработки или просто найти, чтобы найти что-либо, что не соответствует xyz.org. ..

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

Возвращает все записи с моим именем (вы можете подстановить это или удалить его для "всех", а затем вывести атрибуты "name" и "proxyaddresses" для этого пользователя). Этот запрос возвращает:

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

AdFind V01.49.00.00cpp Joe Richards (joe@joeware.net) 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:ljwobker@xyz.org
>proxyAddresses: smtp:ljwobker@exch.xyz.org
>proxyAddresses: SMTP:ljwobker@xyz.org

Поэтому, если я вычеркну grep -v адреса xyz.org, у меня останется только материал X400 ... который строго соответствует вашим критериям для «не xyz.org» proxyAddress, но, по всей вероятности, вы также захотите отфильтровать и оставить только то, что на самом деле является прокси-адресом из другой организации. (Я предполагаю, что это ваша настоящая цель, но часть фильтрации должна быть достаточно простой ...)

0

используя 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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .