Bagaimana saya bisa tahu dalam skrip saya jika PowerShell berjalan dengan hak administrator?
Saya perlu tahu karena saya mencoba menjalankan program yang membutuhkan kemampuan untuk membuka port yang dilindungi.
Bagaimana saya bisa tahu dalam skrip saya jika PowerShell berjalan dengan hak administrator?
Saya perlu tahu karena saya mencoba menjalankan program yang membutuhkan kemampuan untuk membuka port yang dilindungi.
Jawaban:
[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")
Pisahkan apa yang dilakukannya:
[bool]
- Keluarkan hasil akhirnya ke a bool
.[System.Security.Principal.WindowsIdentity]::GetCurrent()
- Mengambil WindowsIdentity
untuk pengguna yang sedang berjalan.(...).groups
- Akses groups
properti identitas untuk mengetahui kelompok pengguna yang menjadi anggota identitas itu.-match "S-1-5-32-544"
memeriksa untuk melihat apakah groups
mengandung SID yang Dikenal baik dari grup Administrator, identitas hanya akan memuatnya jika "dijalankan sebagai administrator" digunakan.-match
dan [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
Ini mengambil identitas Windows saat ini dan mengembalikan True jika identitas saat ini memiliki peran Administrator (yaitu, sedang berjalan tinggi).
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.
return
jika pengguna bukan admin :)
#Requires -RunAsAdministrator
ini berguna: Ini mencegah seluruh skrip untuk berjalan jika Anda tidak ditinggikan.