Dalam skrip PowerShell, bagaimana saya bisa memeriksa apakah saya menjalankan hak administrator?
Dalam skrip PowerShell, bagaimana saya bisa memeriksa apakah saya menjalankan hak administrator?
Jawaban:
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
$currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
(dari trik keamanan baris perintah )
Dalam Powershell 4.0 Anda dapat menggunakan membutuhkan di bagian atas script Anda:
#Requires -RunAsAdministrator
Output:
Skrip 'MyScript.ps1' tidak dapat dijalankan karena berisi pernyataan "#requires" untuk dijalankan sebagai Administrator. Sesi Windows PowerShell saat ini tidak berjalan sebagai Administrator. Mulai Windows PowerShell dengan menggunakan opsi Jalankan sebagai Administrator, lalu coba jalankan kembali skrip.
function Test-Administrator
{
$user = [Security.Principal.WindowsIdentity]::GetCurrent();
(New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
Jalankan fungsi di atas. JIKA hasilnya Benar, pengguna memiliki hak admin.
Ini akan memeriksa apakah Anda seorang Administrator, jika tidak maka akan dibuka kembali di PowerShell ISE sebagai Administrator.
Semoga ini membantu!
$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
}
sebagai kombinasi dari jawaban di atas, Anda dapat menggunakan sesuatu seperti yang berikut di awal skrip Anda:
# 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
Metode lain adalah memulai Script Anda dengan baris ini, yang akan mencegah eksekusi ketika tidak dimulai dengan hak admin.
#Requires -RunAsAdministrator