Laden...

WMI remote registry zugriff klapt nicht

Erstellt von =>- techno_prog -<= vor 17 Jahren Letzter Beitrag vor 17 Jahren 4.223 Views
=
=>- techno_prog -<= Themenstarter:in
67 Beiträge seit 2006
vor 17 Jahren
WMI remote registry zugriff klapt nicht

Hi ich hab versucht über wmi die registry von einen anderen rechner auszuhlesen,
das programm wird auf nen Enterprise server 2003 betriben mit eigener domain,
der rechner auf den ich zugreifen möchte ist in der domain angemeldet

ich bekomme aber immer die Fehlermeldung:
RPC SERVER nicht erreichbar (Ausnahme von HRESULT: 0x800706BA)

Auf beiden Maschinen ist aber der RPC dienst gestartet.

Hier ist mal der code vieleicht kann mir einer sagen woran das liegt und
was die fehlermeldung zu bedeuten hat


                       const uint HKEY_LOCAL_MACHINE = 0x80000002;
                      
                        const string userName = "admin";
                        const string password = "passwort"; 

                        const string computerName = "PC1";// rechner auf den ich zugreifen will

                        const string managementPath = @"\\" + computerName + @"\root\default";

                        ConnectionOptions options = new ConnectionOptions();

                        options.Authentication = AuthenticationLevel.Default;

                        options.Impersonation = ImpersonationLevel.Default;
                        
                        options.EnablePrivileges = true;
                        options.Locale = "MS_407"; // für Deutschland

                        options.Username = userName;
                        options.Password = password;

                      
                        ManagementScope ms = new ManagementScope(managementPath, options);

                        ms.Connect();

                        ManagementClass wmiRegistry = new ManagementClass(ms, new ManagementPath("StdRegProv"), new ObjectGetOptions(ms.Options.Context));

                        GetStringValue() erzeugen
                        ManagementBaseObject p = wmiRegistry.GetMethodParameters("GetStringValue");

                        p["hDefKey"] = HKEY_LOCAL_MACHINE;
                        p["sSubKeyName"] = @"SOFTWARE\test";
                        p["sValueName"] = "porjekt";

                        ManagementBaseObject ProfilesDirectory = wmiRegistry.InvokeMethod("GetStringValue", p, null);

                        p["sValueName"] = "AllUsersProfile";
                        ManagementBaseObject AllUsersProfile = wmiRegistry.InvokeMethod("GetStringValue", p, null);

                        p["sSubKeyName"] = @"SYSTEM\test";
                        p["sValueName"] = "Standart";
                        ManagementBaseObject ComputerName = wmiRegistry.InvokeMethod("GetStringValue", p, null);

                        
                        Console.WriteLine("\"{0}\\{1}\" auf {2}", ProfilesDirectory["sValue"], AllUsersProfile["sValue"], ComputerName["sValue"]);

schon mal im voraus dank

So fals ihr Rechtschreibfehler endeckt dürft ihr Sie gerne behalten 😁
Bin nämlich legastheniker und hab von denen genügend X(

T
327 Beiträge seit 2006
vor 17 Jahren

Warum verwendest du denn nicht einfach


RegistryKey key = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, Zielhost);
key.OpenSubKey(Pfad).GetValue(Schlüssel);

Musst vorher noch mit


using Microsoft.Win32;

den Namespace einbinden.

Wesentlich einfacher und v.a. performanter!!!

Grüße

=
=>- techno_prog -<= Themenstarter:in
67 Beiträge seit 2006
vor 17 Jahren

ich soll des mittels WMI verwirklichen, warum so weis ich net aber trotzdem danke

So fals ihr Rechtschreibfehler endeckt dürft ihr Sie gerne behalten 😁
Bin nämlich legastheniker und hab von denen genügend X(

=
=>- techno_prog -<= Themenstarter:in
67 Beiträge seit 2006
vor 17 Jahren

noch ne kurze frage telnet

wie kann ich wenn ich des so mach dan sagen mit welchen namen ich mir anmelden will beim anderen rechner?

So fals ihr Rechtschreibfehler endeckt dürft ihr Sie gerne behalten 😁
Bin nämlich legastheniker und hab von denen genügend X(

T
327 Beiträge seit 2006
vor 17 Jahren

Hab den Thread hier grad wiedergefunden:
Einen Benutzernamen / Kennwort übergeben geht nicht so einfach (leider) !
Du musst das Programm im Kontext eines Anwenders ausführen, der auf der Remote-Maschine die notwendigen Rechte hat.
Bei mir hier hab ich das so gelöst:
An der Domäne gibts nen Serviceaccount, der auf allen zu prüfenden Rechnern Admin-Rechte hat.
Das Programm, mit dem ich die Keys abfrage, starte ich aus meinem Kontext und über Impersonation wechsle ich den Benutzerkontext auf den Serviceaccount.
Wenn ich mit auslesen fertig bin mache ich die Impersonation einfach wieder rückgängig.

Grüße