ฉันจะให้สิทธิ์ในการเริ่ม / หยุดบริการจากระยะไกลโดยใช้ Powershell ได้อย่างไร


10

เรามีสคริปต์ PowerShell ที่รีสตาร์ทบริการบนคอมพิวเตอร์เครื่องอื่น เมื่อเราใช้ cmdlet การควบคุมการบริการในตัวของ PowerShell เช่น:

$svc = Get-Service -Name MyService -ComputerName myservicehostname
Stop-Service -InputObject $svc
Start-Service -InputObject $svc

เราได้รับข้อผิดพลาดนี้กลับมา:

Stop-Service: ไม่สามารถเปิดบริการ MyService บนคอมพิวเตอร์ 'myservicehostname'

อย่างไรก็ตามเมื่อเราใช้ sc.exe เช่นนั้น:

C:\Windows\System32\sc \\myservicehostname stop MyService
C:\Windows\System32\sc \\myservicehostname start MyService

การเริ่มต้นและหยุดสำเร็จ

ผู้ใช้ที่ทำการรีสตาร์ทไม่ใช่ผู้ดูแลระบบ เราใช้ subinacl เพื่อให้สิทธิ์แก่ผู้ใช้ในการเริ่ม / หยุดและสอบถามบริการ:

subinacl.exe /service MyService /GRANT=MyServiceControlUser=STO

ทำไม PowerShell ถึงหยุดบริการไม่ได้ แต่sc.exeทำได้?

คำตอบ:


20

มันจะเปิดออกผมไม่ได้ให้สิทธิ์เพียงพอกับ subinaclค่าการเข้าถึงที่เป็นไปได้สำหรับการดำเนินการให้สิทธิ์คือ:

    F : Full Control  
    R : Generic Read  
    W : Generic Write  
    X : Generic eXecute  
  or any following values  
    L : Read controL  
    Q : Query Service Configuration  
    S : Query Service Status  
    E : Enumerate Dependent Services  
    C : Service Change Configuration  
    T : Start Service  
    O : Stop Service  
    P : Pause/Continue Service  
    I : Interrogate Service  
    U : Service User-Defined Control Commands  

ฉันกำลังใช้S (สถานะการสืบค้นข้อมูล), T (เริ่มบริการ) และO (หยุดบริการ) ฉันยังต้องการ E (แจกแจงบริการที่ต้องพึ่งพา) ปรากฏว่า PowerShell cmdlets จำเป็นต้องดูบริการที่ต้องพึ่งพาเมื่อเริ่ม / หยุด

นี่คือsubinaclคำสั่งที่อัปเดตของฉัน:

subinacl.exe /service MyService /GRANT=MyServiceControlUser=STOE

หากคุณไม่ต้องการดาวน์โหลด / ใช้subinacl.exeคุณสามารถใช้ PowerShell ผ่านฟังก์ชั่นGrant-ServiceControlPermissionหรือโมดูลGrant-ServicePermissionของโมดูลคาร์บอน (การปฏิเสธความรับผิด: ฉันเป็นเจ้าของ / ผู้ดูแลโครงการคาร์บอน)


โปรดทำเครื่องหมายว่านี่เป็นคำตอบที่ถูกต้องของคุณ นี้เป็นความช่วยเหลืออย่างมากสำหรับฉันสำหรับปัญหาเดียวกันแน่นอน :)
Alain ดีอีเอ

ฉันไม่เคยได้ยินมาsubinaclก่อน ยูทิลิตี้ที่มีประโยชน์คืออะไร! ขอบคุณที่กลับมาทิ้งข้อมูลนี้ให้พวกเราที่เหลือ
ด่าน

ใช้งานได้ดีในสภาพแวดล้อมที่ไม่ใช่โดเมนกับเซิร์ฟเวอร์ Windows 2016 เพื่อควบคุมบริการบนคอมพิวเตอร์ระยะไกล
Doug Knudsen

0

คำสั่งต่อไปนี้ทำงานได้ตามที่คาดไว้ในเครื่อง Windows Server 2008 R2 ของฉัน

Start-Service -InputObject $(Get-Service -Computer [ComputerName] -Name spooler)  

คุณสามารถลองใช้คำสั่ง one-off นี้เพื่อตรวจสอบว่าใช้งานได้หรือไม่และคุณได้ตรวจสอบแล้วว่าผู้ใช้เป็นสมาชิกของกลุ่มที่เป็นสมาชิกของกลุ่มผู้ใช้บนเซิร์ฟเวอร์เป้าหมายหรือไม่


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