วิธีการเรียกใช้สคริปต์ PowerShell ในฐานะผู้ดูแลระบบ


54

บนเดสก์ท็อป Windows 7 ของฉันฉันมี script.ps1 ซึ่งต้องการสิทธิ์ผู้ดูแลระบบ (เริ่มบริการ) ฉันต้องการคลิกที่สคริปต์นี้และเรียกใช้ด้วยสิทธิ์ผู้ดูแลระบบ

วิธีที่ง่ายที่สุดในการทำสิ่งนี้ให้สำเร็จคืออะไร?

คำตอบ:


46

นี่คือวิธีหนึ่งในการดำเนินการด้วยความช่วยเหลือของไอคอนเพิ่มเติมบนเดสก์ท็อปของคุณ ฉันเดาว่าคุณสามารถย้ายสคริปต์คนอื่นถ้าคุณต้องการที่จะมีไอคอนเดียวบนเดสก์ท็อปของคุณ

  1. สร้างทางลัดไปยังสคริปต์ Powershell บนเดสก์ท็อปของคุณ
  2. คลิกขวาที่ทางลัดแล้วคลิกคุณสมบัติ
  3. คลิกที่แท็บทางลัด
  4. คลิกขั้นสูง
  5. เลือกRun as administrator

ตอนนี้คุณสามารถเรียกใช้สคริปต์ด้วยการยกระดับโดยคลิกสองครั้งที่ทางลัดใหม่บนเดสก์ท็อปของคุณ


34
สิ่งนี้ใช้งานได้สำหรับฉัน แต่Run as Administratorจะพร้อมใช้งานหลังจากที่เพิ่มpowershell -f ไว้ด้านหน้าพา ธ ของสคริปต์เท่านั้นเพื่อให้ "สมบูรณ์" คำสั่ง ...
mousio

2
@mousio - ฉันต้องการสิ่งนี้เช่นกันขอบคุณสำหรับความคิดเห็น
m.edmondson

@mousio คุณบอกได้ไหมว่าทำไมคำสั่งนั้นถึงใช้งานได้?
SShaheen

7
@Sahaheen - เพื่อให้สามารถเรียกใช้ในฐานะผู้ดูแลระบบได้ทางลัดจะต้องชี้ไปที่ประเภทของไฟล์ปฏิบัติการ (เช่น powershell.exe) แทนที่จะเป็นเพียงเอกสารหรือสคริปต์ที่ทางลัดนั้นชี้ไป ทางลัดในการscript.ps1ทำงานเช่นเดียวกับทางลัดpowershell.exe -f script.ps1แต่สามารถตั้งค่าหลังเพื่อเรียกใช้ในฐานะผู้ดูแลระบบ (ดูpowershell.exe /?คำอธิบายของสวิตช์-fหรือ-File)
mousio

16

บนระบบที่เปิดใช้งาน UAC เพื่อให้แน่ใจว่าสคริปต์ทำงานด้วยสิทธิ์ผู้ดูแลระบบอย่างสมบูรณ์ให้เพิ่มรหัสนี้ที่จุดเริ่มต้นของสคริปต์ของคุณ:

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'

เมื่อเรียกใช้สคริปต์ของคุณด้วยสวิตช์ที่เกี่ยวข้องจะพยายามยกระดับสิทธิ์ก่อนเรียกใช้


หากสคริปต์ต้องใช้อาร์กิวเมนต์พารามิเตอร์
Kiquenet

จะเกิดอะไรขึ้นถ้าสิ่งนี้บอกฉันว่ามันทำงานด้วยสิทธิ์เต็มรูปแบบ แต่รหัสของฉันยังคงบอกว่าสิทธิ์การดูแลระบบไม่เพียงพอ?
mike.b93

@Kiquenet เพิ่มไว้param(...)ด้านบนและส่งต่อก่อน-elevatedคุณจะต้องฉลาดเกี่ยวกับวิธีการสร้างคุณArgumentListอาจต้องการใช้String[]แบบฟอร์ม
TWiStErRob

สวยดี - ดีกว่าการสร้างทางลัด
Mikey

13

หากคุณอยู่ในอำนาจเดียวกันคุณสามารถทำสิ่งนี้:

Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"

C:\Windows\System32ปัญหานี้ก็คือว่ามันมีการเปลี่ยนแปลงไดเรกทอรีการทำงานสำหรับสคริปต์เรียกตัวไป ทางเลือกที่เก็บรักษาไดเรกทอรีปัจจุบัน: stackoverflow.com/a/57033941/2441655
Venryx

4

เพราะมันนั่งอยู่บนเดสก์ทอปของคุณผมขอบอกว่าวิธีที่ง่ายดายที่สุดที่จะได้รับนี้ทำคือการลากมันลงบนแกดเจ็ตระดับความสูง

มิฉะนั้นคุณจะทำให้สคริปต์เฉพาะกิจการคำสั่งสคริปต์ PS1 ของคุณelevate

หรือคุณสามารถนำไปใช้elevateกับบิตเริ่มต้นบริการ


1

PowerShell ISE ใช้งานที่% windir% \ system32 \ WindowsPowerShell \ v1.0 \ PowerShell_ISE.exe คุณสามารถคลิกขวาที่และเลือก "Run as administrator" และเรียกใช้สคริปต์จากที่นั่น

คุณสามารถค้นหาได้ภายใต้โลโก้ Windows> โปรแกรมทั้งหมด> อุปกรณ์เสริม> Windows PowerShell และทำสิ่งเดียวกันกับทางลัดเหล่านั้น


0

หากคุณต้องการตัวเลือกในการเปิดใช้งานสคริปต์ Powershell ในฐานะผู้ดูแลระบบโดยตรงจากเมนูบริบทของ Explorer โปรดดูส่วนที่ 2 ของคำตอบของฉันที่นี่: https://stackoverflow.com/a/57033941/2441655


-1

เพิ่มสิ่งนี้ไปยังจุดเริ่มต้นของสคริปต์:

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

ดูเหมือนจะเป็นส่วนย่อยของคำตอบของ MDMoore313จากสี่ปีที่ผ่านมา
สกอตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.