2

C# を使用してネットワーク内のワークステーションを識別しようとしています。C# を使用してそれを取得する方法は何ですか。

私は次のコードを使用しています:

    [DllImport("Netapi32.dll")]
    static extern unsafe int NetWkstaGetInfo(IntPtr servername, int level, byte** bufptr);

    [DllImport("Netapi32.dll")]
    static extern unsafe int NetApiBufferFree(byte* bufptr);

    [STAThread]
    static unsafe void Main(string[] args)
    {
        byte* bp = null;
        int rc = NetWkstaGetInfo(IntPtr.Zero, 102, &bp);

        WkstaInfo102* wip = (WkstaInfo102*)bp;
        Console.WriteLine("System {0} has {1} users logged on", Marshal.PtrToStringAuto(wip->computername), wip->logged_on_users);

        rc = NetApiBufferFree(bp);
    }
}
4

3 に答える 3

2

すべてに感謝します、私は解決策を持っています:

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_OperatingSystem WHERE ProductType = 2"); 


            foreach (ManagementObject queryObj in searcher.Get())
            {
                Console.WriteLine("-----------------------------------");
                Console.WriteLine("Win32_OperatingSystem instance");
                Console.WriteLine("-----------------------------------");
                Console.WriteLine("ProductType: {0}", queryObj["ProductType"]);
            }
        }
        catch (ManagementException e)
        {
            MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
        }
    }
}

}

ここで ProductType には次の値があります:

値の意味

1 ワークステーション

2 ドメイン コントローラ

3 サーバー

参照 : Win32_OperatingSystem クラス

ありがとう、

アルシャド

于 2012-10-09T14:15:46.713 に答える
1

これをチェックして:

利用可能なすべてのネットワークプリンターを列挙する.NETの方法はありますか?

それはプリンターのためだけですが、それはあなたを助けることができます。

于 2012-10-09T07:21:19.593 に答える
1

これは役に立ちますが、数か月前にこのことを使用しましたが、うまくいきました。

public void GetAllWorkstations()
{
List<string> objWorkstationNames = new List<string>();

//Creating Directory Entry object by LDAP Query
DirectoryEntry objEntry = new DirectoryEntry("LDAP://YourActiveDirectoryDomain.no");

DirectorySearcher objDirectoriesManager = new DirectorySearcher(objEntry);

//LDAP Query that will surely do the trick, filtering out only workstations/Computer
objDirectoriesManager.Filter= ("(objectClass=computer)");

//Setting up maximum directory/Computer/Workstations limit
objDirectoriesManager.SizeLimit= int.MaxValue;

//Setting up page size
objDirectoriesManager.PageSize= int.MaxValue;


foreach(SearchResult resEnt in objDirectoriesManager.FindAll())
{
    string WorkstationName = resEnt.GetDirectoryEntry().Name;
    //Here you can add different type of check in order to filter out you results.
    objWorkstationNames.Add(ComputerName);
 }

 objDirectoriesManager.Dispose();
 objEntry.Dispose();

 //objWorkstationNames is the required list of Network Computer


}

または、別のアプローチを試すこともできます。これについてはわかりません。個人的に試したことはありません

using (DirectoryEntry objEntry = new DirectoryEntry("WinNT://Workgroup"))
{
    foreach (DirectoryEntry objEntry in workgroup.Children)
    {
        Console.WriteLine(child.Name);
    }
}
于 2012-10-09T07:18:38.220 に答える