WMI C#Server接受RDP连接

时间:2013-09-13 10:02:57

标签: c# wmi terminal-services

我们有6台Citrix服务器。我试图找出是否启用了远程登录。

我计划将其放在网页上以显示绿色图标(如果有)或红色(如果不是)。

我已经设法连接到机器并提取操作系统信息等。但是,当我尝试连接以查看TerminalServiceSetting信息时...我收到无效的类错误。

这是我的代码。

ManagementScope scope = new ManagementScope("\\\\MACHINENAME\\ROOT\\cimv2");
scope.Connect();

//create object query
ObjectQuery query = new ObjectQuery("SELECT * FROM     Win32_TerminalServiceSetting");

//create object searcher
ManagementObjectSearcher searcher =
                        new ManagementObjectSearcher(scope, query);

//get collection of WMI objects
ManagementObjectCollection queryCollection = searcher.Get();

//enumerate the collection.
foreach (ManagementObject m in queryCollection)
{
    // access properties of the WMI object
    Label1.Text = m["AllowTSConnections"].ToString();
}

如果有人能够对它有所了解那就太棒了。

由于

更新

我现在找到了代码(我认为),它会检查是否启用了远程连接。

ManagementScope scope =
    new ManagementScope("\\\\MACHINENAME\\root\\CIMV2\\TerminalServices",con);
scope.Options.EnablePrivileges = true;
scope.Options.Authentication = AuthenticationLevel.PacketPrivacy;
scope.Options.Impersonation = ImpersonationLevel.Impersonate;
scope.Connect();



//create object query
ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_TerminalServiceSetting");

//create object searcher
ManagementObjectSearcher searcher =
                        new ManagementObjectSearcher(scope, query);

//get collection of WMI objects
ManagementObjectCollection queryCollection = searcher.Get();

//enumerate the collection.
foreach (ManagementObject m in queryCollection)
{

    if (m["AllowTSConnections"].ToString() == "1")
    {
        Redicon.Visible = false;
    }
    else
    {
        Greenicon.Visible = false;
    }
}

然而,当我运行代码时,我得到“1”..这很好。但是,如果我拒绝服务器上的远程登录并重新运行代码,它将保持为1 ..

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您需要确保服务器提供TerminalServiceSetting信息。 WMI使用非托管代码,因为并非所有服务器及其配置都提供所有信息。

您可以使用Mgmtclassgen生成托管代码,同时确保服务器提供信息。

答案 1 :(得分:0)

排序!!!

我正在查找错误的字段。

正确的是:

Label1.Text = "Remote Connections: " + m["Logons"].ToString();