2012-04-19 4 views
3

C#を使用してネットワークの場所に表示されるすべてのコンピュータ名を取得する方法があるのだろうかと思っていました。ネットワークの場所からコンピュータ名を取得する

+1

重複した質問:http://stackoverflow.com/questions/5581140/in-c-sharp-how-do-i-get-the-list-of-local-computer-names-like-what-one- gets-view –

+0

あるいは、明らかにhttp://stackoverflow.com/questions/2557551/how-get-list-of-local-network-computers/2562302#2562302から二重引用されたものもあります。 –

答えて

3

NetServerEnum()APIを使用します。 http://www.codeproject.com/Articles/16113/Retreiving-a-list-of-network-computer-names-using

:私がテストしたか徹底的にCodeProjectのコードをレビューしていないが、私はそこにベースの.NETライブラリで、このためのマネージラッパーがあるが、私は簡単にGoogle検索でこれを見つけることができたと信じてはいけません何か問題がある場合には、必要なものの出発点として十分なはずです。

編集:ドメイン環境が確実でない限り、DirectoryServicesは使用しないでください。 System.DirectoryServicesクラスは、照会するActive Directoryなしで作業するADSIラッパーです。 NetServerEnum()はワークグループとドメインで動作しますが、最も信頼性の高いデータを保証しません(すべてのマシンが表示されるわけではありません)。それはコンピュータブラウザサービスに依存します。

最善の解決策は、おそらく両方の可能性をラップし、結果をマージしたクラスになります:/

+0

これは非常にばかげた質問かもしれませんが、 'net view> computerListing.txt'を実行してStreamReaderを使用して読み込み、それを完了するのは簡単でしょうか? –

+0

ありがとうございました!あなたの説明は本当に理解してくれました! –

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; 
} 
2

は、ユーザーの許可に依存し、アプリケーションがたりないかもしれない、これらの情報を得ることができます。

ActiveDirectoryをお試しください。これにより、ローカルネットワークに関する正確な情報が得られます。

System.DirectoryServicesを使用します。

関連する問題