Wie kann ich in einem PowerShell-Skript überprüfen, ob ich mit Administratorrechten ausgeführt werde?
Wie kann ich in einem PowerShell-Skript überprüfen, ob ich mit Administratorrechten ausgeführt werde?
Antworten:
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
(von Kommandozeilen-Sicherheitstricks )
In Powershell 4.0 können Sie verwenden , erfordert am Anfang des Skripts:
#Requires -RunAsAdministrator
Ausgänge:
Das Skript 'MyScript.ps1' kann nicht ausgeführt werden, da es die Anweisung "#requires" enthält, um als Administrator ausgeführt zu werden. Die aktuelle Windows PowerShell-Sitzung wird nicht als Administrator ausgeführt. Starten Sie Windows PowerShell mit der Option Als Administrator ausführen, und führen Sie das Skript erneut aus.
function Test-Administrator
{
$user = [Security.Principal.WindowsIdentity]::GetCurrent();
(New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
Führen Sie die obige Funktion aus. WENN das Ergebnis True ist, hat der Benutzer Administratorrechte.
Hiermit wird überprüft, ob Sie ein Administrator sind. Andernfalls wird es in PowerShell ISE als Administrator erneut geöffnet.
Hoffe das hilft!
$ver = $host | select version
if ($ver.Version.Major -gt 1) {$Host.Runspace.ThreadOptions = "ReuseThread"}
# Verify that user running script is an administrator
$IsAdmin=[Security.Principal.WindowsIdentity]::GetCurrent()
If ((New-Object Security.Principal.WindowsPrincipal $IsAdmin).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator) -eq $FALSE)
{
"`nERROR: You are NOT a local administrator. Run this script after logging on with a local administrator account."
# We are not running "as Administrator" - so relaunch as administrator
# Create a new process object that starts PowerShell
$newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell_ise";
# Specify the current script path and name as a parameter
$newProcess.Arguments = $myInvocation.MyCommand.Definition;
# Indicate that the process should be elevated
$newProcess.Verb = "runas";
# Start the new process
[System.Diagnostics.Process]::Start($newProcess);
# Exit from the current, unelevated, process
exit
}
Als Kombination der obigen Antworten können Sie am Anfang Ihres Skripts Folgendes verwenden:
# todo: put this in a dedicated file for reuse and dot-source the file
function Test-Administrator
{
[OutputType([bool])]
param()
process {
[Security.Principal.WindowsPrincipal]$user = [Security.Principal.WindowsIdentity]::GetCurrent();
return $user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator);
}
}
if(-not (Test-Administrator))
{
# TODO: define proper exit codes for the given errors
Write-Error "This script must be executed as Administrator.";
exit 1;
}
$ErrorActionPreference = "Stop";
# do something
Eine andere Methode besteht darin, Ihr Skript mit dieser Zeile zu starten, wodurch die Ausführung verhindert wird, wenn es nicht mit Administratorrechten gestartet wird.
#Requires -RunAsAdministrator