WMI C#服务器接受RDP连接

WMI C#服务器接受RDP连接,c#,wmi,terminal-services,C#,Wmi,Terminal Services,我们有6台Citrix服务器。我正在试图找出是否启用/禁用了远程登录 ManagementScope scope = new ManagementScope("\\\\MACHINENAME\\root\\CIMV2\\TerminalServices",con); scope.Options.EnablePrivileges = true; scope.Options.Authentication = AuthenticationLevel.PacketPrivacy; scope.O

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

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;
    }
}
我计划把它放在一个网页上,如果它们是绿色的图标,如果它们不是红色的图标

我已经成功地连接到机器并获取操作系统信息等。。但是,当我尝试连接以查看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


有什么想法吗?

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

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

已排序

我查错了字段

正确的答案是:

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

考虑到服务器是Citrix服务器。。这难道不能提供终端服务器信息吗?不过我会试试这个。这篇文章可能会有帮助: