k-ist-k
Goto Top

CMD startet CMD als Admin inkl. Skript

Hallo,

ich möchte ein Skript (ohne Admin) starten, das ein Skript startet (und als Admin ausführt)

Skript A: (liegt am USB Stick und wird von einem User ohne Admin Rechten doppel geklickt)
REM führe nachfolgendes Skript als Admin aus
runas /user:Administrator "cmd /c D:\SkriptB.cmd"  

Skript B: (liegt am USB Stick, wird von Skript A gestartet und verlangt ein Passwort)
REM Teste ob Skript als Admin gestartet wird
echo "Test" >> C:\test.txt  

Hier der Auszug vom CMD Fenster (das als nicht Admin gestartet ist)
fehler

---

Das Problem ist, das das Skript als nicht Admin ausgeführt wird.
schreibt man aber:
runas /user:Administrator cmd
dann wird ein neues CMD Fenster geöffnet mit Admin Rechte.
Geht das nicht, wenn man einen Pfad mitgibt ?


Auf dem System wo ich bin, ist die Rechte Maustaste deaktiviert.
Und ich möchte mir es sparen, das ich ein CMD als Admin aufrufe und zum Skript navigiere.


Danke

LG K

Content-Key: 551799

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

Printed on: April 20, 2024 at 04:04 o'clock

Member: TomTomBon
Solution TomTomBon Feb 26, 2020 at 12:44:25 (UTC)
Goto Top
Moin Moin,

Was Ich für Admin Rechte Abfrage benutze ist das folgende:

@echo off &setlocal enableextensions ENABLEDELAYEDEXPANSION 
@prompt -$G
echo Run shell as UAC ADMIN

:: 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 
::Persoenliches Skript



Das fragt einfach ab ob das Skript elevated läuft.
Wenn nicht fragt es danach face-smile

Just my Senf
Tom
Member: K-ist-K
K-ist-K Feb 26, 2020 at 13:29:39 (UTC)
Goto Top
wow es funktioniert.
Auf das wäre ich nie draufgekommen xD

Einfach unten, das einfügen was man benötigt.
Es ist super.
Danke
Member: colinardo
colinardo Feb 26, 2020 updated at 15:56:32 (UTC)
Goto Top
Servus.
Mit ein bisschen PS statt VBS in der Batch geht es auch noch etwas kompakter
@echo off
net session >nul 2>&1 || (powershell -EP Bypass -NoP -C start "%~0" -verb runas &exit /b)  
Grüße Uwe
Member: K-ist-K
K-ist-K Feb 26, 2020 at 17:08:20 (UTC)
Goto Top
Danke für eine Alternative
Member: TomTomBon
TomTomBon Mar 02, 2020 at 15:26:58 (UTC)
Goto Top
Danke für den Snippet.

Ist noch schöner als VBS face-smile

Ich teste mal wie Ich es nehmen kann bei mir.

So long
Tom
Member: TomTomBon
TomTomBon Mar 02, 2020 at 16:10:14 (UTC)
Goto Top
Ich bin Neugierig gewesen.

Wie zu erwarten, und gehofft, Schneller face-smile

Nochmals Danke!


Mein Script um das von einem beliebigen Ort lokal zu holen und lokal unter c:\tmp-data auszufuehren face-smile

@echo off 
setlocal enableextensions ENABLEDELAYEDEXPANSION 
@prompt -$G

md "c:\TMP-DATA"  
set Auszufuehrend="c:\TMP-DATA\%~n0.cmd"  
copy "%~0" "c:\TMP-DATA\%~n0.cmd"  


:ask_for_ADMIN-Rights
net session >nul 2>&1 || (powershell -EP Bypass -NoP -C start '"%Auszufuehrend%'" -verb runas &exit /b)  
timeout /t 3 >NUL


:Get-ADMIN-Rights