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?

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.


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.


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"

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.


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.



-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
}

Dies scheint eine Teilmenge der Antwort von MDMoore313 vor über vier Jahren zu sein.
Scott
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.