2017-05-10 5 views
0

Guten Morgen,Batch Administrator Berechtigungsprüfung

Ich versuche zu überprüfen, ob ein Batch mit Administratorrechten ausgeführt wird. fand ich diesen Befehl, um zu überprüfen:

openfiles >nul 2>&1 
if NOT %errorLevel% == 0 
... 

oder Netto-Sitzung statt openfiles.

Alles funktioniert, wenn ich die Eingabeaufforderung als Administrator öffnen und einen Fehler zurückgebe, wenn ich die normale Eingabeaufforderung benutze.

Das Problem tritt auf, wenn ich versuche, zwei Stapel in einer einzigen Eingabeaufforderung mit erhöhten Rechten auszuführen; Der erste Stapel wird korrekt ausgeführt, der zweite gibt den Fehler zurück.

was mache ich falsch?

+0

Nichts ist falsch mit den Befehlen, die Sie zeigen, das Problem liegt woanders. Ich würde bedingte Ausführung statt Errorlevel-Prüfung 'openfiles> nul 2> & 1 || verwenden was auch immer " – LotPings

+0

Danke für die Antwort, ich habe versucht, aber es ist das Gleiche. –

+0

Das Problem ist immer noch woanders im Code, den Sie nicht zeigen. Mein Hinweis war nicht mit dem Problem verbunden. Bitte lesen Sie, was ein [MCVE] ist. – LotPings

Antwort

0

Es ist nicht so kompakt wie die Methode, die Sie verwenden, aber eine andere Methode, die ich benutzt habe erfolgreich zahlreiche Male in der Vergangenheit ist wie folgt:

IF EXIST %SYSTEMROOT%\SYSTEM32\WDI\LOGFILES GOTO GOTADMIN 
[Whatever commands you want to run if not running as admin] 
:GOTADMIN 
[Whatever commands you want to run if running as admin] 

Das funktioniert, weil in der Standardeinstellung nur Windows erlaubt Zugriff auf das WDI-Verzeichnis mit erhöhten Berechtigungen. Wenn Sie dem Skript also mitteilen, dass es in diesem Verzeichnis nach einem anderen Verzeichnis suchen soll, das vorhanden sein soll, kann es verwendet werden, um festzustellen, ob es als Administrator ausgeführt wird oder nicht. Wenn ja, wird LOGFILES angezeigt und True zurückgegeben. Wenn dies nicht der Fall ist, wird der Zugriff auf die WDI-Dateien nicht zugelassen. Daher wird LOGFILES nicht erkannt und False zurückgegeben.

Zugegebenermaßen funktioniert dies nur, wenn die Standardsicherheitsberechtigungen für das WDI-Verzeichnis nicht geändert wurden, aber aus meiner Erfahrung ist es sehr unwahrscheinlich, dass diese Berechtigungen in den meisten Installationen geändert wurden. Es erfordert auch, dass das LOGFILES-Verzeichnis innerhalb des WDI-Verzeichnisses nicht gelöscht oder umbenannt wurde, aber ich halte dies für sehr unwahrscheinlich, da es ein integraler Bestandteil des Zwecks des WDI-Verzeichnisses ist.

Ich habe getestet und bestätigt, dass es unter Windows 7, 8, 8.1 und 10 funktioniert. Ich habe es nicht auf Vista getestet, aber ich würde davon ausgehen, dass es funktioniert, weil Vista zu 7 ähnlich ist Verwenden Sie diese Methode unter XP, da alle Eingabeaufforderungen standardmäßig in dieser Version von Windows mit maximaler Höhe ausgeführt werden.

+0

Diese Frage wird wahrscheinlich geschlossen, da das OP nicht genügend Informationen zur Verfügung gestellt hat. Ich schlage vor, dass Sie dies als eine Antwort auf [diese Frage] (http://stackoverflow.com/q/4051883/886887), wo es mehr zum Thema ist, eher von den Lesern gefunden werden, die es brauchen, und weniger wahrscheinlich wird beendet. –

+0

Danke für die Antwort und Entschuldigung für die Verzögerung in der Antwort. dieser Check funktioniert einwandfrei! –

Verwandte Themen