1. ホーム
  2. windows

[解決済み] CMDがAdministratorとして実行されているか、または昇格した特権を持っているかどうかを検出する方法は?

2022-07-15 16:31:55

質問

バッチファイルの内部から、Administrator/昇格した権限で実行しているかどうかをテストしたいのですが。

"管理者として実行"を選択しても、ユーザー名は変更されないので、うまくいきません。

もし、何の効果もないが管理者権限を必要とする、普遍的に利用可能なコマンドがあれば、それを実行し、権限をテストするためにエラー コードをチェックすることができます。 今のところ、そのようなコマンドは見つかっていません。 私が見つけたコマンドは、単一の、特定のものではないエラー コードを返すようで、それは何でも示すことができ、さまざまな理由で失敗しがちです。

私は Windows 7 にしか関心がありませんが、以前のオペレーティング システムのサポートは素晴らしいものです。

どのように解決するのですか?

追記 : Windows 8 では、これは動作しません。 この優れた回答 を参照してください。


ここでこの解決策を見つけました。 http://www.robvanderwoude.com/clevertricks.php

AT > NUL
IF %ERRORLEVEL% EQU 0 (
    ECHO you are Administrator
) ELSE (
    ECHO you are NOT Administrator. Exiting...
    PING 127.0.0.1 > NUL 2>&1
    EXIT /B 1
)

これがうまくいかないと仮定して、Win7の話なので、それが適切であれば、Powershellで以下を使用することができます。

$principal = new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())
$principal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)

もしそうでなければ(バッチファイルを明示的に提案したのですから、おそらくそうでしょう)、上記を.NETで書き、その結果に基づいてexeから終了コードを返して、バッチファイルが使えるようにすることができます。