Cara menjalankan program dari baris perintah dengan hak tinggi

44

Apakah ada cara untuk menjalankan program atau perintah dengan hak tinggi ketika saya sudah di baris perintah non-tinggi?

Tindakan yang persis sama yang akan dilakukan ketika saya mengklik pintasan program dan memilih Run as administrator .

The runas perintah mungkin bukan solusi - itu meminta password, tapi aku hanya ingin UAC dialog.

Lukas Cenovsky
sumber

Jawaban:

14

Sepertinya utilitas ini - Hidden Start - akan melakukan apa yang Anda inginkan jika Anda menggunakan / uac switch. Berikut contoh perintah:

hstart /UAC "notepad.exe"

Ini akan memunculkan dialog UAC daripada meminta kata sandi seperti runas.

masukkan deskripsi gambar di sini

JeffP
sumber
2
Peringatan: utilitas kecil itu adalah $ 20. Bagi mereka yang memiliki kantong kecil, gunakan RunAdmin sebagai gantinya :)
WeGoToMars
Ini tidak muncul pada Windows 10
akan
50

Ada cara untuk melakukan ini di PowerShell:

PS> Start-Process powershell -Verb runAs
Rustam
sumber
19
Tampaknya bekerja dengan baik. Dari baris perintah, Anda dapat melakukannya misalnyapowershell -Command "Start-Process 'C:\program.exe' -Verb runAs"
marsze
7
Ini harus ditandai sebagai IMO jawaban benar / terbaik - ini berfungsi tanpa utilitas pihak ke-3.
crimbo
5
Membangun dari @marsze - Fwiw, argumen dalam kasus paling sederhana masuk ke nilai kuotasi tunggal mereka sendiri, misalnya powershell -Command "Start-Process 'gvim' 'c:\windows\system32\drivers\etc\hosts' -Verb runAs". Terima kasih!
ruffin
Bagaimana saya bisa mem-pipe output dari command prompt yang ditinggikan ke dalam skrip yang sedang saya jalankan?
kendaraan roda
@ winder, saya hampir yakin Anda tidak bisa melakukan itu, tetapi Anda dapat mengembalikan kode keluar:$p = Start-Process powershell -Verb runAs -ArgumentList "-Command ``"& { ``$Host.SetShouldExit(123) }``"" -PassThru; $p.ExitCode
Rustam
6

Membangun Rustam 's jawaban , Anda dapat:

  • Buat su.batfile batch di suatu tempat di% PATH% default Anda, dengan satu-baris berikut:@powershell start -verb runas %*
  • Tambahkan fungsi ini ke profil $ PowerShell Anda :function su {start -verb runas @args}

Sekarang Anda dapat menerbitkan su <command> [parameters]di kedua shell!

Nicolas Melay
sumber
2

RunAdmin adalah utilitas kecil (150Kb) yang memungkinkan Anda menjalankan program dari baris perintah dengan hak tinggi (ini akan menampilkan UAC). Dan kebalikan dari Hidden Start adalah freeare.

WeGoToMars
sumber
2

Ini bekerja untuk saya di semua platform, termasuk Windows 10. Kebutuhan saya sederhana, mungkin Anda dapat menyesuaikan pendekatan jika Anda membutuhkan daya .

Saya datang dengan skrip kecil bernama, sudo.cmddinamai untuk perintah sudo Linux. Itu bekerja dengan cukup baik menurutnya. Saya telah menguraikan persyaratan, langkah-langkah yang harus diikuti dan skrip berada di dekat bagian bawah dengan sebuah contoh. Pertama, kata peringatan.

PERINGATAN : Perintah ini berjalan di direktori Sistem windows secara default. Anda akan ingincdke tempat yang aman dulu.

persyaratan :

  • Jalankan perintah dengan Administrator privilege dari windows .CMD
    atau cmd-shell.
  • memerlukan pemeriksaan hak Windows normal pada perintah
    • Dengan kata lain perintah TIDAK akan berfungsi kecuali saya sudah masuk dengan akun istimewa.
  • Jalankan perintah dengan izin Admin dan lanjutkan ketika dipanggil di dalam skrip. Jadi tunggu perintahnya selesai.
  • Sederhana saja agar selalu berhasil
  • Tidak perlu memasukkan kata sandi setiap kali, jika saya sudah masuk.
    • Metode yang lebih baik adalah jika saya dapat memasukkan kata sandi seperti halnya sudoperintah sebenarnya di Linux.

solusi :

  1. Buat skrip perintah untuk mengeksekusi semua argumen yang diteruskan, sudo.cmd
  2. Membuat Windows pintas untuk perintah nama script itu: sudo.lnk.
  3. Letakkan jalan sudopintas di PATH windows Anda sehingga bisa dilihat.
  4. Edit properti Start in:jalan pintas, buat jalur kosong.
  5. Klik tombol [ Advanced] - CentangRun as Administrator
  6. Aktifkan pintasan di jalur windows Anda, gunakan variabel lingkungan PATHEXT, yaitu.
d:> echo %PATHEXT%
    .lnk;.EXE;.CMD;.BAT;.COM

Saat Anda mengetik sudo dirpada baris perintah, Windows akan menampilkan

User Account Control

Do you want to allow this app to make changes to this device?

  [YES]  [NO]

Munculan kontrol akses. Jika Anda mengklik "[ NO]" tidak akan terjadi apa-apa. Windows akan menampilkan pesan " Access is denied.".

Ketika Anda mengklik "[ YES]" maka perintah direktori dijalankan pada hak istimewa yang ditinggikan. Tentu saja Anda mungkin menginginkan sesuatu yang lebih menarik seperti berhenti atau meminta layanan:

 sudo sc query SDRSVC

SDRSVC adalah nama layanan untuk "Layanan Pencadangan Windows", ini menunjukkan yang berikut di jendela Cmd terpisah:

  [sudo]

   administrator
  ---------------

  sc query SDRSVC

SERVICE_NAME: SDRSVC
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

  [done]

Press any key to continue . . .

The sudo.cmdScript itu sendiri sangat dasar. Seperti yang saya katakan, kebutuhan saya sederhana. Saya hanya ingin berhenti dan memulai layanan sementara saya menggunakan kode untuk pengujian.

sudo.cmd:

 @echo off
 @rem    sudo.cmd
         cd /d %temp%
 @echo.
 @echo.   administrator
 @echo.  ---------------
         cd 
 @echo.
 @rem  _________________________________________________
 @rem      -- Print usage . . .
        @if    [""]      ==["%~1"]   goto USAGE
        @if /i ["--HELP"]==["%~1"]   goto USAGE
 @rem  _________________________________________________
 @rem
 @echo.  %*
 @rem
         %*
 @rem
         set EXIT_STATUS=%ERRORLEVEL%
 @rem  -- -- -- -- --  
 @echo.
 @echo.  [done]
 @rem  ______________________________________________________
 :Exit
 @echo.
 @pause
  exit /b  %EXIT_STATUS%
 @rem  ______________________________________________________
 :USAGE
 @echo.
 @echo  ^Usage:
 @echo.    sudo ^<complete command line^>
 @echo.
 @echo.  Attempts to rune the: ^<complete command line^>
 @echo.  under Administrator priviliges.  Relies on Windows 
 @echo.  prompt for elevated privileges.
 @rem  ______________________________________________________
 @goto Exit

The pauseperintah menunggu Anda untuk meninjau hasil. Jika Anda mengambil pausejendela administrasi ditutup dan Anda tidak tahu apakah perintah itu berfungsi atau tidak. Dari ERRORLEVELperintah dikembalikan juga.

akan
sumber
2

Ini berfungsi untuk Windows 10, belum diuji dengan versi Windows lainnya.

Contoh untuk membuka notepad dengan hak administrator dari cmd.exe yang memulai PowerShell yang meminta izin tinggi.

C:\>start powershell -command "&{start-process -filepath notepad -verb RunAs}"

Ini akan memberi Anda kotak dialog UAC (jika diaktifkan) dengan [Ya] [Tidak], atau akan menanyakan kata sandi administrator.

Contoh lain untuk membuka file hosts dengan notepad adalah:

C:\>start powershell -command "&{start-process -filepath notepad 'C:\Windows\System32\drivers\etc\hosts' -verb RunAs}"

Informasi lebih lanjut: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/start-process?view=powershell-6

Alex
sumber
Argumen untuk dieksekusi harus menjadi -ArgumentListparameter, bukan hanya parameter tambahan untuk memulai proses.
Appleshell
0

Lihatlah Mulai ++ - ia memiliki fungsi ini bersama dengan banyak hal berguna lainnya. Untuk menjalankan dengan UAC prompt, cukup gunakan sudonama program Anda pada baris perintah seperti yang ditunjukkan di sini:

teks alternatif

Berikut adalah beberapa fitur lain (Anda juga dapat menambahkan sendiri):

teks alternatif

teks alternatif

John T
sumber
Terlihat juga bagus tapi saya sudah menggunakan FARR yang memiliki fungsi yang sama dengan Start ++ dan banyak lagi (tentu saja kecuali sudo).
Lukas Cenovsky
2
Tautan tersebut mengatakan Selamat datang di: brandontools.com. Halaman Web ini diparkir GRATIS. Ingin membeli brandontools.com?
xmojmr
1
seperti @xmojmr katakan, situs itu sudah mati. Jika Anda tahu lokasi baru (saya tidak menemukannya begitu cepat), Anda harus memperbarui tautan dalam jawabannya.
Abel
-1

Anda bisa mengatur __COMPAT_LAYER=RunAsAdmin. Maka perintah akan dijalankan secara terpisah ditinggikan cmd.

Contoh .bat:

rem Run next command elevated to Admin.
set __COMPAT_LAYER=RunAsAdmin
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Group Policy\{35378EAC-683F-11D2-A89A-00C04FBBCFA2}" /t REG_DWORD /v "NoBackgroundPolicy" /d "1"
rem Disable elevation
set __COMPAT_LAYER=
rem continue non elevated
reg add "HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Internet Explorer\Main" /t REG_SZ /v "Start Page" /d "https://www.google.com" /f

Semua opsi Mode Kompatibilitas tercantum dalam Alat Kompatibilitas Aplikasi MS.

Michel
sumber
File batch ini rusak parah. Anda tidak dapat menggunakan ;sebagai pembatas komentar. "File batch tidak mengenali titik koma dan umumnya akan menyebabkan pesan kesalahan tentang perintah yang buruk."
DavidPostill