บนเดสก์ท็อป Windows 7 ของฉันฉันมี script.ps1 ซึ่งต้องการสิทธิ์ผู้ดูแลระบบ (เริ่มบริการ) ฉันต้องการคลิกที่สคริปต์นี้และเรียกใช้ด้วยสิทธิ์ผู้ดูแลระบบ
วิธีที่ง่ายที่สุดในการทำสิ่งนี้ให้สำเร็จคืออะไร?
บนเดสก์ท็อป Windows 7 ของฉันฉันมี script.ps1 ซึ่งต้องการสิทธิ์ผู้ดูแลระบบ (เริ่มบริการ) ฉันต้องการคลิกที่สคริปต์นี้และเรียกใช้ด้วยสิทธิ์ผู้ดูแลระบบ
วิธีที่ง่ายที่สุดในการทำสิ่งนี้ให้สำเร็จคืออะไร?
คำตอบ:
นี่คือวิธีหนึ่งในการดำเนินการด้วยความช่วยเหลือของไอคอนเพิ่มเติมบนเดสก์ท็อปของคุณ ฉันเดาว่าคุณสามารถย้ายสคริปต์คนอื่นถ้าคุณต้องการที่จะมีไอคอนเดียวบนเดสก์ท็อปของคุณ
ตอนนี้คุณสามารถเรียกใช้สคริปต์ด้วยการยกระดับโดยคลิกสองครั้งที่ทางลัดใหม่บนเดสก์ท็อปของคุณ
script.ps1
ทำงานเช่นเดียวกับทางลัดpowershell.exe -f script.ps1
แต่สามารถตั้งค่าหลังเพื่อเรียกใช้ในฐานะผู้ดูแลระบบ (ดูpowershell.exe /?
คำอธิบายของสวิตช์-f
หรือ-File
)
บนระบบที่เปิดใช้งาน 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'
เมื่อเรียกใช้สคริปต์ของคุณด้วยสวิตช์ที่เกี่ยวข้องจะพยายามยกระดับสิทธิ์ก่อนเรียกใช้
param(...)
ด้านบนและส่งต่อก่อน-elevated
คุณจะต้องฉลาดเกี่ยวกับวิธีการสร้างคุณArgumentList
อาจต้องการใช้String[]
แบบฟอร์ม
หากคุณอยู่ในอำนาจเดียวกันคุณสามารถทำสิ่งนี้:
Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"
C:\Windows\System32
ปัญหานี้ก็คือว่ามันมีการเปลี่ยนแปลงไดเรกทอรีการทำงานสำหรับสคริปต์เรียกตัวไป ทางเลือกที่เก็บรักษาไดเรกทอรีปัจจุบัน: stackoverflow.com/a/57033941/2441655
PowerShell ISE ใช้งานที่% windir% \ system32 \ WindowsPowerShell \ v1.0 \ PowerShell_ISE.exe คุณสามารถคลิกขวาที่และเลือก "Run as administrator" และเรียกใช้สคริปต์จากที่นั่น
คุณสามารถค้นหาได้ภายใต้โลโก้ Windows> โปรแกรมทั้งหมด> อุปกรณ์เสริม> Windows PowerShell และทำสิ่งเดียวกันกับทางลัดเหล่านั้น
หากคุณต้องการตัวเลือกในการเปิดใช้งานสคริปต์ Powershell ในฐานะผู้ดูแลระบบโดยตรงจากเมนูบริบทของ Explorer โปรดดูส่วนที่ 2 ของคำตอบของฉันที่นี่: https://stackoverflow.com/a/57033941/2441655
เพิ่มสิ่งนี้ไปยังจุดเริ่มต้นของสคริปต์:
$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
}
powershell -f
ไว้ด้านหน้าพา ธ ของสคริปต์เท่านั้นเพื่อให้ "สมบูรณ์" คำสั่ง ...