Wie definiere ich eine PowerShell-Funktion, für die eine Erhöhung erforderlich ist?

20

Da ich keine Alternative zum Linux- sudoBefehl elevation finde , habe ich folgende Frage:

Wie definiere ich eine PowerShell-Funktion, für die eine Erhöhung erforderlich ist? Ich meine UAC-Eingabeaufforderung.

Sagen wir, eine solche Funktion folgt:

function system-check {
    SFC /ScanNow
}

System:

Windows 8.1 Pro 64-Bit

Power Shell:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      0      10586  117

EDIT1:

Um 100% verständlich zu sein, lassen Sie mich Folgendes umformulieren:

  1. Ich führe PowerShell als Benutzer aus
  2. Ich führe die oben genannte Funktion aus system-check
  3. Ich möchte, dass die Funktion erhöht wird, um den Befehl ausführen zu können. Beachten Sie, dass die UAC-Eingabeaufforderung angezeigt werden soll
LinuxSecurityFreak
quelle
Beachten Sie, dass viele integrierte Powershell-Befehle und von Microsoft-Modulen hinzugefügte Befehle (z. B. MSOL-Befehle) häufig eine Erhöhung erfordern, aber in keiner Weise Unterstützung bei der Erhöhung von Berechtigungen bieten. Sie scheitern einfach mit kryptischen Fehlermeldungen. Wenn Sie in Ihre Skripte eine Eingabeaufforderung für die Ansicht einbauen, bieten Sie mehr Benutzerfreundlichkeit als Microsoft.
Todd Wilcox

Antworten:

33

So führen Sie einen bestimmten Befehl in einem erhöhten Fenster aus:

Start-Process -FilePath powershell.exe -ArgumentList {$ScriptBlock} -verb RunAs

Beispielsweise:

Start-Process -FilePath powershell.exe -ArgumentList {
    SFC /scannow
} -verb RunAs

So führen Sie ein bestimmtes Skript in einem erhöhten Fenster aus:

Start-Process powershell -ArgumentList '-noprofile -file MyScript.ps1' -verb RunAs

So führen Sie eine vollständige PowerShell-Sitzung aus, in der Sie zur UAC aufgefordert werden:

Start-Process powershell.exe -Verb runAs

Eine Funktion, um $ True oder $ False zurückzugeben, wenn das aktuelle Fenster mit erhöhten Berechtigungen ausgeführt wird:

function isadmin
 {
 #Returns true/false
   ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
 }

Fügen Sie am Anfang Folgendes hinzu, um sicherzustellen, dass ein Skript nur als Administrator ausgeführt wird:

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
 {
  Echo "This script needs to be run As Admin"
  Break
 }

In PowerShell v4.0 kann das Obige mithilfe einer # Requires-Anweisung vereinfacht werden:

#Requires -RunAsAdministrator

Quelle: Mit erhöhten Berechtigungen ausführen

Ashton
quelle