สคริปต์ชุด: วิธีการตรวจสอบสิทธิ์ผู้ดูแลระบบ


281

ฉันจะตรวจสอบว่าสคริปต์ชุดปัจจุบันมีสิทธิ์ผู้ดูแลระบบได้อย่างไร

ฉันรู้วิธีที่จะทำให้มันเรียกตัวเองด้วย runas แต่ไม่ใช่วิธีการตรวจสอบสิทธิ์ผู้ดูแลระบบ ทางออกเดียวที่ฉันเห็นคืองานแฮ็คดิบหรือใช้โปรแกรมภายนอก ที่จริงฉันไม่สนใจว่ามันจะเป็นงานแฮ็คตราบใดที่มันทำงานบน Windows XP และใหม่กว่า


2
หลังจากที่คุณสามารถเปลี่ยนสิทธิ์: [วิธีการขอสิทธิ์การเข้าถึงระดับผู้ดูแลระบบภายในไฟล์แบทช์] [1] [1]: stackoverflow.com/questions/1894967/…
Alban



ดูเพิ่มเติมที่: superuser.com/questions/667607/…
ivan_pozdeev

คำตอบ:


466

ประเด็น

โซลูชันของ blak3r / Rushyo ใช้งานได้ดีสำหรับทุกสิ่งยกเว้น Windows 8 การเรียกใช้ATบน Windows 8 ส่งผลให้:

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

The request is not supported.

(ดูภาพที่ 1) %errorLevel% 1และจะกลับมา

 

วิจัย

ดังนั้นฉันจึงค้นหาคำสั่งอื่น ๆ ที่ต้องการการยกระดับสิทธิ์ rationalparanoid.comมีรายการอยู่ไม่กี่รายการดังนั้นฉันจึงรันแต่ละคำสั่งในสองสุดยอดของระบบปฏิบัติการ Windows ปัจจุบัน (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เป็นคำสั่งมาตรฐานที่ใช้เพื่อ"จัดการการเชื่อมต่อคอมพิวเตอร์เซิร์ฟเวอร์ใช้งานโดยไม่มีพารามิเตอร์ [มัน] แสดงข้อมูลเกี่ยวกับเซสชันทั้งหมดด้วยคอมพิวเตอร์ในระบบ"

ดังนั้นนี่เป็นกระบวนการพื้นฐานของการใช้งานที่ฉันได้รับ:

  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% :

[Imgur]

 

NET SESSIONบน Windows XP x86 - Windows 8 x64 :

[Imgur]

 

ขอขอบคุณ @Tilka สำหรับการเปลี่ยนคำตอบที่ยอมรับเป็นของฉัน :)


13
+1 งานเจ๋ง ๆ ! การวิจัยที่ดี โพสต์ของคุณควรเป็นคำตอบที่ยอมรับใหม่
blak3r

13
วิธีแก้ปัญหานี้ใช้งานได้ดี แต่ถ้าบริการ "เซิร์ฟเวอร์" (LanmanServer) หยุดทำงานรหัสข้อผิดพลาดสำหรับ "บริการเซิร์ฟเวอร์ยังไม่ได้เริ่มต้น" เป็นรหัสข้อผิดพลาดเดียวกับที่คุณได้รับสำหรับ "การเข้าถึงถูกปฏิเสธ" ทำให้เกิดการลบผิด . กล่าวอีกนัยหนึ่งมีหลายกรณีที่คุณสามารถเรียกใช้การตรวจสอบนี้ด้วยสิทธิ์ระดับผู้ดูแลระบบและจะส่งคืนข้อผิดพลาดเดียวกับที่ไม่มีสิทธิพิเศษเหล่านั้น
Lectrode

3
@Lectrode ฉันโพสต์วิธีแก้ไขปัญหาอื่นซึ่งไม่มีปัญหาเดียวกัน: stackoverflow.com/questions/4051883/ …
and31415

8
รหัสนี้จะส่งกลับค่าบวกปลอม (อย่างน้อยใน Windows 7) หากผู้ใช้เป็นผู้ใช้ที่มีอำนาจ ผู้ใช้ระดับสูงยังสามารถ "ยกระดับ" แล้วเรียกใช้net sessionสำเร็จ (ERRORLEVEL = 0) - แต่พวกเขาไม่มีสิทธิ์ของผู้ดูแลระบบ การใช้openfiles(ดูคำตอบโดยLucretiusด้านล่าง) ไม่มีปัญหานี้
EM0

1
สิ่งนี้จะแจ้งให้พรอมต์หากอุปกรณ์เครือข่ายไม่ทำงานอย่างสมบูรณ์ (เช่น: การดีบัก Windows) fltmc> nul 2> & 1 ทำงานได้ดีขึ้นในเรื่องนั้น
kevinf

80

วิธีแก้ปัญหา Anders ใช้งานได้สำหรับฉัน แต่ฉันไม่แน่ใจว่าจะสลับกลับเป็นตรงกันข้ามได้อย่างไร (เมื่อคุณไม่ใช่ผู้ดูแลระบบ)

นี่คือทางออกของฉัน มันมีสองกรณีคือกรณี IF และ ELSE และศิลปะ ascii บางส่วนเพื่อให้แน่ใจว่าผู้คนอ่านมันจริงๆ :)

เวอร์ชันขั้นต่ำ

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 บิต)

แก้ไข: 8/28/2012 อัปเดตเพื่อรองรับ Windows 8 @BenHooper ชี้เรื่องนี้ในคำตอบของเขาด้านล่าง กรุณาโหวตคำตอบของเขา


1
ATใช้งานไม่ได้กับ Windows 8 แต่ฉันพบวิธีแก้ปัญหาที่ดีกว่า ฉันโพสต์ไว้เป็นคำตอบที่นี่จริง ๆ แล้ว: stackoverflow.com/questions/4051883/… (หรือคุณสามารถเลื่อนลงมาก็ได้)
mythofechelon

1
ฉันสงสัยว่าสองบรรทัดถ้า if errorLevel% == / EQU บนโค้ดบล็อกแรกเป็น TYPO หรือไม่โปรดแก้ไขให้ถูกต้อง
Ujjwal Singh เมื่อ

@UjjwalSingh แน่นอนมันเป็น ขอบคุณสำหรับการจับ ฉันได้ทำการปรับปรุงแล้ว
blak3r

อาจต้องการแทนที่ "Rushyo โพสต์โซลูชันนี้ที่นี่" ด้วยความคิดเห็นของคุณเกี่ยวกับฉันตอนนี้ว่าคุณกำลังใช้โซลูชันของฉันหรือไม่ :)
mythofechelon

ไม่ทำงานสำหรับกลุ่มผู้ดูแลระบบโดเมนที่เพิ่มไปยังกลุ่มผู้ดูแลระบบในเครื่องท้องถิ่นและเข้าสู่ระบบด้วยผู้ใช้ผู้ดูแลระบบโดเมน
MCRohith

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 บิต);
  • ไม่ได้สัมผัสกับรีจิสตรีหรือไฟล์ / โฟลเดอร์ระบบใด ๆ
  • ทำงานโดยไม่คำนึงถึงตำแหน่งที่ตั้งของระบบ
  • ให้ผลลัพธ์ที่ถูกต้องแม้ในเซฟโหมด

ดังนั้นฉันจึงบูตเครื่องเสมือนจริงของ Vanilla 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 (Preinstalled Environment) ไม่ได้มาพร้อมกับ fsutil.exeดังนั้นเราจึงต้องหันไปใช้อย่างอื่น

ในระหว่างการทดสอบก่อนหน้านี้ฉันสังเกตเห็นว่าการรันsfcคำสั่งโดยไม่มีพารามิเตอร์ใด ๆ จะส่งผลให้:

  • ข้อผิดพลาดหากคุณมีสิทธิ์ไม่เพียงพอ
  • รายการพารามิเตอร์ที่มีอยู่และการใช้งาน

นั่นคือ: ไม่มีพารามิเตอร์, ไม่มีบุคคล แนวคิดก็คือเราสามารถแยกวิเคราะห์ผลลัพธ์และตรวจสอบว่าเราได้อะไร แต่มีข้อผิดพลาดหรือไม่:

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

เอาต์พุตข้อผิดพลาดถูกเปลี่ยนทิศทางไปที่เอาต์พุตมาตรฐานก่อนจากนั้นถูกไพพ์ไปยังfindคำสั่ง ณ จุดนี้เราต้องมองสำหรับเพียงพารามิเตอร์ที่ได้รับการสนับสนุนในทุกรุ่นของ Windowsตั้งแต่ Windows /SCANNOW2000: nulการค้นหาเป็นกรณีตายและเอาท์พุทจะถูกยกเลิกโดยเปลี่ยนเส้นทางไปยัง

นี่คือข้อความที่ตัดตอนมาจากเอกสาร:

sfc

สแกนและตรวจสอบความถูกต้องของไฟล์ระบบที่ได้รับการป้องกันทั้งหมดและแทนที่รุ่นที่ไม่ถูกต้องด้วยรุ่นที่ถูกต้อง

หมายเหตุ

คุณต้องลงทะเบียนเป็นสมาชิกของกลุ่มผู้ดูแลระบบเพื่อวิ่งsfc.exe

ตัวอย่างการใช้งาน

นี่คือตัวอย่างการวางและเรียกใช้:

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
  • วินโดว 7
  • วินโดว์ 8
  • Windows 8.1
    ---
  • Windows PE

1
+1 โซลูชั่นที่ยอดเยี่ยม โดยเฉพาะอย่างยิ่งโซลูชัน SFC ดูเหมือนจะเป็นการตรวจสอบที่เชื่อถือได้สำหรับระบบปฏิบัติการทั้งหมดที่เป็นปัญหา หากฉันพบปัญหาใด ๆ ที่ใช้อย่างใดอย่างหนึ่งเหล่านี้ฉันจะรายงานปัญหาที่นี่
Lectrode

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
Lectrode

เยี่ยมมาก @ and31415! ฉันยังไม่ได้ทดสอบfsutilโซลูชันของคุณเป็นการส่วนตัวแต่จากสิ่งที่ฉันสามารถเห็นได้ดูเหมือนว่ายืดหยุ่นกว่าโซลูชันของฉัน แม้ว่าจะไม่ได้สง่างามเท่าที่ควร ;) ฉันดีใจที่เห็นว่าระหว่างเราเราได้รับโซลูชันการตรวจสอบผู้ดูแลระบบที่ยอดเยี่ยมใช้งานง่ายและมีความยืดหยุ่น :)
mythofechelon

1
เมื่อเรียกใช้ FSUTIL คุณสามารถออกจากอักษรระบุไดรฟ์และเพิ่งเรียกใช้fsutil dirty query >nulเมื่อยกระดับสิ่งนี้จะส่งคืนข้อความช่วยเหลือและ% errorlevel% = 0
SS64

4
@ ss64 Windows 10 จะไม่ส่งคืนระดับข้อผิดพลาดที่ไม่ใช่ศูนย์อีกต่อไปfsutil dirty query >nulแต่fsutil dirty query %systemdrive% >nulก็ยังใช้งานได้
bcrist

19

อีกสองวิธี - เข้ากันได้อย่างรวดเร็วและย้อนกลับ

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

fltmc คำสั่งสามารถใช้ได้กับทุกระบบ windows ตั้งแต่ XP ดังนั้นควรพกพาสวย


หนึ่งในวิธีการแก้ปัญหามากขึ้นอย่างรวดเร็วจริงๆทดสอบบนXP, 8.1, 7 - มีตัวแปรหนึ่งที่เฉพาะเจาะจง=::ซึ่งเป็นการนำเสนอเฉพาะในกรณีที่เซสชันของคอนโซลไม่มี 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

มหากาพย์ ... โซลูชัน"dv == ::" ที่ตั้งไว้มีข้อ จำกัด / ข้อ จำกัด หรือไม่?
script'n'code

ด้วยเหตุผลบางอย่าง!! dv! วิธีมักจะบอกว่าฉันเป็นผู้ดูแลระบบในขณะที่ฉันไม่ได้คลิกขวาที่ "Run as Administrator" ไฟล์แบทช์ (Windows 10) ฉันคิดว่าวิธีนี้ไร้ที่ติจริงๆ ฉันชอบวิธีนี้เพราะไม่ได้ขึ้นอยู่กับโปรแกรมภายนอก ตอนนี้ฉันเศร้าและฉันไม่รู้ว่าอะไรทำให้มันล้มเหลว / ไม่น่าเชื่อถือสำหรับฉัน :(
script'n'code

1
@copyitright - ผมไม่มีเครื่อง win10 เพื่อทดสอบมี :( แม้ว่าการดำรงอยู่ของ. =::ตัวแปรค่อนข้างข้อผิดพลาด - มันหมายถึงไดรฟ์ที่มีอยู่ไม่ได้ดังนั้นบางทีมันอาจได้รับการแก้ไขใน win10.
npocmaka

พวกเขาอาจจะแก้ไขใช่ มันสนุกในขณะที่มันกินเวลา
script'n'code

1
ฉันเห็นว่า=::มีการกำหนดไว้สำหรับผู้ดูแลระบบที่ไม่ใช่ CMD บน windows 10 1709 อย่างไรก็ตามมันไม่ใช่วิธีที่เชื่อถือได้คุณสามารถบังคับให้กำหนดได้อย่างง่ายดายแม้ในช่วงที่ผู้ดูแลระบบ 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

4
ในขณะที่รหัสนี้อาจตอบคำถามคุณควรเพิ่มคำอธิบายว่าทำไมถึงทำเช่นนั้น
PlasmaHH

2
ใช่ สิ่งนี้ทำงานได้อย่างถูกต้องแม้ว่าผู้ใช้จะเป็นผู้ใช้ระดับสูง ไม่จำเป็นต้องใช้ pushd / popd เพียงแค่เรียกใช้openfilesและตรวจสอบข้อผิดพลาดก็เพียงพอแล้ว
EM0

2
ฉันใช้โซลูชันนี้และมันใช้งานได้ดี ปัญหาคือopenfiles.exeไม่ได้ทำงานใน WinPE ดังนั้นสคริปต์จะส่งคืนผู้ใช้นั้นไม่ใช่ผู้ดูแลระบบเสมอ
Wayfarer

เอกสารสำหรับ openfiles.exe สามารถพบได้บนtechnet.microsoft.com/de-de/library/bb490961.aspx 1>และ2>&1มีการอธิบายในmicrosoft.com/resources/documentation/windows/xp/all/proddocs/... nulอ้างถึงอุปกรณ์ null
user1460043

13

ไม่เพียง แต่ตรวจสอบ แต่รับสิทธิ์ผู้ดูแลระบบอัตโนมัติ
aka อัตโนมัติ UAC สำหรับ Win 7/8 / 8.1 ff
: สิ่งต่อไปนี้เป็นสิ่งที่เจ๋งจริง ๆ และมีอีกหนึ่งคุณสมบัติ: ตัวอย่างชุดข้อมูลนี้ไม่เพียงตรวจสอบสิทธิ์ผู้ดูแลระบบเท่านั้น แต่จะได้รับสิทธิ์โดยอัตโนมัติ! (และการทดสอบก่อนหน้านี้หากใช้งานบนระบบปฏิบัติการที่รองรับ UAC)

ด้วยเคล็ดลับนี้คุณไม่จำเป็นต้องคลิกขวาอีกต่อไปในไฟล์แบทช์ของคุณ หากคุณลืมเริ่มต้นด้วยสิทธิ์ที่สูงขึ้น UAC จะปรากฏขึ้นโดยอัตโนมัติ! ยิ่งกว่านั้นในตอนแรกจะมีการทดสอบหากระบบปฏิบัติการต้องการ / จัดเตรียม UAC ดังนั้นจึงมีการทำงานที่ถูกต้องเช่นสำหรับ Win 2000 / XP จนกระทั่งได้รับการทดสอบด้วย 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) การเปิดใช้งาน UAC ที่อ่านใน BatchGotAdmin และอ้างถึงในไซต์ชุดงานโดย robvanderwoude (เคารพ) (3) สำหรับระบบปฏิบัติการ OS โดย "VER | FINDSTR pattern" ฉันไม่พบข้อมูลอ้างอิง)

(เกี่ยวกับข้อ จำกัด บางอย่างเล็กน้อยเมื่อ "NET SESSION" ไม่ทำงานตามที่กล่าวไว้ในคำตอบอื่น - สามารถแทรกคำสั่งอื่น ๆ ได้สำหรับฉันที่ใช้งานในเซฟโหมด Windows หรือบริการมาตรฐานพิเศษลงและไม่ใช่กรณีการใช้งานที่สำคัญ - สำหรับผู้ดูแลระบบบางคนอาจเป็น)


มันเยี่ยมมาก! หมายเหตุสิ่งหนึ่ง - เรียกมันจาก Visual Basic ทำงานเหมือนstart- มันเปิดสคริปต์ในหน้าต่างใหม่ หากคุณต้องการเห็นผลลัพธ์ - เพิ่ม a pauseท้ายสคริปต์ของคุณ นอกจากนี้ยังยากที่จะตรวจพบเมื่อเรา "อยู่" สูงและเมื่อมีการเรียกใช้ซ้ำ คุณสามารถใช้อาร์กิวเมนต์บรรทัดคำสั่งสำหรับสิ่งนั้นได้: github.com/tgandor/meats/blob/master/lang_lawyer/cmd/…
Tomasz Gandor

@Philm: จะเป็นอย่างไรถ้า UAC ต้องการให้ผู้ใช้ป้อนรหัสผ่าน ฉันถือว่ารหัสนี้จะไม่ให้สิทธิ์ผู้ดูแลระบบแก่พวกเขาโดยอัตโนมัติโดยไม่ต้องให้ผู้ใช้ป้อนรหัสผ่านก่อน ;-)
script'n'code

@copyitright ไม่แน่นอน แต่ถ้าจำเป็นต้องใช้รหัสผ่านหรือไม่ไม่แตกต่างกันที่นี่: สิ่งที่ฉันหมายถึง "อัตโนมัติ" นั้นแน่นอนว่าสคริปต์จะกระตุ้นให้ Windows ไปที่ ASK โดยอัตโนมัติเพื่อขอสิทธิ์ หากไม่มีสิ่งก่อสร้างเช่นนี้สคริปต์ชุดงานจะล้มเหลวหากเริ่มโดยดับเบิลคลิกหรือคล้ายกัน เพื่อหลีกเลี่ยงปัญหานี้ผู้ใช้จะต้องรู้ล่วงหน้าว่าสคริปต์นั้นต้องการสิทธิ์ในระดับสูงและต้องเริ่มต้นเช่นนั้น
Philm

ดังนั้นสคริปต์ของฉันอนุญาตให้ผู้สร้างไฟล์แบตช์เปลี่ยนช่วงเวลาของการยกระดับที่จำเป็นเป็นจุดระหว่างการประมวลผลแบตช์ที่เขาหรือเธอต้องการ หรือกล่าวอีกนัยหนึ่ง: เพื่อให้การดำเนินการที่สะดวกยิ่งขึ้นโดย "doubleclick" ปกติ เนื่องจากฉันพิจารณาชุดไฟล์ดังกล่าวโดยปกติแล้วจะใช้โดยผู้เชี่ยวชาญหรือผู้ใช้ที่มีความรู้ดีมากเกี่ยวกับเทคโนโลยี Windows พื้นฐานฉันจึงไม่ได้อธิบายอย่างละเอียด
Philm

12

ฉันมีสองวิธีในการตรวจสอบสิทธิ์การเข้าถึงทั้งสองมีความน่าเชื่อถือและพกพาได้ดีในเกือบทุกรุ่นของ 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!
)

นี่เป็นหนึ่งในวิธีการที่เชื่อถือได้มากที่สุดเนื่องจากความเรียบง่ายและพฤติกรรมของคำสั่งดั้งเดิมนี้ไม่น่าจะเปลี่ยนแปลงได้ นั่นไม่ใช่กรณีของเครื่องมือ CLI ในตัวอื่น ๆ เช่นเซสชันสุทธิที่สามารถปิดใช้งานโดยนโยบายการดูแลระบบ / เครือข่ายหรือคำสั่งเช่นfsutilsที่เปลี่ยนผลลัพธ์ใน Windows 10

* ใช้งานได้กับ 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ก็อยู่ที่นั่นเป็นเวลานาน

* ไม่สามารถใช้กับ Pre NT (Win 9X)

* ใช้งานได้กับ XP และใหม่กว่า


ตัวอย่างการทำงาน

สคริปต์ที่ล้างโฟลเดอร์ชั่วคราว


1
ฉันชอบวิธีการลงทะเบียนจริง ๆ ฉันจำได้จริงไม่ต้องค้นหาทุกครั้งที่ใช้
หลงผิด

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 กระบวนการผู้ใช้ปกติหรือกระบวนการที่ไม่เกี่ยวข้องจะล้มเหลวในการตรวจสอบไดเรกทอรีโดยที่ Admin หรือกระบวนการที่ได้รับการยกระดับประสบความสำเร็จ


1
copyitright ชี้ให้เห็นว่าสิ่งนี้ไม่น่าเชื่อถือ หากคุณเยี่ยมชม% windir% \ system32 \ config \ systemprofile ในหน้าต่าง Explorer และอนุมัติด้วย UAC หน้าต่าง CMD สามารถสร้างเนื้อหาได้สำเร็จ ทำให้คุณคิดว่าคุณมีระดับความสูงเมื่อคุณไม่มี
Tyler Szabo

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 / กลุ่มไม่ทำงานในกรณีเดียว หากคุณปิด 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-securable-object-in-windows-vista.aspx ) จากนั้นกระบวนการจะไม่ได้รับการยกระดับ แต่whoami /groupsอ้างว่าเป็น

จริงๆวิธีที่ดีที่สุดในการทำเช่นนี้จากชุดไฟล์คือ:

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

คุณควรทำnet sessionสองครั้งเพราะถ้ามีใครทำatมาก่อนมือคุณจะได้รับข้อมูลที่ไม่ถูกต้อง


whoami /groupsไม่ได้ให้ข้อมูลที่ผิด เป็นเพียงแค่runas /trustlevelทำให้คุณอยู่ในสถานที่ที่ไม่คาดคิด: ทำงานโดยไม่มีสิทธิ์ผู้ดูแลระบบ แต่มีระดับความสมบูรณ์สูง คุณสามารถยืนยันได้ด้วย Process Explorer (นี่อาจเป็นข้อผิดพลาดrunasแต่ไม่ใช่ข้อผิดพลาดwhoami)
Harry Johnston

แฮร์รี่ฉันได้ยินสิ่งที่คุณพูด แต่คุณช่วยอธิบายเรื่องนี้ได้ไหม? ฉันไม่เข้าใจความคิดเห็นเกี่ยวกับrunas /trustlevel เมื่อคุณเป็นผู้ดูแลระบบในท้องถิ่นและ UAC ถูกปิดใช้งานการออกคำสั่ง runas จากพรอมต์ผู้ดูแลระบบจะนำคุณเข้าสู่บริบทการรักษาความปลอดภัย "ผู้ใช้ขั้นพื้นฐาน" ขณะที่อยู่ในโหมดนั้นคุณจะไม่สามารถทำการดำเนินการของผู้ดูแลระบบได้ ลอง "net session" หรือ fsutil "หรือยูทิลิตีอื่น ๆ ที่ต้องการการเข้าถึงของผู้ดูแลระบบอย่างไรก็ตาม" whoami / groups "จะบอกคุณว่าคุณได้รับการยกระดับเมื่อคุณไม่จริงความจริงที่ว่าการโทร GetTokenInformation ส่งกลับ" TokenElevationTypeDefault "
zumalifeguard

ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งที่คุณหมายถึงโดย "whoami / กลุ่มบอกคุณว่าคุณยกระดับ"; มันไม่ได้ส่งออกสตริง "คุณยกระดับ" ใช่ไหม? คุณกำลังดูส่วนไหนของผลงาน whoami / group
Harry Johnston

แฮรี่ฉันเห็นว่าฉันยังไม่ชัดเจน พื้นหลังแรกคุณและฉันอยู่ในหน้าเดียวกัน มีกลอุบายจำนวนหนึ่งที่ผู้คนใช้ในการพิจารณาว่าพรอมต์คำสั่งกำลังทำงานในสถานะที่มีสิทธิ์การเข้าถึงระดับผู้ดูแลระบบหรือไม่ เทคนิคทั่วไปคือการใช้คำสั่งที่สร้างขึ้นเช่น fsutil, at, whoami และ "net session" การใช้ "at" ถูกคัดค้าน หากคุณค้นหาหน้านี้คุณจะเห็นตัวอย่างโดยใช้ fsutil, whoami และ "net session" ดูที่นี่สำหรับตัวอย่างเพิ่มเติมของ whoami: stackoverflow.com/questions/7985755/…
zumalifeguard

นอกจากนี้การใช้วลี "กำลังยกระดับ" ก็ไม่ถูกต้องเช่นกัน สิ่งที่ฉัน (และคนอื่น ๆ ) ควรพูดว่า "ทำงานด้วยสิทธิ์ผู้ดูแลระบบ" หากปิด UAC นั่นเป็นเพียงการทำงานในขณะที่เข้าสู่ระบบในฐานะผู้ดูแลระบบในท้องถิ่น แต่ไม่ลดระดับความน่าเชื่อถือลงอย่างชัดเจนเช่นกับ runas เมื่อเปิดใช้งาน UAC หมายความว่าผู้ใช้กำลังทำงานในพรอมต์ยกระดับ
zumalifeguard

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

2
ปัญหาที่นี่คือคุณตรวจสอบว่าผู้ใช้มีสิทธิ์ผู้ดูแลระบบ แต่สคริปต์ชุดสามารถทำงานได้โดยไม่มีสิทธิ์ผู้ดูแลระบบ
tanascius

2
whoamiไม่รองรับPlus ใน 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 / รหัสทางออกคือ 0 เสมอตอนนี้แม้จะเรียกใช้สคริปต์ในฐานะผู้ใช้มาตรฐาน
script'n'code

1

หมายเหตุ: การตรวจสอบกับ cacls สำหรับ \ system32 \ config \ system จะล้มเหลวเสมอใน WOW64 (เช่นจาก% systemroot% \ syswow64 \ cmd.exe / 32 บิต Total Commander) ดังนั้นสคริปต์ที่ทำงานในเชลล์ 32 บิตในระบบ 64 บิตจะวนซ้ำตลอดไป ... ควรตรวจสอบสิทธิ์ในไดเรกทอรี Prefetch ดีกว่า:

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

Win XP ถึง 7 ที่ทดสอบแล้ว แต่ล้มเหลวใน WinPE เช่นเดียวกับใน windows 7 install.wim ไม่มี dir หรือ cacls.exe

นอกจากนี้ใน winPE และ wow64 ล้มเหลวในการตรวจสอบกับ openfiles.exe:

OPENFILES > nul

ใน Windows 7 จะมีข้อผิดพลาดระดับ "1" พร้อมข้อมูลว่า "ระบบเป้าหมายต้องเป็นระบบปฏิบัติการ 32 บิต"

การตรวจสอบทั้งสองอาจจะล้มเหลวในคอนโซลการกู้คืน

สิ่งที่ทำงานใน Windows XP - 8 32/64 บิตใน WOW64 และใน WinPE คือ: การทดสอบการสร้าง dir (หากผู้ดูแลระบบไม่ได้ปูไดเรกทอรี Windows ที่มีการวางระเบิดพร้อมสิทธิ์สำหรับทุกคน ... ) และ

net session

และ

reg add HKLM /F

การตรวจสอบ

อีกหนึ่งบันทึกย่อใน Windows XP บางรุ่น (และรุ่นอื่น ๆ อาจขึ้นอยู่กับผู้ดูแลระบบ) โดยขึ้นอยู่กับรายการรีจิสตรีโดยตรงที่เรียก bat / cmd จากสคริปต์. vbs จะล้มเหลวด้วยข้อมูลที่ไฟล์ 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

การเรียก cmd.exe พร้อมพารามิเตอร์ของไฟล์ bat / cmd ในทางกลับกันทำงานเป็นปกติ:

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 +และอีกคนหนึ่งคือแม้เก่า ลิงก์สุดท้ายยังมีวิธีที่ซับซ้อนกว่าที่จะใช้ได้แม้ใน 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 CONreinitializes หน้าจอและ 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

ฉันจะอธิบายโค้ดทีละบรรทัด:

@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 เป็นหนึ่งให้สะท้อนความล้มเหลวและไปที่จุดสิ้นสุด

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" ทำงานได้ ทั้งสองสิ่งก่อสร้างได้รับการทดสอบบน windows xp ภายใต้แขกรับเชิญผู้ใช้ขั้นสูงและบัญชีผู้ดูแลระบบด้วย LanmanServer หยุดทำงาน (errorlevel 2 สำหรับ cmd.exe ทำงานภายใต้ผู้เยี่ยมชมและผู้ใช้งาน errorlevel 0 สำหรับ cmd.exe ภายใต้สิทธิ์ผู้ดูแลระบบ) มันจะทำงานใน Vista และใหม่กว่าด้วยปัญหา UAC ข้างต้น - ฉันไม่รู้ดังนั้นจะดีถ้ามีใครสามารถทดสอบได้
คนนอกรีต

2
ฉันทดสอบด้วยสอง cmd windows (win7x64) เริ่มต้นด้วยและไม่มีสิทธิ์ของผู้ดูแลระบบ ในทั้งสองกรณีมันแสดงให้เห็นadmin
jeb

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

2
แม้แต่การละทิ้งเวลาการเปลี่ยนแปลงของระบบโดยไม่มีเหตุผลที่ดีก็คือการถ่ายภาพตัวเองด้วยเท้า (เอฟเฟกต์แปลก ๆ บนซอฟต์แวร์) - หากคุณกำลังใช้เวลาปัจจุบันคุณยังคงบิดเบือนเมื่อถึงเวลาที่คำสั่งดำเนินการ
ivan_pozdeev

2
@ivan_pozdeev: บางทีคุณอาจจะสามารถอธิบายเพียงหนึ่งเดียวของ "ผลกระทบแปลกซอฟแวร์" ที่อาจเกิดขึ้นเมื่อวันที่มีการเปลี่ยนแปลงวันที่เดียวกันในเซสชั่น cmd.exe ...
Aacini


@ivan_pozdeev: ไม่มีลิงค์ใดลิงก์หนึ่งของคุณที่เกี่ยวข้องกับวิธีการของฉันจากระยะไกล ฉันคิดว่าคุณเข้าใจผิดวิธีแก้ปัญหาของฉัน วิธีนี้สามารถมีผลลัพธ์ที่เป็นไปได้หนึ่งในสองรายการเท่านั้น: ไม่มีการเปลี่ยนแปลงใด ๆ (หากผู้ใช้ไม่มีสิทธิ์ของผู้ดูแลระบบ) หรือ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

คอลเล็กชันของสี่วิธีที่เข้ากันได้ดีที่สุดกับหน้านี้ คนแรกที่เป็นอัจฉริยะจริงๆ ทดสอบจาก 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 pennies ของฉันมีค่า:

ฉันต้องการแบตช์เพื่อเรียกใช้ภายในสภาพแวดล้อมโดเมนในระหว่างกระบวนการลงชื่อเข้าใช้ของผู้ใช้ภายใต้สภาพแวดล้อม 'ห้องทำงาน' การเห็นผู้ใช้ปฏิบัติตามนโยบาย "ล็อคดาวน์" และมุมมองที่ จำกัด (ส่วนใหญ่กระจายผ่านชุด GPO)

ชุดโดเมน GPO ถูกนำไปใช้ก่อนที่ผู้ใช้โฆษณาเชื่อมโยงสคริปต์เข้าสู่ระบบการสร้างสคริปต์เข้าสู่ระบบ GPO นั้นเกินไปสำหรับผู้ใหญ่เนื่องจากโปรไฟล์ "ใหม่" ของผู้ใช้ยังไม่ได้ถูกสร้าง / โหลด / หรือพร้อมในเวลาที่จะใช้ "ลบและ / หรือ ตรึง "ทาสก์บาร์" และรายการเมนู vbscript + เพิ่มไฟล์ในตัวเครื่อง

เช่น: สภาพแวดล้อมโปรไฟล์ 'ผู้ใช้เริ่มต้น' ที่เสนอต้องใช้ทางลัด ".URL '(.lnk) ทางลัดที่อยู่ภายใน"% ProgramData% \ Microsoft \ Windows \ Start Menu \ Programs * MyNewOWA.url * "และ" C: ที่ตั้ง \ Users \ Public \ Desktop \ * MyNewOWA.url * "รวมถึงรายการอื่น ๆ

ผู้ใช้มีเครื่องหลายเครื่องภายในโดเมนซึ่งพีซี 'ห้องทำงาน' ชุดนี้เท่านั้นที่ต้องใช้นโยบายเหล่านี้

โฟลเดอร์เหล่านี้ต้องการสิทธิ์ 'ผู้ดูแลระบบ' ในการแก้ไขและแม้ว่า 'ผู้ใช้โดเมน' เป็นส่วนหนึ่งของกลุ่ม 'ผู้ดูแลระบบ' ในท้องถิ่น - UAC เป็นความท้าทายต่อไป

พบการดัดแปลงที่หลากหลายและรวมกันที่นี่ ฉันมีผู้ใช้บางคนที่ใช้อุปกรณ์ BYOD เช่นกันซึ่งต้องการไฟล์อื่น ๆ ที่มีปัญหาเรื่องใบอนุญาต ยังไม่ได้ทดสอบบน XP (ระบบปฏิบัติการที่เก่าเกินไป) แต่มีรหัสอยู่แล้วจะรักฟีดแบ็ก

    :: ------------------------------------------------------------------------
    :: 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

โดเมนพีซีควรถูกควบคุมโดยชุด GPO ให้ได้มากที่สุด เครื่อง Workgroup / Standalone สามารถควบคุมได้โดยสคริปต์นี้

โปรดจำไว้ว่าพรอมต์ UAC จะปรากฏขึ้นอย่างน้อยหนึ่งครั้งด้วย BYOD workgroup PC (ทันทีที่ต้องการยกระดับเป็น 'ผู้ดูแลระบบครั้งแรก') แต่เนื่องจากนโยบายความปลอดภัยในพื้นที่ได้รับการแก้ไขสำหรับผู้ดูแลระบบจากจุดนี้เป็นต้นไป ป๊อปอัปจะหายไป

พีซีของโดเมนควรมีนโยบาย "ConsentPromptBehaviorAdmin" GPO ที่ตั้งค่าไว้ในนโยบาย "ล็อค" ที่สร้างไว้แล้วของคุณ - ตามที่อธิบายไว้ในส่วน 'อ้างอิง' ของสคริปต์

อีกครั้งเรียกใช้การนำเข้า secedit.exe ของไฟล์ '.inf' ที่เป็นค่าเริ่มต้นหากคุณติดอยู่ในการอภิปราย "To UAC หรือ Not to UAC" ทั้งหมด :-)

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

ตรวจสอบคำตอบนี้สำหรับรหัสที่ตรวจสอบและแจ้งโดยอัตโนมัติ: stackoverflow.com/a/30590134/4932683
cyberponk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.