วิธีการกำหนดฟังก์ชั่น PowerShell ซึ่งต้องใช้ระดับความสูง?


20

เนื่องจากฉันไม่พบทางเลือกอื่นในsudoคำสั่งการยกระดับของ Linux ฉันมีคำถามต่อไปนี้:

วิธีการกำหนดฟังก์ชั่น PowerShell ซึ่งต้องใช้ระดับความสูง? ฉันหมายถึง UAC prompt

พูดถึงฟังก์ชั่นดังต่อไปนี้:

function system-check {
    SFC /ScanNow
}

ระบบ:

Windows 8.1 Pro 64 บิต

PowerShell:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      0      10586  117

EDIT1:

เพื่อให้เข้าใจได้ 100% ให้ฉันใช้ถ้อยคำใหม่:

  1. ฉันใช้ PowerShell ในฐานะผู้ใช้
  2. ฉันเรียกใช้ฟังก์ชั่นดังกล่าว system-check
  3. ฉันต้องการให้ฟังก์ชันยกระดับเพื่อให้สามารถเรียกใช้คำสั่งได้ โปรดทราบว่าฉันต้องการให้พรอมต์ของ UAC ปรากฏขึ้น

โปรดทราบว่าคำสั่ง powershell และคำสั่งที่สร้างขึ้นจำนวนมากที่เพิ่มโดยโมดูล Microsoft (เช่นคำสั่ง MSOL) มักต้องการการยกระดับ แต่ไม่สามารถให้ความช่วยเหลือในการยกระดับสิทธิ์ได้ พวกเขาก็ล้มเหลวด้วยข้อความผิดพลาดที่เป็นความลับ หากคุณสร้างพรอมต์การยกระดับลงในสคริปต์ของคุณคุณจะมอบความเป็นมิตรกับผู้ใช้มากกว่า Microsoft เอง
ทอดด์วิลค็อกซ์

คำตอบ:


33

วิธีรันคำสั่งเฉพาะจากหน้าต่างยกระดับ:

Start-Process -FilePath powershell.exe -ArgumentList {$ScriptBlock} -verb RunAs

ตัวอย่างเช่น:

Start-Process -FilePath powershell.exe -ArgumentList {
    SFC /scannow
} -verb RunAs

วิธีรันสคริปต์เฉพาะจากหน้าต่างยกระดับ:

Start-Process powershell -ArgumentList '-noprofile -file MyScript.ps1' -verb RunAs

เมื่อต้องการเรียกใช้เซสชัน PowerShell ทั้งหมดที่พร้อมท์สำหรับ UAC:

Start-Process powershell.exe -Verb runAs

ฟังก์ชั่นที่จะส่งกลับ $ True หรือ $ False หากหน้าต่างปัจจุบันกำลังทำงานโดยได้รับการยกระดับสิทธิ์:

function isadmin
 {
 #Returns true/false
   ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
 }

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

If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
 {
  Echo "This script needs to be run As Admin"
  Break
 }

ใน PowerShell v4.0 ข้างต้นสามารถทำให้ง่ายขึ้นโดยใช้คำสั่ง #Requires:

#Requires -RunAsAdministrator

ที่มา: เรียกใช้ด้วยสิทธิ์ระดับสูง

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