Toon posts:

[C# WMI]

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik probeer het één en ander om te zetten van vbscript naar c#, hierbij loopt het alleen stuk op het moment dat ik de collection in c# wil aanspreken.

hierbij eerst de vbscript code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Function GetServiceStatus

Dim objServices, objStatus

Set objServices = GetObject("winmgmts:{impersonationLevel=Impersonate}!\root\hewlettpackard\openview\data")
Set objStatus = objServices.Get("OV_ElementState.ElementPath=""OV_Service.Name=\""" & strSID & "\""""")

If objStatus.Severity = "32" Then
    strStatus = "down"
Else
    strStatus = "up"
End If
    
set objStatus = nothing
set objServices = nothing

End Function


Nu heb ik dit tot zover omgezet in c# in het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
ManagementScope oMs = new ManagementScope("\\\\.\\root\\HewlettPackard\\OpenView\\Data");
oMs.Options.EnablePrivileges = true;
oMs.Options.Impersonation = ImpersonationLevel.Impersonate;

ObjectQuery oQuery = new ObjectQuery("select * from OV_ElementState where ElementPath = 'viewname'");
            
ManagementObjectSearcher searcher = new ManagementObjectSearcher(oMs,oQuery);
ManagementObjectCollection result = searcher.Get();

foreach(ManagementObject oReturn in result)
{
     Console.WriteLine("bla...");
}


De c# versie loopt stuk op de foreach loop. Ook als ik deze vervang voor een simpele: Console.WriteLine(result.Count); Krijg ik een exception op de Count (exception: Generic Failure). Wanneer ik check voor het type van "result" krijg ik daarvoor wel netjes System.Management.ManagementObjectCollection op terug.

Het vbscript overigens, geeft wel netjes de gewenste data terug.
En wanneer ik op inet zoek naar de methode (die ik gebruik) om WMI aan te spreken, heb ik hier (dacht ik) geen fouten in gemaakt. Wat betreft die Impersonate, wanneer ik deze weglaat, heeft dit geen ander resultaat :(

Kan iemand mij vertellen, wat ik in de c# code fout doe?


// edit, sorry voor de topic name...

[ Voor 8% gewijzigd door Verwijderd op 17-12-2004 12:47 . Reden: code tags toegevoegd ]


Verwijderd

Topicstarter
Hmmm... wanneer ik in de WMI CIM Studio(WMI Tools) ga zoeken, kan ik geen "Instances" vinden in het OV_ElementState object. Misschien dat daardoor de gegeven code niet werkt?!
Wanneer ik namelijk een windows element zoek : Win32_LogicalDisk, welke ik ook gewoon in de "Instances" kan bekijken, dan werkt de code wel!

Heb het nog niet werkend... dus als iemand ideëen heeft, graag!

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 16-05 11:22
Ik weet niet of je al in de MDSN hebt gekeken, maar voor zover ik nu kan zien doe jij geen .Connect() met je ManagementScope...

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Verwijderd

Topicstarter
Je hebt helemaal gelijk, die had ik er (nog) niet instaan.
Dit veranderd echter niet veel... ik krijg nog steeds exceptions...

Hierbij heb ik ook de Scope veranderd (heb de \\\\.\\ weggehaald). Zo stond het ook bij je gegeven link... Dit veranderde ook niets.

De code loop nog steeds vast wanneer ik het object wil aanspreken.

De code ziet er nu als volgt uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ManagementScope oMs = new ManagementScope("root\\HewlettPackard\\OpenView\\Data");
oMs.Options.EnablePrivileges = true;
oMs.Options.Impersonation = ImpersonationLevel.Impersonate;

oMs.Connect();

ObjectQuery oQuery = new ObjectQuery("select * from OV_ElementState where ElementPath = 'viewname'");
            
ManagementObjectSearcher searcher = new ManagementObjectSearcher(oMs,oQuery);
ManagementObjectCollection result = searcher.Get();

foreach(ManagementObject oReturn in result)
{
     Console.WriteLine("bla...");
}