Bagaimana cara memeriksa hak administrator dalam skrip PowerShell?

Jika Anda perlu menjalankannya dengan hak administrator untuk menjalankan skrip PowerShell, Anda dapat memeriksa proses saat ini untuk hak administratif secara langsung dalam kode PS.

Kode PowerShell berikut dapat digunakan untuk memeriksa apakah skrip saat ini berjalan dalam mode "Run as Administrator" atau tidak:

Host-Tulis "Memeriksa hak administrator ..."
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ('
[Security.Principal.WindowsBuiltInRole] "Administrator"))
Peringatan-Tulis "Tidak cukup izin untuk menjalankan skrip ini. Buka konsol PowerShell dengan hak administrator dan jalankan skrip lagi"
Hancurkan

selain itu
Host-Tulis "Ada hak administrator - lanjutkan skrip ..." -ForegroundColor Green

Simpan kode PowerShell ke file check_perms.ps1 dan jalankan di konsol tanpa hak administrator:

C: \ PS \ check_perms.ps1

Seperti yang Anda lihat, sebuah prasasti muncul bahwa tidak ada hak administrator, sehingga skrip PowerShell berhenti berfungsi.

Jalankan skrip ini sekarang di sesi PowerShell yang lebih tinggi. Seperti yang Anda lihat, skrip menentukan bahwa sesi PowerShell ini berjalan dengan hak administrator.

Anda dapat menjalankan skrip PowerShell dengan hak administrator langsung dari Windows Explorer.

Anda juga dapat meminta peningkatan hak istimewa langsung dari skrip PowerShell, untuk ini alih-alih baris:

Peringatan-Tulisan “Tidak cukup hak”

Gunakan kode

Mulai-Proses Powershell -ArgumentList $ PSCommandPath -Verb RunA

Saat Anda menjalankan skrip tanpa hak administrator, skrip ini akan memulai kembali dalam sesi PowerShell istimewa baru dan permintaan UAC untuk peningkatan hak istimewa akan muncul.

Jika Anda mengaktifkan eskalasi hak istimewa, skrip PS1 Anda akan dijalankan dengan hak administrator (jalur ke file skrip PowerShell saat ini dilewatkan melalui variabel lingkungan $ PSCommandPath).

Di PowerShell 4.0 dan yang lebih baru, bahkan lebih mudah untuk memeriksa hak administrator. Untuk melakukan ini, gunakan arahan -Jalankan Administrator.

#requires -versi 4.0
#requires -RunAsAdministrator
Host-Tulis "PowerShell dimulai sebagai administrator" -ForegroundColor Green

Jika skrip tidak dijalankan di bawah administrator, kesalahan akan muncul:

Skrip 'check_perms.ps1' tidak dapat dijalankan karena mengandung 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.
Pada baris: 1 char: 1
+ C: \ PS \ check_perms.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: PermissionDenied: (check_perms.ps1: String) [], ScriptRequiresException
+ FullyQualifiedErrorId: ScriptRequiresElevation

Jika Anda menjalankan skrip ini di komputer dengan PowerShell v2, kesalahan muncul:

Tidak dapat memproses pernyataan "#requires" di baris 2 karena tidak dalam format yang benar.
Pernyataan "#requires" harus dalam salah satu format berikut:
"#Requires -shellid"
"#Membutuhkan -versi"
"#Memerlukan -pssnapin [-versi]"

Untuk mengelola Active Directory, Anda mungkin perlu tugas lain: dari skrip PowerShell, Anda perlu memverifikasi bahwa pengguna saat ini memiliki hak administrator domain. Gunakan kode berikut:

If (([[Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()). IsInRole ("Admin Domain"))

# pengguna yang meluncurkan skrip memiliki hak Admin Domain

Lain

# no rights admin Domain