Skrip batch: cara memeriksa hak admin

281

Bagaimana cara saya memeriksa apakah skrip batch saat ini memiliki hak admin?

Saya tahu cara membuatnya menyebut dirinya dengan runas tetapi tidak bagaimana memeriksa hak admin. Satu-satunya solusi yang saya lihat adalah pekerjaan peretasan kasar atau menggunakan program eksternal. Yah, sebenarnya saya tidak peduli jika ini adalah pekerjaan hack selama itu bekerja pada Windows XP dan yang lebih baru.

flacs
sumber
2
setelah Anda dapat mengubah kanan: [Cara meminta akses Administrator di dalam file batch] [1] [1]: stackoverflow.com/questions/1894967/…
Alban
Lihat juga: superuser.com/questions/667607/…
ivan_pozdeev

Jawaban:

466

Masalah

Solusi blak3r / Rushyo bekerja dengan baik untuk semuanya kecuali Windows 8. Menjalankan ATpada Windows 8 menghasilkan:

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

The request is not supported.

(lihat tangkapan layar # 1) dan akan kembali %errorLevel% 1.

 

Penelitian

Jadi, saya pergi mencari perintah lain yang memerlukan izin tinggi. rATIONALparanoid.com memiliki daftar beberapa, jadi saya menjalankan setiap perintah pada dua ekstrim yang berlawanan dari OS Windows saat ini (XP dan 8) dengan harapan menemukan perintah yang akan ditolak akses pada kedua OS ketika dijalankan dengan izin standar.

Akhirnya, saya menemukan satu - NET SESSION. Sebuah benar , bersih, solusi universal yang tidak melibatkan:

  • pembuatan atau interaksi dengan data di lokasi yang aman
  • menganalisis data yang dikembalikan dari FORloop
  • mencari string untuk "Administrator"
  • menggunakan AT(Windows 8 tidak kompatibel) atau WHOAMI(Windows XP tidak kompatibel).

Masing-masing memiliki masalah keamanan, kegunaan, dan portabilitas sendiri.

 

Pengujian

Saya telah mengkonfirmasi secara independen bahwa ini berfungsi pada:

  • 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

(lihat tangkapan layar # 2)

 

Implementasi / Penggunaan

Jadi, untuk menggunakan solusi ini, cukup lakukan sesuatu seperti ini:

@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

Tersedia di sini, jika Anda malas: https://dl.dropbox.com/u/27573003/Distribution/Binaries/check_Permissions.bat

 

Penjelasan

NET SESSIONadalah perintah standar yang digunakan untuk "mengelola koneksi komputer server. Digunakan tanpa parameter, [itu] menampilkan informasi tentang semua sesi dengan komputer lokal."

Jadi, inilah proses dasar implementasi yang saya berikan:

  1. @echo off
    • Nonaktifkan tampilan perintah
  2. goto check_Permissions
    • Lompat ke :check_Permissionsblok kode
  3. net session >nul 2>&1
    • Jalankan perintah
    • Sembunyikan output visual dari perintah oleh
      1. Mengarahkan aliran keluaran standar (gagang numerik 1 / STDOUT) kenul
      2. Mengarahkan aliran output kesalahan standar (gagang numerik 2 / STDERR) ke tujuan yang sama dengan gagang numerik 1
  4. if %errorLevel% == 0
    • Jika nilai kode keluar ( %errorLevel%) adalah 0 maka ini berarti bahwa tidak ada kesalahan telah terjadi dan, oleh karena itu, perintah sebelumnya langsung berjalan dengan sukses
  5. else
    • Jika nilai kode keluar ( %errorLevel%) tidak 0 maka ini berarti bahwa kesalahan telah terjadi dan, oleh karena itu, perintah sebelumnya langsung berjalan tidak berhasil
  6. Kode antara kurung masing-masing akan dieksekusi tergantung pada kriteria yang dipenuhi

 

Tangkapan layar

Windows 8AT %errorLevel% :

[imgur]

 

NET SESSIONpada Windows XP x86 - Windows 8 x64 :

[imgur]

 

Terima kasih, @Tilka, karena mengubah jawaban Anda yang diterima menjadi milik saya. :)

mythofechelon
sumber
13
+1 Pekerjaan luar biasa! Penelitian yang bagus. Posting Anda harus layak menjadi jawaban yang diterima baru.
blak3r
13
Solusi ini biasanya berfungsi dengan baik, tetapi jika layanan "Server" (LanmanServer) dihentikan, kode kesalahan untuk "Layanan server belum dimulai" adalah kode kesalahan yang sama dengan yang Anda dapatkan untuk "Akses ditolak" yang menghasilkan false negative . Dengan kata lain, ada beberapa kasus di mana Anda bisa menjalankan pemeriksaan ini dengan hak administratif dan itu akan mengembalikan kesalahan yang sama seperti itu tanpa hak istimewa itu.
Dosen
3
@Lectrode Saya telah memposting solusi alternatif yang tidak memiliki masalah yang sama: stackoverflow.com/questions/4051883/…
and31415
8
Kode ini mengembalikan false positive (setidaknya pada Windows 7) jika pengguna adalah Pengguna Kuat. Pengguna Power juga dapat "meninggikan" dan kemudian berjalan dengan net sessionsukses (ERRORLEVEL = 0) - tetapi mereka tidak benar-benar memiliki hak admin. Menggunakan openfiles(lihat jawaban oleh Lucretius di bawah) tidak memiliki masalah ini.
EM0
1
Ini hang prompt jika perangkat jaringan tidak berfungsi penuh (misalnya: Windows debugging). fltmc> nul 2> & 1 bekerja lebih baik dalam hal itu.
kevinf
80

Solusi Anders bekerja untuk saya, tetapi saya tidak yakin bagaimana cara membalikkannya untuk mendapatkan yang sebaliknya (ketika Anda bukan admin).

Inilah solusi saya. Ini memiliki dua kasus, kasus IF dan ELSE, dan beberapa ascii seni untuk memastikan orang benar-benar membacanya. :)

Versi Minimal

Rushyo memposting solusi ini di sini: Bagaimana mendeteksi jika CMD berjalan sebagai Administrator / telah meningkatkan hak istimewa?

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

Versi yang menambahkan Pesan Kesalahan, Jeda, dan Keluar

@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

Bekerja pada WinXP -> Win8 (termasuk versi 32/64 bit).

EDIT: 8/28/2012 Diperbarui untuk mendukung Windows 8. @BenHooper menunjukkan ini dalam jawabannya di bawah. Harap jawab jawabannya.

blak3r
sumber
1
ATtidak berfungsi pada Windows 8, tetapi saya telah menemukan solusi yang lebih baik. Saya telah mempostingnya sebagai jawaban di sini, sebenarnya: stackoverflow.com/questions/4051883/… (atau Anda bisa gulir ke bawah, apa pun).
mythofechelon
1
Saya ingin tahu apakah dua baris if% errorLevel% == / EQU pada blok kode pertama adalah TYPO .. perbaiki.
Ujjwal Singh
@UjjwalSingh Pasti. Terima kasih sudah menangkap. Saya sudah memperbaruinya.
blak3r
Mungkin ingin mengganti "Rushyo memposting solusi ini di sini" dengan komentar Anda tentang saya sekarang karena Anda menggunakan solusi saya? :)
mythofechelon
Tidak berfungsi untuk Grup Admin Domain yang ditambahkan ke Grup Administrator di mesin lokal dan masuk dengan pengguna Admin domain.
MCRohith
46

Lebih banyak masalah

Seperti yang ditunjukkan oleh @Lectrode, jika Anda mencoba menjalankan net sessionperintah ketika layanan Server dihentikan, Anda menerima pesan galat berikut:

The Server service is not started.

More help is available by typing NET HELPMSG 2114

Dalam hal ini %errorLevel%variabel akan diatur ke 2.

Catatan Layanan Server tidak dimulai saat dalam Mode Aman (dengan atau tanpa jaringan).

Mencari alternatif

Sesuatu yang:

  • dapat kehabisan kotak pada Windows XP dan yang lebih baru (32 dan 64 bit);
  • tidak menyentuh registri atau file / folder sistem apa pun;
  • berfungsi terlepas dari lokal sistem;
  • memberikan hasil yang benar bahkan dalam Mode Aman.

Jadi saya mem-boot mesin virtual vanilla Windows XP dan saya mulai menggulir daftar aplikasi dalam C:\Windows\System32folder, mencoba untuk mendapatkan beberapa ide. Setelah cobaan dan kesalahan, ini adalah pendekatan kotor (pun intended) yang saya buat dengan:

fsutil dirty query %systemdrive% >nul

The fsutil dirtyperintah membutuhkan hak admin untuk menjalankan, dan akan gagal sebaliknya. %systemdrive%adalah variabel lingkungan yang mengembalikan huruf drive tempat sistem operasi diinstal. Output diarahkan ke nul, sehingga diabaikan. The %errorlevel%variabel akan ditetapkan ke 0hanya setelah eksekusi sukses.

Inilah yang dikatakan dalam dokumentasi:

Fsutil kotor

Meminta atau menyetel bit kotor volume. Ketika bit kotor volume disetel, autochk secara otomatis memeriksa volume untuk kesalahan saat berikutnya komputer dihidupkan ulang.

Sintaksis

fsutil dirty {query | set} <VolumePath>

Parameter

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.

Catatan

Sedikit volume kotor menunjukkan bahwa sistem file mungkin dalam keadaan tidak konsisten. Bit kotor dapat diatur karena:

  • Volume online dan memiliki perubahan luar biasa.
  • Perubahan dilakukan pada volume dan komputer dimatikan sebelum perubahan dilakukan ke disk.
  • Korupsi terdeteksi pada volume.

Jika bit kotor diatur saat komputer dinyalakan kembali, chkdsk dijalankan untuk memverifikasi integritas sistem file dan untuk mencoba memperbaiki masalah apa pun dengan volume.

Contohnya

Untuk meminta bit kotor pada drive C, ketik:

fsutil dirty query C:

Penelitian lebih lanjut

Sementara solusi di atas bekerja dari Windows XP dan seterusnya, ada baiknya menambahkan bahwa Windows 2000 dan Windows PE (Preinstalled Environment) tidak disertai fsutil.exe , jadi kita harus menggunakan yang lain.

Selama pengujian saya sebelumnya, saya perhatikan bahwa menjalankan sfcperintah tanpa parameter apa pun akan menghasilkan:

  • kesalahan, jika Anda tidak memiliki cukup hak istimewa;
  • daftar parameter yang tersedia dan penggunaannya.

Yaitu: tidak ada parameter, tidak ada pihak . Idenya adalah bahwa kita dapat mem-parsing output dan memeriksa apakah kita mendapatkan kesalahan:

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

Output kesalahan pertama-tama diarahkan ke output standar, yang kemudian disalurkan ke findperintah. Pada titik ini kita harus mencari -satunya parameter yang didukung di semua versi Windows yang sejak Windows 2000: /SCANNOW. Pencarian tidak peka huruf besar kecil, dan hasilnya dibuang dengan mengarahkannya ke nul.

Berikut kutipan dari dokumentasi:

Sfc

Memindai dan memverifikasi integritas semua file sistem yang dilindungi dan mengganti versi yang salah dengan versi yang benar.

Catatan

Anda harus masuk sebagai anggota grup Administrator untuk menjalankan sfc.exe .

Contoh Penggunaan

Berikut ini beberapa contoh tempel dan jalankan:

Windows XP dan yang lebih baru

@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

Berlaku untuk

  • Windows 2000
  • Windows XP
  • Windows Vista
  • Windows 7
  • Windows 8
  • Windows 8.1
    ---
  • Windows PE
and31415
sumber
1
+1 Solusi luar biasa. Solusi SFC khususnya tampaknya menjadi pemeriksaan yang andal untuk semua sistem operasi yang dimaksud. Jika saya menemukan masalah menggunakan salah satu dari ini saya akan melaporkannya di sini.
Kuliah
1
Bagi siapa pun yang ingin menggunakan SFCcek untuk semua sistem, Anda harus sedikit kreatif. Untuk beberapa alasan, mulai dengan Windows 8 hanya SFCmenghasilkan karakter tunggal. Agar berhasil mengurai output, Anda perlu melakukan hal berikut: 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 baris terpisah). Ini harus bekerja pada Windows 2000 melalui Windows 2012 R2. Di samping catatan, saya lebih suka FINDSTR karena umumnya memproses hal-hal lebih cepat daripada FIND.
Kuliah
Kerja bagus, @ and31415! Saya belum menguji fsutilsolusi Anda secara pribadi , tetapi, dari apa yang saya lihat, tampaknya jauh lebih fleksibel daripada solusi saya. Meskipun, tidak seanggun itu, mungkin. ;) Saya senang melihat bahwa, di antara kami, kami mendapatkan solusi pendeteksi admin yang luar biasa, mudah, dan fleksibel. :)
mythofechelon
1
Saat menjalankan FSUTIL Anda dapat meninggalkan huruf drive dan hanya menjalankan fsutil dirty query >nulketika ditinggikan ini mengembalikan beberapa teks bantuan dan% errorlevel% = 0
SS64
4
@ ss64 Windows 10 tidak lagi mengembalikan tingkat kesalahan bukan nol untuk fsutil dirty query >nul, namun fsutil dirty query %systemdrive% >nulmasih berfungsi
bcrist
19

dua cara lagi - kompatibel cepat dan mundur.

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

fltmc perintah tersedia di setiap sistem windows sejak XP jadi ini seharusnya cukup portabel.


Salah satu solusi yang lebih sangat cepat diuji pada XP, 8.1, 7 - ada satu variabel tertentu =::yang disajikan hanya jika sesi konsol tidak memiliki privileges.As admin itu tidak begitu mudah untuk membuat variabel yang berisi =nama itu ini adalah cara yang relatif dapat diandalkan untuk memeriksa admin izin (tidak memanggil executable eksternal sehingga berkinerja baik)

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

Jika Anda ingin menggunakan ini langsung melalui baris perintah, tetapi bukan dari file batch Anda dapat menggunakan:

set ^"|find "::"||echo has admin permissions
npocmaka
sumber
Epik ... Apakah set "dv == ::" solusi memiliki kekurangan / batasan?
script'n'code
Nah, untuk beberapa alasan! Dv! Metode selalu mengatakan saya Administrator, sementara saya belum mengklik kanan "Jalankan sebagai Administrator" file batch (Windows 10). Saya benar-benar berpikir metode ini sempurna. Saya menyukai metode ini karena tidak bergantung pada program eksternal. Sekarang saya sedih dan saya tidak tahu apa yang membuatnya gagal / tidak dapat diandalkan untuk saya :(
script'n'code
1
@ copyitright - Saya tidak punya mesin win10 untuk mengujinya di sana :(. Meskipun keberadaan =::variabel agak bug - itu mewakili drive yang tidak ada, jadi mungkin itu diperbaiki di win10.
npocmaka
Mereka mungkin menambalnya ya. Itu menyenangkan saat itu berlangsung.
script'n'code
1
Saya melihat =::didefinisikan untuk non admin CMD pada windows 10 1709. Pokoknya itu bukan cara yang dapat diandalkan, Anda dapat dengan mudah memaksanya untuk didefinisikan bahkan pada sesi admin CMD:subst :: c:\ & for %a in (::) do %a & set,
sst
17
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"&&(
 echo admin...
)
Anders
sumber
1
Tampaknya dalam beberapa kasus tes selalu gagal, bahkan setelah diangkat. Dalam kasus saya ketika skrip dipanggil oleh aplikasi saya.
boileau
15

solusi alternatif:

@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
Lucretius
sumber
7
Bisakah Anda menambahkan penjelasan pada jawaban Anda?
bjb568
4
Meskipun kode ini dapat menjawab pertanyaan, Anda harus menambahkan beberapa penjelasan mengapa ia melakukannya.
PlasmaHH
2
Iya! Ini bekerja dengan benar bahkan ketika pengguna adalah Pengguna Kuat (tidak seperti "sesi bersih"). Tidak perlu pushd / popd. Hanya menjalankan openfilesdan memeriksa ERRORLEVEL sudah cukup.
EM0
2
Saya telah menggunakan solusi ini dan sudah berfungsi dengan baik. Masalahnya adalah itu openfiles.exetidak berfungsi di WinPE, jadi skrip akan selalu mengembalikan bahwa pengguna bukan admin.
Wayfarer
Dokumentasi untuk openfiles.exe dapat ditemukan di technet.microsoft.com/de-de/library/bb490961.aspx . 1>dan 2>&1dijelaskan di microsoft.com/resources/documentation/windows/xp/all/proddocs/… . nulmerujuk ke perangkat nol
user1460043
13

Tidak hanya memeriksa tetapi MENDAPATKAN hak admin secara otomatis
alias UAC Otomatis untuk Win 7/8 / 8.1 ff.
: Berikut ini adalah yang sangat keren dengan satu fitur lagi: Cuplikan batch ini tidak hanya memeriksa hak admin, tetapi juga mendapatkannya secara otomatis! (dan tes sebelumnya, jika hidup pada OS yang mampu UAC.)

Dengan trik ini Anda tidak perlu lagi mengklik kanan pada file batch Anda "dengan hak admin". Jika Anda lupa, untuk memulainya dengan hak tinggi, UAC muncul secara otomatis! Selain itu, pada awalnya diuji, jika OS membutuhkan / menyediakan UAC, sehingga berperilaku benar misalnya untuk Win 2000 / XP hingga Win 8.1 diuji.

@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
)

Cuplikan menggabungkan beberapa pola batch yang baik bersama-sama, terutama (1) tes admin di utas ini oleh Ben Hooper dan (2) aktivasi UAC membaca di BatchGotAdmin dan dikutip di situs batch oleh robvanderwoude (hormat). (3) Untuk identifikasi OS dengan "pola VER | FINDSTR" Saya tidak menemukan referensi.)

(Mengenai beberapa pembatasan yang sangat kecil, ketika "NET SESSION" tidak berfungsi seperti yang disebutkan dalam jawaban lain - jangan ragu untuk memasukkan perintah-perintah lain. Bagi saya yang menjalankan dalam mode aman Windows atau layanan standar khusus turun dan semacam itu bukan kasus penggunaan yang penting - untuk beberapa admin mungkin mereka.)

Philm
sumber
Ini bagus! Perhatikan satu hal - memanggilnya dari Visual Basic berfungsi seperti start- itu membuka skrip di jendela baru. Jika Anda ingin melihat hasilnya - tambahkan pausedi akhir skrip Anda. Juga, sulit dideteksi, ketika kita "tetap" meningkat, dan ketika ada tayangan ulang. Anda dapat menggunakan argumen baris perintah untuk itu: github.com/tgandor/meats/blob/master/lang_lawyer/cmd/…
Tomasz
@Film: Bagaimana jika UAC mengharuskan pengguna memasukkan kata sandi mereka? Saya menganggap kode ini tidak akan memberi mereka hak Admin secara otomatis tanpa meminta pengguna memasukkan kata sandi mereka terlebih dahulu ;-)
script'n'code
@ hak cipta. Tidak, tentu saja tidak. Tetapi jika kata sandi diperlukan atau tidak bukan perbedaan di sini: Apa yang saya maksud dengan "secara otomatis" tentu saja, bahwa skrip memicu Windows untuk MEMINTA secara otomatis untuk hak, bukan lebih. Tanpa konstruksi seperti ini, skrip kumpulan akan gagal, jika dimulai dengan klik ganda atau serupa. Untuk menghindari itu, pengguna harus tahu sebelumnya bahwa skrip membutuhkan hak yang lebih tinggi dan harus memulainya seperti itu.
Philm
Jadi skrip saya hanya memungkinkan penulis file batch untuk menggeser momen peningkatan yang diperlukan ke suatu titik selama eksekusi batch yang dia inginkan. Atau dengan kata lain: Untuk memungkinkan eksekusi yang lebih mudah dengan "klik dua kali" normal. Karena saya menganggap kumpulan file seperti itu yang biasanya digunakan oleh para profesional atau pengguna dengan pengetahuan yang sangat baik tentang teknologi Windows yang mendasari, saya tidak menjelaskannya secara rinci.
Philm
12

Saya memiliki dua cara untuk memeriksa akses istimewa, keduanya cukup dapat diandalkan, dan sangat portabel di hampir setiap versi windows.

1. Metode

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!
)

Ini adalah salah satu metode yang paling dapat diandalkan, karena kesederhanaannya, dan perilaku perintah yang sangat primitif ini sangat tidak mungkin berubah. Itu bukan kasus alat CLI built-in lainnya seperti sesi bersih yang dapat dinonaktifkan oleh admin / kebijakan jaringan, atau perintah seperti fsutils yang mengubah output pada Windows 10.

* Bekerja pada XP dan yang lebih baru

2. Metode

REG ADD HKLM /F>nul 2>&1

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

Kadang-kadang Anda tidak suka gagasan menyentuh disk pengguna, bahkan jika itu tidak ofensif seperti menggunakan fsutils atau membuat folder kosong, apakah itu tidak dapat dibuktikan tetapi dapat mengakibatkan kegagalan bencana jika terjadi kesalahan. Dalam skenario ini, Anda bisa memeriksa registri untuk mendapatkan hak istimewa.

Untuk ini, Anda dapat mencoba membuat kunci pada HKEY_LOCAL_MACHINE menggunakan izin default Anda akan mendapatkan Access Ditolak dan ERRORLEVEL == 1, tetapi jika Anda menjalankan sebagai Admin, itu akan mencetak "perintah dieksekusi berhasil" dan ERRORLEVEL == 0. Karena kunci sudah ada tidak berpengaruh pada registri. Ini mungkin cara tercepat, dan REG ada di sana untuk waktu yang lama.

* Ini tidak tersedia pada pra NT (Win 9X).

* Bekerja pada XP dan yang lebih baru


Contoh kerja

Script yang menghapus folder temp

Vitim.us
sumber
1
Saya sangat suka metode registri. Saya benar-benar dapat mengingatnya, tidak harus mencarinya setiap kali saya menggunakannya.
Pelanggar hukum
8

Dalam skrip batch Tinggikan.cmd (lihat tautan ini ), yang telah saya tulis untuk mendapatkan hak admin , saya telah melakukannya dengan cara berikut:

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

Ini adalah diuji untuk Windows 7, 8, 8.1, 10 dan bahkan Windows XP dan tidak memerlukan sumber daya apa pun seperti direktori khusus, file, atau kunci registri.

Mat
sumber
6

Cara terbersih untuk memeriksa hak admin menggunakan skrip CMD, yang saya temukan, adalah seperti ini:

@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

Metode ini hanya menggunakan bawaan CMD.exe, jadi harus sangat cepat. Ini juga memeriksa kemampuan proses yang sebenarnya daripada memeriksa SID atau keanggotaan grup, sehingga izin efektif diuji. Dan ini bekerja sejauh Windows 2003 dan XP. Proses pengguna normal atau proses yang tidak terkait gagal penyelidikan direktori, di mana Admin atau proses yang ditingkatkan berhasil.

William
sumber
1
copyitright menunjukkan bahwa ini tidak dapat diandalkan. Jika Anda mengunjungi% windir% \ system32 \ config \ systemprofile di jendela Explorer dan menyetujui dengan UAC, jendela CMD dapat berhasil mengirimkan konten. Memimpin Anda untuk berpikir Anda memiliki ketinggian ketika Anda tidak.
Tyler Szabo
5

Berikut ini mencoba membuat file di direktori Windows. Jika berhasil maka akan menghapusnya.

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

Perhatikan bahwa 06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 adalah GUID yang dibuat hari ini dan diasumsikan tidak mungkin bertentangan dengan nama file yang ada.

Benoit
sumber
+1 karena jawaban yang diterima menyebabkan banyak jendela perintah terbuka ketika skrip dipanggil dari aplikasi saya.
boileau
was generated today and it is assumed to be improbable to conflict with an existing filename.kecuali jika dua orang menggunakan kode ini
Vitim.us
4

Whoami / grup tidak berfungsi dalam satu kasus. Jika UAC Anda benar-benar dimatikan (tidak hanya notifikasi dimatikan), dan Anda memulai dari prompt Administrator kemudian mengeluarkan:

runas /trustlevel:0x20000 cmd

Anda akan menjalankan non-tinggi, tetapi mengeluarkan:

whoami /groups

akan mengatakan Anda terangkat. Itu salah. Inilah mengapa itu salah:

Saat menjalankan dalam kondisi ini, jika IsUserAdmin ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa376389(v=vs.85).aspx ) mengembalikan FALSE dan UAC dinonaktifkan sepenuhnya, dan GetTokenInformation mengembalikan TokenElevationTypeDefault ( http://blogs.msdn.com/b/cjacks/archive/2006/10/24/modifying-the-mandatory-integrity-level-for-a-securable-object-in-windows-vista.aspx ) maka proses tidak berjalan tinggi, tetapiwhoami /groups mengklaim itu.

sungguh, cara terbaik untuk melakukan ini dari file batch adalah:

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

Anda harus melakukan net sessiondua kali karena jika seseorang melakukan atsebelumnya, Anda akan mendapatkan informasi yang salah.

zumalifeguard
sumber
whoami /groupstidak memberikan informasi yang salah. Hanya saja runas /trustlevelmenempatkan Anda di tempat yang tidak terduga: berjalan tanpa hak administrator tetapi dengan tingkat integritas tinggi. Anda dapat mengkonfirmasi ini dengan Process Explorer. (Ini mungkin bug di runastetapi bukan bug di whoami.)
Harry Johnston
Harry, aku mendengar apa yang kamu katakan, tetapi bisakah kamu menguraikan ini? Saya tidak mengerti komentar sehubungan dengan runas /trustlevel Ketika Anda adalah admin lokal, dan UAC dinonaktifkan, mengeluarkan perintah runas dari prompt admin akan menempatkan Anda ke dalam konteks keamanan "pengguna dasar". Saat dalam mode itu, Anda tidak dapat melakukan operasi admin. Coba "sesi bersih", atau fsutil "atau utilitas lain apa pun yang memerlukan akses administrator. Namun," whoami / grup "memberi tahu Anda bahwa Anda ditinggikan. Ketika tidak. Fakta bahwa memanggil GetTokenInformation mengembalikan" TokenElevationTypeDefault "yang menunjukkan hal itu.
zumalifeguard
Saya tidak yakin bahwa saya mengerti apa yang Anda maksud dengan "whoami / groups memberitahu Anda bahwa Anda terangkat"; itu tidak menghasilkan string "Anda tinggi", bukan? Bagian mana dari output whoami / grup yang Anda lihat?
Harry Johnston
Harry, aku mengerti, aku tidak jelas. Latar belakang pertama, jadi Anda dan saya berada di halaman yang sama. ada beberapa trik yang digunakan orang dalam menentukan apakah command prompt saat ini berjalan dalam keadaan yang memiliki akses administrator. Teknik umum adalah dengan menggunakan perintah built seperti fsutil, at, whoami dan "net session". Penggunaan "at" sudah usang. Jika Anda mencari halaman ini, Anda akan melihat contoh menggunakan fsutil, whoami, dan "net session". Lihat di sini untuk contoh lebih lanjut tentang whoami: stackoverflow.com/questions/7985755/…
zumalifeguard
Juga, menggunakan frase "running elevated" tidak sepenuhnya benar. Apa yang saya (dan lainnya) harus katakan "berjalan dengan hak administrator". Jika UAC dimatikan, itu hanya berjalan saat login sebagai admin lokal tetapi tidak secara eksplisit menurunkan tingkat kepercayaan seperti dengan runas. Ketika UAC diaktifkan, ini berarti pengguna menjalankan prompt yang ditinggikan.
zumalifeguard
2
whoami /groups | find "S-1-16-12288" > nul
if not errorlevel 1 (
  echo ...  connected as admin
)
Totonga
sumber
2
Masalahnya di sini adalah, Anda memeriksa apakah pengguna memiliki hak admin. Tetapi skrip kumpulan dapat berjalan tanpa hak admin.
tanascius
2
Plus whoamitidak didukung di Windows XP.
mythofechelon
Juga whoami / grup memiliki kasus tepi di mana Anda mendapatkan informasi yang salah. Lihat stackoverflow.com/questions/4051883/…
zumalifeguard
2

Beberapa server menonaktifkan layanan yang dibutuhkan oleh perintah "sesi bersih". Ini menghasilkan cek admin selalu mengatakan Anda tidak memiliki hak admin ketika Anda mungkin memiliki.

Dan
sumber
2

Sunting: copyitright telah menunjukkan bahwa ini tidak dapat diandalkan. Menyetujui akses baca dengan UAC akan memungkinkan dir berhasil. Saya memiliki sedikit lebih banyak skrip untuk menawarkan kemungkinan lain, tetapi itu bukan hanya baca.

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

Jawaban lama di bawah

Peringatan: tidak bisa diandalkan


Berdasarkan sejumlah jawaban baik lainnya di sini dan poin yang diajukan oleh and31415 saya menemukan bahwa saya penggemar berikut ini:

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

Sedikit ketergantungan dan cepat.

Tyler Szabo
sumber
1
Solusi ini digunakan untuk saya, tetapi karena saya telah meramban lokasi dan mengakses folder yang Anda perlukan untuk hak istimewa yang lebih tinggi, kode ERRORLEVEL / exit selalu 0 sekarang, meskipun menjalankan skrip sebagai pengguna standar.
script'n'code
1

Catatan: Memeriksa dengan cacl untuk sistem \ system32 \ config \ akan SELALU gagal di WOW64, (misalnya dari% systemroot% \ syswow64 \ cmd.exe / 32 bit Total Commander) sehingga skrip yang berjalan dalam shell 32bit dalam sistem 64bit akan berulang selamanya ... Lebih baik memeriksa hak pada direktori Prefetch:

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

Menang XP ke 7 diuji, namun gagal di WinPE seperti pada windows 7 install.wim tidak ada dir atau cacls.exe

Juga di winPE DAN wow64 gagal memeriksa dengan openfiles.exe:

OPENFILES > nul

Di Windows 7 akan muncul kesalahan tingkat dengan "1" dengan info bahwa "Sistem target harus sistem operasi 32bit"

Kedua pemeriksaan mungkin juga akan gagal di konsol pemulihan.

Apa yang bekerja di Windows XP - 8 32/64 bit, di WOW64 dan di WinPE adalah: tes pembuatan dir (JIKA admin tidak membombardir direktori Windows dengan izin untuk semua orang ...) dan

net session

dan

reg add HKLM /F

memeriksa.

Juga satu catatan lagi di beberapa windows XP (dan versi lain mungkin juga, tergantung pada bermain-main admin) tergantung pada entri registri langsung memanggil bat / cmd dari skrip .vbs akan gagal dengan info bahwa file bat / cmd tidak terkait dengan apa pun ...

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

Memanggil cmd.exe dengan parameter file bat / cmd di sisi lain berfungsi OK:

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
pengguna2902818
sumber
1

Secara harfiah lusinan jawaban dalam hal ini dan pertanyaan terkait serta di tempat lain di SE, yang semuanya kekurangan dalam hal ini atau lainnya, telah dengan jelas menunjukkan bahwa Windows tidak menyediakan utilitas konsol bawaan yang andal. Jadi, sekarang saatnya untuk meluncurkan milik Anda sendiri.

Berikut kode C, berdasarkan Mendeteksi jika program ini berjalan dengan hak administrator penuh , bekerja di Win2k + 1 , di mana saja dan dalam semua kasus (UAC, domain, kelompok transitif ...) - karena tidak sama dengan sistem itu sendiri ketika memeriksa izin. Ini menandakan hasil baik dengan pesan (yang dapat dibungkam dengan sakelar) dan kode keluar.

Itu hanya perlu dikompilasi sekali, maka Anda bisa menyalin di .exemana - mana - hanya tergantung pada kernel32.dlldan advapi32.dll(saya sudah mengunggah salinan ).

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 mengklaim API adalah XP + tetapi ini salah. CheckTokenMembership 2k + dan yang lainnya bahkan lebih tua . Tautan terakhir juga berisi cara yang jauh lebih rumit yang akan berfungsi bahkan di NT.

ivan_pozdeev
sumber
1

PowerShell siapa saja?

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"
    }
}
Ostati
sumber
1

Berikut ini satu lagi untuk ditambahkan ke daftar ;-)

(mencoba membuat file di lokasi sistem)

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

)

The MODE CONmenginisialisasi ulang layar dan mengesampingkan semua teks / kesalahan ketika tidak memiliki izin untuk menulis ke lokasi sistem.

script'n'code
sumber
0

Alternatif: Gunakan utilitas eksternal yang dirancang untuk tujuan ini, misalnya, IsAdmin.exe (freeware tidak terbatas).

Kode keluar:

0 - Pengguna saat ini bukan anggota grup Administrators

1 - Anggota pengguna saat ini dari Administrator dan menjalankan ditinggikan

2 - Anggota pengguna saat ini dari Administrator, tetapi tidak menjalankan ditinggikan

Bill_Stewart
sumber
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...
cmd
sumber
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

Saya akan menjelaskan kode baris demi baris:

@echo off

Pengguna akan terganggu dengan lebih dari 1 baris tanpa ini.

:start

Titik di mana program dimulai.

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

Atur nama file direktori yang akan dibuat.

md \windows\%randname% 2>nul

Membuat direktori aktif <DL>:\Windows(ganti <DL> dengan huruf drive).

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

Jika variabel lingkungan ERRORLEVEL adalah nol, maka pesan keberhasilan echo.
Pergi ke akhir (jangan melanjutkan lebih jauh).

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

Jika ERRORLEVEL adalah satu, gema pesan kegagalan dan pergi ke akhir.

goto start

Jika nama file sudah ada, buat ulang folder (jika tidak, goto endperintah tidak akan membiarkan ini berjalan).

:end

Tentukan titik akhir

rd \windows\%randname% 2>nul

Hapus direktori yang dibuat.

pause >nul

Jeda agar pengguna dapat melihat pesan.

Catatan : The >nuldan 2>nulsedang memfilter output dari perintah ini.

EKons
sumber
Ya saya tahu bahwa ketika Anda masuk sebagai pengguna Administrator (bukan pengguna dengan jenis akun admin) Anda akan selalu terangkat tetapi itu bukan bug!
EKons
0

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

sesat
sumber
Ini tampaknya salah, ini menunjukkan jika pengguna memiliki hak administrator, tetapi ini tidak terkait dengan pertanyaan apakah cmd.exe saat ini dijalankan dengan hak admin
jeb
tidak, ini menunjukkan apakah cmd.exe saat ini memiliki akses administratif ke basis data pengguna atau tidak, sehingga berfungsi bahkan dalam kasus ketika "sesi bersih" tidak. atau, "konfigurasi net> nul 2> & 1 && echo admin || echo not admin" yang berfungsi. Kedua konstruksi berhasil diuji pada windows xp di bawah guest, power user dan akun administratif dengan LanmanServer berhenti (errorlevel 2 untuk cmd.exe berjalan di bawah guest dan power user, errorlevel 0 untuk cmd.exe di bawah hak admin). Apakah ini akan bekerja di Vista dan kemudian dengan masalah UAC yang disebutkan di atas - saya tidak tahu, jadi akan lebih baik jika seseorang dapat mengujinya.
sesat
2
Saya diuji dengan dua jendela cmd (win7x64), dimulai dengan dan tanpa hak admin. Dalam kedua kasus itu menunjukkanadmin
jeb
0

Saya pikir cara paling sederhana adalah mencoba mengubah tanggal sistem (yang memerlukan hak admin):

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

Jika %date%variabel dapat menyertakan hari dalam seminggu, dapatkan saja tanggal dari bagian terakhir dari DATEperintah:

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 ...
Aacini
sumber
3
Tidak dapat membantu tetapi menurunkan "saran" destruktif seperti itu.
ivan_pozdeev
2
Bahkan mengesampingkan perubahan waktu sistem tanpa alasan yang baik adalah menembak diri sendiri (semua jenis efek aneh pada perangkat lunak) - jika Anda menggunakan waktu saat ini, Anda masih mencondongkannya pada saat perintah dijalankan.
ivan_pozdeev
2
@ivan_pozdeev: Mungkin Anda bisa menggambarkan satu saja dari "efek aneh pada perangkat lunak" yang mungkin terjadi ketika tanggal diubah ke tanggal yang sama dalam sesi cmd.exe ...
Aacini
1
Juga lihat superuser.com/questions/27263/…
ivan_pozdeev
@ivan_pozdeev: Tidak ada satu pun tautan Anda yang terkait dengan metode saya dari jarak jauh. Saya pikir Anda salah mengerti solusi saya. Metode ini hanya dapat memiliki satu dari dua hasil yang mungkin: tidak ada yang berubah (jika pengguna tidak memiliki hak admin), atau DATE diubah KE NILAI YANG SAMA (jika pengguna memiliki hak admin). Metode saya TIDAK MENGUBAH WAKTU! Saya mengundang Anda untuk membaca ulang jawaban saya dan menjelaskan dalam bahasa Inggris sederhana alasan untuk downvote Anda ...:(
Aacini
0

Saya menemukan pengguna yang dapat digunakan net session meskipun mereka bukan admin. Saya tidak melihat mengapa. Solusi saya adalah untuk menguji apakah pengguna dapat membuat folder di folder windows.

Ini kode saya:

::::::: :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 ::::::
Grallen
sumber
0

Kumpulan empat metode yang tampaknya paling kompatibel dari halaman ini. Yang pertama sangat jenius. Diuji dari XP ke atas. Meskipun membingungkan bahwa tidak ada perintah standar yang tersedia untuk memeriksa hak admin. Saya kira mereka hanya berfokus pada PowerShell sekarang, yang benar-benar tidak berguna untuk sebagian besar pekerjaan saya sendiri.

Saya menelepon batch 'exit-if-not-admin.cmd' yang dapat dipanggil dari batch lain untuk memastikan mereka tidak melanjutkan eksekusi jika hak admin yang diperlukan tidak diberikan.

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```
risingballs
sumber
-1

Inilah nilai 2-sen saya:

Saya membutuhkan batch untuk dijalankan dalam lingkungan Domain selama proses login pengguna, dalam lingkungan 'ruang kerja', melihat pengguna mematuhi kebijakan "penguncian" dan tampilan terbatas (terutama didistribusikan melalui set GPO).

Set Domain GPO diterapkan sebelum skrip login yang terhubung dengan pengguna AD Membuat skrip login GPO terlalu matang karena profil "baru" pengguna belum dibuat / dimuat / atau siap untuk menerapkan "hapus dan / atau Sematkan "bilah tugas dan item Menu Mulai vbscript + tambahkan beberapa file lokal.

misalnya: Lingkungan profil 'pengguna-pengguna' yang diusulkan memerlukan pintasan ".URL '(.lnk) yang ditempatkan di dalam"% ProgramData% \ Microsoft \ Windows \ Start Menu \ Program * MyNewOWA.url * ", dan" C: \ Users \ Public \ Desktop \ * MyNewOWA.url * "lokasi, di antara item lainnya

Pengguna memiliki beberapa mesin dalam domain, di mana hanya PC 'ruang kerja' yang ditetapkan ini yang memerlukan kebijakan ini.

Folder-folder ini memerlukan hak 'Admin' untuk dimodifikasi, dan meskipun 'Pengguna Domain' adalah bagian dari grup 'Admin' lokal - UAC adalah tantangan berikutnya.

Menemukan berbagai adaptasi dan digabung di sini. Saya memiliki beberapa pengguna dengan perangkat BYOD juga yang membutuhkan file lain dengan masalah perm. Belum diuji pada XP (OS yang sedikit terlalu tua), tetapi kodenya ada, akan senang memberi umpan balik.

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

Domain PC harus diatur sebanyak mungkin oleh perangkat GPO. Mesin Workgroup / Standalone dapat diatur oleh skrip ini.

Ingat, prompt UAC akan muncul setidaknya sekali dengan BYOD workgroup PC (segera setelah peningkatan pertama ke 'Admin perms' diperlukan), tetapi karena kebijakan keamanan lokal dimodifikasi untuk penggunaan admin mulai saat ini, maka pop-up akan hilang.

Domain PC harus memiliki kebijakan GPO "ConsentPromptBehaviorAdmin" yang diatur dalam kebijakan "Penguncian" yang sudah Anda buat - seperti dijelaskan di bagian skrip 'REFERENSI'.

Sekali lagi, jalankan impor secedit.exe dari file '.inf' default jika Anda terjebak pada keseluruhan debat "To UAC or Not to UAC" :-).

btw: @boileau Periksa kegagalan Anda pada:

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

Dengan menjalankan hanya "% SYSTEMROOT% \ system32 \ cacls.exe" atau "% SYSTEMROOT% \ system32 \ config \ system" atau keduanya dari prompt perintah - dinaikkan atau tidak, periksa hasilnya di seluruh papan.

Ian Stockdale
sumber
-2

Cara lain untuk melakukan ini.

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 ...
Artur Zgadzaj
sumber
Tautan apa itu? Dipanji sebagai spam karena tautan.
mmgross
Periksa jawaban ini untuk kode yang memeriksa dan menanyakan secara otomatis: stackoverflow.com/a/30590134/4932683
cyberponk