Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch direkt mit UAC (Kontensteuerungsabfrage) und übergebenen Argumenten starten.

Frage Entwicklung Batch & Shell

Mitglied: evinben

evinben (Level 2) - Jetzt verbinden

22.04.2012, aktualisiert 23.04.2012, 12440 Aufrufe, 8 Kommentare

Die übergebenen Argumente mit dem momentanen Code-Stand gehen verloren.

Einen schönen Tag!

Mit dem Code unten ist es möglich den Batch direkt mit UAC zu starten, ohne den Umweg über das Kontextmenü "Als Administrator ausführen".
Da ich viele Batch-Dateien mit Argumente starte, ist der momentane Code-Aufbau halb so nützlich, da das übergebene Argument verloren geht.
Seit einiger Zeit habe ich viele Tricks ausprobiert, um das Argument an die sich neu öffnende CMC-Prozedur erzwungen weiterzuleiten aber leider schaffe ich es nicht alleine, komme nicht weiter und möchte euch um eure Hilfe bitten.
Das eigentliche Problem ist in diesem Code-Aufbau, dass die erste CMD-Prozedur geschlossen und eine neue CMD-Prozedur über VB-Skript aufgerufen wird und da ist die wesentliche Schwachstelle momentan.
Gibt es nun eine Möglichkeit zumindest die ersten fünf Argumente übergeben zu können?

So sieht der Code aus:

01.
:Batch mit erhöhten Rechten (mit Kontensteuerungsabfrage) starten. 
02.
:Eine Alternative zur Auswahl der Kontextmenü-Option "Als Administrator ausführen" mit Rechtsklick über der Datei.  
03.
 
04.
 
05.
@echo off 
06.
@prompt -$G 
07.
chcp 1252 >nul 
08.
echo. 
09.
 
10.
:-------------------------------------- 
11.
:Check for permissions 
12.
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" 
13.
  
14.
: If error flag set, we do not have admin. 
15.
if '%errorlevel%' NEQ '0' ( 
16.
Echo Administrator-Rechte anfordern... 
17.
goto UACPrompt 
18.
) else (goto gotAdmin) 
19.
  
20.
:UACPrompt 
21.
Echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" 
22.
Echo UAC.ShellExecute %0, "", "", "runas", 1 >> "%temp%\getadmin.vbs" 
23.
  
24.
"%temp%\getadmin.vbs" 
25.
call: Exit /b 
26.
  
27.
:gotAdmin 
28.
if exist "%temp%\getadmin.vbs" (Del "%temp%\getadmin.vbs") 
29.
Pushd "%CD%" 
30.
CD /D "%~dp0" 
31.
:-------------------------------------- 
32.
 
33.
 
34.
:Code zum Ausführen. 
35.
:================================= 
36.
 
37.
:Z. B. 
38.
takeown /f %1 && icacls %1 /grant Administratoren:F 
39.
 
40.
pause >nul 
41.
 

Ich bedanke mich sehr für eure Ideen und Hilfe ganz herzlich!

Gruß
evinben
Mitglied: Centauri
22.04.2012 um 13:46 Uhr
Hallo evinben,

Vielleicht hilft dir das weiter.

Tschüss

Centauri
Bitte warten ..
Mitglied: Dani
22.04.2012 um 13:53 Uhr
Moin,
Vielleicht hilft dir das weiter.
Und was genau?


Grüße,
Dani
Bitte warten ..
Mitglied: bastla
22.04.2012 um 16:14 Uhr
Hallo evinben!

Rein "handwerklich" eher so:
01.
:Batch mit erhöhten Rechten (mit Kontensteuerungsabfrage) starten. 
02.
:Eine Alternative zur Auswahl der Kontextmenü-Option "Als Administrator ausführen" mit Rechtsklick über der Datei.  
03.
@echo off 
04.
prompt -$G 
05.
chcp 1252 >nul 
06.
echo. 
07.
 
08.
:-------------------------------------- 
09.
:Check for permissions 
10.
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" && goto :gotAdmin 
11.
 
12.
Echo Administrator-Rechte anfordern... 
13.
set "Params=%*" 
14.
>"%temp%\getadmin.vbs" Echo CreateObject("Shell.Application").ShellExecute "%~f0","%Params:"=""%",,"runas",1 
15.
"%temp%\getadmin.vbs" 
16.
Exit /b 
17.
  
18.
:gotAdmin 
19.
del "%temp%\getadmin.vbs" 2>nul 
20.
Pushd "%~dp0" 
21.
:-------------------------------------- 
22.
 
23.
 
24.
:Code zum Ausführen. 
25.
:================================= 
26.
 
27.
:Z. B. 
28.
takeown /f %1 && icacls "%ArgumentA%" /grant Administratoren:F 
29.
popd
- wobei ich mich frage, woher "%ArgumentA%" kommen soll ...

Grüße
bastla
Bitte warten ..
Mitglied: evinben
23.04.2012 um 14:49 Uhr
Hallo Centauri,

mit Argumenten kann ich bereits in vbs umgehen (von bastla gelernt . Das Problem hat daran bestanden die Argumente an die neue CMD-Prozedur zu übergeben…

Hallo bastla!
Wie immer erfüllst du meine Wünsche hier. DANKEEE!
Der Batch funktioniert mit Argumentübergaben endlich und der in ihm unten integrierte Code zum Ausführen wird tatsächlich mit erhöhten Rechten erfolgreich ausgeführt.

wobei ich mich frage, woher "%ArgumentA%" kommen soll ...
Das sind die verbliebenen Rest-Leichen aus meinen unzähligen Experimenten und dies habe ich oben auf %1 gleich korrigiert. Entschuldigung für die Verwirrung.

Nun kann ich über das Kontextmenü über einem Ordner oder über einer Datei den Besitz mal schnell übernehmen. 1. Projekt abgeschlossen.

Baue ich nun die UAC in jedem Batch ein (wie vom Anfang an geplant gehabt), welcher zur Ausführung unbedingt administrative Rechte erfordert, so erscheint zwar die UAC-Abfrage aber nach deren Bestätigung wird z. B. der nachfolgende Code dennoch nicht mit administrativen Rechten ausgeführt: “Zugriff verweigert“. Das ist mir nun wirklich ein Rätsel und komme schon den ganzen Vormittag von dem Problem nicht weg .
Hier sind die Schritte, die ich unternommen habe:
Der von dir getunte Code von 1. bis 26. Zeile 1:1 übernehmen und unter dem Namen „Batch mit Kontensteuerungsabfrage starten_Schablone.bat“ in einem beliebigen Verzeichnis abspeichern.
In einem neuen Verzeichnis eine Verknüpfung zu „Batch mit Kontensteuerungsabfrage starten_Schablone.bat“ erstellen und hier eine neue Batch mit einem beliebigen Namen, z. B. „Inastall“, wie folgt erstellen:
01.
@echo off 
02.
@prompt -$G 
03.
chcp 1252 >nul 
04.
PushD %~dp0 
05.
echo. 
06.
 
07.
:Als Administrator ausführen 
08.
call "Batch mit Kontensteuerungsabfrage starten_Schablone.bat.lnk" Parameter 
09.
 
10.
copy "Besitz übernehmen_mit Argument.bat" "%AppData%\Install" 
11.
regedit /s "GotAdministratorsOwnership.reg" 
12.
 
13.
pause >nul


Hier sind zwei Probleme zu beobachten:
1. Die Datei "Besitz übernehmen_mit Argument.bat", deren Berechtigungen gezielt während des Testes nur der Benutzer-Gruppe „Administratoren“ zugeteilt ist, wird nicht kopiert (“Zugriff verweigert“), obwohl die UAC jeweils bestätigt wird. Führe ich allerdings die Install-Batch-Datei auf der konventionellen Art aus - gewöhnlich über Rechtsklick „Als Administrator ausführen“, dann ist es alles bestens und diese Datei, die nur auf Administratoren-Berechtigungen limitiert ist, wird brav dorthin kopiert - wie es sich gehört.
2. Beim Ausführen der Zeile mit regedit /s… kommt seltsamerweise erneute UAC Abfrage (also zweimal nacheinander bei jeder Batch-Ausführung). Beim Ausführen auf der konventionellen Art erscheint die UAC dagegen doch nur einmal.

Irgendwelche Ideen zur Behebung dieser Krankheit? Bzw. habe ich etwas falsch gemacht, was ich bei so einer Konstellation dazu noch unbedingt beachten muss?

Gruß
evinben
Bitte warten ..
Mitglied: 106009
23.04.2012 um 14:57 Uhr
Hi,

probiere deine Batches doch ohne deinen ganzen Kram zur Rechtemanipulation aus:
01.
Set  __COMPAT_LAYER=RunAsInvoker  
02.
start "" {Pfad\}Programmname.exe Parameter
Ob's funktioniert, wirst du sehen, keine Garantie.

http://technet.microsoft.com/de-de/library/dd638389(v=ws.10).aspx

Gruß
Bitte warten ..
Mitglied: bastla
23.04.2012 um 15:00 Uhr
Hallo evinben!

Eigentlich dürfte das ja gar nicht funktionieren, da zwar der per "call" aufgerufene Batch mit Admin-Rechten läuft, aber danach ja wieder der ursprüngliche Batch (zB "Inastall") ausgeführt wird ...

Grüße
bastla
Bitte warten ..
Mitglied: evinben
23.04.2012 um 18:49 Uhr
Hallo ollidolli!

die Zeile Set __COMPAT_LAYER=RunAsInvoker war mir neu und für einige Fälle (z. B. beim Kopieren wie oben erwähnt wurde) doch ausreichend! Das Bessere daran ist - neben dem simplen Aufbau, dass die UAC nicht erscheint ;). Allerdings so wie ich es verstanden habe werden nicht volle Administrator-Rechte, sondern eingeschränkte Rechte benutzt. Z. B. beim Starten von Registry-Editor (mit start regedit.exe) werden angeblich die Schlüssel nur im Lesemodus angezeigt. Ich werde auf jeden Fall diese Varianten in der nächsten Zeit ausgiebig testen und werde gerne berichten.


Hallo bastla!

Eigentlich dürfte das ja gar nicht funktionieren…
OK. Dann werde ich halt den Code in jeder Batch in der Kopfzeile einbauen müssen. Zwar wird in jeder Batch etwas unübersichtlicher und der Code ist kaum ausbaufähig (ich bin soweit es geht für mein Schablonen-System mit Verknüpfungen ), nur wenn es nicht anders geht, dann mit Einfügen&Kopieren ist es allermals bessere und vor allem auf Dauer gesehen "robuste Methode". Jedenfalls besser so, als ständig recht zu klicken und die Option „Als Administrator ausführen“ zu wählen. Hier ist es vor allem aus diesem Grund für mich als Anwender verwirrender, da die Hälfte meiner Batches auch ohne Administratorrechte laufen, ich als Anwender nicht jede Batch-Datei in der Beschriftung mit „RunAsAdmin…“ und sonstiges benennen möchte und so muss ich leider öfter zweimal eine Batch starten, für die doch erhöhte Rechte erforderlich sind.
Mit dem verbesserten Code von dir oder mit der Methode von ollidolli ist es mir nun möglich in einer Batch-Datei vom Anfang an fest zu definieren, dass diese immer mit erhöhten Rechten gestartet werden soll.
Schön!

Vielen – vielen Dank euch beide und insbesondere dir bastla für deine Mühe mir den großen Code da oben zu schreiben. Ohne deine Hilfe wäre ich sicherlich mit meinen momentanen Kenntnissen nicht weiter gekommen.

Projekt abgeschlossen!

Gruß
evinben.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Sicherheitsgrundlagen
Programm ohne UAC und Administratorrechte starten (3)

Anleitung von agowa338 zum Thema Sicherheitsgrundlagen ...

Batch & Shell
gelöst Batch, Aufgabe mit höchsten Previlegien soll Outlook "normal" starten (6)

Frage von Zunaras zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch erst starten wenn bestimmte Datei vorhanden ist (7)

Frage von pdiddo zum Thema Batch & Shell ...

Batch & Shell
Batch zum bearbeiten mehrerer CSV (3)

Frage von Matzus87 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...