So führen Sie das Programm über die Befehlszeile mit erhöhten Rechten aus

44

Gibt es eine Möglichkeit, ein Programm oder einen Befehl mit erhöhten Rechten auszuführen, wenn ich mich bereits in einer nicht erhöhten Befehlszeile befinde?

Genau die gleiche Aktion, die ausgeführt wird, wenn ich auf die Programmverknüpfung klicke und Als Administrator ausführen auswähle .

Der Befehl runas ist wahrscheinlich keine Lösung - er fragt nach einem Kennwort, aber ich möchte nur den UAC- Dialog.

Lukas Cenovsky
quelle

Antworten:

14

Es sieht so aus, als würde dieses Dienstprogramm - Hidden Start - tun, was Sie möchten, wenn Sie die Option / uac verwenden. Hier ist ein Beispiel für eine Befehlszeile:

hstart /UAC "notepad.exe"

Dadurch wird das Dialogfeld "Benutzerkontensteuerung" geöffnet, anstatt nach einem Kennwort zu fragen, wie dies bei runas der Fall ist.

Bildbeschreibung hier eingeben

JeffP
quelle
2
Achtung: das kleine Dienstprogramm kostet 20 $. Für diejenigen mit kleiner Tasche, verwenden Sie stattdessen RunAdmin :)
WeGoToMars
Dies wird unter Windows 10 nicht
am
50

In PowerShell gibt es eine Möglichkeit, dies zu tun :

PS> Start-Process powershell -Verb runAs
Rustam
quelle
19
Scheint gut zu funktionieren. Von der Kommandozeile, könnten Sie zum Beispiel tunpowershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
marsze
7
Dies sollte als die richtige / beste Antwort markiert werden. IMO - es funktioniert ohne Hilfsprogramme von Drittanbietern.
Crimbo
5
Aufbauend auf @marsze - Fwiw werden Argumente im einfachsten Fall in einen eigenen Wert in Anführungszeichen gesetzt, z powershell -Command "Start-Process 'gvim' 'c:\windows\system32\drivers\etc\hosts' -Verb runAs". Vielen Dank!
Ruffin
Wie kann ich die Ausgabe der Eingabeaufforderung mit erhöhten Rechten in mein aktuell ausgeführtes Skript leiten?
Wheeler
@wheeler, ich bin mir fast sicher, dass Sie das nicht können, aber Sie können einen Exit-Code zurückgeben:$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
Rustam
6

Aufbauend auf Rustam ‚s Antwort , können Sie:

  • Erstellen Sie eine su.batStapeldatei mit dem folgenden Einzeiler an einer beliebigen Stelle in Ihrer Standardeinstellung% PATH%:@powershell start -verb runas %*
  • Fügen Sie diese Funktion Ihrem PowerShell $ -Profil hinzu :function su {start -verb runas @args}

Jetzt können Sie su <command> [parameters]in jeder Shell ausgeben !

Nicolas Melay
quelle
2

RunAdmin ist ein kleines Dienstprogramm (150 KB), mit dem Sie ein Programm über die Befehlszeile mit erhöhten Rechten ausführen können (es zeigt die Benutzerkontensteuerung an). Und im Gegensatz zu Hidden Start ist Freeare.

WeGoToMars
quelle
2

Dies funktioniert für mich auf allen Plattformen, einschließlich Windows 10. Meine Anforderungen sind einfach. Vielleicht können Sie den Ansatz anpassen, wenn Sie Strom benötigen .

Ich hatte ein kleines Skript mit dem Namen " sudo.cmdLinux sudo". Es funktioniert gut genug, denke ich. Ich habe die Anforderungen, die Schritte, die zu befolgen sind, umrissen und das Skript befindet sich unten mit einem Beispiel. Zuerst ein warnendes Wort.

WARNUNG : Der Befehl wird standardmäßig im Windows-Systemverzeichnis ausgeführt. Sie werden zuerst ancdeinen sicheren Ortwollen.

Anforderungen :

  • Führen Sie den Befehl mit Administratorrechten von Windows .CMD
    oder der Cmd-Shell aus.
  • erfordern die normalen Windows-Berechtigungsprüfungen für den Befehl
    • Mit anderen Worten, der Befehl funktioniert NICHT, wenn ich nicht bereits mit einem privilegierten Konto angemeldet bin.
  • Führen Sie den Befehl mit Administratorberechtigung aus und fahren Sie fort, wenn Sie innerhalb eines Skripts aufgerufen werden. Warten Sie, bis der Befehl abgeschlossen ist.
  • Sei einfach, damit es immer funktioniert
  • Es muss nicht jedes Mal ein Passwort eingegeben werden, wenn ich bereits angemeldet bin.
    • Eine bessere Methode wäre, wenn ich das Passwort einmal eingeben kann, wie es der echte sudoBefehl unter Linux tut .

lösung :

  1. Erstellen Sie ein Befehlsskript, um alle übergebenen Argumente auszuführen. sudo.cmd
  2. Erstellen eines Windows - short-cut auf den Befehl Skriptnamen es: sudo.lnk.
  3. Fügen Sie die sudoVerknüpfung in Ihren Windows-Pfad ein, damit Sie sie sehen können.
  4. Bearbeiten Sie die Verknüpfungseigenschaften und machen Sie den Start in:Pfad leer.
  5. Klicken Sie auf die AdvancedSchaltfläche [ ] - ÜberprüfenRun as Administrator
  6. Aktivieren Sie Verknüpfungen in Ihrem Windows-Pfad, und verwenden Sie die Umgebungsvariable PATHEXT.
d:> echo %PATHEXT%
    .lnk;.EXE;.CMD;.BAT;.COM

Wenn Sie sudo dirin die Befehlszeile tippen , zeigt Windows das Symbol

User Account Control

Do you want to allow this app to make changes to this device?

  [YES]  [NO]

Popup-Fenster für die Zugriffskontrolle. Wenn Sie auf "[ NO]" klicken, geschieht nichts. Windows zeigt eine Access is denied.Meldung " " an.

Wenn Sie auf "[ YES]" klicken, wird der Verzeichnisbefehl mit erhöhten Rechten ausgeführt. Natürlich möchten Sie wahrscheinlich etwas Interessanteres wie das Beenden oder Abfragen eines Dienstes:

 sudo sc query SDRSVC

SDRSVC ist der Dienstname für "Windows-Sicherungsdienst". Dies zeigt Folgendes in einem separaten Cmd-Fenster:

  [sudo]

   administrator
  ---------------

  sc query SDRSVC

SERVICE_NAME: SDRSVC
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

  [done]

Press any key to continue . . .

Das sudo.cmdSkript selbst ist sehr einfach. Wie gesagt, meine Bedürfnisse sind einfach. Ich möchte nur Dienste beenden und starten, während ich Code zum Testen bereitstelle.

sudo.cmd:

 @echo off
 @rem    sudo.cmd
         cd /d %temp%
 @echo.
 @echo.   administrator
 @echo.  ---------------
         cd 
 @echo.
 @rem  _________________________________________________
 @rem      -- Print usage . . .
        @if    [""]      ==["%~1"]   goto USAGE
        @if /i ["--HELP"]==["%~1"]   goto USAGE
 @rem  _________________________________________________
 @rem
 @echo.  %*
 @rem
         %*
 @rem
         set EXIT_STATUS=%ERRORLEVEL%
 @rem  -- -- -- -- --  
 @echo.
 @echo.  [done]
 @rem  ______________________________________________________
 :Exit
 @echo.
 @pause
  exit /b  %EXIT_STATUS%
 @rem  ______________________________________________________
 :USAGE
 @echo.
 @echo  ^Usage:
 @echo.    sudo ^<complete command line^>
 @echo.
 @echo.  Attempts to rune the: ^<complete command line^>
 @echo.  under Administrator priviliges.  Relies on Windows 
 @echo.  prompt for elevated privileges.
 @rem  ______________________________________________________
 @goto Exit

Der pauseBefehl wartet darauf, dass Sie die Ergebnisse überprüfen. Wenn Sie pausedas Administrationsfenster schließen, wissen Sie nicht, ob der Befehl funktioniert hat oder nicht. Der ERRORLEVELfrom-Befehl wird ebenfalls zurückgegeben.

werden
quelle
2

Dies funktioniert unter Windows 10 und wurde nicht mit anderen Windows-Versionen getestet.

Ein Beispiel zum Öffnen von Notepad mit Administratorrechten von cmd.exe, das Powershell startet und nach erhöhten Berechtigungen fragt.

C:\>start powershell -command "&{start-process -filepath notepad -verb RunAs}"

Dadurch erhalten Sie ein UAC-Dialogfeld (falls aktiviert) mit [Ja] [Nein], oder Sie werden nach dem Administratorkennwort gefragt.

Ein weiteres Beispiel zum Öffnen der Hosts-Datei mit dem Editor wäre:

C:\>start powershell -command "&{start-process -filepath notepad 'C:\Windows\System32\drivers\etc\hosts' -verb RunAs}"

Weitere Informationen: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6

Alex
quelle
Die Argumente für die ausführbare Datei sollten ein -ArgumentListParameter sein, nicht einfach zusätzliche Parameter, die gestartet werden sollen.
Appleshell
0

Schauen Sie sich Start ++ an - es hat diese Funktionalität zusammen mit vielen anderen nützlichen Dingen. Um mit der UAC-Eingabeaufforderung zu starten, geben Sie einfach sudoIhren Programmnamen in die Befehlszeile ein, wie hier gezeigt:

Alt-Text

Hier sind einige andere Funktionen (Sie können auch Ihre eigenen hinzufügen):

Alt-Text

Alt-Text

John T
quelle
Sieht auch gut aus, aber ich verwende bereits FARR, das eine ähnliche Funktionalität wie Start ++ und mehr hat (natürlich außer sudo).
Lukas Cenovsky
2
Der Link heißt Willkommen bei: brandontools.com. Diese Webseite ist KOSTENLOS geparkt. Möchten Sie brandontools.com kaufen?
Xmojmr
1
Wie @xmojmr sagt, ist diese Seite tot. Wenn Sie einen neuen Standort kennen (ich habe ihn nicht so schnell gefunden), sollten Sie den Link in der Antwort aktualisieren.
Abel
-1

Sie können einstellen __COMPAT_LAYER=RunAsAdmin. Dann werden die Befehle in einer separaten erhöhten ausgeführt cmd.

Beispiel .bat:

rem Run next command elevated to Admin.
set __COMPAT_LAYER=RunAsAdmin
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}" /t REG_DWORD /v "NoBackgroundPolicy" /d "1"
rem Disable elevation
set __COMPAT_LAYER=
rem continue non elevated
reg add "HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Internet Explorer\Main" /t REG_SZ /v "Start Page" /d "https://www.google.com" /f

Alle Optionen für den Kompatibilitätsmodus sind im MS Application Compatibility Toolkit aufgeführt.

Michel
quelle
Diese Batch-Datei ist schrecklich kaputt. Sie können nicht ;als Kommentar-Trennzeichen verwenden. "Stapeldateien erkennen das Semikolon nicht und verursachen im Allgemeinen eine Fehlermeldung über einen fehlerhaften Befehl."
DavidPostill