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?

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.


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.


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"

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.


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.



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

Ini sepertinya merupakan bagian dari jawaban MDMoore313 , dari lebih dari empat tahun lalu.
Scott
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.