VisualBasic "Zugriff verweigert" bei Winmgmts

HuBaer

Ensign
Registriert
Aug. 2006
Beiträge
177
Schönen Abend,

folgendes Problem: Ich habe ein VB-Skript geschrieben, mit dem ich die IP-Adresse, Gateway etc. einer Netzwerkkarte verändern kann. Zweck ist der, dass ein PC bei allen PCs im Netz das Gateway auf eine Ersatzverbindung umstellt, sobald das herkömmliche DSL ausgefallen ist. Es funktioniert soweit auch alles wunderbar, allerdings nur, solange ich das Skript nur auf den eigenen PC anwende. Sobald ein PC im Netzwerk umgestellt werden soll (quasi Fernzugriff) erhalte ich die Fehlermeldung "Zugriff verweigert". Hier mal das Skript:

Const COMPUTER = "192.168.0.121"
Const ADAPTERINDEX = "1"

wbemImpersonationLevelImpersonate = 3
wbemAuthenticationLevelPktPrivacy = 6
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objAdapter = objLocator.ConnectServer(COMPUTER, "root\cimv2", "", "")
objAdapter.Security_.ImpersonationLevel = wbemImpersonationLevelImpersonate
objservices.Security_.AuthenticationLevel = wbemAuthenticationLevelPktPrivacy
Set objAdapter = objServ.Get("Win32_NetworkAdapterConfiguration.index=" & ADAPTERINDEX)

Gateway = Array("192.168.0.7")

msgbox objAdapter.IPEnabled

Ergebnis = objAdapter.SetGateways(Gateway)

If Ergebnis = 0 then
MsgBox "Gateway erfolgreich eingestellt."
Else
MsgBox "Fehler bei der Einstellung des Gateways: " & Ergebnis
End if

wscript.quit


Ich habe bereits diese vier Punkte hier http://serverfault.com/questions/28...er-need-to-have-wmi-access-on-remote-machines abgearbeitet. Die Windows-Firewall ist auch aus und ich habe weder bei einem Windows 2000 noch bei XP (SP3) Erfolg.

Kann mir wer weiterhelfen?

Danke im Voraus!

Gruß
 
Wenn der Account unter dem die Verbindung zum Ziel-Client hergestellt wird, keine administrativen Privilegien auf diesem Client hat, dann wirst du mit dem Script scheitern.

Die letzten 2 Parameter - in deinem Script jeweils ein Leerstring "" - sehen für mich aus als ob man hier den Benutzer und Passwort angeben kann.
Code:
Set objAdapter = objLocator.ConnectServer(COMPUTER, "root\cimv2", "", "")

Alternativ könntest du mal auf dem Ziel-Client einen Benutzer mit den selben Login-Informationen (Benutzername und Passwort) anlegen. Auch hier wäre wichtig, das der Benutzer Admin ist. Danach kannst du dein Script nochmal ausprobieren, wobei für den Test gilt, das du auf deinem Rechner unter dem gleichen Benutzernamen angemeldet sein musst.

Viel Erfolg...
Rossibaer

PS: Ist bei beiden Rechnern Windows installiert und gibt es da Unterschiede in der Version?
 
Hallo,

hab jetzt bei beiden PCs denselben Benutzernamen und kein Passwort und das auch so im VB-Skript eingegeben. Es funktioniert leider trotzdem nicht :( Version ist bei beiden PCs Windows XP SP3. Ich versteh das einfach nicht. Wenn ich das Skript auf den eigenen PC anwende funktioniert es einwandfrei. Nur der Netzwerkzugriff will nicht klappen, wobei ich ja anscheinend alles so eingestellt habe, dass es funktioniert...

Gruß
 
Ich habe mal alle mir scheinbar wichtigen Infos in Konstanten gepackt, d.h. User, Passwort und Gateway-IP musst du an deine Umgebung anpassen. Ansonsten sehe ich, das du immer wieder unterschiedliche Variablenbezeichnungen wild durcheinander mixt. Bei VB Script wird eine Variable automatisch angelegt, wenn sie das erste mal verwendet wird. Denke da wird der Knackpunkt sein, weil du objAdapter mit 2 unterschiedlichen Objekten füllst. Ebenso hast du "objServ", "objservices" verwendet, sodaß die erste Initialisierung nicht mehr beim 2. Mal zur Verfügung steht.

BTW: Ich habe keinen blassen Schimmer, ob mein Code nun dein Problem löst, aber schau einfach mal ob es geht oder nicht:

Code:
Const COMPUTER = "192.168.0.121"
Const ADAPTERINDEX = "1"

Const USER = "MyUser"
Const PASSWORD = "MyPassword"
Const GATEWAY_IP = "192.168.0.7"

Set wbemImpersonationLevelImpersonate = 3
Set wbemAuthenticationLevelPktPrivacy = 6
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
Set objServ = objLocator.ConnectServer(COMPUTER, "root\cimv2", USER, PASSWORD)
Set objServ.Security_.ImpersonationLevel = wbemImpersonationLevelImpersonate
Set objServ.Security_.AuthenticationLevel = wbemAuthenticationLevelPktPrivacy
Set objAdapter = objServ.Get("Win32_NetworkAdapterConfiguration.index=" & ADAPTERINDEX)
Set Gateway = Array(GATEWAY_IP)
MsgBox objAdapter.IPEnabled
Set Ergebnis = objAdapter.SetGateways(Gateway)
If Ergebnis = 0 then
  MsgBox "Gateway erfolgreich eingestellt."
Else
  MsgBox "Fehler bei der Einstellung des Gateways: " & Ergebnis
End if
wscript.quit
 
Hallo,

danke für die Hinweise. Ich habe den Code jetzt von dir übernommen und die relevanten Daten eingegeben. Leider hat sich nichts gebessert. Ich erhalte immer noch bei

Set objServ = objLocator.ConnectServer(COMPUTER, "root\cimv2", USER, PASSWORD)

die Fehlermeldung "Zugriff verweigert. Schade. Hoffentlich findet noch einer die Ursache :)

Gruß
 
Das wird jetzt nicht dein eigentliches Vorhaben lösen, jedoch ist es aus der Doku von Microsoft um sich mit WMI zu anderen Computern verbinden zu können. Probiere das mal aus und sag Bescheid:

Code:
' Full Computer Name
' can be found by right-clicking My Computer,
' then click Properties, then click the Computer Name tab)
' or use the computer's IP address
strComputer = "FullComputerName" 
strDomain = "DOMAIN" 
Wscript.StdOut.Write "Please enter your user name:"
strUser = Wscript.StdIn.ReadLine 
Set objPassword = CreateObject("ScriptPW.Password")
Wscript.StdOut.Write "Please enter your password:"
strPassword = objPassword.GetPassword()
 
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer(strComputer, _
    "root\cimv2", _
     strUser, _
     strPassword, _
     "MS_409", _
     "ntlmdomain:" + strDomain)
Set colSwbemObjectSet = _
    objSWbemServices.ExecQuery("Select * From Win32_Process")
For Each objProcess in colSWbemObjectSet
    Wscript.Echo "Process Name: " & objProcess.Name 
Next
 
Hallo,

leider erneut "Zugriff verweigert" in besagter Zeile. Hab mal die Fehlermeldung mit angehängt.

Gruß
Christoph
 

Anhänge

  • ZugriffVerweigert.JPG
    ZugriffVerweigert.JPG
    8,6 KB · Aufrufe: 200
Hallo,

habe ich bereits ausgeführt, aber jetzt trotzdem nochmal überprüft. Das müsste passen.

Gruß
Christoph
 
Was ich noch so gelesen habe, war, dass es ratsam ist ein Passwort für den zu verwendenden Account zu vergeben. Angeblich wäre es nicht zwingend notwendig, aber bei Software von MS würde mich mittlerweile nichts mehr wundern. Andere Frage wäre, befinden sich die Rechner in einer "echten" Domäne oder einem einfachen Heimnetz? Bei den Seiten die ich in den letzten Posts referenzierte, war auch immer wieder die Rede von einem Domänenbenutzer der auf den Maschinen entweder Admin ist oder die notwendigen Rechte explizit zugewiesen bekommen hat.

Ebenso wäre noch, dass DCOM für den Zugriff per Remote entsprechende Dienste am Laufen haben muss. Ich habe auf meinen Rechnern diverse Dienste aus Sicherheitsgründen deaktiviert und kann deswegen nicht wirklich testen, was man so dabei beachten sollte. Alternativ könnte man ja einen virtuellen Rechner aufsetzen und dann eine Standardinstallation von Windows XP draufspielen. Sorry, aber ich habe weder die Zeit, noch die große Lust, das zu machen.

Alles in allem wird es eine längere Frickelaktion, es sei denn, ein weiterer aufmerksamer Forumleser hat die alles entscheidende Idee, woran es liegt.

Dennoch wünsche ich dir viel Erfolg bei der Lösung des Problems. Ich konnte dir leider nicht weiter helfen, hoffe aber, dass du es doch noch irgendwie hinbekommst.

Viele Grüße
Rossibaer
 
Servus,

Passwort hilft nix. Ja, es ist ein stinknormales Heimnetz aber ich hab nirgens Hilfen gelesen, die sich nur auf Domänen beziehen. Also das müsste von dem her schon klappen. Ich hoffe jetzt auch einmal, dass vielleicht noch einer den entscheidenden Tipp gibt.

Danke auf jeden Fall für deine Mühen!

Gruß
 
Zurück
Oben