Sascha321 12 Geschrieben 20. Januar 2009 Melden Teilen Geschrieben 20. Januar 2009 Hallo ich kann auf meinen Winxp sp2 kein VBS-Script ausführen ich bekomme immer folgende Fehlermeldung, "Auf das angegebene Gerät bzw. Pfad oder Datei kann nicht zugegriffen werden. Sie verfügen eventuell nicht über ausreichende Berechtigungen, um auf das Element zugreifen zu können." Ich bin als lokaler Admin angemeldet, auch ein klick mit der rechten Maustaste um das Script zu ändern geht nicht, es kommt der gleiche Fehler. Kann da jemand helfen? Der PC ist nicht in einer Domäne. Zitieren Link zu diesem Kommentar
thumb 10 Geschrieben 20. Januar 2009 Melden Teilen Geschrieben 20. Januar 2009 Hallo, auch wenn Du folgendes VB-Script verwendest: MsgBox "TEST" Gruß, THUMB Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 21. Januar 2009 Melden Teilen Geschrieben 21. Januar 2009 Moin, ruf mal per Rechtsklick die Eigenschaften der Skriptdatei auf. Kontrolliere im Register "Sicherheit", ob du die nötigen Berechtigungen hast (Leserecht reicht aus). Falls nicht, ggf. als Admin Besitz übernehmen und dann die Berechtigungen ändern. Gruß, Nils Zitieren Link zu diesem Kommentar
Sascha321 12 Geschrieben 23. Januar 2009 Autor Melden Teilen Geschrieben 23. Januar 2009 Hallo danke erstmal für die Antworten, das mit dem Script hat sich erledigt das hatte ich aus dem Internet das schien wohl irgendeinen Fehler zu haben. Nun habe ich ein anderes Problem, vielleicht könnt ihr mir dabei helfen. Ich habe hier ein Script was Funktioniert, doch es startet mir ein Programm zu schnell auf nach dem Standbymodus. Nun wollte ich eine Wscript.sleep einbauen doch das klappt irgendwie nicht. Ich will ganz ehrlich sein, ich weiss auch garnicht genau wie das Script funktioniert, vielleicht kann es mir von euch einer mal beschreiben. Wofür steht z.B. das Case 4 und wozu ist der Loop am Ende? Wenn ich zum Beispiel bei Case 4, Case 1 eingebe dann startet der Calc(Calculator) nicht mehr. strComputer = "A31002D" strProcess = "calc.exe" Set oShell = CreateObject("WScript.Shell") Set colMonitoredEvents = GetObject("winmgmts:")._ ExecNotificationQuery("Select * from Win32_PowerManagementEvent") Do Set objLatestEvent = colMonitoredEvents.NextEvent Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colProcesses = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = '" & strProcess & "'") If colProcesses.Count = 0 Then Select Case objLatestEvent.EventType Case 4 oShell.Run """c:\windows\system32\calc.exe""", 1, False End Select Else MsgBox "wird ausgeführt !" End If Loop Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 23. Januar 2009 Melden Teilen Geschrieben 23. Januar 2009 Moin, Nun habe ich ein anderes Problem, vielleicht könnt ihr mir dabei helfen. gern. Aber bitte öffne für neue Probleme bzw. Fragen in Zukunft bitte einen neuen Thread. Ich habe hier ein Script was Funktioniert Das ist schön. Noch besser wäre es aber, wenn du beschreibst, was du eigentlich vorhast. Sonst müssen wir raten, und das macht die Sache etwas ineffizient. Ich will ganz ehrlich sein, ich weiss auch garnicht genau wie das Script funktioniert Dann ist es mutig, dass du es ausführst ... vielleicht kann es mir von euch einer mal beschreiben. Dein Skript prüft, ob ein bestimmtes Ereignis im Energiemanagement eingetreten ist, und startet in dem Fall das angegebene Programm. Wofür steht z.B. das Case 4 und wozu ist der Loop am Ende? Das Select..Case-Konstrukt ist hier ziemlich unsinnig. Vermutlich ist es übrig geblieben, als ein anderes Skript gekürzt wurde. Mit Select..Case kann man mehrere Bedingungen effizient prüfen. Dein Skript hat aber nur eine Bedingung: Es guckt, ob objLatestEvent.EventType den Wert 4 hat. Das wäre mit einem einfachen If..Then leichter gewesen, geht so aber auch. Das Do..Loop ist die Schleife, durch die das Skript läuft: Bei jedem Durchlauf guckt es, ob der Status eingetreten ist, auf den es reagieren soll. Wenn ich zum Beispiel bei Case 4, Case 1 eingebe dann startet der Calc(Calculator) nicht mehr. Naja, logisch irgendwie, oder? Der Status, den du erwartest, ist 4. Der kommt halt vom System. Wenn du nun einfach die Bedingung änderst, passiert halt nichts. Gruß, Nils Zitieren Link zu diesem Kommentar
Cybquest 36 Geschrieben 23. Januar 2009 Melden Teilen Geschrieben 23. Januar 2009 ...Nun wollte ich eine Wscript.sleep einbauen doch das klappt irgendwie nicht. Wenn, wie im Beispiel, die Verzögerung des "calc"-Aufrufs erwünscht ist, gehört das WScript.Sleep genau vor die oshell.run-Zeile. Ausserdem braucht das wscript.sleep auch noch eine Zeit in Millisekunden als Parameter (z.B. wscript.sleep 1000) Zitieren Link zu diesem Kommentar
Sascha321 12 Geschrieben 23. Januar 2009 Autor Melden Teilen Geschrieben 23. Januar 2009 Hallo vielen Dank für die Hilfe. Das Script soll ein Programm, nach dem der PC aus dem Standby kommt starten, aber nur wenn das Programm nicht schon gestartet(offen) ist. Ich habe nun das Script abgeändert doch leider habe ich immer noch einige fragen. Habe mal die fragen bzw. was ich denke was dort passiert Fett dargestellt. strComputer = "Pc-Sascha" strProcess = "calc.exe" Set oShell = CreateObject("WScript.Shell") [b]// erstellt eine Wscript.exe[/b] Set colMonitoredEvents = GetObject("winmgmts:")._ ExecNotificationQuery("Select * from Win32_PowerManagementEvent") [b]//was passiert hier ?[/b] Do [b]//ist für das Loop wo es anfängt[/b] Set objLatestEvent = colMonitoredEvents.NextEvent [b]// wenn ich das weglasse und ich schliesse den Calculator dann öffnet er sich neu, aber nur wenn ich das weglasse, wieso?[/b] Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") [b]//was passiert hier ?[/b] Set colProcesses = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = '" & strProcess & "'") [b]//was passiert hier ?[/b] If colProcesses.Count = 0 Then wscript.sleep 15000 oShell.Run """c:\windows\system32\calc.exe""", 1, False Else MsgBox objLatestEvent.EventType End If Loop Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 23. Januar 2009 Melden Teilen Geschrieben 23. Januar 2009 Moin, wir können auf deine Fragen Antwort geben, aber ganz ehrlich: Sinnvoller ist es, wenn du dir in Ruhe Grundlagen in Scripting und in WMI erarbeitest. Du hast das Skript jetzt in einer Weise geändert, die für mich keinen Sinn ergibt. Set oShell = CreateObject("WScript.Shell") // erstellt eine Wscript.exe Nein, dadurch bekommt das Skript Zugriff auf die Shell-Umgebung. Set colMonitoredEvents = GetObject("winmgmts:")._ExecNotificationQuery("Select * from Win32_PowerManagementEvent") //was passiert hier ? Hier wird eine WMI-Anfrage an den lokalen Provider für das Energiemanagement gestellt. Set objLatestEvent = colMonitoredEvents.NextEvent// wenn ich das weglasse und ich schliesse den Calculator dann öffnet er sich neu, aber nur wenn ich das weglasse, wieso? Kann ich nicht ganz nachvollziehen. Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") //was passiert hier ? Du stzellst eine WMI-Verbindung zu deinem Rechner her. Unnötig, du hast ja schon eine. Offenbar enstanden durch Zusammenkopieren aus verschiedenen Skripts. Set colProcesses = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = '" & strProcess & "'") //was passiert hier ? Hier fragst du alle Prozesse ab, die "calc.exe" heißen. Gruß, Nils Zitieren Link zu diesem Kommentar
Sascha321 12 Geschrieben 23. Januar 2009 Autor Melden Teilen Geschrieben 23. Januar 2009 Hallo ich habe das Script jetzt versucht zu modifizieren, doch ich weiss nicht wie man es noch einfacher machen kann, soll. Die Funktion des Scripts: Wenn der PC aus dem StandBy kommt soll geprüft werden ob das Programm calc.exe gestartet ist, wenn die calc.exe gestartet ist soll das Script nichts machen, wenn die calc.exe nicht gestartet ist soll das script die calc.exe starten. Da das Script ja immer läuft, muss auch noch gefärleistet sein, wenn ich das Programm von Hand beende, das es von dem Script nur dann geöffnet wird wenn der PC wieder aus dem StandBy kommt. Hier das script. strComputer = "Computername" strProcess = "calc.exe" Set oShell = CreateObject("WScript.Shell") Set colMonitoredEvents = GetObject("winmgmts:")._ ExecNotificationQuery("Select * from Win32_PowerManagementEvent") do Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") Set colProcesses = objWMIService.ExecQuery _ ("Select * from Win32_Process Where Name = '" & strProcess & "'") if colMonitoredEvents.NextEvent.EventType = 7 Then if colProcesses.Count = 0 Then Wscript.Sleep 5000 oShell.Run """c:\windows\system32\calc.exe""", 1, False Else MsgBox "programm ist gestartet" End If End If Loop Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.