Saya ingin menulis skrip yang mengambil input pengguna, lalu membuat perubahan sistem yang luas. Saya ingin ini sangat generik, tetapi cukup, di bagian atas, saya perlu memeriksa apakah ini dijalankan sebagai 'Sebagai Administrator'. Jika tidak, maka saya ingin menampilkan pesan untuk memberi tahu mereka; jika ya, saya ingin melanjutkan. Apakah ada cara konstan untuk memverifikasi ini? Saya tidak ingin memulai sesi baru sebagai Administrator, saya hanya ingin mendeteksi apakah saat ini dijalankan sebagai admin
windows
command-line
Luke Kanada REINSTATE MONICA
sumber
sumber
Jawaban:
Temukan ini di Stack Overflow :
sumber
net session >nul 2>&1 && echo Success || echo Failure
. Saya menemukan sintaks yang ringkas ini lebih nyaman.Ini memeriksa tingkat integritas tinggi. (berfungsi untuk Windows Vista dan lebih tinggi)
sumber
whoami
hilang di XP.Banyak, banyak jawaban untuk ini dan beberapa pertanyaan lain di seluruh SE ( 1 , 2 , 3 untuk beberapa nama), yang semuanya kekurangan dalam cara ini atau yang lain, telah dengan jelas menunjukkan bahwa Windows tidak menyediakan utilitas bawaan yang andal . Jadi, sekarang saatnya untuk meluncurkan milik Anda sendiri.
Tanpa peretasan kotor lebih lanjut:
Kompilasi program berikut (ikuti petunjuk), atau dapatkan salinan yang telah dikompilasi . Ini hanya perlu dilakukan sekali, maka Anda dapat menyalin di
.exe
mana - mana (misalnya di samping Sysinternals Suite ).Kode bekerja di Win2k + 1 , baik dengan dan tanpa UAC, domain, kelompok transitif, apa pun - karena menggunakan cara yang sama seperti sistem itu sendiri ketika itu memeriksa perizinan.
chkadmin
mencetak "Admin" atau "Non-admin" dan menetapkan kode keluar masing-masing ke 0 atau 1. Outputnya bisa ditekan dengan/q
switch.chkadmin.c
:Untuk mengkompilasi, jalankan di command prompt Windows SDK:
(jika menggunakan VS2012 +, lebih banyak penyesuaian diperlukan jika Anda perlu menargetkan 2k / XP )
Metode ini milik /programming/4230602/detect-if-program-is-running-with-full-administrator-rights/4230908#4230908
1 MSDN mengklaim API adalah XP + tetapi ini salah.
CheckTokenMembership
2k + dan yang lainnya bahkan lebih tua .sumber
Cara terbersih untuk memeriksa hak admin menggunakan skrip CMD, yang saya temukan, adalah seperti ini:
Metode ini hanya menggunakan built-in CMD.exe, jadi harus sangat cepat. Ini juga memeriksa kemampuan proses yang sebenarnya daripada memeriksa SID atau keanggotaan grup, sehingga izin efektif diuji. Dan ini bekerja sejauh Windows 2003 dan XP. Proses pengguna normal atau proses yang tidak terkait gagal penyelidikan direktori, di mana Admin atau proses yang ditingkatkan berhasil.
Tes ini gagal jika
Everyone
,BUILTIN\Users
, kelompok yang sama atau lainnya diberikan izin baca untuk systemprofile. Memang, itu adalah konfigurasi non-standar selain pada mesin yang dikonfigurasikan sebagai pengontrol domain Windows yang memberikan hak baca / jalankan AUTHORITY NT \ Authorisity Users 'untuk systemprofile.sumber
verify
. Saya cenderung menggunakancd .
(cd space dot) yang menetapkan errorlevel ke 0, tidak menghasilkan output, dan juga berguna untuk membuat file dengan panjang nolcd . >somefile
. Yang mengatakan, saya menguji 'dir' pada Windows 2000, XP, Vista, 2003, 2008, 2012, 7, 8, dan 10. Untuk semua 'dir' itu akan menghapus errorlevel ke 0 pada keberhasilan jika telah ditetapkan sebelum 'dir'. Jadi saya tidak yakin mengapa william menggunakan 'verifikasi' untuk menghapus kesalahan tingkat pertama.