Wie öffne ich eine Eingabeaufforderung mit erhöhten Rechten mithilfe von Befehlszeilen auf einem normalen Cmd?
Zum Beispiel benutze ich runas /username:admin cmd
aber der cmd, der geöffnet wurde, scheint nicht erhöht zu sein! Irgendwelche Lösungen?
Ich hatte das gleiche Problem und konnte die CMD nur auf folgende Weise als Administrator von CMD aus öffnen:
powershell -Command "Start-Process cmd -Verb RunAs"
und drücke EnterLaut Dokumentation , dem Windows-Sicherheitsmodell ...
gewährt keine Administratorrechte zu allen Zeiten. Selbst Administratoren werden unter Standardberechtigungen ausgeführt, wenn sie nicht administrative Aufgaben ausführen, für die keine erhöhten Berechtigungen erforderlich sind.
Sie haben die Option Diese Aufgabe mit Administratorrechten erstellen im Dialogfeld Neue Aufgabe erstellen ( Task-Manager> Datei> Neue Aufgabe ausführen), aber es gibt keine eingebaute Möglichkeit, die Berechtigungen über die Befehlszeile effektiv zu erhöhen.
Es gibt jedoch einige Tools von Drittanbietern (die intern auf Windows-APIs basieren), mit denen Sie die Berechtigungen über die Befehlszeile erhöhen können:
nircmdc elevate cmd
npm install -g windosu
(erfordert node.js installiert)Sudo cmd
Sudo.bat
(Sie können Sudo
durch einen beliebigen Namen ersetzen) mit folgendem Inhalt powershell.exe -Command "Start-Process cmd \"/k cd /d %cd%\" -Verb RunAs"
Sudo.bat
in einen Ordner in Ihrem PATH
; Wenn Sie nicht wissen, was das bedeutet, verschieben Sie diese Dateien einfach nach c:\windows\
Sudo
im Dialogfeld "Ausführen" (win+r) oder in der Adressleiste des Explorers (dies ist der beste Teil :))Sudo.bat
(Sie können Sudo
durch einen beliebigen Namen ersetzen) mit folgendem Inhalt nircmdc elevate cmd /k "cd /d %cd%"
nircmdc.exe
und Sudo.bat
in einen Ordner in Ihrem PATH
; Wenn Sie nicht wissen, was das bedeutet, verschieben Sie diese Dateien einfach nach c:\windows\
Sudo
im Dialogfeld "Ausführen" (win+r) oder in der Adressleiste des Explorers (dies ist der beste Teil :))Ich habe nicht genug Reputation, um der Top-Antwort einen Kommentar hinzuzufügen, aber mit der Macht der Aliase können Sie durch Eingabe der folgenden Zeichen davonkommen:
powershell "start cmd -v runAs"
Dies ist nur eine kürzere Version von user3018703 ausgezeichnete Lösung:
powershell -Command "Start-Process cmd -Verb RunAs"
Ich benutze die ganze Zeit nirsoft Programme (zB nircmdc) und sysinternals (zB psexec). Sie sind sehr hilfreich.
Wenn Sie jedoch kein Programm eines Drittanbieters verwenden möchten oder können, finden Sie hier eine andere Möglichkeit, reines Windows.
Kurze Antwort : Sie können eine geplante Aufgabe mit erhöhten Rechten erstellen, die Sie später aufrufen können, wenn Sie nicht erhöht sind.
Mittellange Antwort : während erhöht Aufgabe erstellen mit (aber ich bevorzuge Taskplaner-GUI):
schtasks /create /sc once /tn cmd_elev /tr cmd /rl highest /st 00:00
Dann später, ohne dass eine Erhöhung erforderlich ist, rufen Sie mit auf
schtasks /run /tn cmd_elev
Lange Antwort : Es gibt viele zappelige Details; siehe meinen Blogeintrag "Programm ohne Benutzerkontensteuerung starten, nützlich beim Systemstart und in Batchdateien (Taskplaner verwenden)"
Das Folgende als Batchdatei öffnet eine Eingabeaufforderung mit erhöhten Rechten wobei der Pfad auf dasselbe Verzeichnis festgelegt ist wie das, von dem aus die Batchdatei aufgerufen wurde
set OLDDIR=%CD%
powershell -Command "Start-Process cmd -ArgumentList '/K cd %OLDDIR%' -Verb RunAs "
Ich benutze Elevate
jetzt für eine Weile.
Es ist eine Beschreibung - This utility executes a command with UAC privilege elevation. This is useful for working inside command prompts or with batch files.
Ich kopiere das bin.x86-64\elevate.exe
von dem .Zip
into C:\Program Files\elevate
und füge diesen Pfad meinem PATH
hinzu.
Dann kann ich mit GitBash so etwas wie elevate sc stop W3SVC
, um den Dienst IIS
auszuschalten.
Wenn ich den Befehl ausführe, erhalte ich das Dialogfeld UAC
, das korrekt mit der Tastatur gesteuert wird. Wenn ich das Dialogfeld akzeptiere, kehre ich zu meiner Shell zurück.
Stellen Sie sicher, dass die Batchdatei die Anmeldeinformationen des tatsächlichen Administratorkontos mit dem Schalter /savecred
Speichert. Dies fordert Sie zum ersten Mal zur Eingabe von Anmeldeinformationen auf und speichert das verschlüsselte Kennwort im Anmeldeinformations-Manager. Dann wird der Batch für alle folgenden Male als vollständiger Administrator ausgeführt, jedoch nicht als Aufforderung zur Eingabe von Anmeldeinformationen, da diese im Anmeldeinformations-Manager verschlüsselt gespeichert sind und der Endbenutzer das Kennwort nicht abrufen kann. Folgendes sollte eine CMD mit erhöhten Rechten und vollständigen Administratorrechten öffnen und fordert Sie nur beim ersten Mal zur Eingabe eines Kennworts auf:
START c:\Windows\System32\runas.exe /user:Administrator /savecred cmd.exe
..
@ECHO OFF
SETLOCAL EnableDelayedExpansion EnableExtensions
NET SESSION >nul 2>&1
IF %ERRORLEVEL% NEQ 0 GOTO ELEVATE
GOTO :EOF
:ELEVATE
SET this="%CD%"
SET this=!this:\=\\!
MSHTA "javascript: var Shell = new ActiveXObject('Shell.application'); Shell.ShellExecute('CMD', '/K CD /D \"!this!\"', '', 'runas', 1);close();"
EXIT 1
speichern Sie dieses Skript unter dem Namen "god.cmd" in Ihrem System32 oder einem anderen Pfad ....
wenn Sie einen Befehl in e:\mypictures\öffnen und god eingeben, werden Sie nach Anmeldeinformationen gefragt und an denselben Ort wie der Administrator zurückgebracht ...
Ähnlich wie bei einigen der oben genannten Lösungen habe ich eine elevate
Batch-Datei erstellt, in der ein erweitertes PowerShell-Fenster ausgeführt wird. Dabei wurde die Ausführungsrichtlinie umgangen, damit von einfachen Befehlen über Batch-Dateien bis hin zu komplexen PowerShell-Skripten alles ausgeführt werden kann. Ich empfehle, es in Ihrem C:\Windows\System32-Ordner zu speichern, um die Verwendung zu vereinfachen.
Der ursprüngliche Befehl elevate
führt seine Aufgabe aus, erfasst die Ausgabe, schließt das erzeugte PowerShell-Fenster und kehrt dann zurück, wobei die erfasste Ausgabe in das ursprüngliche Fenster geschrieben wird.
Ich habe zwei Varianten erstellt, elevatep
und elevatex
, die jeweils angehalten werden und das PowerShell-Fenster für weitere Arbeiten geöffnet lassen.
https://github.com/jt-github/elevate
Und für den Fall, dass mein Link jemals stirbt, hier der Code für die ursprüngliche Elevate-Batch-Datei:
@Echo Off
REM Executes a command in an elevated PowerShell window and captures/displays output
REM Note that any file paths must be fully qualified!
REM Example: elevate myAdminCommand -myArg1 -myArg2 someValue
if "%1"=="" (
REM If no command is passed, simply open an elevated PowerShell window.
PowerShell -Command "& {Start-Process PowerShell.exe -Wait -Verb RunAs}"
) ELSE (
REM Copy command+arguments (passed as a parameter) into a ps1 file
REM Start PowerShell with Elevated access (prompting UAC confirmation)
REM and run the ps1 file
REM then close elevated window when finished
REM Output captured results
IF EXIST %temp%\trans.txt del %temp%\trans.txt
Echo %* ^> %temp%\trans.txt *^>^&1 > %temp%\tmp.ps1
Echo $error[0] ^| Add-Content %temp%\trans.txt -Encoding Default >> %temp%\tmp.ps1
PowerShell -Command "& {Start-Process PowerShell.exe -Wait -ArgumentList '-ExecutionPolicy Bypass -File ""%temp%\tmp.ps1""' -Verb RunAs}"
Type %temp%\trans.txt
)
Obwohl beide von Dheeraj Bhaskar bereitgestellten Lösungen funktionieren, führen sie leider dazu, dass der Dialog UAC oben angezeigt wird (in z-Reihenfolge), aber nicht bekommen fokussiert (das fokussierte Fenster ist das Aufrufer-Cmd/Powershell-Fenster), daher muss ich entweder die Maus greifen und auf "Ja" klicken oder das UAC-Fenster mit Alt + Shift auswählen + Tab. (Getestet auf Win10x64 v1607 build14393.447; UAC = "[...] nicht dimmen [...]" .)
Die folgende Lösung ist etwas umständlich, da sie zwei Dateien verwendet, aber die richtige Fokusreihenfolge beibehält, sodass keine zusätzlichen Maus-/Tastaturaktionen erforderlich sind (außer dem Bestätigen des UAC-Dialogfelds: Alt + Y ).
%SystemRoot%\System32\cmd.exe /k "cd /d"
@start cmdadm.lnk %cd%
Führen Sie mit su
aus.
Meine bevorzugte Methode hierfür ist die Verwendung von PsExec.exe von SysInternals, verfügbar unter http://technet.Microsoft.com/en-us/sysinternals/bb89755
.\psexec.exe -accepteula -h -u "$username" -p "$password" cmd.exe
Der Schalter "-h" ist derjenige, der die Magie ausführt:
-h Wenn das Zielsystem Vista oder höher ist, wird der Prozess mit dem erhöhten Token des Kontos ausgeführt, sofern verfügbar.
Kann eine temporäre Umgebungsvariable für eine erweiterte Verknüpfung verwenden (
start.cmd
setx valueName_betterSpecificForEachCase %~dp0
"%~dp0ascladm.lnk"
ascladm.lnk (Verknüpfung)
_ properties\advanced\"run as administrator"=yes
(Um Pfadänderungen vorzunehmen, müssen Sie vorübergehend das env.Variable
)
_ properties\target="%valueName_betterSpecificForEachCase%\ascladm.cmd"
_ properties\"start in"="%valueName_betterSpecificForEachCase%"
ascladm.cmd
setx valueName_betterSpecificForEachCase=
reg delete HKEY_CURRENT_USER\Environment /F /V valueName_betterSpecificForEachCase
"%~dp0fileName_targetedCmd.cmd"
) (targetCmd wird im erhöhten cmd-Fenster ausgeführt)
Obwohl es sich um 3 Dateien handelt, können Sie alles (einschließlich targetCmd) in einem Unterordner ablegen (vergessen Sie nicht, den folderName zu den Patches hinzuzufügen) und "start.cmd" in den einen Namen von target umbenennen
Für mich sieht es nach der gebräuchlichsten Vorgehensweise aus, während cmd nicht über den erforderlichen Befehl verfügt
Ich bin nicht sicher, ob das Tool ExecElevated.exe (13KB) den Job machen wird ... aber es könnte. Oder zumindest nützlich für andere mit ähnlichen Bedürfnissen, die auf diese Seite gekommen sind wie ich (aber ich habe keine Lösung gefunden und das Tool selbst in .Net erstellt).
Es wird eine Anwendung mit erhöhtem Token ausgeführt (im Admin-Modus). Sie erhalten jedoch einen UAC-Dialog zur Bestätigung! (Möglicherweise nicht, wenn die Benutzerkontensteuerung deaktiviert wurde, noch nicht getestet).
Und das Konto, das das Tool aufruft, muss auch über einen Administrator verfügen. Rechte natürlich.
Anwendungsbeispiel:
ExecuteElevated.exe "C:\Utility\regjump.exe HKCU\Software\Classes\.pdf"
Drücken Sie die Windows + X-Taste, und Sie können jetzt die PowerShell oder Eingabeaufforderung mit Administratorrechten auswählen. Funktioniert, wenn Sie der Administrator sind. Die Funktion kann unbrauchbar sein, wenn das System nicht Ihnen gehört.