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 per Verknüpfung mit erhöhten Rechten (z. B. als Administrator) ausführen, allerdings dabei den Pfad in !Ausführen in! nicht ignorieren.

Frage Entwicklung Batch & Shell

Mitglied: evinben

evinben (Level 2) - Jetzt verbinden

30.03.2012, aktualisiert 31.03.2012, 9906 Aufrufe, 6 Kommentare

OS = WINDOWS 7

Das Verzeichnis in "Ausführen in" wird ignoriert, wenn Batch über Verknüpfung als Administrator ausgeführt wird.
Batch-Datei über Verknüpfung mit erhöhten Rechten starten, wobei das Arbeitsverzeichnis in "Ausführen in“ nicht ignorieren.

Hallo,

wenn über eine Verknüpfung eine Batch-Datei mit erhöhten Rechten – und genauer mit der Option „Als Administrator ausführen“ - gestartet wird, dann wird das Verzeichnis in „Ausführen in“ (das unter Eigenschaften der Verknüpfung gesetzt ist) ignoriert und es wird stattdessen jeweils auf das Arbeitsverzeichnis „%windir%\System32“ zugegriffen.

Meine bisherigen Versuche:
Wenn im Batch PushD %~dp0 oder cd /d "%~dp0" hinzugefügt wird, dann verschlimmert es sich sogar: selbst mit normalen Benutzer-Rechten wird der Batch jeweils in demjenigen Arbeitsverzeichnis ausgeführt, in welchem sich die Batch-Datei befindet, aber nicht in dem gewünschten, das in „Ausführen in“ angegeben ist.
Mir runas.exe habe ich ebenso experimentiert, allerdings wird das Verzeichnis in „Ausführen in“ der Verknüpfung nicht mitberücksichtigt.

Schon längst stolpere ich über dieses Problem, sodass ich mir es nun vorgenommen habe dem einen Schluss zu ziehen.

Vielen Dank für eure Vorschläge!

Gruß
evinben
Mitglied: bastla
30.03.2012 um 23:03 Uhr
Hallo evinben!

Hinsichtlich
Wenn im Batch PushD %~dp0 oder cd /d "%~dp0" hinzugefügt wird, dann verschlimmert es sich sogar: selbst mit normalen Benutzer-Rechten wird der Batch jeweils in demjenigen Arbeitsverzeichnis ausgeführt, in welchem sich die Batch-Datei befindet
In diesem Fall gilt doch "Works as designed" (da ja "%0" die aufgerufene Batchdatei repräsentiert) ...
Als Workaround würde sich anbieten, den gewünschten Pfad einfach als Aufrufparameter mitzuliefern (einmal musst Du ihn in der Verknüpfung ohnehin eintragen) oder, falls ohnehin eine Datei oder ein Ordner als Parameter übergeben wird, deren Pfad (also zB "%~dp1") zu verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
30.03.2012 um 23:41 Uhr
Hallo evinben,

darüber bin ich auch schon gestolpert. Wenn man ein bisschen im Internet stöbert, dann findet man einige Kommentare von M$, die diese Sache mit der Vermeidung von Sicherheitslücken begründen. Ist also so gewollt.
Wie bastla schon erwähnt hat, übergib den Pfad als Argument. Das kannst du direkt in die Verknüpfung implementieren. Die aufwändigere Variante (die aber auch kein besseres Ergebnis liefert) ist das Auslesen des Arbeitsverzeichnisses aus der Verknüpfung.

RunAsAdmin.vbs
01.
If WScript.Arguments.Count = 0 Then WScript.Quit 
02.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
03.
If LCase(objFSO.GetExtensionName(WScript.Arguments(0))) = "lnk" And objFSO.FileExists(WScript.Arguments(0)) Then 
04.
  Set objLnk = CreateObject("WScript.Shell").CreateShortcut(WScript.Arguments(0)) 
05.
  arg = objFSO.GetFolder(objLnk.WorkingDirectory).ShortPath 
06.
  CreateObject("Shell.Application").ShellExecute objLnk.TargetPath, arg, , "runas", objLnk.WindowStyle 
07.
  Set objLnk = Nothing 
08.
End If 
09.
Set objFSO = Nothing
Nun kannst du per Drag/Drop eine Verknüpfung zu deinem Batch auf dieses Script ziehen, das UAC promptet dich wie gewohnt an und das Arbeitsverzeichnis wird als Parameter an deinen Batch übergeben (der aber trotzdem zunächst im System32 Verzeichnis startet). Ebenso könntest du das Script natürlich auch in das SendTo Verzeichnis legen. Der leere Parameter der ShellExecute Methode würde eigentlich das Arbeitsverzeichnis beschreiben, wird aber durch das "runas" Verb ignoriert

Grüße
rubberman
Bitte warten ..
Mitglied: evinben
31.03.2012 um 08:15 Uhr
Hallo bastla und rubberman,

beide Varianten habe ich nicht hinbekommen.

Wenn ich im Ziel der Verknüpfung den Pfad mit dem Argument so eintrage
"C:\Probe\Meine Batch Datei.bat" "C:\Probe\Arbeitsverzeichnis"
und die Datei über die Verknüpfung mit Administrator ausführe, dann blitzt das CMD-Fenster kurz auf und das war's. Wenn ich das Gleiche allerdings mit normalen Benutzerrechten ausführe, dann geht’s und mir wird das übergebene Argument mit echo %1 begleitend mit einer Pause angezeigt.
Vielleicht schildere ich einfach das Vorhaben konkret:
Ich beabsichtige in die Aufgabenplanung vordefinierte XML-Schemas für alle Benutzer zu importieren und am besten unter dem Benutzer SYSTEM.
01.
:Ale XML-Aufgaben-Schemas, die sich hier in diesem Verzeichnis befinden, importieren 
02.
 
03.
@echo off 
04.
setlocal enabledelayedexpansion 
05.
@prompt -$G 
06.
chcp 1252 >nul 
07.
:PushD %~dp0 
08.
echo. 
09.
 
10.
:Argument anzeigen, falls vorhanden: repräsentiert das Arbeitsverzeichnis, das bei erhöhten Rechten benutzt werden soll 
11.
set Argument=%~1 
12.
if defined Argument echo %Argument% 
13.
pause 
14.
 
15.
set "UserName=BLA" 
16.
set "Password=BLA-BLA" 
17.
	 
18.
 
19.
set Überschrift=Folgende Aufgaben werden in die Aufgabenplanung importiert: 
20.
 
21.
for /f "tokens=*" %%i in ('dir /b *xml') do ( 
22.
	set XML-File=%%i 
23.
	set FileName=%%~ni 
24.
	if defined XML-File (if defined Überschrift echo %Überschrift%) & set Überschrift= 
25.
	echo. 
26.
	echo "!XML-File!" 
27.
	schtasks /Create /S %ComputerName% /RU "%UserName%" /RP "%Password %" /XML "!XML-File!" /TN "!FileName!" /F 
28.
29.
pause >nul
1. Finde ich es sehr schlecht, das ich erzwungen werde mein Passwort im Klartext einzugeben und
2. das Hinzufügen unter dem SYSTEM-Benutzer mit meinem bzw. mit Administrator-Passwort scheitert. Es meldet mir jeweils, dass das Passwort falsch sei. So ein Benutzer hat ja in diesem Sinne kein Konto auf dem PC und kein Passwort!? Ich habe die volle Administrator-Rechte. Was mache ich hier falsch?
Als Notlösung importiere ich die Aufgaben-Schemas unter meinem normalen Benutzernamen (unter welchem ich angemeldet bin) und gebe das Passwort leider im Klartext ein. Dann gehe ich in die Aufgabenplanung und korrigiere in allen importierten Schemas den gesetzten Benutzer auf SYSTEM-Benutzer.
So wie ihr es sieht, ist es weiterhin eine schlechte Lösung, da nach dem Importieren aller Aufgaben diese manuell nachgearbeitet werden müssen. Dennoch ist es eine große Erleichterung, als alle diese vollständig von Hand einzutippen - kein Zweifel.

Gruß
Evinben
Bitte warten ..
Mitglied: bastla
31.03.2012 um 10:06 Uhr
Hallo evinben!

Versuch es mal zum Thema "Parameter übergeben" so:
Erstelle den Batch in einem Pfad ohne Leerzeichen (im Beispiel "D:\Batch\DeinBatch.cmd") und verwende in der Verknüpfung als Ziel
 cmd /c D:\Batch\DeinBatch.cmd "D:\Ordner in dem der Batch laufen soll"
- der Parameter sollte wie gewohnt als %1 auch bei Ausführung als Administrator ankommen ...

Wenn Du mehrere Parameter verwendest, sollte jeder davon (auch wenn keine Leerzeichen enthalten sind) unter Anführungszeichen gesetzt werden - und falls Du Wert darauf legst, dass auch beim letzten die Anführungszeichen geschlossen werden , musst Du am Ende doppelte Anführungszeichen verwenden (nötig ist das aber nicht, da zB %~4 jedenfalls den Parameter ohne Anführungszeichen liefert) -also etwa:
 cmd /c D:\Batch\DeinBatch.cmd "D:\Ordner in dem der Batch laufen soll" "Parameter 2" "Parameter3" "und noch ein vierter""
Grüße
bastla
Bitte warten ..
Mitglied: evinben
31.03.2012 um 12:41 Uhr
Hallo bastla,

danke dir.
Warum diese Leerzeichen soooo.. problematisch sein sollen bleibt uns wohl ein Rätsel.
Eine Verzeichnis-Struktur sollte möglichst verständlich und Lesefreundlich aufgebaut sein. Ich möchte in dem 21. Jahrhundert so einen Schreibstil nicht unterstützen. Letztendlich sind wir alle Menschen und es sollte uns allen möglichst verständlich sein und insbesondere dann, wenn die Komplexität kontinuierlich ansteigt.
Das Problem habe ich mit Hilfe eurer Anregungen temporär folgendermaßen gelöst:

01.
call "D:\Eigene Einstellungen\Netzwerkeinstellungen\Aufgabenplanung\Ale XML-Aufgabe-Schemas, die sich hier in diesem Verzeichnis befinden, importieren_Schablone.bat.lnk" "%~dp0"

Wie ihr sieht, das aktuelle Verzeichnis wird als Argument übergeben und in dem aufrufenden Batch als Arbeitsverzeichnis gesetzt. Sollte sich die Verzeichnisstruktur mit der Zeit ändern, funktioniert der Aufruf weiterhin - dankbar dem Windows-Mechanismus die Verknüpfung automatisch zu aktualisieren.
Es ist leicht möglich den CALL-Batch mit der obigen Zeile in dem Explorer-Kontextmenü (z. B. in SendTo oder gleich dann als ein neuer Eintrag für den Dateityp .lnk etwa wie „Verknüpfung als Administrator starten“ mit den Schlüsseln [runas] [command]) einzubauen.
Schauen wir mal was die Praxiserfahrung so zeigen würde. Vielleicht baue ich den Kontextmenü-Eintrag auf allen Rechner ein, falls keine Kollisionen vorprogrammiert wären.

Gruß
evinben
Bitte warten ..
Mitglied: pieh-ejdsch
16.04.2012 um 00:09 Uhr
moin evinben,

wenn Dein CMD Fenster nur kurz aufblitzt lässt sich im Ziel der Verknüpfung CMD.exe /K nutzen:
01.
C:\Windows\System32\cmd.exe /k call "D:\Eigene Einstellungen.cmd"
somit solltest Du Die Fehler ehern sehen können.

als Schmankerl kannste immernoch im Ziel der Verknüpfung mit pushD Verzeichnis vor der Batchausführung hinein springen:
01.
C:\Windows\System32\cmd.exe /k pushd "D:\" && "Eigene Einstellungen.cmd"
genau so verwende ichs auch in der Aufgabenplanung - ebend wegen dieser komischen Sache mit den Anführungszeichen.

Gruß Phil
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...