Reputation: 111
We have 6 Citrix Servers. I'm trying to find out if Remote Logons are enabled/disabled.
I plan to put this onto of a webpage to display and green icon if they are or red if they aren't.
I've managed to connect to the machines and pull operating system information etc.. However when i try and connect to view the TerminalServiceSetting information.. i get an Invalid Class error.
Here is my code.
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();
}
If anyone can shed some light on it that would be great.
Thanks
Update:
I have now found the code (i think) that checks to see if remote connections are enabled or disabled.
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;
}
}
However when i run the code i get returned "1".. which is fine. However if i deny remote logins on the server and re run the code it stays at 1..
Any ideas?
Upvotes: 0
Views: 618
Reputation: 111
Sorted!!!
I was looking up the wrong field.
the correct one is :
Label1.Text = "Remote Connections: " + m["Logons"].ToString();
Upvotes: 0
Reputation: 56
You need to be sure that the server provide the TerminalServiceSetting information. WMI uses unmanaged code because not all servers and their configurations provide all information.
You can use Mgmtclassgen to generate managed code and at the same time make sure that the server provides the information.
Upvotes: 1