In einer Batchdatei möchte ich testen, ob ich mit Administrator- / erhöhten Berechtigungen ausgeführt werde.
Der Benutzername ändert sich nicht, wenn "Als Administrator ausführen" ausgewählt ist, sodass dies nicht funktioniert.
Wenn es einen universell verfügbaren Befehl gäbe, der keine Auswirkung hat, aber Administratorrechte erfordert, könnte ich diesen ausführen und nach einem Fehlercode suchen, um auf Berechtigungen zu testen. Bisher habe ich einen solchen Befehl nicht gefunden. Die Befehle, die ich gefunden habe, scheinen einen einzelnen, unspezifischen Fehlercode zurückzugeben, der auf alles hinweisen kann, und sie sind aus verschiedenen Gründen fehleranfällig.
Ich interessiere mich nur für Windows 7, obwohl die Unterstützung früherer Betriebssysteme nett wäre.
quelle
echo > somefile
in ein Verzeichnis zu gelangen, für das Administratorrechte erforderlich sind. Es würde eine Datei als Nebeneffekt erzeugen, aber Sie könnten nach Kollisionen suchen und einen eindeutigen Dateinamen als Problemumgehung erstellen.Antworten:
ADDENDUM : Für Windows 8 funktioniert dies nicht. sehen Sie stattdessen diese ausgezeichnete Antwort .
Diese Lösung finden Sie hier: http://www.robvanderwoude.com/clevertricks.php
Angenommen, das funktioniert nicht und da es sich um Win7 handelt, können Sie in Powershell Folgendes verwenden, wenn dies geeignet ist:
Wenn nicht (und wahrscheinlich auch nicht, da Sie explizit Batch-Dateien vorgeschlagen haben), können Sie das oben Genannte in .NET schreiben und einen Exit-Code von einer Exe zurückgeben, der auf dem Ergebnis für Ihre Batch-Datei basiert.
quelle
AT
funktioniert nicht unter Windows 8, aber ich habe eine bessere Lösung gefunden. Ich habe es als Antwort auf eine andere Frage hier gepostet : stackoverflow.com/questions/4051883/… .ping
es, fehlende zu ersetzensleep
:)Dieser Trick erfordert nur einen Befehl: Geben Sie
net session
in die Eingabeaufforderung ein.Wenn Sie KEIN Administrator sind , erhalten Sie eine Nachricht, dass der Zugriff verweigert wird.
Wenn Sie ein Administrator sind , erhalten Sie eine andere Nachricht. Die häufigste ist:
Von MS Technet :
quelle
There are no entries in the list.
net session >nul 2>&1 || (echo not admin&goto :eof)
Ich mag Rushyos Vorschlag, AT zu verwenden, aber dies ist eine andere Option:
Mit diesem Ansatz können Sie auch zwischen einem Nicht-Administrator und einem nicht erhöhten Administrator unterscheiden, wenn Sie dies möchten. Nicht erhöhte Administratoren haben noch BUILTIN \ Administrators in der Gruppenliste, aber es ist nicht aktiviert.
Dies funktioniert jedoch nicht auf einigen nicht englischen Sprachsystemen. Versuchen Sie es stattdessen
(Dies sollte unter Windows 7 funktionieren, bei früheren Versionen bin ich mir jedoch nicht sicher.)
quelle
whoami/groups
und scanne dann die Zeilen manuell. Würde nicht zu lange dauern und der Befehl passt in dein Gehirn.Ziemlich genau das, was andere zuvor geschrieben haben, aber als Einzeiler, der am Anfang eines Stapelbefehls gesetzt werden kann. (Nun, normalerweise nach @echo aus.)
quelle
Der einfachste Weg, dies unter Vista, Win 7 und höher zu tun, besteht darin, Token-Gruppen aufzulisten und nach der aktuellen Integritätsstufe zu suchen (oder nach der Seite des Administrators, wenn nur die Gruppenmitgliedschaft wichtig ist):
Überprüfen Sie, ob wir erhöht laufen:
Überprüfen Sie, ob wir zu lokalen Administratoren gehören:
Überprüfen Sie, ob wir zu Domain-Administratoren gehören:
Der folgende Artikel listet die Integritätsstufe auf, die SIDs von Windows verwenden: http://msdn.microsoft.com/en-us/library/bb625963.aspx
quelle
Hier ist eine kleine Modifikation von Harrys Antwort, die sich auf einen erhöhten Status konzentriert. Ich verwende dies am Anfang einer install.bat-Datei:
Das hat definitiv bei mir funktioniert und das Prinzip scheint solide zu sein; von Chris Jackson von MSFT :
quelle
die Lösung:
funktioniert nicht unter Windows 10
Für alle Windows-Versionen ist dies möglich:
quelle
Ich habe viele (die meisten?) Antworten gelesen und dann eine Bat-Datei entwickelt, die für mich in Win 8.1 funktioniert. Ich dachte, ich würde es teilen.
Hoffe jemand findet das nützlich :)
quelle
Eine "Not-a-One-Liner" -Version von https://stackoverflow.com/a/38856823/2193477
quelle
Ich weiß, dass ich zu spät zu dieser Party komme, aber hier ist mein einziger Liner, um die Verwaltung zu bestimmen.
Es hängt nicht von der Fehlerstufe ab, sondern nur von
systeminfo
:Je nach Administratorstatus des Benutzers wird entweder Ja oder Nein zurückgegeben ...
Außerdem wird der Wert der Variablen "admin" entsprechend auf "Ja" oder "Nein" gesetzt.
quelle
Wenn Sie als Benutzer mit Administratorrechten ausgeführt werden, wird die Umgebungsvariable Sitzungsname NICHT definiert und Sie haben beim Ausführen einer Batchdatei immer noch keine Administratorrechte.
Sie sollten den Befehl "net session" verwenden und nach einem Fehlerrückgabecode von "0" suchen, um die Administratorrechte zu überprüfen.
Beispiel; - Die erste Echo-Anweisung ist das Glockenzeichen
net session >nul 2>&1 if not %errorlevel%==0 (echo echo You need to start over and right-click on this file, echo then select "Run as administrator" to be successfull. echo.&pause&exit)
quelle
Hier ist eine einfache Methode, die ich unter Windows 7 bis Windows 10 verwendet habe. Grundsätzlich verwende ich einfach den Befehl "IF EXIST", um nach dem Ordner Windows \ System32 \ WDI \ LogFiles zu suchen. Der WDI-Ordner ist bei jeder Installation von Windows ab mindestens 7 vorhanden und erfordert Administratorrechte für den Zugriff. Der WDI-Ordner enthält immer einen LogFiles-Ordner. Wenn Sie also "IF EXIST" im Ordner "WDI \ LogFiles" ausführen, wird "true" zurückgegeben, wenn Sie als Administrator ausgeführt werden, und "false", wenn Sie nicht als Administrator ausgeführt werden. Dies kann in einer Batchdatei verwendet werden, um die Berechtigungsstufe zu überprüfen und basierend auf diesem Ergebnis zu den gewünschten Befehlen zu verzweigen.
Hier ist ein kurzer Ausschnitt des Beispielcodes:
Beachten Sie, dass bei dieser Methode davon ausgegangen wird, dass die Standardsicherheitsberechtigungen für den WDI-Ordner nicht geändert wurden (was in den meisten Situationen unwahrscheinlich ist, siehe jedoch die Einschränkung Nr. 2 unten). Selbst in diesem Fall müssen Sie lediglich den Code ändern, um nach einer anderen gemeinsamen Datei / einem anderen Ordner zu suchen, für die Administratorzugriff erforderlich ist (System32 \ config \ SAM ist möglicherweise ein guter alternativer Kandidat), oder Sie können sogar einen eigenen speziell dafür erstellen Zweck.
Es gibt jedoch zwei Einschränkungen bei dieser Methode:
Das Deaktivieren der Benutzerkontensteuerung führt wahrscheinlich dazu, dass ohnehin alles als Administrator ausgeführt wird.
Wenn Sie versuchen, den WDI-Ordner im Windows Explorer zu öffnen und dann auf "Weiter" klicken, wenn Sie dazu aufgefordert werden, werden permanente Zugriffsrechte für dieses Benutzerkonto hinzugefügt, wodurch meine Methode verletzt wird. In diesem Fall kann dies behoben werden, indem das Benutzerkonto aus den Sicherheitsberechtigungen für WDI-Ordner entfernt wird. Wenn der Benutzer aus irgendeinem Grund mit Windows Explorer auf den WDI-Ordner zugreifen MUSS, müssen Sie den Code ändern, um einen anderen Ordner zu überprüfen (wie oben erwähnt, kann es eine gute Wahl sein, einen eigenen Ordner speziell für diesen Zweck zu erstellen). .
Zugegeben, meine Methode ist nicht perfekt, da sie kaputt gehen kann, aber es ist eine relativ schnelle Methode, die einfach zu implementieren ist, gleichermaßen mit allen Versionen von Windows 7, 8 und 10 kompatibel ist und vorausgesetzt, ich beachte die genannten Einschränkungen war 100% effektiv für mich.
quelle
Funktioniert für Win7 Enterprise und Win10 Enterprise
quelle