WMI C#服务器接受RDP连接
我们有6台Citrix服务器。我正在试图找出是否启用/禁用了远程登录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
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服务器。。这难道不能提供终端服务器信息吗?不过我会试试这个。这篇文章可能会有帮助: