Memeriksa Peningkatan Proses Menjalankan UAC dari Command Prompt

2

Bagaimana saya bisa menggunakan command prompt (cmd.exe) untuk memeriksa apakah suatu proses sedang berjalan dengan hak ketinggian / elevasi UAC?

Jika saya menggunakan Task Manager (taskmgr.exe), saya dapat memeriksa dengan menambahkan "Virtualisasi UAC" atau, pada Windows 8, kolom "Elevated". ( Artikel ini menjelaskannya dengan cukup baik.)

Tetapi bisakah saya mendapatkan informasi ini melalui command prompt, misalnya dengan daftar tugas atau wmic? Apakah ada alat baris perintah lain yang dibangun ke dalam Windows yang memungkinkan saya untuk memeriksa status ketinggian?

Pertanyaan saya berlaku untuk semua OS Windows dengan UAC.

Kazhtaco
sumber

Jawaban:

2

Cara terbersih untuk memeriksa hak admin menggunakan skrip CMD, yang saya temukan, adalah seperti ini:

@echo off

REM  Calling verify with no args just checks the verify flag,
REM   we use this for its side effect of setting errorlevel to zero
verify >nul

REM  Attempt to read a particular system directory - the DIR
REM   command will fail with a nonzero errorlevel if the directory is
REM   unreadable by the current process.  The DACL on the
REM   c:\windows\system32\config\systemprofile directory, by default,
REM   only permits SYSTEM and Administrators.
dir %windir%\system32\config\systemprofile >nul 2>nul

REM  Use IF ERRORLEVEL or %errorlevel% to check the result
if not errorlevel 1 echo has Admin privs
if     errorlevel 1 echo has only User privs

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.

William
sumber
1

Saya tidak berpikir ada sesuatu yang dibangun ke dalam Windows yang dapat menampilkan informasi ini pada baris perintah. Bahkan PowerShell tampaknya tidak membantu tanpa memanggil fungsi Win32.

SysInternals AccessChk dapat bekerja untuk Anda:

.\accesschk.exe -p powershell.exe -e

ran elevated, menunjukkan:

[3256] powershell.exe
  Medium Mandatory Level [No-Write-Up, No-Read-Up]
  RW superUserPC2\peter
  RW NT AUTHORITY\SYSTEM
[3660] powershell.exe
  High Mandatory Level [No-Write-Up, No-Read-Up]
  RW BUILTIN\Administrators
  RW NT AUTHORITY\SYSTEM

Anda dapat melihat bahwa PowerShell kedua (3660) sedang berjalan ditinggikan karena memiliki High Mandatory Level

tetapi jika Anda menjalankan perintah ini sebagai pengguna standar, Anda mendapatkan:

[3256] powershell.exe
  Medium Mandatory Level [No-Write-Up, No-Read-Up]
  RW superUserPC2\peter
  RW NT AUTHORITY\SYSTEM
Error opening [3660] powershell.exe:
Access is denied.

Anda masih tahu bahwa PowerShell kedua berjalan tinggi karena Anda dapat Access deniedmelakukannya.

.\accesschk.exe -p -f powershell -e

memberi Anda lebih banyak informasi

Peter Hahndorf
sumber
0

Anda dapat memeriksa dengan perintah tasklist

Coba tasklist /vyang akan memberi Anda proses proses yang memiliki hak mana

Sintaks :

daftar tugas / v

Penggunaan sampel :

tasklist.exe / FI "username eq system" / v

yang akan mendaftar proses yang dijalankan oleh pengguna sistem.

BlueBerry - Vignesh4303
sumber
1
Terima kasih tapi saya tidak melihat perbedaan antara bagaimana proses UAC yang ditinggikan dan yang tidak ditinggikan sedang ditampilkan. Sebagai contoh, saya telah memulai satu calc.exe dengan dan satu tanpa elevasi, dan "tasklist / v | findstr calc" memberi tahu saya:. calc.exe 3988 Console 1 12,916 K Running compname\username 0:00:00 Calculator. calc.exe 4704 Console 1 12,924 K Running compname\username 0:00:00 Calculator
kazhtaco