Top-Themen

Aktuelle Themen (A bis Z)

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, 13742 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 ..
Ähnliche Inhalte
Batch & Shell
Powershell Start-Process mit Argumenten
gelöst Frage von lisaluftBatch & Shell4 Kommentare

Ich hatte ein cmd-Skript mit den Befehl: start /wait c:\test\CitrixReceiver.exe /silent /includeSSON ENABLE_SSON="Yes" Funktionierte genau so. Jetzt habe ich ...

Sicherheitsgrundlagen
Programm ohne UAC und Administratorrechte starten
Anleitung von agowa338Sicherheitsgrundlagen3 Kommentare

Hallo, ich denke, jeder kennt das Problem, ein Programm das die UAC aufpoppen lässt ohne dass es wirklich Administrator ...

Batch & Shell
Batch Parameter Argumente Übergabe Problem
gelöst Frage von BloodyRulzBatch & Shell1 Kommentar

Hallo zusammen, ich hoffe ich bekomme hier wieder die gewünschte Hilfe, da ich mit meinen sehr eingeschränkten Batchkenntnissen am ...

Batch & Shell
Variablen von Batch zu VBS übergeben
gelöst Frage von ciejayBatch & Shell10 Kommentare

Hallo liebe Com, ich versuche mich gerade in der Batch und vbs Programmierung und bin daher sozusagen noch Anfänger. ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 107 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
Frage von HelloWorldBatch & Shell18 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

Windows Server
Ping auf einen bestimmten Server nicht möglich
gelöst Frage von a.thierWindows Server7 Kommentare

Hallo, ich habe folgendes Problem. srv-dc1: Ping srv-nav > geht Ping srv-exchange > geht nicht srv-exchange: Ping srv-dc1 > ...

Windows 10
Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App
Tipp von kgbornWindows 107 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...