Sie wissen, wie Sie als Administrator eines Systems mit der rechten Maustaste auf ein Batch-Skript klicken und es als Administrator ausführen können, ohne das Administratorkennwort einzugeben?
Ich frage mich, wie ich das mit einem PowerShell-Skript machen soll. Ich möchte mein Passwort nicht eingeben müssen. Ich möchte nur die Rechtsklick- Methode Als Administrator ausführen nachahmen .
Für alles, was ich bisher gelesen habe, müssen Sie das Administratorkennwort angeben.
powershell
administrator
Chrips
quelle
quelle
gsudo
. Ein kostenloses Open-Source-Sudo für Windows, mit dem Sie als Administrator über die Befehlszeile ausgeführt werden können. Ein UAC-Popup wird angezeigt.Antworten:
Wenn die aktuelle Konsole nicht erhöht ist und der Vorgang, den Sie ausführen möchten, erhöhte Berechtigungen erfordert, können Sie Powershell mit der folgenden Run as administratorOption starten :
quelle
start-process -verb runAs "<cmd>" -argumentlist "<args1> <args2>"
;)Win
+X
Wie hier besprochenHier ist eine Ergänzung zu Shay Levis Vorschlag (fügen Sie einfach diese Zeilen am Anfang eines Skripts hinzu):
Dies führt dazu, dass das aktuelle Skript im Administratormodus an einen neuen Powershell-Prozess übergeben wird (wenn der aktuelle Benutzer Zugriff auf den Administratormodus hat und das Skript nicht als Administrator gestartet wird).
quelle
if (-not (([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)))
if
Anweisung und setzen Sie einthrow
in den then-Block.if (-not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))
[Security.Principal.WindowsBuiltInRole]::Administrator)
) dem Zeichenfolgenargument vorgezogen werden sollte"Administrator"
- ich bin auf sicherheitshärtete Umgebungen mit umbenannten integrierten RollenSelbsterhöhendes PowerShell-Skript
Windows 8.1 / PowerShell 4.0 +
Eine Linie :)
quelle
if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Start-Process powershell.exe "-NoProfile -ExecutionPolicy Bypass -File `"$PSCommandPath`" `"$args`"" -Verb RunAs; exit }
Benjamin Armstrong hat einen ausgezeichneten Artikel über selbsterhöhende PowerShell-Skripte veröffentlicht . Es gibt ein paar kleinere Probleme mit seinem Code; Eine modifizierte Version, die auf den im Kommentar vorgeschlagenen Korrekturen basiert, ist unten aufgeführt.
Grundsätzlich wird die dem aktuellen Prozess zugeordnete Identität abgerufen, überprüft, ob es sich um einen Administrator handelt, und wenn dies nicht der Fall ist, wird ein neuer PowerShell-Prozess mit Administratorrechten erstellt und der alte Prozess beendet.
quelle
$newProcess = new-object System.Diagnostics.ProcessStartInfo “cmd.exe” $newProcess.Arguments = ‘/c ‘ + [System.Environment]::GetCommandLineArgs() $newProcess.WorkingDirectory = [environment]::CurrentDirectory
Sie können eine Batchdatei (
*.bat
) erstellen , die Ihr Powershell-Skript mit Administratorrechten ausführt, wenn Sie darauf doppelklicken. Auf diese Weise müssen Sie nichts an Ihrem Powershell-Skript ändern . Erstellen Sie dazu eine Batch-Datei mit demselben Namen und Speicherort Ihres Powershell-Skripts und fügen Sie den folgenden Inhalt ein:Das ist es!
Hier ist die Erklärung:
Angenommen, Ihr Powershell-Skript befindet sich im Pfad
C:\Temp\ScriptTest.ps1
, muss Ihre Batchdatei den Pfad enthaltenC:\Temp\ScriptTest.bat
. Wenn jemand diese Batchdatei ausführt, werden die folgenden Schritte ausgeführt:Das cmd führt den Befehl aus
Eine neue Powershell-Sitzung wird geöffnet und der folgende Befehl wird ausgeführt:
Eine weitere neue Powershell-Sitzung mit Administratorrechten wird im
system32
Ordner geöffnet und die folgenden Argumente werden an ihn übergeben:Der folgende Befehl wird mit Administratorrechten ausgeführt:
Sobald der Skriptpfad und die Namensargumente in doppelte Anführungszeichen gesetzt sind, können sie Leerzeichen oder einfache Anführungszeichen (
'
) enthalten.Der aktuelle Ordner wechselt von
system32
zuC:\Temp
und das SkriptScriptTest.ps1
wird ausgeführt. Sobald der Parameter übergeben-NoExit
wurde, wird das Fenster nicht geschlossen, selbst wenn Ihr Powershell-Skript eine Ausnahme auslöst.quelle
sudo
Befehl verwenden und den Benutzer konfigurieren, den Sie für den automatisierten ProzessNOPASSWD: ALL
in dersudoers
Datei verwenden .Hier ist ein sich selbst erhöhender Ausschnitt für Powershell-Skripte, der das Arbeitsverzeichnis beibehält :
Das Beibehalten des Arbeitsverzeichnisses ist wichtig für Skripte, die pfadbezogene Operationen ausführen. Bei fast allen anderen Antworten wird dieser Pfad nicht beibehalten, was zu unerwarteten Fehlern im Rest des Skripts führen kann.
Wenn Sie lieber kein selbsterhöhendes Skript / Snippet verwenden möchten und stattdessen nur eine einfache Möglichkeit zum Starten eines Skripts als Administrator (z. B. über das Explorer-Kontextmenü) wünschen , finden Sie meine andere Antwort hier: https: // stackoverflow .com / a / 57033941/2441655
quelle
Verwenden von
#Requires -RunAsAdministrator
wurde noch nicht angegeben. Es scheint erst seit PowerShell 4.0 da zu sein.
http://technet.microsoft.com/en-us/library/hh847765.aspx
Für mich scheint dies ein guter Weg zu sein, aber ich bin mir der Erfahrung vor Ort noch nicht sicher. PowerShell 3.0-Laufzeiten ignorieren dies wahrscheinlich oder geben, noch schlimmer, einen Fehler aus.
Wenn das Skript als Nichtadministrator ausgeführt wird, wird der folgende Fehler angezeigt:
quelle
Parameter RunAsAdministrator requires an argument
. @akauppi Ich bin nicht überzeugt, dass sie immer denken.Sie können einfach einige Registrierungseinträge hinzufügen, um ein Kontextmenü "Als Administrator ausführen" für
.ps1
Dateien zu erhalten:(aktualisiert auf ein einfacheres Skript von @Shay)
Grundsätzlich wird
HKCR:\Microsoft.PowershellScript.1\Shell\runas\command
der Standardwert festgelegt, um das Skript mit Powershell aufzurufen.quelle
(default)
Teil geraten ?"c:\windows\system32\windowspowershell\v1.0\powershell.exe" -noexit -command "& '%1'"
Der von Jonathan und Shay Levy gepostete Code hat bei mir nicht funktioniert.
Den Arbeitscode finden Sie unten:
quelle
Sie müssen das Skript mit Administratorrechten erneut ausführen und prüfen, ob das Skript in diesem Modus gestartet wurde. Unten habe ich ein Skript geschrieben, das zwei Funktionen hat: DoElevatedOperations und DoStandardOperations . Sie sollten Ihren Code, für den Administratorrechte erforderlich sind, in den ersten und Standardoperationen in den zweiten Code einfügen. Die Variable IsRunAsAdmin wird verwendet, um den Administratormodus zu identifizieren.
Mein Code ist ein vereinfachter Auszug aus dem Microsoft-Skript, der automatisch generiert wird, wenn Sie ein App-Paket für Windows Store-Apps erstellen.
quelle
Meine 2 Cent hinzufügen. Meine einfache Version basiert auf einer Netzsitzung, die bisher in Windows 7 / Windows 10 immer funktioniert. Warum sollte man sie zu kompliziert machen?
Fügen Sie einfach oben im Skript hinzu, und es wird als Administrator ausgeführt.
quelle
if (!(net session 2>&1 | Out-Null)) { ...
@ycomp... } else { echo "your message" }
.cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
Set-ExecutionPolicy -ExecutionPolicy <PolicyName>
, Sie können es einstellenbypass
Aberbypass
gefährlich sein kann.AllSigned
Dieses Verhalten ist beabsichtigt. Es gibt mehrere Sicherheitsebenen, da Microsoft wirklich nicht wollte, dass .ps1-Dateien der neueste E-Mail-Virus sind. Einige Leute finden, dass dies dem Begriff der Aufgabenautomatisierung widerspricht, der fair ist. Das Vista + -Sicherheitsmodell dient dazu, Dinge zu "de-automatisieren", damit der Benutzer sie in Ordnung bringt.
Ich vermute jedoch, wenn Sie Powershell selbst als erhöht starten, sollte es in der Lage sein, Batch-Dateien auszuführen, ohne das Kennwort erneut anzufordern, bis Sie Powershell schließen.
quelle
Sie können das Öffnen der Anwendung auch als Administrator erzwingen, wenn Sie über ein Administratorkonto verfügen.
Suchen Sie die Datei, klicken Sie mit der rechten Maustaste auf> Eigenschaften> Verknüpfung> Erweitert und aktivieren Sie Als Administrator ausführen
Klicken Sie dann auf OK.
quelle
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
Hier befindet sich die Verknüpfung von PowerShell. Es geht auch noch an einen anderen Ort, um die eigentliche 'exe' (%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
) aufzurufen .Da PowerShell benutzerprofilgesteuert ist, wenn es um Berechtigungen geht; Wenn Ihr Benutzername / Profil die Berechtigung hat, etwas zu tun, können Sie dies unter diesem Profil in PowerShell im Allgemeinen auch tun. Abgesehen davon ist es sinnvoll, dass Sie beispielsweise die Verknüpfung unter Ihrem Benutzerprofil ändern
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
.Klicken Sie mit der rechten Maustaste und klicken Sie auf Eigenschaften. Klicken Sie auf die Schaltfläche "Erweitert" unter der Registerkarte "Verknüpfung" direkt unter dem Textfeld "Kommentare" neben den beiden anderen Schaltflächen "Speicherort der Datei öffnen" und "Symbol ändern".
Aktivieren Sie das Kontrollkästchen "Als Administrator ausführen". Klicken Sie OKdann Applyund OK. Klicken Sie erneut mit der rechten Maustaste auf das Symbol mit der Bezeichnung "Windows PowerShell" in
C:\Users\"username"\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Windows PowerShell
und wählen Sie "An Startmenü / Taskleiste anheften".Wenn Sie jetzt auf dieses Symbol klicken, wird die Benutzerkontensteuerung zur Eskalation aufgerufen. Nach Auswahl von "JA" wird die PowerShell-Konsole geöffnet und oben auf dem Bildschirm mit "Administrator" gekennzeichnet.
Um noch einen Schritt weiter zu gehen ... Sie können mit der rechten Maustaste auf dieselbe Symbolverknüpfung in Ihrem Profilspeicherort von Windows PowerShell klicken und eine Tastenkombination zuweisen, die genau das Gleiche tut, als ob Sie auf das kürzlich hinzugefügte Symbol geklickt hätten. Geben Sie dort, wo "Tastenkombination" steht, eine Kombination aus Tastatur und Taste ein, z. B .: Ctrl+ Alt+ P P(für PowerShell) . Klicken Sie auf Applyund OK.
Jetzt müssen Sie nur noch die von Ihnen zugewiesene Tastenkombination drücken, und die Benutzerkontensteuerung wird aufgerufen. Nachdem Sie "JA" ausgewählt haben, wird eine PowerShell-Konsole angezeigt und "Administrator" in der Titelleiste angezeigt.
quelle
Ich habe einen Weg gefunden, dies zu tun ...
Erstellen Sie eine Batchdatei, um Ihr Skript zu öffnen:
Erstellen Sie dann eine Verknüpfung auf Ihrem Desktop (klicken Sie mit der rechten Maustaste auf Neu -> Verknüpfung ).
Fügen Sie dies dann an der folgenden Stelle ein:
Beim ersten Öffnen müssen Sie Ihr Passwort einmal eingeben. Dadurch wird es im Windows-Manager für Anmeldeinformationen gespeichert.
Danach sollten Sie als Administrator ausgeführt werden können, ohne einen Administrator-Benutzernamen oder ein Kennwort eingeben zu müssen.
quelle
Das Problem mit den Antworten von @pgk und @Andrew Odri besteht darin, dass Sie Skriptparameter haben, insbesondere wenn diese obligatorisch sind. Sie können dieses Problem mit dem folgenden Ansatz lösen:
Wie wäre der Code, wenn das Skript die obligatorischen Parameter Computername und Port hätte :
quelle
Einige der Antworten hier sind nah, aber etwas mehr Arbeit als nötig.
Erstellen Sie eine Verknüpfung zu Ihrem Skript und konfigurieren Sie es als "Als Administrator ausführen":
Properties...
Target
von<script-path>
bispowershell <script-path>
Run as administrator
quelle
Eine andere einfachere Lösung besteht darin, dass Sie auch mit der rechten Maustaste auf "C: \ Windows \ System32 \ cmd.exe" klicken und "Als Administrator ausführen" auswählen können. Anschließend können Sie jede App als Administrator ausführen, ohne ein Kennwort anzugeben.
quelle
Ich verwende die unten stehende Lösung. Es verarbeitet stdout / stderr über die Transkriptionsfunktion und übergibt den Exit-Code korrekt an den übergeordneten Prozess. Sie müssen den Transkriptionspfad / Dateinamen anpassen.
quelle
Hier erfahren Sie, wie Sie einen erhöhten Powershell-Befehl ausführen und sein Ausgabeformular in einer Windows-Batchdatei in einem einzigen Befehl sammeln (dh kein ps1-Powershell-Skript schreiben).
Oben sehen Sie, dass ich zuerst eine Powershell mit erhöhter Eingabeaufforderung starte und dann darum bitte, eine weitere Powershell (Sub-Shell) zu starten, um den Befehl auszuführen.
quelle
Befolgen Sie zusätzlich zu Shay Levys Antwort die folgenden Einstellungen (nur einmal).
PATH
Ordner. Windows \ System32-OrdnerNach dem Setup:
powershell Start-Process powershell -Verb runAs <ps1_file>
Sie können jetzt alles in nur einer Befehlszeile ausführen. Das Obige funktioniert unter Windows 8 Basic 64-Bit.
quelle
Der zuverlässigste Weg, den ich gefunden habe, besteht darin, ihn in eine sich selbst erhebende .bat-Datei zu verpacken:
Die .bat überprüft, ob Sie bereits Administrator sind, und startet das Skript bei Bedarf als Administrator neu. Es verhindert auch, dass sich fremde "cmd" -Fenster mit dem 4. Parameter von
ShellExecute()
set to öffnen0
.quelle
EXIT
in ein geändertGOTO :EOF
und das zweite gelöscht. Außerdemcd %~dp0
sollte dascd /d %~dp0
UND der erste Befehl nach dem sein@echo off
. Auf diese Weise brauchen Sie nicht den absoluten Pfad der.ps1
, sondern legen ihn einfach in demselben Ordner ab wie der.bat
. Wenn Sie das Ergebnis sehen möchten, ändern Sie den 4. Parameter in1
.mshta
Befehl?cmd
beenden, damit es nicht "repariert" wird, aber ich bin froh, dass Sie es gemäß Ihren Anforderungen ändern konnten.cmd
(habe ich nicht). Aber in Bezug auf die anderen Änderungen denke ich, dass dies Korrekturen sind, da meine Version für uns beide funktionieren würde, während Ihre für mich nicht funktioniert, dh meine ist allgemeiner (sprechen Sie das Szenario verschiedener Laufwerke an). Wie auch immer, ein sehr kluger Ansatz.Ich habe noch nie meine eigene Art gesehen, also probieren Sie es aus. Es ist viel einfacher zu folgen und hat einen viel kleineren Platzbedarf:
Wenn die aktuelle Powershell-Sitzung mit Administratorrechten aufgerufen wurde, wird die bekannte SID der Administratorgruppe ganz einfach in den Gruppen angezeigt, wenn Sie die aktuelle Identität abrufen. Selbst wenn das Konto Mitglied dieser Gruppe ist, wird die SID nur angezeigt, wenn der Prozess mit erhöhten Anmeldeinformationen aufgerufen wurde.
Fast alle diese Antworten sind eine Variation der äußerst beliebten Methode von Ben Armstrong von Microsoft, wie man dies erreicht, ohne wirklich zu verstehen, was es tatsächlich tut und wie man dieselbe Routine sonst emuliert.
quelle
Um die Ausgabe des Befehls an einen Textdateinamen anzuhängen, der das aktuelle Datum enthält, können Sie Folgendes tun:
quelle
Dies ist eine Klarstellung ...
Der Powershell-Berechtigungsnachweis RUNAS / SAVECRED "ist nicht sicher", hat es versucht und fügt die Administratoridentität und das Kennwort in den Berechtigungsnachweis-Cache ein und kann an anderer Stelle verwendet werden. OOPS!. Wenn Sie dies getan haben, empfehle ich Ihnen, den Eintrag zu überprüfen und zu entfernen.
Überprüfen Sie Ihr Programm oder Ihren Code, da die Microsoft-Richtlinie lautet, dass Sie ohne die Benutzerkontensteuerung (den Einstiegspunkt) keinen gemischten Benutzer- und Administratorcode im selben Code-Blob haben können, um das Programm als Administrator auszuführen. Dies wäre unter Linux sudo (dasselbe).
Die Benutzerkontensteuerung verfügt über drei Typen: Nicht sehen, eine Eingabeaufforderung oder einen Einstiegspunkt, der im Manifest des Programms generiert wird. Das Programm wird nicht erhöht. Wenn also keine Benutzerkontensteuerung vorhanden ist und ein Administrator benötigt wird, schlägt dies fehl. Die Benutzerkontensteuerung ist zwar als Administratoranforderung gut, verhindert jedoch die Codeausführung ohne Authentifizierung und verhindert, dass das Szenario mit gemischten Codes auf Benutzerebene ausgeführt wird.
quelle
Es stellte sich heraus, dass es zu einfach war. Sie müssen lediglich einen Cmd als Administrator ausführen. Geben Sie dann ein
explorer.exe
und drücken Sie die Eingabetaste. Das öffnet den Windows Explorer . Klicken Sie nun mit der rechten Maustaste auf Ihr PowerShell-Skript, das Sie ausführen möchten, und wählen Sie "Mit PowerShell ausführen", um es in PowerShell im Administratormodus zu starten.Möglicherweise werden Sie aufgefordert, die Ausführung der Richtlinie zu aktivieren, Y einzugeben und die Eingabetaste zu drücken. Jetzt wird das Skript in PowerShell als Administrator ausgeführt. Wenn alles rot angezeigt wird, bedeutet dies, dass Ihre Richtlinie noch nicht wirksam wurde. Dann versuchen Sie es erneut und es sollte gut funktionieren.
quelle