Ausführen eines Powershell-Skripts als Administrator

56

Auf meinem Windows 7-Desktop habe ich script.ps1, das Administratorrechte benötigt (es startet einen Dienst). Ich möchte auf dieses Skript klicken und es mit Administratorrechten ausführen.

Was ist der einfachste Weg, um dies zu erreichen?

Sajee
quelle

Antworten:

48

Hier ist eine Möglichkeit, dies mithilfe eines zusätzlichen Symbols auf Ihrem Desktop zu tun. Ich vermute, Sie könnten das Skript an eine andere Stelle verschieben, wenn Sie nur ein einziges Symbol auf Ihrem Desktop haben möchten.

  1. Erstellen Sie eine Verknüpfung zu Ihrem Powershell-Skript auf Ihrem Desktop
  2. Klicken Sie mit der rechten Maustaste auf die Verknüpfung und klicken Sie auf Eigenschaften
  3. Klicken Sie auf die Registerkarte Verknüpfung
  4. Klicken Sie auf Erweitert
  5. Wählen Sie Als Administrator ausführen

Sie können das Skript jetzt ausführen, indem Sie einfach auf die neue Verknüpfung auf Ihrem Desktop doppelklicken.

Kez
quelle
35
Dies funktionierte für mich, aber " Als Administratorpowershell -f
ausführen
2
@ Mousio - Ich brauchte das auch, danke für den Kommentar
m.edmondson
@mousio kannst du mir sagen, warum dieser Befehl funktioniert?
SShaheen
7
@SShaheen - Damit " Als Administrator ausführen" verfügbar wird, muss die Verknüpfung auf eine ausführbare Datei (z. B. powershell.exe) verweisen, anstatt nur auf das Dokument oder Skript, auf das die Verknüpfung ursprünglich verwiesen hat. Eine Verknüpfung zu script.ps1funktioniert genauso wie eine Verknüpfung zu powershell.exe -f script.ps1, aber letztere kann so eingestellt werden, dass sie als Administrator ausgeführt wird ( powershell.exe /?Erläuterungen zum Schalter -foder finden Sie unter -File)
mousio
16

Fügen Sie auf UAC-fähigen Systemen den folgenden Code am Anfang Ihres Skripts hinzu, um sicherzustellen, dass ein Skript mit vollständigen Administratorrechten ausgeführt wird:

param([switch]$Elevated)

function Test-Admin {
  $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
  $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}

if ((Test-Admin) -eq $false)  {
    if ($elevated) 
    {
        # tried to elevate, did not work, aborting
    } 
    else {
        Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}

exit
}

'running with full privileges'

Wenn Sie Ihr Skript mit der Option -elevated ausführen, wird vor der Ausführung versucht, die Berechtigungen zu erhöhen.

MDMoore313
quelle
Wenn Skript Argumente-Parameter benötigt?
Kiquenet
Was passiert, wenn dies besagt, dass es mit vollen Berechtigungen ausgeführt wird, mein Code jedoch immer noch unzureichende Administratorrechte anzeigt?
mike.b93
@Kiquenet fügen Sie es param(...)oben hinzu und leiten Sie es kurz vorher weiter -elevated. Sie müssen klug sein, wie Sie ArgumentListdas String[]Formular erstellen. Vielleicht möchten Sie das Formular verwenden.
TWiStErRob
ziemlich geschickt - besser als eine Verknüpfung zu erstellen
Mikey
13

Wenn Sie in der gleichen PowerShell sind, können Sie dies tun:

Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"
mjsr
quelle
Das Problem dabei ist, dass es das Arbeitsverzeichnis für das aufgerufene Skript in ändert C:\Windows\System32. Eine Alternative, die das aktuelle Verzeichnis beibehält
Venryx
4

Da es sich auf Ihrem Desktop befindet, ist es meiner Meinung nach am einfachsten, es auf das Höhen-Gadget zu ziehen .

Andernfalls könnten Sie mit dem elevateBefehl in Ihrem ps1-Skript ein separates Skript erstellen.

Oder Sie können sich elevatenur auf das Dienststartbit beziehen.

badp
quelle
1

PowerShell ISE befindet sich unter% windir% \ system32 \ WindowsPowerShell \ v1.0 \ PowerShell_ISE.exe. Sie können mit der rechten Maustaste darauf klicken und "Als Administrator ausführen" auswählen und das Skript von dort aus ausführen.

Sie finden es auch unter Windows Logo> Alle Programme> Zubehör> Windows PowerShell und können mit diesen Verknüpfungen dasselbe tun.

vapcguy
quelle
0

Wenn Sie die Möglichkeit haben möchten, ein Powershell-Skript als Administrator direkt über das Explorer-Kontextmenü zu starten, lesen Sie Abschnitt 2 meiner Antwort hier: https://stackoverflow.com/a/57033941/2441655

Venryx
quelle
-1

Fügen Sie dies am Anfang des Skripts hinzu:

$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
$testadmin = $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
if ($testadmin -eq $false) {
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
exit $LASTEXITCODE
}
Anthony
quelle
Dies scheint eine Teilmenge der Antwort von MDMoore313 vor über vier Jahren zu sein.
Scott