現在のバッチ スクリプトに管理者権限があるかどうかを確認するにはどうすればよいですか?
runas で自分自身を呼び出す方法は知っていますが、管理者権限を確認する方法は知りません。私が見た唯一の解決策は、粗雑なハッキングか、外部プログラムを使用することです。実際、Windows XP 以降で動作する限り、ハッキングであっても構いません。
ベストアンサー1
問題
黒人/ルショのソリューションは、Windows 8 以外ではすべて正常に動作します。Windows AT
8 で実行すると、次のようになります。
The AT command has been deprecated. Please use schtasks.exe instead.
The request is not supported.
(スクリーンショット #1 を参照) が返されます%errorLevel%
1
。
研究
そこで、昇格された権限を必要とする他のコマンドを探し始めました。合理的にパラノイドいくつかのリストがあったので、現在の Windows OS (XP と 8) の両極で各コマンドを実行し、標準権限で実行した場合に両方の OS でアクセスが拒否されるコマンドが見つかることを期待しました。
最終的に、私は 1 つ見つけました - NET SESSION
。次のことを必要としない、真の、クリーンな、普遍的なソリューションです。
- 安全な場所でのデータの作成または操作
FOR
ループから返されたデータを分析する- 「管理者」の文字列を検索
AT
(Windows 8 非互換) または(Windows XP 非互換)を使用しますWHOAMI
。
それぞれにセキュリティ、使いやすさ、移植性の問題があります。
テスト
私はこれが以下で動作することを独自に確認しました:
- Windows XP、x86
- Windows XP、x64
- Windows Vista、x86
- Windows Vista、x64
- Windows 7、x86
- Windows 7、x64
- Windows 8、x86
- Windows 8、x64
- Windows 10 v1909、x64
(スクリーンショット2を参照)
実装 / 使用方法
したがって、このソリューションを使用するには、次のようにするだけです。
@echo off
goto check_Permissions
:check_Permissions
echo Administrative permissions required. Detecting permissions...
net session >nul 2>&1
if %errorLevel% == 0 (
echo Success: Administrative permissions confirmed.
) else (
echo Failure: Current permissions inadequate.
)
pause >nul
説明
NET SESSION
は、「サーバー コンピュータの接続を管理します。パラメータなしで使用すると、ローカル コンピュータとのすべてのセッションに関する情報が表示されます。」
したがって、私の実装の基本的なプロセスは次のとおりです。
@echo off
- コマンドの表示を無効にする
goto check_Permissions
:check_Permissions
コードブロックにジャンプ
net session >nul 2>&1
- コマンドを実行
- コマンドの視覚的な出力を非表示にする
- 標準出力(数値ハンドル1 /
STDOUT
)ストリームをリダイレクトするnul
- 標準エラー出力ストリーム(数値ハンドル2 /
STDERR
)を数値ハンドル1と同じ宛先にリダイレクトする
- 標準出力(数値ハンドル1 /
if %errorLevel% == 0
%errorLevel%
終了コード( )の値が の場合、エラー は発生しておらず、直前のコマンドが正常に0
実行されたことを意味します。
else
%errorLevel%
終了コード( )の値がそうでない場合は、 エラーが発生し、直前のコマンドの実行が失敗したこと0
を意味します。
- それぞれの括弧内のコードは、どの条件が満たされたかに応じて実行されます。
スクリーンショット
NET SESSION
Windows XP x86 - Windows 8 x64 の場合:
@Tilka さん、承認済みの回答を私の回答に変更していただきありがとうございます。 :)