バッチスクリプト:管理者権限を確認する方法


280

現在のバッチスクリプトに管理者権限があるかどうかを確認するにはどうすればよいですか?

runasで自分自身を呼び出す方法は知っていますが、管理者権限を確認する方法はわかりません。私が見た唯一の解決策は、粗雑なハックジョブまたは外部プログラムの使用です。まあ、実際には、それがWindows XP以降で動作する限り、ハックジョブであるかどうかは気にしません。


2
あなたは右を変更することができた後:[どのようにバッチファイル内の要求管理者のアクセスへ] [1] [1]:stackoverflow.com/questions/1894967/...
アルバン



回答:


465

問題

blak3r / RushyoのソリューションはAT、Windows 8 以外のすべてで問題なく機能します。Windows8で実行すると、次のような結果になります。

The AT command has been deprecated. Please use schtasks.exe instead.

The request is not supported.

(スクリーンショット#1を参照)そしてが返され%errorLevel% 1ます。

 

研究

そこで、昇格されたアクセス許可を必要とする他のコマンドを探しました。rationallyparanoid.comにはいくつかのリストがあったので、標準の権限で実行すると両方のOSでアクセスが拒否されるコマンドを見つけることを期待して、現在のWindows OS(XPと8)の両極端で各コマンドを実行しました。

結局、私はそれを見つけました- NET SESSION。以下を含まない、真のクリーンで普遍的なソリューション:

  • 安全な場所でのデータの作成または操作
  • FORループから返されたデータの分析
  • 「管理者」の文字列検索
  • 使用ATする(Windows 8互換性がない)、またはWHOAMI(WindowsのXPの互換性のない)を。

それぞれに独自のセキュリティ、使いやすさ、移植性の問題があります。

 

テスト中

これが動作することを個別に確認しました:

  • 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

怠惰な場合は、こちらから入手できます:https : //dl.dropbox.com/u/27573003/Distribution/Binaries/check_Permissions.bat

 

説明

NET SESSION「サーバーコンピュータの接続を管理するために使用される標準コマンドです。パラメータなしで使用すると、[it]はローカルコンピュータとのすべてのセッションに関する情報を表示します。」

だから、これが私の与えられた実装の基本的なプロセスです:

  1. @echo off
    • コマンドの表示を無効にする
  2. goto check_Permissions
    • :check_Permissionsコードブロックにジャンプする
  3. net session >nul 2>&1
    • コマンドを実行
    • コマンドの視覚的出力を非表示にする
      1. 標準出力(数値ハンドル1 / STDOUT)ストリームをnul
      2. 標準エラー出力ストリーム(数値ハンドル2 / STDERR)を数値ハンドル1と同じ宛先にリダイレクトする
  4. if %errorLevel% == 0
    • 終了コードの値は、(場合%errorLevel%である 0ことを、この手段エラーが発生していないと、それゆえ、直前のコマンドが実行に成功
  5. else
    • 終了コード(%errorLevel%)の値がそうでない 0場合は、エラーが発生したため、直前のコマンドが正常に実行されなかったことを意味します
  6. それぞれの括弧の間のコードは、どの基準が満たされているかに応じて実行されます

 

スクリーンショット

Windows 8AT %errorLevel%

[画像]

 

NET SESSIONWindows XP x86-Windows 8 x64の場合

[画像]

 

承認された回答を私のものに変更してくれて、@ Tilkaに感謝します。:)


12
+1素晴らしい仕事!良い研究。あなたの投稿は、新しく受け入れられた答えに値するはずです。
blak3r 2012

13
このソリューションは通常はうまく機能しますが、「サーバー」(LanmanServer)サービスが停止している場合、「サーバーサービスが開始されていません」のエラーコードは、「アクセスが拒否されました」と同じエラーコードであり、偽陰性になります。 。つまり、管理者権限でこのチェックを実行できる場合があり、それらの権限がない場合と同じエラーが返されます。
Lectrode 2013年

3
:私は、代替同じ問題はありませんソリューション投稿した@Lectrode stackoverflow.com/questions/4051883/...を
and31415

8
ユーザーがパワーユーザーの場合、このコードは(少なくともWindows 7では)誤検知を返します。パワーユーザーは、「昇格」net sessionして正常に実行することもできます(ERRORLEVEL = 0)。ただし、実際には管理者権限はありません。使用openfiles(下記のLucretiusによる回答を参照)ではこの問題は発生しません。
EM0 2015年

1
これにより、ネットワークデバイスが完全に機能していない場合(例:Windowsデバッグ)、プロンプトがハングします。fltmc> nul 2>&1は、その点でよりよく機能します。
kevinf 2018

80

Andersソリューションは私にとってはうまくいきましたが、(あなたが管理者でなかったとき)逆を得るにはそれを逆にする方法がわかりませんでした。

これが私の解決策です。IFケースとELSEケースの2つのケースがあり、人々が実際にそれを確実に読むためのいくつかのアスキーアートがあります。:)

最小バージョン

Rushyoはこのソリューションをここに投稿しました:CMDが管理者として実行されているかどうか、または昇格された特権があるかどうかを検出するには

NET SESSION >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
    ECHO Administrator PRIVILEGES Detected! 
) ELSE (
    ECHO NOT AN ADMIN!
)

エラーメッセージ、一時停止、終了を追加するバージョン

@rem ----[ This code block detects if the script is being running with admin PRIVILEGES If it isn't it pauses and then quits]-------
echo OFF
NET SESSION >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
    ECHO Administrator PRIVILEGES Detected! 
) ELSE (
   echo ######## ########  ########   #######  ########  
   echo ##       ##     ## ##     ## ##     ## ##     ## 
   echo ##       ##     ## ##     ## ##     ## ##     ## 
   echo ######   ########  ########  ##     ## ########  
   echo ##       ##   ##   ##   ##   ##     ## ##   ##   
   echo ##       ##    ##  ##    ##  ##     ## ##    ##  
   echo ######## ##     ## ##     ##  #######  ##     ## 
   echo.
   echo.
   echo ####### ERROR: ADMINISTRATOR PRIVILEGES REQUIRED #########
   echo This script must be run as administrator to work properly!  
   echo If you're seeing this after clicking on a start menu icon, then right click on the shortcut and select "Run As Administrator".
   echo ##########################################################
   echo.
   PAUSE
   EXIT /B 1
)
@echo ON

WinXP-> Win8(32/64ビットバージョンを含む)で動作します。

編集:2012年8月28日Windows 8をサポートするように更新されました。@ BenHooperは彼の以下の回答でこれを指摘しました。彼の答えに賛成投票してください。


1
ATWindows 8では動作しませんが、より良い解決策を見つけました。私は答えとしてここに投稿しました。実際には、stackoverflow.com / questions / 4051883 /…(または、下にスクロールしてもかまいません)。
mythofechelon 2012

1
最初のコードブロックの%errorLevel%== / EQUの2行がTYPOであるかどうか疑問に思います。修正してください。
Ujjwal Singh 2012

@UjjwalSinghそれは確かだった。捕まってくれてありがとう。更新しました。
blak3r 2012

私のソリューションを使用しているので、「Rushyoがこのソリューションをここに投稿しました」を私のコメントに置き換えたいと思うかもしれません。:)
mythofechelon 2013年

ローカルマシンの管理者グループに追加されたドメイン管理者グループでは機能せず、ドメイン管理者ユーザーでログインします。
MCRohith 2013年

46

その他の問題

@Lectrodeで指摘されているようにnet session、サーバーサービスが停止しているときにコマンドを実行しようとすると、次のエラーメッセージが表示されます。

The Server service is not started.

More help is available by typing NET HELPMSG 2114

この場合、%errorLevel%変数はに設定され2ます。

サーバーサービスは、セーフモード(ネットワークの有無に関係なく)の間は開始されません。

代替案を探しています

何か:

  • Windows XP以降(32および64ビット)でそのまま実行できます。
  • レジストリやシステムファイル/フォルダには触れません。
  • システムのロケールに関係なく機能します。
  • セーフモードでも正しい結果が得られます。

それで、私は標準的なWindows XP仮想マシンを起動し、C:\Windows\System32フォルダー内のアプリケーションのリストをスクロールして、いくつかのアイデアを得ようとしました。試行錯誤の後、これは私が思いついた汚い(しゃれた)アプローチです。

fsutil dirty query %systemdrive% >nul

fsutil dirtyコマンドの実行には管理者権限を必要とし、それ以外の場合は失敗します。%systemdrive%ある環境変数オペレーティングシステムがインストールされているドライブ文字を返します。出力はにリダイレクトされるためnul、無視されます。%errorlevel%変数がに設定されます0のみ正常に実行されます。

ドキュメントの内容は次のとおりです。

Fsutilダーティ

ボリュームのダーティビットを照会または設定します。ボリュームのダーティビットが設定されている場合、autochkは次にコンピューターが再起動されたときに、ボリュームのエラーを自動的にチェックします。

構文

fsutil dirty {query | set} <VolumePath>

パラメーター

query           Queries the specified volume's dirty bit.
set             Sets the specified volume's dirty bit.
<VolumePath>    Specifies the drive name followed by a colon or GUID.

備考

ボリュームのダーティビットは、ファイルシステムが不整合な状態にある可能性があることを示します。ダーティビットは次の理由で設定できます。

  • ボリュームはオンラインであり、未処理の変更があります。
  • ボリュームに変更が加えられ、変更がディスクにコミットされる前にコンピューターがシャットダウンされました。
  • ボリュームの破損が検出されました。

コンピュータの再起動時にダーティビットが設定されている場合、chkdskが実行され、ファイルシステムの整合性が検証され、ボリュームの問題の修正が試みられます。

ドライブCのダーティビットを照会するには、次のように入力します。

fsutil dirty query C:

さらなる研究

上記のソリューションはWindows XP以降で機能しますが、Windows 2000およびWindows PE(プレインストール環境)にはが付属していないfsutil.exeため、他の方法を使用する必要があります。

以前のテスト中に、sfcパラメーターなしでコマンドを実行すると、次のいずれかの結果になることに気付きました。

  • 十分な権限がない場合はエラー。
  • 使用可能なパラメーターとその使用法のリスト。

つまり、パラメーターなし、パーティーなし。アイデアは、出力を解析して、エラー以外のものがないかどうかを確認できるというものです。

sfc 2>&1 | find /i "/SCANNOW" >nul

エラー出力は最初に標準出力にリダイレクトされ、次にfindコマンドにパイプされます。この時点で、Windows 2000以降のすべてのバージョンのWindowsでサポートされている唯一のパラメーターを探す必要があります。検索では大文字と小文字が区別されず、リダイレクトされて出力が破棄されます。/SCANNOWnul

ドキュメントからの抜粋です:

SFC

すべての保護されたシステムファイルの整合性をスキャンして検証し、正しくないバージョンを正しいバージョンに置き換えます。

備考

sfc.exeを実行するには、Administratorsグループのメンバーとしてログオンする必要があります。

使用例

次に、貼り付けて実行する例をいくつか示します。

Windows XP以降

@echo off

call :isAdmin
if %errorlevel% == 0 (
echo Running with admin rights.
) else (
echo Error: Access denied.
)

pause >nul
exit /b

:isAdmin
fsutil dirty query %systemdrive% >nul
exit /b

Windows 2000 / Windows PE

@echo off

call :isAdmin
if %errorlevel% == 0 (
echo Running with admin rights.
) else (
echo Error: Access denied.
)

pause >nul
exit /b

:isAdmin
sfc 2>&1 | find /i "/SCANNOW" >nul
exit /b

に適用されます

  • Windows 2000
  • Windows XP
  • Windows Vista
  • Windows 7
  • ウィンドウズ8
  • Windows 8.1
    ---
  • Windows PE

1
+1優れたソリューション。特にSFCソリューションは、問題のすべてのオペレーティングシステムに対する信頼できるチェックであると思われます。これらのいずれかを使用して問題が発生した場合は、ここで報告します。
Lectrode 2014年

1
SFCすべてのシステムでチェックを使用したい人は、少し独創的にする必要があります。何らかの理由で、Windows 8以降ではSFC単一の文字のみが出力されます。出力を正常に解析するには、次を実行する必要があります:setlocal enabledelayedexpansion for /f "tokens=* delims=" %%s in ('sfc 2^>^&1^|MORE') do @set "output=!output!%%s" echo "%output%"|findstr /I /C:"/scannow">nul 2>&1(3つの別々の行)。これは、Windows 2000からWindows 2012 R2で動作するはずです。余談ですが、FINDSTRの方が一般的にFINDよりも処理が速いため、FINDSTRを使用します。
Lectrode 2014年

@ and31415、素晴らしい仕事です!私はfsutilまだあなたのソリューションを個人的にテストしていませんが、私が見ることができるものから、それは私のソリューションよりもはるかに柔軟性があるようです。それほどエレガントではありませんが、多分。;)私たちの間に、優れた、簡単で柔軟な管理者検出ソリューションが確保されていることをうれしく思います。:)
mythofechelon 2014年

1
FSUTILを実行するfsutil dirty query >nulときは、ドライブ文字を省略して、昇格したときに実行することができます。これにより、ヘルプテキストと%errorlevel%= 0が返されます
SS64

4
@ ss64のWindows 10は、もはやゼロ以外のエラーレベルを返しませんfsutil dirty query >nulが、fsutil dirty query %systemdrive% >nulまだ動作します
bcrist

19

さらに2つの方法-高速および下位互換性。

fltmc >nul 2>&1 && (
  echo has admin permissions
) || (
  echo has NOT admin permissions
)

fltmc コマンドは、XP以降のすべてのWindowsシステムで使用できるため、非常に移植性が高いはずです。


上でテストもう一つ本当に速いソリューションXP8.17 -ある特定の変数があります=::コンソールセッションは、それが含まれている変数を作成することは容易ではない何の管理privileges.As持っていない場合にのみ提示され=、これは管理者に確認するため、比較的信頼性の高い方法であることの名前には、権限(外部実行可能ファイルを呼び出さないため、パフォーマンスが良好です)

setlocal enableDelayedExpansion
set "dv==::"
if defined !dv! ( 
   echo has NOT admin permissions
) else (
   echo has admin permissions
)

これをコマンドラインから直接使用したいが、バッチファイルからは使用しない場合:

set ^"|find "::"||echo has admin permissions

Epic ... セット「dv == ::」ソリューションには欠点/制限がありますか?
script'n'code

まあ、何らかの理由で!dv!メソッドには常に管理者と表示されますが、バッチファイル(Windows 10)の[管理者として実行]を右クリックしていません。この方法は完璧だと本当に思った。外部プログラムに依存しないため、この方法が大好きでした。今私は悲しくて、私にとってそれが失敗/信頼できない原因を知らない:(
script'n'code

1
@copyitright -私はそれをテストするには、no win10マシンがありませんでした:(のけれども存在。=::変数ではなくバグである-それはそうだろう、それがwin10で固定し、存在しないドライブを表します。
npocmaka

彼らはおそらくそれをはいパッチしました。続く間は楽しかったです。
script'n'code

1
私が見る=:::とにかくそれが信頼性の高い方法ではありません窓10 1709上の非管理者CMDのために定義されて、あなたは簡単に管理CMDセッションでも、定義することを強制することができますsubst :: c:\ & for %a in (::) do %a & set,
SST

17
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"&&(
 echo admin...
)

1
昇格した後でも、常にテストが失敗する場合があります。私の場合、スクリプトがアプリケーションによって呼び出されました。
boileau

15

代替ソリューション:

@echo off
pushd %SystemRoot%
openfiles.exe 1>nul 2>&1
if not %errorlevel% equ 0 (
    Echo here you are not administrator!
) else (
    Echo here you are administrator!
)
popd
Pause

7
回答に説明を追加していただけませんか?
bjb568 2014年

4
このコードは質問に答えるかもしれませんが、なぜそうするかについての説明を追加する必要があります。
PlasmaHH 2014年

2
はい!これは、ユーザーがパワーユーザーの場合でも正しく機能します(「ネットセッション」とは異なります)。ただし、pushd / popdの必要はありません。実行openfilesしてERRORLEVELをチェックするだけで十分です。
EM0 2015年

2
私はこのソリューションを使用してきましたが、うまく機能しています。問題はopenfiles.exe、WinPEでは機能しないため、スクリプトは常にユーザーが管理者でないことを返します。
Wayfarer 2015年

openfiles.exeのドキュメントは、technet.microsoft.com/de-de/library/bb490961.aspxにあります。1>およびmicrosoft.com/resources/documentation/windows/xp/all/proddocs/…で2>&1説明されています。指しヌルデバイスnul
user1460043

13

チェックするだけでなく、管理者権限を自動的に取得することは
、Win 7/8 / 8.1 ffの自動UACとも呼ばれます。
:以下は、もう1つの機能を持つ本当にクールなものです。このバッチスニペットは、管理者権限をチェックするだけでなく、自動的に取得します!(UAC対応のOSを使用している場合は、以前にテストします。)

このトリックを使用すると、「管理者権限」でバッチファイルを右クリックする必要がなくなります。忘れた場合は、昇格された権限で起動するために、UACが自動的に表示されます。さらに、OSがUACを必要とする場合、または最初にテストされているため、たとえば、Win 2000 / XPの場合は、Win 8.1がテストされるまで正しく動作します。

@echo off
REM Quick test for Windows generation: UAC aware or not ; all OS before NT4 ignored for simplicity
SET NewOSWith_UAC=YES
VER | FINDSTR /IL "5." > NUL
IF %ERRORLEVEL% == 0 SET NewOSWith_UAC=NO
VER | FINDSTR /IL "4." > NUL
IF %ERRORLEVEL% == 0 SET NewOSWith_UAC=NO


REM Test if Admin
CALL NET SESSION >nul 2>&1
IF NOT %ERRORLEVEL% == 0 (

    if /i "%NewOSWith_UAC%"=="YES" (
        rem Start batch again with UAC
        echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
        echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
        "%temp%\getadmin.vbs"
        del "%temp%\getadmin.vbs"
        exit /B
    )

    rem Program will now start again automatically with admin rights! 
    rem pause
    goto :eof
)

このスニペットは、いくつかの優れたバッチパターン、特に(1)このスレッドでのBen Hooperによる管理テストと(2)BatchGotAdminで読み取られ、robvanderwoudeによるバッチサイトで引用されたUACアクティベーションを結合しています(尊敬)。(3)「VER | FINDSTRパターン」によるOSの識別については、参照が見つかりません。)

(いくつかの非常にマイナーな制限に関して、「NET SESSION」が別の回答で述べられているように機能しない場合-それらのコマンドの別のものを自由に挿入してください。Windowsセーフモードまたは特別な標準サービスのダウンで実行している私にとって、これは重要な使用例ではありません。 -一部の管理者にとってはそうかもしれません。)


これは素晴らしい!1つのことに注意してください-Visual Basicから呼び出すとstart、スクリプトは新しいウィンドウで開きます。結果を見たい場合- pauseスクリプトの最後にa を追加します。また、上昇を「維持」しているとき、および再実行があるときを検出することは困難です。あなたはそのためのコマンドライン引数を使用することができます。github.com/tgandor/meats/blob/master/lang_lawyer/cmd/...
トマシュGandor

@Philm:UACがユーザーにパスワードの入力を要求する場合はどうなりますか?このコードでは、ユーザーが最初にパスワードを入力しなければ、管理者権限が自動的に付与されないのではないかと思います;-)
script'n'code

@copyitright。いいえ、もちろん違います。ただし、パスワードが必要かどうかはここで違いはありません。 "自動"で私が意味したのは、もちろん、スクリプトがWindowsに権限を自動的に要求するようにトリガーすることです。このような構成がないと、ダブルクリックなどでバッチスクリプトを開始すると失敗します。これを回避するには、ユーザーはスクリプトが昇格された権限を必要とし、そのように起動する必要があることを事前に知っておく必要があります。
Philm 2017

したがって、私のスクリプトでは、バッチファイルの作成者が、必要な昇格の瞬間を、バッチ実行中に必要なポイントにシフトすることができます。または言い換えると、通常の「ダブルクリック」でより便利に実行できるようにするためです。私は、基礎となるWindowsテクノロジの知識が非常に豊富な専門家またはユーザーが通常使用するそのようなバッチファイルを検討したので、詳細には説明しませんでした。
Philm 2017

12

特権アクセスを確認する方法は2つあります。どちらもかなり信頼性が高く、ほとんどすべてのバージョンのWindowsで非常に移植性があります。

1.方法

set guid=%random%%random%-%random%-%random%-%random%-%random%%random%%random%

mkdir %WINDIR%\%guid%>nul 2>&1
rmdir %WINDIR%\%guid%>nul 2>&1

IF %ERRORLEVEL%==0 (
    ECHO PRIVILEGED!
) ELSE (
    ECHO NOT PRIVILEGED!
)

これは単純であるため、最も信頼できる方法の1つであり、この非常に原始的なコマンドの動作が変更されることはほとんどありません。これは、admin /ネットワークポリシーによって無効にできるnetセッションなどの他の組み込みCLIツールや、Windows 10で出力を変更するfsutilsなどのコマンドの場合は当てはまりません

* XP以降で動作します

2.メソッド

REG ADD HKLM /F>nul 2>&1

IF %ERRORLEVEL%==0 (
    ECHO PRIVILEGED!
) ELSE (
    ECHO NOT PRIVILEGED!
)

fsutilsを使用したり、空のフォルダーを作成したりするのに不快ではない場合でも、ユーザーディスクに触れるという考えが気に入らない場合があります。このシナリオでは、レジストリの権限を確認できます。

このためには、上のキーを作成しようとすることができHKEY_LOCAL_MACHINEをあなたが得るだろう既定のアクセス許可を使用してアクセス拒否ERRORLEVEL == 1あなたが管理者として実行する場合、しかし、それは印刷します「コマンドが正常に実行さ」ERRORLEVEL == 0。キーは既に存在するため、レジストリには影響しません。これはおそらく最速の方法であり、REGは長い間存在しています。

* NTより前のバージョン(Win 9X)では使用できません。

* XP以降で動作します


実施例

一時フォルダーをクリアするスクリプト


1
レジストリ方式が本当に好きです。私は実際にそれを覚えることができます、それを使用するたびにそれを調べる必要はありません。
Miscreant 2017年

8

管理者権限取得するために記述したバッチスクリプトElevate.cmdこのリンクを参照)では、次のようにしています。

:checkPrivileges
  NET FILE 1>NUL 2>NUL
  if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

これは、Windows 7、8、8.1、10、さらにはWindows XPテストされており、特別なディレクトリ、ファイル、レジストリキーなどのリソースを必要としません。


6

私が見つけた、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
copyitrightは、これは信頼できないと指摘しました。エクスプローラウィンドウで%windir%\ system32 \ config \ systemprofileにアクセスしてUACで承認すると、CMDウィンドウでコンテンツを正常にディレクトリできます。高度がない場合は、高度があると考えるように導きます。
タイラーSzabo 2017年

5

以下は、Windowsディレクトリにファイルを作成しようとします。成功すると削除されます。

copy /b/y NUL %WINDIR%\06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
if errorlevel 1 goto:nonadmin
del %WINDIR%\06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
:admin
rem here you are administrator
goto:eof
:nonadmin
rem here you are not administrator
goto:eof

06CF2EB6-94E6-4a60-91D8-AB945AE8CF38は今日生成されたGUIDであり、既存のファイル名と競合する可能性は低いと想定されていることに注意してください。


+1が返されたのは、スクリプトがアプリケーションから呼び出されたときに、受け入れられた回答によって無限に多くのコマンドウィンドウが開かれたためです。
boileau

was generated today and it is assumed to be improbable to conflict with an existing filename.二人は、このコードを使用している場合を除いて
Vitim.us

4

whoami / groupsが機能しない場合があります。あなたはUAC完全に(だけでなく、通知はオフ)オフになって、している場合、あなたはその後、発行プロンプト管理者から開始しました:

runas /trustlevel:0x20000 cmd

昇格しないで実行しますが、以下を発行します:

whoami /groups

あなたは昇格していると言うでしょう。それは間違っています。これが間違っている理由は次のとおりです。

この状態で実行している場合、IsUserAdmin(https://msdn.microsoft.com/en-us/library/windows/desktop/aa376389 ( v= vs.85 ) .aspx )がFALSEを返し、UACが完全に無効になっていて、GetTokenInformation TokenElevationTypeDefault(http://blogs.msdn.com/b/cjacks/archive/2006/10/24/modifying-the-mandatory-integrity-level-for-a-seurable-object-in-windows-vista.aspx)その後、プロセスは昇格して実行されていませんが、whoami /groupsそうです。

本当に、バッチファイルからこれを行う最良の方法は次のとおりです。

net session >nul 2>nul
net session >nul 2>nul
echo %errorlevel%

net session誰かがat事前に行った場合、間違った情報を取得するため、2回行う必要があります。


whoami /groups間違った情報を提供していない。それはちょうどそれだrunas /trustlevel予期しない場所でプットします:管理者権限なしではなく、高い整合性レベルで実行されています。これはProcess Explorerで確認できます。(これはのバグである可能性がありますが、のバグでrunasはありませんwhoami。)
ハリージョンストン2015年

ハリー、私はあなたの言っていることを聞きますが、これについて詳しく説明できますか?runas /trustlevel ローカル管理者でUACが無効になっている場合のコメントについて理解できません。管理プロンプトからrunasコマンドを発行すると、「基本ユーザー」のセキュリティコンテキストが表示されます。そのモードでは、管理操作を実行できません。「net session」、「fsutil」、または管理者アクセスを必要とするその他のユーティリティを試してください。ただし、「whoami / groups」は昇格していることを示しています。昇格していない場合。GetTokenInformationを呼び出すと「TokenElevationTypeDefault」が返されるという事実はそれを示しています。
zumalifeguard 2015年

「whoami / groupsがあなたを昇格させている」とはどういう意味かわかりません。それは文字列「あなたは昇格した」という文字列を出力しないのですか?whoami / groupsの出力のどの部分を見ていますか?
Harry Johnston

ハリー、私ははっきりしていなかったようです。最初の背景です。あなたと私は同じページにいます。現在、コマンドプロンプトが管理者アクセス権を持つ状態で実行されているかどうかを判断するために使用されるいくつかのトリックがあります。一般的な手法は、fsutil、at、whoami、「net session」などのビルドされたコマンドを使用することです。「at」の使用は非推奨です。このページを検索すると、fsutil、whoami、および「net session」を使用した例が表示されます。whoamiは例の詳細についてはこちらをご覧ください:stackoverflow.com/questions/7985755/...
zumalifeguard

また、「実行中の昇格」というフレーズの使用は正確ではありません。私(および他の人)が「管理者特権で実行する」と言うべきこと。UACがオフになっている場合は、ローカル管理者としてログオンしているときに実行されますが、runasなどのように信頼レベルを明示的に下げていません。UACが有効になっている場合、これはユーザーが昇格したプロンプトで実行されていることを意味します。
zumalifeguard 2015年

2
whoami /groups | find "S-1-16-12288" > nul
if not errorlevel 1 (
  echo ...  connected as admin
)

2
ここでの問題は、ユーザーが管理者権限を持っているかどうかを確認することです。ただし、バッチスクリプトは管理者権限なしで実行できます。
tanascius 2012年

2
Plus whoamiはWindows XPではサポートされていません。
mythofechelon

また、whoami / groupsには、間違った情報を取得するという極端なケースがあります。stackoverflow.com/questions/4051883/…を
zumalifeguard

2

一部のサーバーは、コマンド「net session」が必要とするサービスを無効にします。これにより、管理者チェックがある場合は常に、管理者権限がないと表示されます。


2

編集:copyitrightはこれが信頼できないと指摘しました。UACで読み取りアクセスを承認すると、dirが成功します。別の可能性を提供するためにもう少しスクリプトがありますが、それは読み取り専用ではありません。

reg query "HKLM\SOFTWARE\Foo" >NUL 2>NUL && goto :error_key_exists
reg add "HKLM\SOFTWARE\Foo" /f >NUL 2>NUL || goto :error_not_admin
reg delete "HKLM\SOFTWARE\Foo" /f >NUL 2>NUL || goto :error_failed_delete
goto :success

:error_failed_delete
  echo Error unable to delete test key
  exit /b 3
:error_key_exists
  echo Error test key exists
  exit /b 2
:error_not_admin
  echo Not admin
  exit /b 1
:success
  echo Am admin

以下の古い答え

警告:信頼できない


ここで他の多くの良い答えとand31415によって提起されたポイントに基づいて、私は以下のファンであることがわかりました。

dir "%SystemRoot%\System32\config\DRIVERS" 2>nul >nul || echo Not Admin

依存関係がほとんどなく、高速です。


1
このソリューションは以前は機能していましたが、場所を参照し、昇格した権限が必要なフォルダーにアクセスしたため、標準ユーザーとしてスクリプトを実行しているにもかかわらず、ERRORLEVEL / exitコードは常に0になっています。
script'n'code

1

注:caclsで\ system32 \ config \ systemをチェックすると、WOW64で常に失敗します(たとえば、%systemroot%\ syswow64 \ cmd.exe / 32ビットTotal Commanderから)。これにより、64ビットシステムの32ビットシェルで実行されるスクリプトが永久にループします。 ...プリフェッチディレクトリの権限をチェックする方が適切です。

>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\Prefetch\"

Win XPから7をテストしましたが、WinPEでは失敗します。Windows7のinstall.wimと同様、dirやcacls.exeはありません。

また、winPEおよびwow64では、openfiles.exeによるチェックが失敗します。

OPENFILES > nul

Windows 7では、「ターゲットシステムは32ビットオペレーティングシステムである必要があります」という情報を含む「1」でエラーレベルになります。

両方のチェックは、おそらく回復コンソールでも失敗します。

何が動作する Windows XPの- WOW64でとWinPEの中で、8 32/64ビットがあります。dir作成テスト(管理者がいないカーペットは皆のための権限を持つWindowsディレクトリを爆撃しなかった場合は...)と

net session

そして

reg add HKLM /F

チェック。

また、.vbsスクリプトから直接bat / cmdを呼び出すレジストリエントリに依存する一部のWindows XP(およびおそらく他のバージョンでも、管理者の調整に応じて)のもう1つの注意は、bat / cmdファイルが何にも関連付けられていないという情報で失敗します...

echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
cscript "%temp%\getadmin.vbs" //nologo

一方、bat / cmdファイルのパラメーターを指定してcmd.exeを呼び出すと、正常に機能します。

echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "cmd.exe", "/C %~s0", "", "runas", 1 >> "%temp%\getadmin.vbs"
cscript "%temp%\getadmin.vbs" //nologo

1

この質問やリンクされた質問、およびSEの他の場所で文字通り何十もの回答があり、それらはすべてこの方法または別の方法で不十分ですが、Windowsが信頼できる組み込みコンソールユーティリティを提供していないことを明確に示しています。それでは、自分でロールアウトする時が来ました。

次のCコードは、プログラムが完全な管理者権限実行されているかどうかに基づいており、Win2k + 1で、どこでも、すべての場合(UAC、ドメイン、推移的グループ...)で機能します。権限を確認します。メッセージ(スイッチで消音できる)と終了コードの両方で結果を通知します。

それだけで、あなただけのコピーすることができ、一度にコンパイルする必要が.exeどこにでも-それだけに依存kernel32.dllし、advapi32.dll(私がきたコピーをアップロードします)。

chkadmin.c

#include <malloc.h>
#include <stdio.h>
#include <windows.h>
#pragma comment (lib,"Advapi32.lib")

int main(int argc, char** argv) {
    BOOL quiet = FALSE;
    DWORD cbSid = SECURITY_MAX_SID_SIZE;
    PSID pSid = _alloca(cbSid);
    BOOL isAdmin;

    if (argc > 1) {
        if (!strcmp(argv[1],"/q")) quiet=TRUE;
        else if (!strcmp(argv[1],"/?")) {fprintf(stderr,"Usage: %s [/q]\n",argv[0]);return 0;}
    }

    if (!CreateWellKnownSid(WinBuiltinAdministratorsSid,NULL,pSid,&cbSid)) {
        fprintf(stderr,"CreateWellKnownSid: error %d\n",GetLastError());exit(-1);}

    if (!CheckTokenMembership(NULL,pSid,&isAdmin)) {
        fprintf(stderr,"CheckTokenMembership: error %d\n",GetLastError());exit(-1);}

    if (!quiet) puts(isAdmin ? "Admin" : "Non-admin");
    return !isAdmin;
}

1 MSDNは、APIはXP +であると主張していますが、これは誤りです。CheckTokenMembership 2k +で、もう1 つはさらに古いです。最後のリンクには、NTでも機能するはるかに複雑な方法が含まれています。


1

PowerShell誰ですか?

param (
    [string]$Role = "Administrators"
)

#check for local role

$identity  = New-Object Security.Principal.WindowsIdentity($env:UserName)
$principal = New-Object Security.Principal.WindowsPrincipal($identity)

Write-Host "IsInRole('$Role'): " $principal.IsInRole($Role)

#enumerate AD roles and lookup

$groups = $identity::GetCurrent().Groups
foreach ($group in $groups) {
    $trans = $group.Translate([Security.Principal.NTAccount]);
    if ($trans.Value -eq $Role) {
       Write-Host "User is in '$Role' role"
    }
}

1

これはリストに追加する別のものです;-)

(システムの場所でファイルの作成を試みます)

CD.>"%SystemRoot%\System32\Drivers\etc\_"
MODE CON COLS=80 LINES=25

IF EXIST "%SystemRoot%\System32\Drivers\etc\_" (

  DEL "%SystemRoot%\System32\Drivers\etc\_"

  ECHO Has Admin privileges

) ELSE (

  ECHO No Admin privileges

)

MODE CON画面を再初期化し、システムの場所への書き込み権限を持っていない場合、任意のテキスト/エラーをsurpresses。


0

別の方法:この目的のために設計された外部ユーティリティ、たとえばIsAdmin.exe(無制限のフリーウェア)を使用します。

終了コード:

0-管理者グループのメンバーではない現在のユーザー

1-管理者の現在のユーザーメンバーであり、管理者特権で実行されている

2-管理者の現在のユーザーメンバーですが、管理者特権で実行されていません


0
@echo off
ver
set ADMDIR=C:\Users\Administrator
dir %ADMDIR% 1>nul 2>&1
echo [%errorlevel%] %ADMDIR%
if "%errorlevel%"=="0" goto main
:: further checks e.g. try to list the contents of admin folders
:: wherever they are stored on older versions of Windows
echo You need administrator privileges to run this script: %0
echo Exiting...
exit /b

:main
echo Executing with Administrator privileges...

0
@echo off
:start
set randname=%random%%random%%random%%random%%random%
md \windows\%randname% 2>nul
if %errorlevel%==0 (echo You're elevated!!!
goto end)
if %errorlevel%==1 (echo You're not elevated :(:(
goto end)
goto start
:end
rd \windows\%randname% 2>nul
pause >nul

コードを1行ずつ説明します。

@echo off

これがないと、ユーザーは1行よりも多く悩むことになります。

:start

プログラムが開始するポイント。

set randname=%random%%random%%random%%random%%random%

作成するディレクトリのファイル名を設定します。

md \windows\%randname% 2>nul

にディレクトリを作成します<DL>:\Windows(<DL>をドライブ文字に置き換えます)。

if %errorlevel%==0 (echo You're elevated!!!
goto end)

ERRORLEVEL環境変数がゼロの場合、成功メッセージをエコーし​​ます。
最後に進みます(これ以上進めないでください)。

if %errorlevel%==1 (echo You're not elevated :(:(
goto end)

ERRORLEVELが1の場合、失敗メッセージをエコーし​​て最後に進みます。

goto start

ファイル名がすでに存在する場合は、フォルダを再作成します(それ以外の場合、goto endコマンドはこれを実行できません)。

:end

終点を指定

rd \windows\%randname% 2>nul

作成したディレクトリを削除します。

pause >nul

ユーザーがメッセージを表示できるように一時停止します。

>nulおよび2>nulは、これらのコマンドの出力をフィルタリングしています。


はい、管理者ユーザー(管理者アカウントタイプのユーザーではない)としてログインすると、常に昇格されますが、それはバグではありません。
EKons

0

net user %username% >nul 2>&1 && echo admin || echo not admin


これは間違っているようです。ユーザーに管理者権限があるかどうかを示していますが、現在のcmd.exeが管理者権限で実行されている場合、これは質問とは関係ありません
jeb

いいえ、現在のcmd.exeがユーザーデータベースへの管理アクセス権を持っているかどうかを示しているため、「ネットセッション」がそうでない場合でも機能します。あるいは、「net config> nul 2>&1 && echo admin || echo not admin」がその仕事をします。LanmanServerを停止して、ゲスト、パワーユーザー、および管理アカウントでWindows XPの両方の構成を正常にテストしました(ゲストおよびパワーユーザーでcmd.exeのエラーレベル2、管理者権限でcmd.exeのエラーレベル0)。Vistaとそれ以降の上記のUACの問題で動作しますか-わからないので、誰かがテストできるといいですね。
異端者の

2
2つのcmdウィンドウ(win7x64)でテストし、管理者権限ありとなしで開始しました。両方の場合において、それが示すadmin
ジェブ

0

最も簡単な方法は、システムの日付を変更することです(管理者権限が必要です)。

date %date%
if errorlevel 1 (
   echo You have NOT admin rights
) else (
   echo You have admin rights
)

場合は%date%、変数は曜日を含むことができ、ただの最後の部分から日付を取得するDATEコマンド:

for /F "delims=" %%a in ('date ^<NUL') do set "today=%%a" & goto break
:break
for %%a in (%today%) do set "today=%%a"
date %today%
if errorlevel 1 ...

3
そのような破壊的な「アドバイス」に反対票を投じざるを得ない。
ivan_pozdeev 16

2
正当な理由なしにシステム時刻を変更することはさておき、自分自身を攻撃することです(ソフトウェアに対するあらゆる種類の奇妙な影響)。現在の時刻を使用している場合、コマンドの実行時までに時刻がずれています。
ivan_pozdeev 16

2
@ivan_pozdeev:おそらく、cmd.exeセッションで日付同じ日付に変更されたときに発生する可能性がある「ソフトウェアへの奇妙な影響」の1つだけを説明できます...
Aacini


@ivan_pozdeev:あなたのリンクのいずれも、私の方法にリモートで関連しているものはありません。あなたは私の解決策を誤解していると思います。この方法は2つのだけの可能な結果のいずれかになります(ユーザーが何も管理者権限を持っていない場合は)何も変わっていない、またはDATEが変更された値と同じ値に(ユーザーが管理者権限を持っている場合)。私の方法は時間を変えません私の回答をもう一度読んで、投票の理由を分かりやすい英語で説明してください...:(
Aacini

0

net session管理者でなくても利用できるユーザーを見つけました。理由は調べませんでした。私の回避策は、ユーザーがWindowsフォルダー内にフォルダーを作成できるかどうかをテストすることです。

これが私のコードです:

::::::: :testadmin function START :::::::
:: this function tests if current user is admin.  results are returned as "true" or "false" in %isadmin%
:: Test "%isadmin" after calling this function
:: Usage: "call :testadmin"
echo Your script entered the :testadmin function by error.  Usage: "call :testadmin"
pause
exit /b
:testadmin

 rd %windir%\local_admin_test > nul 2> nul
 md %windir%\local_admin_test > nul 2> nul
 if [%errorlevel%]==[0] set isadmin=true
 if not [%errorlevel%]==[0] set isadmin=false
 rd %windir%\local_admin_test > nul 2> nul

 if [%isadmin%]==[true] (
   echo User IS admin.
 )
 if not [%isadmin%]==[true] (
   echo User IS NOT admin.
   timeout 30
   :: or use "pause" instead of "timeout"
   exit /b
 )
exit /b
:::::: :testadmin function END ::::::

0

このページの、最も互換性が高いと思われる4つのメソッドのコレクション。最初のものは本当にかなり天才です。XPからテスト済み。ただし、管理者権限を確認するために使用できる標準のコマンドはありません。彼らは今単にPowerShellに焦点を合わせているだけだと思いますが、これは私自身の仕事のほとんどにとって本当に役に立たないものです。

必要な管理者権限が与えられていない場合に実行を継続しないように、他のバッチから呼び出すことができるバッチ 'exit-if-not-admin.cmd'を呼び出しました。

rem Sun May 03, 2020

rem Methods for XP+ used herein based on:
rem /programming/4051883/batch-script-how-to-check-for-admin-rights
goto method1

:method1
setlocal enabledelayedexpansion
set "dv==::"
if defined !dv! goto notadmin
goto admin

:method2
call fsutil dirty query %SystemDrive% >nul
if %ERRORLEVEL%==0 goto admin
goto notadmin

:method3
net session >nul 2>&1
if %ERRORLEVEL%==0 goto admin
goto notadmin

:method4
fltmc >nul 2>&1 && goto admin
goto notadmin

:admin
echo Administrator rights detected
goto end

:notadmin
echo ERROR: This batch must be run with Administrator privileges
pause
exit /b
goto end

:end```

-1

これが私の2ペニーの価値です:

ユーザーのログインプロセス中に「ワークルーム」環境内のドメイン環境内で実行するバッチが必要でした。ユーザーが「ロックダウン」ポリシーと制限されたビュー(主にGPOセットを介して配布される)に準拠していることを確認しました。

ドメインのGPOセットは、ADユーザーにリンクされたログインスクリプトの前に適用されます。ユーザーの「新しい」プロファイルが作成/ロードされていないか、「削除/適用」のタイミングで準備ができていないため、GPOログインスクリプトの作成は時期尚早でした。タスクバーとスタートメニューのアイテムを固定するvbscript +ローカルファイルをいくつか追加します。

例:提案された「default-user」プロファイル環境では、「%ProgramData%\ Microsoft \ Windows \ Start Menu \ Programs * MyNewOWA.url *」内に配置された「.URL」(。lnk)ショートカット、および「C: \ Users \ Public \ Desktop \ * MyNewOWA.url * "の場所、その他のアイテム

ユーザーはドメイン内に複数のマシンを持っており、これらの設定された「ワークルーム」PCだけがこれらのポリシーを必要とします。

これらのフォルダーを変更するには「管理者」権限が必要ですが、「ドメインユーザー」はローカルの「管理者」グループの一部ですが、UACが次の課題でした。

さまざまな改造が見つかり、ここで融合しました。BYODデバイスを使用しているユーザーもいますが、パーマの問題がある他のファイルが必要です。XP(OSが古すぎる)でテストしていないが、コードが存在し、フィードバックが欲しい。

    :: ------------------------------------------------------------------------
    :: You have a royalty-free right to use, modify, reproduce and distribute
    :: the Sample Application Files (and/or any modified version) in any way
    :: you find useful, provided that you agree that the author provides
    :: no warranty, obligations or liability for any Sample Application Files.
    :: ------------------------------------------------------------------------

    :: ********************************************************************************
    ::* Sample batch script to demonstrate the usage of RunAs.cmd
    ::*
    ::* File:           RunAs.cmd
    ::* Date:           12/10/2013
    ::* Version:        1.0.2
    ::*
    ::* Main Function:  Verifies status of 'bespoke' Scripts ability to 'Run As - Admin'
    ::*                 elevated privileges and without UAC prompt
    ::*
    ::* Usage:          Run RunAs.cmd from desired location
    ::*         Bespoke.cmd will be created and called from C:\Utilities location
    ::*         Choose whether to delete the script after its run by removing out-comment
    ::*                 (::) before the 'Del /q Bespoke.cmd' command
    ::*
    ::* Distributed under a "GNU GPL" type basis.
    ::*
    ::* Revisions:
    ::* 1.0.0 - 08/10/2013 - Created.
    ::* 1.0.1 - 09/10/2013 - Include new path creation.
    ::* 1.0.2 - 12/10/2013 - Modify/shorten UAC disable process for Admins
    ::*
    ::* REFERENCES:
    ::* Sample "*.inf" secpol.msc export from Wins 8 x64 @ bottom, 
    ::* Would be default but for 'no password complexities'
    ::*
    ::* To recreate UAC default: 
    ::* Goto:Secpol, edit out Exit, modify .inf set, export as "Wins8x64.inf" 
    ::* and import using secedit cmd provided
    ::*
    :: ********************************************************************************

    @echo off & cls
    color 9F
    Title RUN AS
    Setlocal
    :: Verify local folder availability for script
    IF NOT EXIST C:\Utilities (
        mkdir C:\Utilities & GOTO:GenBatch
    ) ELSE (
        Goto:GenBatch
    )
    :GenBatch
    c:
    cd\
    cd C:\Utilities
    IF NOT EXIST C:\Utilities\Bespoke.cmd (
        GOTO:CreateBatch
    ) ELSE (
        Goto:RunBatch
    )
    :CreateBatch
    Echo. >Bespoke.cmd
    Echo :: ------------------------------------------------------------------------ >>Bespoke.cmd
    Echo :: You have a royalty-free right to use, modify, reproduce and distribute >>Bespoke.cmd
    Echo :: the Sample Application Files (and/or any modified version) in any way >>Bespoke.cmd
    Echo :: you find useful, provided that you agree that the author provides >>Bespoke.cmd
    Echo :: has no warranty, obligations or liability for any Sample Application Files. >>Bespoke.cmd
    Echo :: ------------------------------------------------------------------------ >>Bespoke.cmd
    Echo. >>Bespoke.cmd
    Echo :: ******************************************************************************** >>Bespoke.cmd
    Echo ::* Sample batch script to demonstrate the usage of Bespoke.cmd >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* File:           Bespoke.cmd >>Bespoke.cmd
    Echo ::* Date:           10/10/2013 >>Bespoke.cmd
    Echo ::* Version:        1.0.1 >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Main Function:  Allows for running of Bespoke batch with elevated rights and no future UAC 'pop-up' >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Usage:          Called and created by RunAs.cmd run from desired location >>Bespoke.cmd
    Echo ::*                 Found in the C:\Utilities folder >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Distributed under a "GNU GPL" type basis. >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Revisions: >>Bespoke.cmd
    Echo ::* 1.0.0 - 09/10/2013 - Created. >>Bespoke.cmd
    Echo ::* 1.0.1 - 10/10/2013 - Modified, added ability to temp disable UAC pop-up warning. >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* REFERENCES: >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Exit code (%%^ErrorLevel%%) 0 - No errors have occurred, i.e. immediate previous command ran successfully >>Bespoke.cmd
    Echo ::* Exit code (%%^ErrorLevel%%) 1 - Errors occurred, i.e. immediate previous command ran Unsuccessfully >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* MS OS version check >>Bespoke.cmd
    Echo ::* http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833%28v=vs.85%29.aspx >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Copying to certain folders and running certain apps require elevated perms >>Bespoke.cmd
    Echo ::* Even with 'Run As ...' perms, UAC still pops up. >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* To run a script or application in the Windows Shell >>Bespoke.cmd
    Echo ::* http://ss64.com/vb/shellexecute.html >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo ::* Machines joined to a corporate Domain should have the UAC feature set from, and >>Bespoke.cmd
    Echo ::* pushed out from a DC GPO policy >>Bespoke.cmd
    Echo ::* e.g.: 'Computer Configuration - Policies - Windows Settings - Security Settings -  >>Bespoke.cmd
    Echo ::* Local Policies/Security Options - User Account Control -  >>Bespoke.cmd
    Echo ::* Policy: User Account Control: Behavior of the elevation prompt for administrators >>Bespoke.cmd
    Echo ::*         in Admin Approval Mode  Setting: Elevate without prompting >>Bespoke.cmd
    Echo ::* >>Bespoke.cmd
    Echo :: ******************************************************************************** >>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo @Echo off ^& cls>>Bespoke.cmd
    Echo color 9F>>Bespoke.cmd
    Echo Title RUN AS ADMIN>>Bespoke.cmd
    Echo Setlocal>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo Set "_OSVer=">>Bespoke.cmd
    Echo Set "_OSVer=UAC">>Bespoke.cmd
    Echo VER ^| FINDSTR /IL "5." ^>NUL>>Bespoke.cmd
    Echo IF %%^ErrorLevel%%==0 SET "_OSVer=PreUAC">>Bespoke.cmd
    Echo IF %%^_OSVer%%==PreUAC Goto:XPAdmin>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo :: Check if machine part of a Domain or within a Workgroup environment >>Bespoke.cmd
    Echo Set "_DomainStat=">>Bespoke.cmd
    Echo Set "_DomainStat=%%USERDOMAIN%%">>Bespoke.cmd
    Echo If /i %%^_DomainStat%% EQU %%^computername%% (>>Bespoke.cmd
    Echo Goto:WorkgroupMember>>Bespoke.cmd
    Echo ) ELSE (>>Bespoke.cmd
    Echo Set "_DomainStat=DomMember" ^& Goto:DomainMember>>Bespoke.cmd
    Echo )>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo :WorkgroupMember>>Bespoke.cmd
    Echo :: Verify status of Secpol.msc 'ConsentPromptBehaviorAdmin' Reg key >>Bespoke.cmd
    Echo reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin ^| Find /i "0x0">>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo If %%^ErrorLevel%%==0 (>>Bespoke.cmd
    Echo    Goto:BespokeBuild>>Bespoke.cmd
    Echo ) Else (>>Bespoke.cmd
    Echo    Goto:DisUAC>>Bespoke.cmd
    Echo )>>Bespoke.cmd
    Echo :DisUAC>>Bespoke.cmd
    Echo :XPAdmin>>Bespoke.cmd
    Echo :DomainMember>>Bespoke.cmd
    Echo :: Get ADMIN Privileges, Start batch again, modify UAC ConsentPromptBehaviorAdmin reg if needed >>Bespoke.cmd
    Echo ^>nul ^2^>^&1 ^"^%%^SYSTEMROOT%%\system32\cacls.exe^"^ ^"^%%^SYSTEMROOT%%\system32\config\system^">>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo IF ^'^%%^Errorlevel%%^'^ NEQ '0' (>>Bespoke.cmd
    Echo    echo Set objShell = CreateObject^^("Shell.Application"^^) ^> ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    echo objShell.ShellExecute ^"^%%~s0^"^, "", "", "runas", 1 ^>^> ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    del ^"^%%^temp%%\getadmin.vbs^">>Bespoke.cmd
    Echo    exit /B>>Bespoke.cmd
    Echo ) else (>>Bespoke.cmd
    Echo    pushd ^"^%%^cd%%^">>Bespoke.cmd
    Echo    cd /d ^"^%%~dp0^">>Bespoke.cmd
    Echo    @echo off>>Bespoke.cmd
    Echo )>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo IF %%^_OSVer%%==PreUAC Goto:BespokeBuild>>Bespoke.cmd
    Echo IF %%^_DomainStat%%==DomMember Goto:BespokeBuild>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f>>Bespoke.cmd
    Echo.>>Bespoke.cmd
    Echo :BespokeBuild>>Bespoke.cmd
    Echo :: Add your script requiring elevated perm and no UAC below: >>Bespoke.cmd
    Echo.>>Bespoke.cmd

    :: PROVIDE BRIEF EXPLINATION AS TO WHAT YOUR SCRIPT WILL ACHIEVE
    Echo ::

    :: ADD THE "PAUSE" BELOW ONLY IF YOU SET TO SEE RESULTS FROM YOUR SCRIPT
    Echo Pause>>Bespoke.cmd

    Echo Goto:EOF>>Bespoke.cmd
    Echo :EOF>>Bespoke.cmd
    Echo Exit>>Bespoke.cmd

    Timeout /T 1 /NOBREAK >Nul
    :RunBatch
    call "Bespoke.cmd"
    :: Del /F /Q "Bespoke.cmd"

    :Secpol
    :: Edit out the 'Exit (rem or ::) to run & import default wins 8 security policy provided below
    Exit

    :: Check if machine part of a Domain or within a Workgroup environment
    Set "_DomainStat="
    Set _DomainStat=%USERDOMAIN%
    If /i %_DomainStat% EQU %computername% (
        Goto:WorkgroupPC
    ) ELSE (
        Echo PC Member of a Domain, Security Policy determined by GPO
        Pause
        Goto:EOF
    )

    :WorkgroupPC

    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin | Find /i "0x5"
    Echo.
    If %ErrorLevel%==0 (
        Echo Machine already set for UAC 'Prompt'
        Pause
        Goto:EOF
    ) else (
        Goto:EnableUAC
    )
    :EnableUAC
    IF NOT EXIST C:\Utilities\Wins8x64Def.inf (
        GOTO:CreateInf
    ) ELSE (
        Goto:RunInf
    )
    :CreateInf
    :: This will create the default '*.inf' file and import it into the 
    :: local security policy for the Wins 8 machine
    Echo [Unicode]>>Wins8x64Def.inf
    Echo Unicode=yes>>Wins8x64Def.inf
    Echo [System Access]>>Wins8x64Def.inf
    Echo MinimumPasswordAge = ^0>>Wins8x64Def.inf
    Echo MaximumPasswordAge = ^-1>>Wins8x64Def.inf
    Echo MinimumPasswordLength = ^0>>Wins8x64Def.inf
    Echo PasswordComplexity = ^0>>Wins8x64Def.inf
    Echo PasswordHistorySize = ^0>>Wins8x64Def.inf
    Echo LockoutBadCount = ^0>>Wins8x64Def.inf
    Echo RequireLogonToChangePassword = ^0>>Wins8x64Def.inf
    Echo ForceLogoffWhenHourExpire = ^0>>Wins8x64Def.inf
    Echo NewAdministratorName = ^"^Administrator^">>Wins8x64Def.inf
    Echo NewGuestName = ^"^Guest^">>Wins8x64Def.inf
    Echo ClearTextPassword = ^0>>Wins8x64Def.inf
    Echo LSAAnonymousNameLookup = ^0>>Wins8x64Def.inf
    Echo EnableAdminAccount = ^0>>Wins8x64Def.inf
    Echo EnableGuestAccount = ^0>>Wins8x64Def.inf
    Echo [Event Audit]>>Wins8x64Def.inf
    Echo AuditSystemEvents = ^0>>Wins8x64Def.inf
    Echo AuditLogonEvents = ^0>>Wins8x64Def.inf
    Echo AuditObjectAccess = ^0>>Wins8x64Def.inf
    Echo AuditPrivilegeUse = ^0>>Wins8x64Def.inf
    Echo AuditPolicyChange = ^0>>Wins8x64Def.inf
    Echo AuditAccountManage = ^0>>Wins8x64Def.inf
    Echo AuditProcessTracking = ^0>>Wins8x64Def.inf
    Echo AuditDSAccess = ^0>>Wins8x64Def.inf
    Echo AuditAccountLogon = ^0>>Wins8x64Def.inf
    Echo [Registry Values]>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole\SecurityLevel=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Setup\RecoveryConsole\SetCommand=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\CachedLogonsCount=1,"10">>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ForceUnlockLogon=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\PasswordExpiryWarning=4,5>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\ScRemoveOption=1,"0">>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorAdmin=4,5>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorUser=4,3>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DisableCAD=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\DontDisplayLastUserName=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableInstallerDetection=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableSecureUIAPaths=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableUIADesktopToggle=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\EnableVirtualization=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\FilterAdministratorToken=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\LegalNoticeCaption=1,"">>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\LegalNoticeText=7,>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\PromptOnSecureDesktop=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ScForceOption=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ShutdownWithoutLogon=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\UndockWithoutLogon=4,1>>Wins8x64Def.inf
    Echo MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System\ValidateAdminCodeSignatures=4,^0>>Wins8x64Def.inf
    Echo MACHINE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers\AuthenticodeEnabled=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\AuditBaseObjects=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\CrashOnAuditFail=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\DisableDomainCreds=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\EveryoneIncludesAnonymous=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\ForceGuest=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\FullPrivilegeAuditing=3,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\LimitBlankPasswordUse=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinClientSec=4,536870912>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\MSV1_0\NTLMMinServerSec=4,536870912>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\NoLMHash=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymous=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Lsa\RestrictAnonymousSAM=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Print\Providers\LanMan Print Services\Servers\AddPrinterDrivers=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllowedExactPaths\Machine=7,System\CurrentControlSet\Control\ProductOptions,System\CurrentControlSet\Control\Server Applications,Software\Microsoft\Windows NT\CurrentVersion>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\SecurePipeServers\Winreg\AllowedPaths\Machine=7,System\CurrentControlSet\Control\Print\Printers,System\CurrentControlSet\Services\Eventlog,Software\Microsoft\OLAP Server,Software\Microsoft\Windows NT\CurrentVersion\Print,Software\Microsoft\Windows NT\CurrentVersion\Windows,System\CurrentControlSet\Control\ContentIndex,System\CurrentControlSet\Control\Terminal Server,System\CurrentControlSet\Control\Terminal Server\UserConfig,System\CurrentControlSet\Control\Terminal Server\DefaultUserConfiguration,Software\Microsoft\Windows NT\CurrentVersion\Perflib,System\CurrentControlSet\Services\SysmonLog>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\Kernel\ObCaseInsensitive=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management\ClearPageFileAtShutdown=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\ProtectionMode=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\optional=7,Posix>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\AutoDisconnect=4,15>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\EnableForcedLogOff=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\EnableSecuritySignature=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\NullSessionPipes=7,>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\RequireSecuritySignature=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanManServer\Parameters\RestrictNullSessAccess=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnablePlainTextPassword=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\EnableSecuritySignature=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters\RequireSecuritySignature=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\LDAP\LDAPClientIntegrity=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange=4,^0>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\MaximumPasswordAge=4,30>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\RequireSignOrSeal=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\RequireStrongKey=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\SealSecureChannel=4,1>>Wins8x64Def.inf
    Echo MACHINE\System\CurrentControlSet\Services\Netlogon\Parameters\SignSecureChannel=4,1>>Wins8x64Def.inf
    Echo [Privilege Rights]>>Wins8x64Def.inf
    Echo SeNetworkLogonRight = *S-1-1-0,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeBackupPrivilege = *S-1-5-32-544,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeChangeNotifyPrivilege = *S-1-1-0,*S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551,*S-1-5-90-^0>>Wins8x64Def.inf
    Echo SeSystemtimePrivilege = *S-1-5-19,*S-1-5-32-544>>Wins8x64Def.inf
    Echo SeCreatePagefilePrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeDebugPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeRemoteShutdownPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeAuditPrivilege = *S-1-5-19,*S-1-5-20>>Wins8x64Def.inf
    Echo SeIncreaseQuotaPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544>>Wins8x64Def.inf
    Echo SeIncreaseBasePriorityPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeLoadDriverPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeBatchLogonRight = *S-1-5-32-544,*S-1-5-32-551,*S-1-5-32-559>>Wins8x64Def.inf
    Echo SeServiceLogonRight = *S-1-5-80-0,*S-1-5-83-^0>>Wins8x64Def.inf
    Echo SeInteractiveLogonRight = Guest,*S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeSecurityPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeSystemEnvironmentPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeProfileSingleProcessPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeSystemProfilePrivilege = *S-1-5-32-544,*S-1-5-80-3139157870-2983391045-3678747466-658725712-1809340420>>Wins8x64Def.inf
    Echo SeAssignPrimaryTokenPrivilege = *S-1-5-19,*S-1-5-20>>Wins8x64Def.inf
    Echo SeRestorePrivilege = *S-1-5-32-544,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeShutdownPrivilege = *S-1-5-32-544,*S-1-5-32-545,*S-1-5-32-551>>Wins8x64Def.inf
    Echo SeTakeOwnershipPrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeDenyNetworkLogonRight = Guest>>Wins8x64Def.inf
    Echo SeDenyInteractiveLogonRight = Guest>>Wins8x64Def.inf
    Echo SeUndockPrivilege = *S-1-5-32-544,*S-1-5-32-545>>Wins8x64Def.inf
    Echo SeManageVolumePrivilege = *S-1-5-32-544>>Wins8x64Def.inf
    Echo SeRemoteInteractiveLogonRight = *S-1-5-32-544,*S-1-5-32-555>>Wins8x64Def.inf
    Echo SeImpersonatePrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6>>Wins8x64Def.inf
    Echo SeCreateGlobalPrivilege = *S-1-5-19,*S-1-5-20,*S-1-5-32-544,*S-1-5-6>>Wins8x64Def.inf
    Echo SeIncreaseWorkingSetPrivilege = *S-1-5-32-545,*S-1-5-90-^0>>Wins8x64Def.inf
    Echo SeTimeZonePrivilege = *S-1-5-19,*S-1-5-32-544,*S-1-5-32-545>>Wins8x64Def.inf
    Echo SeCreateSymbolicLinkPrivilege = *S-1-5-32-544,*S-1-5-83-^0>>Wins8x64Def.inf
    Echo [Version]>>Wins8x64Def.inf
    Echo signature="$CHICAGO$">>Wins8x64Def.inf
    Echo Revision=1>>Wins8x64Def.inf

    :RunInf
    :: Import 'Wins8x64Def.inf' with ADMIN Privileges, to modify UAC ConsentPromptBehaviorAdmin reg
    >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%%\system32\config\system"
    IF '%Errorlevel%' NEQ '0' (
        echo Set objShell = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
        echo objShell.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
       "%temp%%\getadmin.vbs"
        del "%temp%\getadmin.vbs"
        exit /B
        Secedit /configure /db secedit.sdb /cfg C:\Utilities\Wins8x64Def.inf /overwrite
        Goto:CheckUAC
    ) else (
        Secedit /configure /db secedit.sdb /cfg C:\Utilities\Wins8x64Def.inf /overwrite
        @echo off
    )
    :CheckUAC
    reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v ConsentPromptBehaviorAdmin | Find /i "0x5"
    Echo.
    If %ErrorLevel%==0 (
        Echo ConsentPromptBehaviorAdmin set to 'Prompt'
        Pause
        Del /Q C:\Utilities\Wins8x64Def.inf
        Goto:EOF
    ) else (
        Echo ConsentPromptBehaviorAdmin NOT set to default
        Pause
    )
    ENDLOCAL
    :EOF
    Exit

ドメインPCは、GPOセットによって可能な限り管理する必要があります。ワークグループ/スタンドアロンマシンは、このスクリプトによって管理できます。

UACプロンプトはBYODワークグループPCで少なくとも1回ポップアップします(「管理者権限」への最初の昇格が必要になるとすぐに)。ただし、この時点からローカルセキュリティポリシーが管理者用に変更されているため、ポップアップは消えます。

スクリプト「参照」セクションで説明されているように、ドメインPCには、「すでに」作成された「ロックダウン」ポリシー内にGPO「ConsentPromptBehaviorAdmin」ポリシーが設定されている必要があります。

繰り返しますが、「UACに移行するかUACに移行しない」という議論全体に行き詰まっている場合は、デフォルトの「.inf」ファイルのsecedit.exeインポートを実行します。

btw:@boileau失敗を確認してください:

>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"

コマンドプロンプトから "%SYSTEMROOT%\ system32 \ cacls.exe"または "%SYSTEMROOT%\ system32 \ config \ system"のみ、またはその両方を実行することによって-昇格したかどうかにかかわらず、全面的に結果を確認します。


-2

これを行う別の方法。

REM    # # # #      CHECKING OR IS STARTED AS ADMINISTRATOR     # # # # #

FSUTIL | findstr /I "volume" > nul&if not errorlevel 1  goto Administrator_OK

cls
echo *******************************************************
echo ***    R U N    A S    A D M I N I S T R A T O R    ***
echo *******************************************************
echo.
echo.
echo Call up just as the Administrator. Abbreviation can be done to the script and set:
echo.
echo      Shortcut ^> Advanced ^> Run as Administrator
echo.
echo.
echo Alternatively, a single run "Run as Administrator"
echo or in the Schedule tasks with highest privileges
pause > nul
goto:eof
:Administrator_OK

REM Some next lines code ...

そのリンクはどうあるべきですか?リンクが原因でスパムとして報告されました。
mmgross 2015

自動的にチェックしてプロンプトするコードについては、この回答を確認してください:stackoverflow.com/a/30590134/4932683
cyberponk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.