C#を使用して、ネットワーク上の場所に表示されるすべてのコンピューター名を取得する方法があるかどうか疑問に思いました。
3 に答える
これは機能しますが、しばらく時間がかかります。:/
public List<String> ListNetworkComputers()
{
List<String> _ComputerNames = new List<String>();
String _ComputerSchema = "Computer";
System.DirectoryServices.DirectoryEntry _WinNTDirectoryEntries = new System.DirectoryServices.DirectoryEntry("WinNT:");
foreach (System.DirectoryServices.DirectoryEntry _AvailDomains in _WinNTDirectoryEntries.Children) {
foreach (System.DirectoryServices.DirectoryEntry _PCNameEntry in _AvailDomains.Children) {
if (_PCNameEntry.SchemaClassName.ToLower().Contains(_ComputerSchema.ToLower())) {
_ComputerNames.Add(_PCNameEntry.Name);
}
}
}
return _ComputerNames;
}
NetServerEnum()APIを使用することをお勧めします。ベースの.NETライブラリにこれのマネージラッパーがあるとは思わないが、グーグルですばやく検索してこれを見つけることができた:http: //www.codeproject.com/Articles/16113/Retreiving-a-list-of -network-computer-names-using
注:私はcodeprojectコードをテストまたは徹底的にレビューしていませんが、問題がある場合に必要なものの出発点として十分なはずです。
編集:ドメイン環境が確実でない限り、DirectoryServicesを使用しないでください。System.DirectoryServicesクラスはADSIラッパーであり、クエリ対象のActiveDirectoryがなくても機能します。NetServerEnum()はワークグループとドメインで機能しますが、最も信頼性の高いデータを保証するものではありません(すべてのマシンが表示されるとは限りません)。コンピュータブラウザサービスに依存しています。
最善の解決策は、おそらく両方の可能性をラップし、結果をマージするクラスでしょう:/
ユーザーの許可に応じて、アプリケーションはそれらの情報を取得する場合と取得しない場合があります。
ActiveDirectoryを使用してみてください。これにより、ローカルネットワークに関する正確な情報が得られます。
System.DirectoryServicesを使用します。