webdevqa.jp.net

ActiveDirectoryに対するクエリ

私は私の仕事の「スクリプトガイ」であり、それは祝福と呪いです...私は次のスクリプトを生成する任務を負っています。

Xyz.orgの電子メールアドレスではないプロキシアドレスを持つすべてのユーザーをActiveDirectoryからプルするスクリプトを作成できますか。

最善のアプローチは何でしょうか?これを探すのに最適な場所がどこにあるかわかりません。現在調査中ですが、検索に使用するのに最適な用語がわからないため、何か役立つものを見つけるのに思ったよりも時間がかかります。

これを利用する:

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

私が欲しいものの基本を示す軽量の検索ツールを私に与えてくれます...唯一の問題は、「いいね」または「含む」検索機能がないことです。 enter image description here

同じ種類の検索が必要です...ただし、「xyz.org」を含まないプロキシアドレスを除外する機能があります。

2
WernerCD

あなたの質問はPowerShellの仕事のように聞こえます。

PowerShellがインストールされていない場合は、それを入手してください ここ 。 Windows7およびServer2008 R2には、PowerShellが既にインストールされています。

Active Directory用のQuestPowerShellコマンド を取得します。この拡張機能は、あらゆる種類の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
2
mich732

この無料のADレポートツールは、スプレッドシートアプリにインポートしてさらに洗練するためのリストを生成できるため、役立つ場合があります。私はこれを職場でシステムの管理に使用しています。

AD情報-Active Directoryレポートツール

140を超える組み込みレポートと独自のレポートを作成するオプションを備えた柔軟なActiveDirectoryレポートツール。 AD Infoを使用すると、他のActive Directoryレポートツールよりも柔軟性が高く、最新のユーザーフレンドリーなインターフェイスを使用して、ActiveDirectoryドメインに必要な情報を簡単に照会できます。アプリケーションに付属している140以上のクエリのいずれかを使用するか、カスタムクエリデザイナを使用して、選択した属性に基づいて独自のクエリを作成します。

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

1
Linker3000

「AdFind」ツール を使用して良い結果が得られました。少なくとも私の組織のAD設定では、「proxyAddresses」が標準属性の1つとして返され、後で処理するためにCSVファイルに簡単に詰め込むか、xyz.orgに一致しないものを見つけるためにgrepすることができます。 ..

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

私の名前のすべてのレコードを返します(これをワイルドカードにするか、「everyone」のレコードを削除してから、そのユーザーの「name」属性と「proxyaddresses」属性を出力します。このクエリは次を返します。

[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]

だから私がgrep -v xyz.orgアドレスを除外すると、X400のものだけが残ります...厳密に言えば、「xyz.org以外」のproxyAddressの基準を満たしていますが、おそらく、フィルターで除外して、実際には別の組織のプロキシアドレスであるものだけを残してください。 (それがあなたの実際の目標だと思いますが、フィルタリング部分は十分に単純でなければなりません...)

0
ljwobker

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"
0
sanyam jain