アクティブなディレクトリからすべてのコンピュータ/マシン/ pcのリストを取得する方法を知りましたか?アクティブなディレクトリにあるすべてのコンピュータをリスト表示
答えて
を使用すると、非常に大きなドメインを持っている、またはあなたのドメインがどのようにどのように設定された制限を持っている場合は(自分を返信させていただきます。誰かがより良い返信ILがそれを受け入れている場合は、このページに検索エンジンの餌をしようとして)検索ごとに多くの項目を返すことができるため、ページングを使用する必要があります。
using System.DirectoryServices; //add to references
public static List<string> GetComputers()
{
List<string> ComputerNames = new List<string>();
DirectoryEntry entry = new DirectoryEntry("LDAP://YourActiveDirectoryDomain.no");
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = ("(objectClass=computer)");
mySearcher.SizeLimit = int.MaxValue;
mySearcher.PageSize = int.MaxValue;
foreach(SearchResult resEnt in mySearcher.FindAll())
{
//"CN=SGSVG007DC"
string ComputerName = resEnt.GetDirectoryEntry().Name;
if (ComputerName.StartsWith("CN="))
ComputerName = ComputerName.Remove(0,"CN=".Length);
ComputerNames.Add(ComputerName);
}
mySearcher.Dispose();
entry.Dispose();
return ComputerNames;
}
(objectCategory = computer)のようなLDAPクエリは、このトリックを行う必要があります。提案EKS何 -jim
は正しいですが、少し遅いを行っています。
その理由は、それぞれの結果に対してGetDirectoryEntry()
への呼び出しです。これによりDirectoryEntry
オブジェクトが作成されます。このオブジェクトは、Active Directory(AD)オブジェクトを変更する必要がある場合にのみ必要です。クエリが単一のオブジェクトを返す場合は問題ありませんが、すべてのオブジェクトをADにリストすると、パフォーマンスが大幅に低下します。
ADだけをクエリする必要がある場合は、結果オブジェクトのProperties
コレクションを使用するほうがよいでしょう。これにより、コードのパフォーマンスが何度も向上します。
これはdocumentation for SearchResult
classで説明されています。SearchResult
クラスの
インスタンスは
DirectoryEntry
クラスのインスタンスに非常に似ています。決定的な違いは、SearchResult
用のデータは、すでにそれは、クエリから返されるSearchResultCollection
、で利用可能であるのに対しDirectoryEntry
クラスは、アクティブ Directoryドメインサービス階層から新しいオブジェクトが がアクセスされるたびにその情報を取得することです は、DirectorySearcher
クラスで実行されます。ここで
Properties
コレクションの使用方法の例です:プロパティは複数の値を持つことができること
public static List<string> GetComputers()
{
List<string> computerNames = new List<string>();
using (DirectoryEntry entry = new DirectoryEntry("LDAP://YourActiveDirectoryDomain.no")) {
using (DirectorySearcher mySearcher = new DirectorySearcher(entry)) {
mySearcher.Filter = ("(objectClass=computer)");
// No size limit, reads all objects
mySearcher.SizeLimit = 0;
// Read data in pages of 250 objects. Make sure this value is below the limit configured in your AD domain (if there is a limit)
mySearcher.PageSize = 250;
// Let searcher know which properties are going to be used, and only load those
mySearcher.PropertiesToLoad.Add("name");
foreach(SearchResult resEnt in mySearcher.FindAll())
{
// Note: Properties can contain multiple values.
if (resEnt.Properties["name"].Count > 0)
{
string computerName = (string)resEnt.Properties["name"][0];
computerNames.Add(computerName);
}
}
}
}
return computerNames;
}
Documentation for SearchResult.Properties
注意を私たちは番号を確認するためにProperties["name"].Count
を使用する理由、それはあります値の
さらに改善するには、PropertiesToLoad
コレクションを使用して、事前に使用するプロパティを検索者に知らせます。これにより、検索者は実際に使用されるデータのみを読み取ることができます。
DirectoryEntry
とDirectorySearcher
オブジェクトが 適切に使用されているすべてのリソースを解放するために配置されるべきであることに注意してください。その最高のusing
句で行われます。
- 1. 特定のコンピュータでアクティブなリモートデスクトップ接続を表示する
- 2. ノックアウトすべて非アクティブな要素を非表示にする
- 3. AngularJS 1.x.x。アクティブなコントローラをすべてブラウザのコンソールに表示
- 4. 手元にある可能なすべてのカードのリストを表示する
- 5. express.jsで現在アクティブなセッションをすべて表示する
- 6. リスト内のアンドロイドミュージックフォルダにあるすべての曲のリストを表示
- 7. ウェブサーバー上のディレクトリにあるすべてのファイルを一覧表示するJavascript
- 8. ディレクトリ内のすべてのファイルをパイプで再帰的にリスト表示
- 9. Python ftplibにすべてのファイル/ディレクトリが表示されない
- 10. ディレクトリとサブディレクトリにあるすべてのjpgファイルを一覧表示
- 11. すべてのディレクトリに「ヘッダー」を付けないでリストする
- 12. アクティブなバッファを除くすべてのパネルを非表示にしますか?
- 13. アクティブなディレクトリをプログラミングする
- 14. すべてのアクティブなサブスクリプションを表示することは可能ですか
- 15. ディレクトリ内のすべてのファイルの数を表示するスクリプト
- 16. AndroidアプリケーションのresフォルダにあるすべてのXMLファイル名のリストを表示
- 17. 値がアクティブであってもファセットブロックのすべての値を表示する方法はありますか?
- 18. FAT:ディレクトリ内のすべてのファイルを一覧表示する
- 19. ディレクトリ内のすべてのファイルを表示するJenkinsコマンド?
- 20. ディレクトリ内のすべてのファイルを一覧表示するPython
- 21. ディレクトリ内のすべてのフォルダを一覧表示する(PHP)
- 22. コンピュータのすべての可能なペアのリスト効率
- 23. Netbeans:アクティブなプロジェクトのToDoリストのみを表示
- 24. Pythonでアクティブなディレクトリにあるユーザを更新する
- 25. Movable Type:ArchiveListにすべての月を表示してアクティブにします
- 26. ディレクトリにアクティブなクラスを追加する
- 27. iPhoneのローカルネットワーク上のすべてのコンピュータ名を一覧表示する
- 28. アクティブなユーザセッションを表示
- 29. Rをリストに並べて表示する方法 - リストを "cbind"するには?
- 30. システムフォルダの外にあるディレクトリ内のすべてのファイルのリストを取得