9

私が作成した次の方法は機能しないようです。foreach ループでは必ずエラーが発生します。

NotSupportedException が処理されませんでした...プロバイダーは検索をサポートしていないため、WinNT://WIN7,computer を検索できません。

ローカル マシンにクエリを実行しています

 private static void listUser(string computer)
 {
        using (DirectoryEntry d= new DirectoryEntry("WinNT://" + 
                     Environment.MachineName + ",computer"))
        {
           DirectorySearcher ds = new DirectorySearcher(d);
            ds.Filter = ("objectClass=user");
            foreach (SearchResult s in ds.FindAll())
            {

              //display name of each user

            }
        }
    }
4

2 に答える 2

20

providerDirectorySearcherで aを使用することはできません。ドキュメントから:WinNT

オブジェクトを使用して、DirectorySearcherLightweight Directory Access Protocol (LDAP) を使用して Active Directory Domain Services 階層に対してクエリを検索および実行します。LDAP は、ディレクトリ検索をサポートする唯一のシステム提供の Active Directory Service Interfaces (ADSI) プロバイダーです。

代わりに、DirectoryEntry.Childrenプロパティを使用して object のすべての子オブジェクトにアクセスしてから、プロパティを使用してobjectComputerある子を見つけますSchemaClassNameUser

LINQ を使用する場合:

string path = string.Format("WinNT://{0},computer", Environment.MachineName);

using (DirectoryEntry computerEntry = new DirectoryEntry(path))
{
    IEnumerable<string> userNames = computerEntry.Children
        .Cast<DirectoryEntry>()
        .Where(childEntry => childEntry.SchemaClassName == "User")
        .Select(userEntry => userEntry.Name);

    foreach (string name in userNames)
        Console.WriteLine(name);
}       

LINQ なし:

string path = string.Format("WinNT://{0},computer", Environment.MachineName);

using (DirectoryEntry computerEntry = new DirectoryEntry(path))
    foreach (DirectoryEntry childEntry in computerEntry.Children)
        if (childEntry.SchemaClassName == "User")
            Console.WriteLine(childEntry.Name);
于 2011-11-19T05:10:49.247 に答える
-1

ローカル コンピューター名を取得するいくつかの方法を次に示します。

string name = Environment.MachineName;
string name = System.Net.Dns.GetHostName();
string name = System.Windows.Forms.SystemInformation.ComputerName;
string name = System.Environment.GetEnvironmentVariable(“COMPUTERNAME”);

次は、現在のユーザー名を取得する方法です。

string name = System.Windows.Forms.SystemInformation.UserName;
于 2016-09-08T04:57:13.107 に答える