web-dev-qa-db-ja.com

コマンドプロンプトから実行中のプロセスのUAC標高を確認する

コマンドプロンプト(cmd.exe)を使用して、プロセスがUAC昇格/昇格特権で実行されているかどうかを確認するにはどうすればよいですか?

タスクマネージャー(taskmgr.exe)を使用する場合は、「UAC仮想化」、またはWindows8の場合は「昇格」列を追加して確認できます。 ( この記事 それはかなりよく説明しています。)

しかし、コマンドプロンプトを介してこの情報を取得できますか?タスクリストまたはwmicを使用しますか?昇格ステータスを確認できるWindowsに組み込まれている他のコマンドラインツールはありますか?

私の質問は、UACを備えたすべてのWindowsOSに当てはまります。

2
kazhtaco

私が見つけた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やグループメンバーシップをチェックするのではなく、プロセスの実際の機能をチェックするため、有効権限がテストされます。そして、これはWindows2003およびXPまでさかのぼって機能します。通常のユーザープロセスまたは昇格されていないプロセスはディレクトリプローブに失敗しますが、管理者または昇格されたプロセスは成功します。

2
William

コマンドラインにこの情報を表示できる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

2番目の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.

それでも、Access deniedを取得したため、2番目のPowerShellが昇格して実行されることはご存知でしょう。

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

さらに多くの情報を提供します

1
Peter Hahndorf

tasklist コマンドで確認できます

tasklist /vを試してください。これにより、どのプロセスがどの権限を持っているかがわかります。

構文

タスクリスト/ v

サンプル使用法

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

これは、システムユーザーによって実行されたプロセスを一覧表示します。