tomtombon
Goto Top

Verständnisfragen zu einer Batch die einer CMD Administrative Berechtigung verleiht

Moin Moin,

wie der Titel schon sagt, Ich verstehe ein paar Punkte in einer Batch nicht.
Ich habe in einem Forum den unten beschrieben Snip gefunden.
Er funktioniert einwandfrei.
Und ist kein Bug wie manche vielleicht voreilig denken face-smile

Er fragt nur ab ob Adminrechte für das Skript vorhanden sind.
Wenn nicht startet er eine UAC Abfrage wo man sich mit Adminrechten authentifizieren muss.

Gleichzeitig macht er damit eine elevated Version des Skript.

Ich liebe den Snipp face-smile


Ich habe nur ein paar Verständnisfragen.

  • if /I '%1'=='ELEV' (shif /It & goto gotPrivileges)

Ich lese daraus das er noch einmal abfragt ob elevated rechte vorhanden sind. Wenn ja überspringe und gehe zu dem eigentlichen Skript.
Nur,
was meint
  • 'ELEV'

und was
  • shif /It & goto

Bzw, wie kann Ich das in einem andere Kontext verwerten face-smile


  • ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
  • ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
  • "%temp%\OEgetPrivileges.vbs"
  • exit /B


Nach viel Überlegen ist mir dann in den Sinn gekommen das Echo ja nicht nur auf dem Monitor ausgibt. Nutze Ich selbst ja auch face-sad
Wald, Bäume und so.

Sprich der Punkt sagt "Schreibe Set UAC ... in die .vbs und führe diese aus."


Beim Zusammentragen habe Ich natürlich nachgeschlagen, und einiges selbst beantwortet was Ich an Fragen hatte.
Da ist mir auch dieser Post aufgefallen:
https://www.winhelponline.com/blog/vbscripts-and-uac-elevation/

Wenn man sich aber DIE .vbs anschaut sind die um einiges aufwendiger face-smile

Dieses Snippet ist cool.
Die Größe ist nur der "Sauberkeit" des Code anzulasten.


Ich glaube Ich müßte mich ein wenig wieder mal mit VBS rumschlagen.
face-sad
Ich wollte eigentlich meine Zeit eher in PS stecken.
Aber auf massiv vielen Kunden systemen ist PS arg beschränkt.
Und Ich mache Unterstützung für Aussendienstler die vom Level "Kollege" bis Super DAU sind.

Was Ich mit PS versucht habe war mir zuviel negative Rückmeldung.
Und das was gemacht werden soll ist nichts was die CMD nicht schafft ohne verbiegen face-wink


FAZIT:

Im Prinzip haben sich wie schon erwähnt meine Fragen in Luft aufgelöst bis auf was "shif /It &" genau macht.
Aber vielleicht ist es eine Anregung für Leute die sich in die Batch Welt reinwagen face-smile

So long

Tom


:Begin_toget_rights
:: Automatically check & get admin rights
::
:: A sincere Thanks to Matt (http://stackoverflow.com/users/1016343/matt) over @ Stackoverflow.com (http://stackoverflow.com/questions/7044985/how-can-i-auto-elevate-my-batch-file-so-that-it-requests-from-uac-admin-rights) for sharing this great piece of scripting.
::


:checkPrivileges 
NET FILE 1>NUL 2>NUL
if /I '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )   
 
 
:getPrivileges 
if /I '%1'=='ELEV' (shif /It & goto gotPrivileges)    
ECHO. 
ECHO **************************************
ECHO Invoking UAC for Privilege Escalation 
ECHO **************************************
 
setlocal DisableDelayedExpansion
set "batchPath=%~0"  
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"   
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"   
"%temp%\OEgetPrivileges.vbs"   
exit /B 

cls

:gotPrivileges 

Content-ID: 503450

Url: https://administrator.de/contentid/503450

Printed on: December 2, 2024 at 18:12 o'clock

emeriks
emeriks Oct 11, 2019 at 14:46:30 (UTC)
Goto Top
Hi,
ob das jetzt so cool ist, ich weiß nicht ...
Zum einem: Wenn schon der Umweg über VBS, warum dann nicht gleich alles in VBS?
Zum anderen: Wenn man diese Batch schon eleviert startet, sei es aus einer elevierten CMD oder über das Kontextmenü des Explorers, dann fragt es trotzdem nochmal die Adminanmeldung ab, weil ja da der Parameter ELEV nicht angegeben ist, oder? Ich hab es nicht ausprobiert.
Und: Wenn Du mit Powershell arbeiten willst, dann sei Dir gesagt, dass Du dort auch ganz einfach auf Shell.Application zurückgreifen kannst, bzw. Du kannst sogar dierekt abfragen, ob Du schon eleviert läufst. Suche einfach mal nach "PowerShell detect if elebated" oder sonähnlich. Da wirst Du garantiert fündig.