Saya mencoba menulis file batch untuk dijalankan oleh pengguna dari mesin Vista mereka dengan UAC. File ini sedang menulis ulang file host mereka, sehingga harus dijalankan dengan izin Administrator. Saya harus dapat mengirim email kepada mereka dengan tautan ke file .bat. Perilaku yang diinginkan adalah ketika mereka mengklik kanan pada file dan mengatakan Open, mereka akan mendapatkan salah satu dialog UAC yang membuat layar menjadi gelap dan memaksa mereka untuk menjawab apakah mereka ingin memberikan izin aplikasi untuk dijalankan sebagai administrator. Sebaliknya, mereka hanya melihat "Akses ditolak" di jendela baris perintah.
Apakah ini mungkin dilakukan secara berbeda?
Jawaban:
Script ini berhasil! Cukup rekatkan ke bagian atas file bat Anda. Jika Anda ingin meninjau output skrip Anda, tambahkan perintah "jeda" di bagian bawah file batch Anda.
PEMBARUAN: Skrip ini sekarang sedikit diedit untuk mendukung argumen baris perintah dan OS 64 bit.
Eneerge @ https://sites.google.com/site/eneerge/scripts/batchgotadmin
sumber
Ini adalah one-liner yang telah saya gunakan:
Catatan:
sumber
am_admin
if not "%1"=="am_admin" (powershell start -verb runas '%0' 'am_admin "%~1" "%~2"' & exit)
Params akan menjadi satu di atas di mana mereka berada'am_admin %*'
untuk melewatkan semuanya, tidak bermain dengan baik dengan tanda kutip dan spasi tho: / Anda dapat menggunakanshift
dalam batch untuk memunculkan argumen pertama, sehingga memperbaiki semua argumen kecuali%0
.cd /D %~dp0
setelahif not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & exit /b)
Ini kode saya! Ini terlihat besar tetapi sebagian besar baris komentar (baris dimulai dengan: :).
Fitur:
Pemeriksaan folder yang dipetakan (Peringatkan Anda jika admin tidak dapat mengakses drive yang dipetakan)
Dapat digunakan sebagai perpustakaan eksternal (periksa posting saya di topik ini: https://stackoverflow.com/a/30417025/4932683 )
Cukup lampirkan ini di akhir file batch Anda, atau simpan sebagai perpustakaan (centang di atas)
Contoh tentang cara menggunakannya
sumber
&fc;: 2>nul
diset "_FN=_%~ns1" & echo/%TEMP%| findstr /C:"(" >nul && (echo/ERROR: %%TEMP%% path can not contain parenthesis &pause &endlocal &fc;: 2>nul & goto:eof)
terbenam errorlevel untuk 1. saya dihapus sedikit itu dan itu bekerja sempurna. Saya menggunakan Windows 10 Home.fc;:
sejak itu berlalu: setelah tepat? Saya juga tidak yakin mengapa hal itu menyebabkan masalah, karena itu harus dieksekusi.echo/%TEMP%| findstr /C:"(" >nul
tes jika ada variabel lingkungan(
char Anda%temp%
, dan hanya akan menjalankan bagian setelah&&
jika positif. Aneh mengapa(
tes Anda kembali positif.Pendekatan lain adalah dengan
lalu
Denis
[Ditambahkan setelah itu - Ya, saya tidak memperhatikan tanggal utas ini.]
sumber
Solusi Ben Gripka menyebabkan loop tak terbatas. Batch-nya berfungsi seperti ini (kode semu):
Seperti yang Anda lihat, ini menyebabkan loop tak terbatas, jika VBS gagal meminta hak admin.
Namun, loop tak terbatas dapat terjadi, meskipun hak admin telah berhasil diminta.
Pemeriksaan dalam file kumpulan Ben Gripka hanya rawan kesalahan. Saya bermain-main dengan batch dan mengamati bahwa hak istimewa admin tersedia meskipun cek gagal. Menariknya, cek berfungsi seperti yang diharapkan, jika saya memulai file batch dari windows explorer, tetapi tidak ketika saya mulai dari IDE.
Jadi saya sarankan untuk menggunakan dua file batch terpisah. Yang pertama menghasilkan VBS yang memanggil file batch kedua:
Yang kedua, bernama "my_commands.bat" dan terletak di direktori yang sama dengan yang pertama berisi perintah Anda yang sebenarnya:
Ini tidak menyebabkan loop tak terbatas dan juga menghapus pemeriksaan hak admin rawan kesalahan.
sumber
Solusi PowerShell Lain ...
Ini bukan tentang menjalankan skrip batch sebagai admin per, tetapi bagaimana meningkatkan program lain dari batch ...
Saya memiliki file batch "pembungkus" untuk exe. Mereka memiliki "nama file root" yang sama, tetapi ekstensi alternatif. Saya dapat meluncurkan exe sebagai admin, dan mengatur direktori kerja ke yang berisi skrip, dengan satu baris berikut memohon doa:
Info lebih lanjut
Ada banyak
Start-Process
pilihan tambahan yang bisa Anda terapkan! Lihat: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6Perhatikan bahwa saya menggunakan
@
awalan. Itu setara dengan@echo off
untuk satu baris. Saya menggunakan di%~n0
sini untuk mendapatkan "nama root" dari skrip batch, kemudian saya menyatukannya.exe
untuk menunjukkannya biner yang berdekatan. Penggunaan%~dp0
menyediakan path lengkap ke direktori tempat batch. Dan, tentu saja, yang-Verb RunAs
parameter menyediakan elevasi .sumber
Saya tahu ini bukan solusi untuk OP, tetapi karena saya yakin ada banyak kasus penggunaan lain di sini, saya pikir saya akan berbagi.
Saya mengalami masalah dengan semua contoh kode dalam jawaban ini, tetapi kemudian saya menemukan: http://www.robotronic.de/runasspcEn.html
Itu tidak hanya memungkinkan Anda untuk menjalankan sebagai admin, itu memeriksa file untuk memastikan itu belum dirusak dan menyimpan informasi yang dibutuhkan dengan aman. Saya akui itu bukan alat yang paling jelas untuk mengetahui cara menggunakan tetapi bagi kita yang menulis kode itu harus cukup sederhana.
sumber
@echo off
dantitle
dapat muncul sebelum kode ini:Banyak jawaban lain yang berlebihan jika Anda tidak perlu khawatir tentang yang berikut:
cd %~dp0
akan berubah menjadi direktori yang berisi file batch)sumber
Di atas berfungsi pada Windows 10 Version 1903 saya
sumber
Karena saya memiliki masalah dengan skrip ini muncul prompt perintah baru dengan sendirinya berjalan lagi, dalam loop tak terbatas (menggunakan Win 7 Pro), saya sarankan Anda mencoba pendekatan lain: Bagaimana saya dapat secara otomatis meningkatkan file batch saya, sehingga permintaan dari Hak administrator UAC jika diperlukan?
Hati-hati, Anda harus menambahkan ini di akhir skrip, sebagaimana dinyatakan dalam edit, sehingga Anda kembali ke direktori skrip setelah hak istimewa ditingkatkan: cd / d% ~ dp0
sumber
Berdasarkan posting oleh toster-cx dan posting menarik lainnya di halaman ini, saya mendapat wawasan tentang cara mengkonfigurasi dan menyelesaikan masalah saya. Saya memiliki masalah serupa di mana saya berharap utilitas Disk Cleanup berjalan setiap minggu dua kali pada hari Senin dan Kamis selama jam makan siang (misalnya jam 14:00). Namun, ini membutuhkan hak yang lebih tinggi.
Berbagi file batch yang mungkin membantu pemula lain seperti saya -
Terima kasih banyak untuk forum ini dan Rems POST di sini [ https://www.petri.com/forums/forum/windows-scripting/general-scripting/32313-schtasks-exe-need-to-pass-parameters-to-script ] [1]
Posnya membantu untuk mengonfigurasi argumen opsional saat menjadwalkan tugas.
sumber
Ada juga permintaan FSUTIL dari posting ini yang juga ditautkan di ss64.com yang memiliki kode berikut:
Selama FSUTIL ada, itu merupakan alternatif yang dapat diandalkan.
sumber
Anda tidak dapat meminta hak admin dari file batch, tetapi Anda bisa menulis skrip host skrip windows di% temp% dan menjalankannya (dan itu menjalankan batch Anda sebagai admin) Anda ingin memanggil metode ShellExecute di Shell. Aplikasi objek dengan "runas" sebagai kata kerja
sumber
Gunakan
mshta
untuk meminta hak admin:Atau, menggunakan PowerShell:
sumber
gunakan perintah runas. Tapi, saya rasa Anda tidak dapat mengirim email file bat dengan mudah.
sumber
runas
perintah tidak dapat digunakan untuk memprovokasi elevasi.