2

Как я могу использовать командную строку (cmd.exe), чтобы проверить, запущен ли процесс с повышенными правами или привилегиями UAC?

Если бы мне пришлось использовать диспетчер задач (taskmgr.exe), я мог бы проверить, добавив "Виртуализация UAC" или, в Windows 8, столбец "Повышенные". (Эта статья объясняет это довольно хорошо.)

Но могу ли я получить эту информацию через командную строку, например, с помощью списка задач или wmic? Существуют ли какие-либо другие инструменты командной строки, встроенные в Windows, которые позволяют мне проверять статус повышения прав?

Мой вопрос касается всех ОС Windows с UAC.

3 ответа3

1

Я обнаружил, что самый простой способ проверки прав администратора с использованием сценария CMD выглядит примерно так:

@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

Этот метод использует только встроенные CMD.exe, поэтому он должен быть очень быстрым. Он также проверяет действительные возможности процесса, а не проверяет SID или членство в группах, поэтому проверяется действующее разрешение. И это работает еще в Windows 2003 и XP. Нормальные пользовательские процессы или процессы без прав доступа не проходят проверку каталога, где успешно выполняются процессы администратора или повышенные права.

1

Я не думаю, что есть что-то встроенное в Windows, что может показать эту информацию в командной строке. Даже PowerShell, похоже, не поможет без вызова функций Win32.

SysInternals AccessChk может работать для вас:

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

побежал повышен, показывает:

[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

Вы можете видеть, что второй PowerShell (3660) работает с повышенными правами, поскольку имеет High Mandatory Level

но если вы запустите эту команду как обычный пользователь, вы получите:

[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.

тем не менее, вы знаете, что второй PowerShell работает с повышенными правами, потому что у вас для него Access denied в доступе .

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

дает вам еще больше информации

0

Вы можете проверить с помощью команды списка задач

Попробуйте tasklist /v который даст вам процесс, который процесс имеет какие права

Синтаксис:

список задач /v

Пример использования:

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

в котором будут перечислены процессы, запущенные системным пользователем.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .