cara menjalankan skrip PowerShell sebagai administrator

57

Di Windows 7 Desktop saya, saya memiliki script.ps1, yang memerlukan hak admin (memulai layanan). Saya ingin mengklik skrip ini dan menjalankannya dengan hak admin.

Apa cara termudah untuk mencapai ini?

Sajee
sumber

Jawaban:

48

Ini adalah salah satu cara melakukannya, dengan bantuan ikon tambahan di desktop Anda. Saya kira Anda bisa memindahkan skrip orang lain jika Anda hanya ingin memiliki satu ikon di desktop Anda.

  1. Buat pintasan ke skrip Powershell Anda di desktop
  2. Klik kanan pintasan dan klik Properti
  3. Klik tab Pintasan
  4. Klik Tingkat Lanjut
  5. Pilih Jalankan sebagai Administrator

Anda sekarang dapat menjalankan skrip ditinggikan dengan mengklik dua kali pintasan baru di desktop Anda.

Kez
sumber
36
Ini bekerja untuk saya, tetapi Jalankan sebagai Administrator hanya tersedia setelah menambahkan powershell -f di depan lintasan skrip, sehingga untuk "menyelesaikan" perintah ...
mousio
2
@mousio - Saya membutuhkan ini juga, terima kasih atas komentarnya
m.edmondson
@ mousio, bisakah Anda memberi tahu saya mengapa perintah itu berhasil?
SShaheen
7
@SShaheen - Agar Jalankan sebagai Administrator tersedia, pintasan perlu mengarah ke beberapa jenis yang dapat dieksekusi (mis. Powershell.exe) alih-alih hanya dokumen atau skrip yang ditunjuk pintasan semula. Jalan pintas untuk script.ps1bekerja, seperti cara pintas ke powershell.exe -f script.ps1, tetapi yang terakhir dapat diatur untuk dijalankan sebagai administrator (lihat powershell.exe /?untuk penjelasan tentang -fatau -Fileberalih)
mousio
16

Pada sistem berkemampuan UAC, untuk memastikan skrip berjalan dengan hak istimewa admin penuh, tambahkan kode ini di awal skrip Anda:

param([switch]$Elevated)

function Test-Admin {
  $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
  $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}

if ((Test-Admin) -eq $false)  {
    if ($elevated) 
    {
        # tried to elevate, did not work, aborting
    } 
    else {
        Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}

exit
}

'running with full privileges'

saat menjalankan skrip Anda dengan sakelar -elevated, ia akan mencoba untuk meningkatkan hak istimewa sebelum berjalan.

MDMoore313
sumber
Jika skrip membutuhkan argumen-parameter?
Kiquenet
bagaimana jika ini memberitahu saya itu berjalan dengan hak istimewa penuh, tetapi kode saya masih mengatakan tidak cukup hak administratif?
mike.b93
@Kiquenet menambahkannya ke param(...)atas dan meneruskannya sebelum -elevated, Anda harus pandai tentang bagaimana Anda membangunnya ArgumentList, mungkin ingin menggunakan String[]formulir itu.
TWiStErRob
cukup bagus - lebih baik daripada membuat pintasan
Mikey
13

Jika Anda berada di PowerShell yang sama Anda bisa melakukan ini:

Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"
mjsr
sumber
Masalahnya adalah ia mengubah direktori kerja untuk skrip yang dipanggil C:\Windows\System32. Alternatif yang mempertahankan direktori saat ini: stackoverflow.com/a/57033941/2441655
Venryx
4

Karena itu duduk di desktop Anda, saya akan mengatakan cara paling mudah untuk menyelesaikan ini adalah menyeretnya ke gadget ketinggian .

Jika tidak, Anda bisa membuat script terpisah menggunakan satu elevateperintah pada script PS1 Anda.

Atau, Anda bisa menerapkan elevatehanya pada bit yang memulai layanan.

badp
sumber
1

PowerShell ISE hidup di% windir% \ system32 \ WindowsPowerShell \ v1.0 \ PowerShell_ISE.exe. Anda dapat mengklik kanan itu dan memilih "Jalankan sebagai administrator" dan jalankan skrip dari sana.

Anda juga dapat menemukannya di bawah Logo Windows> Semua Program> Aksesori> Windows PowerShell dan lakukan hal yang sama dengan pintasan tersebut.

vapcguy
sumber
0

Jika Anda ingin opsi untuk meluncurkan skrip Powershell sebagai adminstrator, langsung dari menu konteks Explorer, lihat bagian 2 dari jawaban saya di sini: https://stackoverflow.com/a/57033941/2441655

Venryx
sumber
-1

Tambahkan ini ke awal skrip:

$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
$testadmin = $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
if ($testadmin -eq $false) {
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
exit $LASTEXITCODE
}
Anthony
sumber
Ini sepertinya merupakan bagian dari jawaban MDMoore313 , dari lebih dari empat tahun lalu.
Scott