Powershell kullanarak bir hizmeti uzaktan başlatma / durdurma izinlerini nasıl veririm?


10

Başka bir bilgisayardaki hizmeti yeniden başlatan bir PowerShell betiğimiz var. PowerShell'in yerleşik hizmet denetimi cmdlet'lerini kullandığımızda, şöyle:

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

Bu hatayı geri alıyoruz:

Durdurma Hizmeti: MyService hizmeti 'myservicehostname' bilgisayarında açılamıyor.

Ancak, sc.exe'yi kullandığımızda, şöyle:

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

başlangıç ​​ve bitiş başarılı.

Yeniden başlatmayı yapan kullanıcı bir yönetici değildir . Kullanıcıya hizmeti başlatma / durdurma ve sorgulama izinleri vermek için subinacl kullanıyoruz:

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

PowerShell nasıl hizmetimi durduramaz ama sc.exeyapabilir?

Yanıtlar:


20

Görünüşe göre yeterli izin vermiyordumsubinacl . Hibe işlemi için olası erişim değerleri:

    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  

Ben kullanıyordum S (Sorgu Hizmet Durumu), T (Başlat Servisi) ve O (Durdurma Servisi). Ayrıca E'ye (Bağımlı Hizmetleri Numaralandır) ihtiyacım vardı. PowerShell cmdlet'lerinin başlatma / durdurma sırasında bağımlı hizmetlere bakması gerektiği anlaşılıyor.

İşte güncellenmiş subinaclkomutum:

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

İndirmek / kullanmak istemiyorsanız subinacl.exe, PowerShell'i Karbon modülünün Grant-ServiceControlPermission veya Grant-ServicePermission işlevleriyle kullanabilirsiniz. (YASAL UYARI: Ben Karbon projesinin sahibi / sürdürücüsüyüm.)


Lütfen bunu doğru cevabınız olarak işaretleyin. Bu aynı sorun benim için çok büyük bir yardımcı oldu :)
Alain O'Dea

Daha önce hiç duymamıştım subinacl. Ne kullanışlı bir yardımcı program! Geri kalan bu bilgileri bize geri bıraktığınız için teşekkür ederiz.
Dan

Uzak bilgisayarlardaki hizmetleri denetlemek için Windows 2016 sunucularıyla etki alanı dışındaki ortamlarda harika çalışır.
Doug Knudsen

0

Aşağıdaki komut Windows Server 2008 R2 makinemde beklendiği gibi çalışıyor.

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

Bunun çalışıp çalışmadığını belirlemek için bu tek seferlik komutu deneyebilir ve kullanıcının hedef sunuculardaki Kullanıcılar grubunun üyesi olan bir grubun üyesi olduğunu doğruladınız mı?


Kesik kesin benim için çalışmıyor. Güvenlik gereksinimleri nedeniyle kullanıcıyı Kullanıcılar grubunun (veya herhangi bir yerleşik Windows grubunun) üyesi yapamıyorum.
sıçramış bit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.