Ich möchte ein Skript schreiben, das Benutzereingaben aufnimmt und dann systemweite Änderungen vornimmt. Ich möchte, dass dies sehr allgemein ist, aber ganz oben muss überprüft werden, ob es als "Administrator" ausgeführt wird. Wenn dies nicht der Fall ist, möchte ich eine Meldung anzeigen, um ihnen dies mitzuteilen. Wenn es so ist, möchte ich, dass es weitergeht. Gibt es eine ständige Möglichkeit, dies zu überprüfen? Ich möchte keine neue Sitzung als Administrator starten, sondern nur feststellen, ob sie derzeit als Administrator ausgeführt wird
windows
command-line
Der Kanadier Luke REINSTATE MONICA
quelle
quelle
Antworten:
Gefunden bei Stack Overflow :
quelle
net session >nul 2>&1 && echo Success || echo Failure
. Ich finde diese kompakte Syntax praktischer.Dies prüft auf eine hohe Integritätsstufe. (funktioniert für Windows Vista und höher)
quelle
whoami
XP fehlt @week .Viele, viele Antworten auf diese und mehrere andere Fragen in SE ( 1 , 2 , 3, um nur einige zu nennen), die alle auf die eine oder andere Weise unzureichend sind, haben deutlich gezeigt, dass Windows kein zuverlässiges integriertes Dienstprogramm bietet . Also ist es Zeit, Ihre eigenen auszurollen.
Ohne weitere schmutzige Hacks:
Kompilieren Sie das folgende Programm (Anweisungen folgen) oder erhalten Sie eine vorkompilierte Kopie . Dies muss nur einmal gemacht werden, dann können Sie das
.exe
überall kopieren (zB neben der Sysinternals Suite ).Der Code funktioniert in Win2k + 1 sowohl mit als auch ohne UAC-, Domänen- und transitiven Gruppen, da er beim Überprüfen von Berechtigungen auf die gleiche Weise wie das System selbst verwendet wird.
chkadmin
druckt "Admin" oder "Non-admin" und setzt den Exit-Code auf 0 bzw. 1. Die Ausgabe kann mit dem/q
Schalter unterdrückt werden.chkadmin.c
:Führen Sie zum Kompilieren in der Windows SDK-Eingabeaufforderung Folgendes aus:
(Wenn Sie VS2012 + verwenden, sind weitere Anpassungen erforderlich, wenn Sie auf 2k / XP abzielen müssen. )
Die Methode wurde mit freundlicher Genehmigung von /programming/4230602/detect-if-program-is-running-with-full-administrator-rights/4230908#4230908 erstellt
1 MSDN behauptet, dass es sich bei den APIs um XP + handelt, dies ist jedoch falsch.
CheckTokenMembership
ist 2k + und der andere ist noch älter .quelle
Die sauberste Möglichkeit, mithilfe eines CMD-Skripts, das ich gefunden habe, nach Administratorrechten zu suchen, ist in etwa wie folgt:
Diese Methode verwendet nur integrierte CMD.exe-Dateien, daher sollte sie sehr schnell sein. Es überprüft auch die tatsächlichen Funktionen des Prozesses, anstatt nach SIDs oder Gruppenmitgliedschaften zu suchen, sodass die effektive Berechtigung getestet wird. Dies funktioniert bereits unter Windows 2003 und XP. Normale Benutzerprozesse oder nicht erhöhte Prozesse schlagen beim Verzeichnis-Test fehl, wenn Admin-Prozesse oder Prozesse mit erhöhten Rechten erfolgreich sind.
Dieser Test schlägt fehl , wenn das
Everyone
,BUILTIN\Users
oder andere ähnliche Gruppe Leseberechtigung für Systemprofile gegeben. Zugegeben, dies ist eine andere Nicht-Standardkonfiguration als auf Computern, die als Windows-Domänencontroller konfiguriert sind und die Lese- / Ausführungsrechte für 'NT-AUTORITÄT \ Authentifizierte Benutzer' für Systemprofile gewähren.quelle
verify
. Ich neige dazu,cd .
(cd space dot) zu verwenden, das errorlevel auf 0 setzt, keine Ausgabe erzeugt und auch nützlich ist, um eine Datei mit der Länge Null über zu erstellencd . >somefile
. Das heißt, ich habe 'dir' unter Windows 2000, XP, Vista, 2003, 2008, 2012, 7, 8 und 10 getestet 'dir'. Daher bin ich mir nicht sicher, warum William 'verify' verwendet hat, um zuerst die Fehlerebene zu löschen.