ตรวจสอบว่า PowerShell ทำงานในฐานะผู้ดูแลระบบหรือไม่


36

ฉันจะบอกได้อย่างไรในสคริปต์ของฉันหาก PowerShell ทำงานด้วยสิทธิ์ผู้ดูแลระบบ

ฉันต้องรู้เพราะฉันพยายามเรียกใช้โปรแกรมที่ต้องการความสามารถในการเปิดพอร์ตที่ได้รับการป้องกัน


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

คำตอบ:


42
[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")

แยกสิ่งนี้ทำอะไร:

  • [bool]- Cast boolสิ้นผลไป
  • [System.Security.Principal.WindowsIdentity]::GetCurrent()- ดึงข้อมูลWindowsIdentityสำหรับผู้ใช้ที่กำลังทำงานอยู่
  • (...).groups- เข้าถึงgroupsคุณสมบัติของข้อมูลประจำตัวเพื่อค้นหาว่ากลุ่มผู้ใช้ที่เป็นสมาชิกคืออะไร
  • -match "S-1-5-32-544"ตรวจสอบเพื่อดูว่าgroupsมีSID ที่เป็นที่รู้จักของกลุ่มผู้ดูแลระบบหรือไม่ข้อมูลประจำตัวจะมีเฉพาะเมื่อใช้ "run as administrator"

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

BOOO ให้ผู้ชายคนนี้ upvotes มากขึ้น
Kolob Canyon

4
ฉันชอบคำตอบโดย @Bill_Stewart ด้านล่างเนื่องจากไม่มีสายเวท
8DH

แทนที่จะใช้-matchและพิมพ์ดีด:[Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
สิทธิ์ 1

57
([Security.Principal.WindowsPrincipal] `
  [Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

การทำเช่นนี้จะดึงข้อมูลประจำตัวของ Windows ปัจจุบันและส่งกลับค่า True ถ้าข้อมูลประจำตัวปัจจุบันมีบทบาทผู้ดูแลระบบ (เช่นกำลังเรียกใช้การยกระดับ)


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

46

ใน Powershell 4.0 คุณสามารถใช้ต้องการที่ด้านบนสุดของสคริปต์ของคุณ:

#Requires -RunAsAdministrator

ขาออก:

ไม่สามารถเรียกใช้สคริปต์ 'MyScript.ps1' ได้เนื่องจากมีคำสั่ง "#requires" สำหรับใช้เป็นผู้ดูแลระบบ เซสชัน Windows PowerShell ปัจจุบันไม่ได้ทำงานในฐานะผู้ดูแลระบบ เริ่ม Windows PowerShell โดยใช้ตัวเลือก Run as Administrator จากนั้นลองเรียกใช้สคริปต์อีกครั้ง


จะทำอย่างไรถ้าคุณต้องการฟังก์ชั่นที่ออกหากไม่ได้ทำงานโดย admin
Kolob Canyon

1
@KolobCanyon - ไม่มีสิ่งใดที่จะทำงานได้เฉพาะฟังก์ชัน PowerShell ที่ยกระดับ กระบวนการ PowerShell ทั้งหมดได้รับการยกระดับหรือไม่
Bill_Stewart

@Bill_Start เริ่มต้นใช่ แต่คุณสามารถทำได้returnหากผู้ใช้ไม่ใช่ผู้ดูแลระบบ :)
Kolob Canyon

1
@KolobCanyon - คุณสามารถยกระดับกระบวนการ PowerShell เท่านั้น คุณไม่สามารถยกระดับเดียวฟังก์ชั่น นั่นเป็นสาเหตุที่#Requires -RunAsAdministratorมีประโยชน์: มันป้องกันสคริปต์ทั้งหมดไม่ให้ทำงานหากคุณไม่ได้เลื่อน
Bill_Stewart

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