Mendeteksi jika PowerShell berjalan sebagai administrator


Jawaban:


42
[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 WindowsIdentityuntuk pengguna yang sedang berjalan.
  • (...).groups- Akses groupsproperti identitas untuk mengetahui kelompok pengguna yang menjadi anggota identitas itu.
  • -match "S-1-5-32-544"memeriksa untuk melihat apakah groupsmengandung SID yang Dikenal baik dari grup Administrator, identitas hanya akan memuatnya jika "dijalankan sebagai administrator" digunakan.

2
Alih-alih hanya memposting baris kode, bisakah Anda menjelaskan apa fungsinya? Ini membantu pengunjung masa depan dalam memahami dan mengadaptasinya, jika perlu.
slhck

BOOO. Berikan orang ini suara lebih banyak
Kolob Canyon

4
Saya lebih suka jawabannya oleh @Bill_Stewart di bawah karena bebas dari string sihir.
8DH

Alih-alih menggunakan -matchdan [Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
mengetikkan

57
([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).


13
Meskipun jawaban yang diterima benar, jawaban ini jauh lebih jelas, terutama bagi seseorang yang dapat membaca skrip Anda enam bulan dari sekarang.
Patrick Seymour

46

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.


bagaimana jika Anda ingin fungsi yang keluar jika tidak dijalankan oleh admin?
Ngarai Kolob

1
@KolobCanyon - Tidak ada hal seperti menjalankan hanya fungsi PowerShell meningkat; seluruh proses PowerShell ditinggikan atau tidak.
Bill_Stewart

@ Bill_Stewart ya, tetapi Anda bisa returnjika pengguna bukan admin :)
Kolob Canyon

1
@KolobCanyon - Anda hanya dapat meningkatkan proses PowerShell ; Anda tidak dapat meningkatkan satu fungsi . Itulah mengapa #Requires -RunAsAdministratorini berguna: Ini mencegah seluruh skrip untuk berjalan jika Anda tidak ditinggikan.
Bill_Stewart

@ Bill_Stewart Ya, saya harus menggunakannya di beberapa titik.
Ngarai Kolob
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.