RunAs mit VBscript - Ausführung mehrerer VERSCHACHTELTER batch Dateien als Admin im eingeschränkten Benutzerkonto
Hallo,
ich habe eine Rechnerumgebung mit mehreren Clients, die sich NICHT in einer Domäne befinden.
Auf diesen Rechnern möchte ich regelmässig Softwareupdates durchführen für z.B. Adobe, VLC, 7-zip, etc. pp.
Ich habe mir dafür jeweils batchdateien geschrieben, welche diese programme per silent Schalter installieren/aktualisieren etc.
Mein Problem ist nun, dass einige der Programme Administratorrechte benötigen, der Benutzer aber keine Administratorrechte hat.
Die Scripte sollen sich nach jeder Anmeldung des Benutzers starten, dann wird überprüft, ob es Neuerungen auf dem zentralen Speichern gibt und wenn ja, installiert, ansonsten das Script beendet.
Da ich mit "RunAs" kein Passwort mitgeben kann, habe ich mir shconmal ein .VBS script im netz gesucht:
Ich habe nun aber viele batchdateien, die je nach Bedingung aufgerufen werden - dann aber leider nicht mehr als Administrator.
Wie kann ich das geshcickt ändern ? Ich kenne mich in vbs GAR NICHT aus.
Eine andere Frage bzw. Überlegung:
Habe es schon über den Tasklplaner von Windows XP probiert, wenn ich da ausführen als Administrator einstelle und sich ein Benutzer anmeldet, dann wird es zwra im Hintergund ausgeführt (TaskManager zeigt es an), aber der Benutzer bekommt dann keinen Hinweis - das ist shclecht.
Wenn ich dem Benutzer einen Hinweise hinterlassen könnte, dass er nichts am PC machen soll, während das Update läuft, wäre das auch ok.
Ich hoffe, ihr könnt mir einen guten, einfachen Tip geben, wie ich das realisieren kann.
Dankeschön!
ich habe eine Rechnerumgebung mit mehreren Clients, die sich NICHT in einer Domäne befinden.
Auf diesen Rechnern möchte ich regelmässig Softwareupdates durchführen für z.B. Adobe, VLC, 7-zip, etc. pp.
Ich habe mir dafür jeweils batchdateien geschrieben, welche diese programme per silent Schalter installieren/aktualisieren etc.
Mein Problem ist nun, dass einige der Programme Administratorrechte benötigen, der Benutzer aber keine Administratorrechte hat.
Die Scripte sollen sich nach jeder Anmeldung des Benutzers starten, dann wird überprüft, ob es Neuerungen auf dem zentralen Speichern gibt und wenn ja, installiert, ansonsten das Script beendet.
Da ich mit "RunAs" kein Passwort mitgeben kann, habe ich mir shconmal ein .VBS script im netz gesucht:
Option explicit
Dim oShell
set oShell= Wscript.CreateObject("WScript.Shell")
'Replace the path with the program you wish to run c:\program files...
oShell.Run "RunAs /noprofile /user:administrator ""C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE"""
WScript.Sleep 100
'Replace the string --> yourpassword~ with the
'password used on your system. Include the tilde "~"
oShell.Sendkeys "yourpassword~"
Wscript.Quit
Ich habe nun aber viele batchdateien, die je nach Bedingung aufgerufen werden - dann aber leider nicht mehr als Administrator.
Wie kann ich das geshcickt ändern ? Ich kenne mich in vbs GAR NICHT aus.
Eine andere Frage bzw. Überlegung:
Habe es schon über den Tasklplaner von Windows XP probiert, wenn ich da ausführen als Administrator einstelle und sich ein Benutzer anmeldet, dann wird es zwra im Hintergund ausgeführt (TaskManager zeigt es an), aber der Benutzer bekommt dann keinen Hinweis - das ist shclecht.
Wenn ich dem Benutzer einen Hinweise hinterlassen könnte, dass er nichts am PC machen soll, während das Update läuft, wäre das auch ok.
Ich hoffe, ihr könnt mir einen guten, einfachen Tip geben, wie ich das realisieren kann.
Dankeschön!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 168622
Url: https://administrator.de/contentid/168622
Ausgedruckt am: 19.12.2024 um 08:12 Uhr
15 Kommentare
Neuester Kommentar
Hallo,
diese Sendkeys-Krücke ist meiner Meinung nach keine gute und auch keine funktionssichere Methode, das, was du vorhast zu bewerkstelligen.
Das Passwort mitzugeben sollte nicht allzu schwer sein. (Google hätte sicherlich auch gut geholfen...)
Folgendes ist zwar nicht sicherer, aber funktionssicherer, da SendKeys auch daneben senden kann ;) - und du kannst weiterhin bei Batch bleiben
Gruß
Dominique
PS.:
Einfacher wäre es, einfach geplante Tasks zu erstellen...
Warum sollte der User nichts machen?
Könnte auch so gehen:
diese Sendkeys-Krücke ist meiner Meinung nach keine gute und auch keine funktionssichere Methode, das, was du vorhast zu bewerkstelligen.
Das Passwort mitzugeben sollte nicht allzu schwer sein. (Google hätte sicherlich auch gut geholfen...)
Folgendes ist zwar nicht sicherer, aber funktionssicherer, da SendKeys auch daneben senden kann ;) - und du kannst weiterhin bei Batch bleiben
Echo Geheimespassqort | Runas /USER:Dominique Programm.exe
Gruß
Dominique
PS.:
Einfacher wäre es, einfach geplante Tasks zu erstellen...
Warum sollte der User nichts machen?
Könnte auch so gehen:
' Option explicit lasse ich mal weg...
'Deklarieren von Variablen mag ich auch nicht...
set oShell= Wscript.CreateObject("WScript.Shell")
'genau so wenig, wie Kommentare ;)
oShell.Run "CMD /C Echo Passwort|RunAs /noprofile /user:administrator ""C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE""" '<- Hier bin ich mir nicht ganz sicher, ob das so geht...
MsgBox "Bitte tun sie jetz nix!" & vbcrlf & "Mache Updates...", vbSystemModal + VBInformation, "Hinweis"
'Wscript.Quit Braucht keiner
Hallo Diminique,
Hallo Nachtikea,Da ich aber kein VBS kann, müsste ich mit einem VBS script eine batch als Admin starten, die wird abgearbeitet und am ende startet diese batch ein anderes vbs script was nur dazu dient, wieder eine batch als admin zu starten. Das ist Blödsinn.
Jepp, das ist Blödsinn. Um nicht zu sagen, Schwachsinn.
Ein Script arbeitet mehere Kommandos nach und nach ab. Das ist nicht nur bei einem Batch so, sondern auch bei einem VBScript.
So ist das VBS auch dazu in der Lage, anstelle der Batch, die ein weiteres VBScript startet, die dann wieder eine Batch startet ääh einfach nach Ausführung der ersten Batch, die zweite zu starten.
Krass, wa? Sorry, ist nicht mein Wetter
set wshshell = createobject("wscript.shell")
wshshell.run ("cmd /C das batch")
Do While Wshshell.AppActivate("Batchfenstertitel o.Ä.")
Sleep 100
Loop
wshshell.run das nächste, immer so weiter...
Es gibt aber Leute, die das besser machen, als ich...
Ist das eine Idee?
Wenn ja, könnte man sich Mühe geben und was posten.
Gruß
Dominique
PS.:
Vielleicht ein Skript, was einen Ordner auf eine bestimmte Datei überprüft und solange diese Datei noch nicht da ist
So hätte ich es auch gemacht, ist aber nicht der professionelle Weg.Hallo mein französisch klingender Forumsteilnehmer,
Das verdient einen goldenen Stern Mein krasses Script war nur ein Funktionsbeispiel.
zum PS:
Ja, das Prinzip ist das, was ich auch machen würde. Mit einem VBS geht das genauso. Nun ist es aber erstmal egal, ob Batch oder VBS.
VBS würde meiner einung nach so aussehen:
set fso = createobject("scripting.filesystemobject")
'Methode 1: Wenn existiert, dann...
if fso.fileexist("bla.txt") Then
Tuhe das
tuhe das
Else
Tuhe was anderes
End If
'Oder, noch besser:
'Solange existiert, warte und tuhe dann etwas (Dialog anzeigen:
Do While FSO.Fileexist(bla.txt")
sleep 500 'Entspricht 0.5 Sek.
Loop
MsgBox "Fertig!"
Der einzige Unterschied hier ist, dass wir ziemlich präzise auf das Ereignis, dass die Datei existiert, oder halt eben gelöscht wird warten können.
Ansonsten, schreib doch mal ein Batch, wie du es ungefähr für richtig hältst.
So kommen wir der Praxis, denke ich etwas näher.
Oder:
Nenne mir die genauen Bedingungen und ich versuche, etwas unkrasses, produktiveres zu basteln
Gruß
Dominique
Grundsätzlich sicherlich nicht schlecht.
Ich würde die überflüssigen @echo off und @'s und cls' noch vlt. herausnehmen, das macht einen komischen Eindruck.
Wobei ich als User schon stutzig werden würde, wenn mich auf einmal so ein schwarzer Kasten anschreien würde.
Vor allen Dingen, wenn die Schleife abbricht, die andere Batch (warum auch immer) die Dateien nicht erstellt...
und das Fenster nicht mehr aufhört, zu schreien.
Gruß
Dominique
Ich würde die überflüssigen @echo off und @'s und cls' noch vlt. herausnehmen, das macht einen komischen Eindruck.
Wobei ich als User schon stutzig werden würde, wenn mich auf einmal so ein schwarzer Kasten anschreien würde.
Vor allen Dingen, wenn die Schleife abbricht, die andere Batch (warum auch immer) die Dateien nicht erstellt...
und das Fenster nicht mehr aufhört, zu schreien.
Gruß
Dominique
etwas zu CLSen, was keine Augabe gibt, ist meiner Meinung nach nicht ziemlich sinnvoll...
Nun ja, das wäre meine auf die Schnelle gebastelte Lösung:
Dein Script schreibt einen Status in die Reg und sobald dieser von dem VBS gelesen wird, spuckt es einen kleinen Dialog aus.
Wenn nach 6 Minuten kein Status erscheint, bricht das Script ab und meldet einen Timeout (Die Zeit ist selbstverständlich anpassbar)
Gruß
Dominique
Nun ja, das wäre meine auf die Schnelle gebastelte Lösung:
set wshshell = createobject("Wscript.Shell")
RegPfadstatus = "HKEY_LOCAL_MACHINE\SOFTWARE\SWUpdates\Status"
on error resume next
MsgBox "Ihr System wird aktualisiert" & vbcrlf & "Bitte schließen Sie alle geöffneten Anwendungen, bevor Sie fortfahren.", vbSystemModal + vbInformation, "Softwareupdates werden installiert..."
wscript.sleep 4500 '4,5 Sekunden warten.
counter = 1
Do
if counter = 360 Then '6 Minuten
MsgBox "Die Updates scheinen fehlgeschlagen zu sein." & vbcrlf & "Die anwendung antwortet nicht, der Vorgang wird abgebrochen...", vbexclamation + VbWarning, "Timeout"
wscript.quit
End If
counter = counter+1
wscript.sleep 100
Err.Clear
If Wshshell.RegRead(RegPfadstatus) = "OK" Then
if err.number = 0 Then
MsgBox "Die Installtion der Updates wurde abgeschlossen.", vbinformation, "Ende"
wscript.quit
End If
elseif Wshshell.RegRead(RegPfadstatus) = "Fehler" Then
If Err.Number = 0 Then
MsgBox "Bei der Installation der Updates ist ein Fehler aufgetreten!", vbExclamation + vbSystemModal, "Fehler bei Updates!"
wscript.quit
End If
End If
Loop
Wenn nach 6 Minuten kein Status erscheint, bricht das Script ab und meldet einen Timeout (Die Zeit ist selbstverständlich anpassbar)
Gruß
Dominique