PowerShell Hizmeti Oturum Açma Hesabını Değiştirme [3 Yol]
Hizmet oturum açma hesaplarının ne olduğunu biliyor musunuz? Hizmetler, Windows işletim sisteminde herhangi bir kullanıcı arayüzü olmadan çalışmaya devam eden arka plan işlemleridir. Bu hizmetler genellikle, hizmet oturum açma hesabı veya hizmet hesabı olarak adlandırdığımız belirli bir kullanıcı hesabı altında çalışacak şekilde ayarlanır. Bu hizmet hesabı, hizmet(ler)in çalıştırıldığı güvenlik bağlamını belirler.
Yeterli izinlerin sağlanmasının bu hizmeti başka bir hesaba değiştirebileceğini unutmayın (makinenizdeki Denetim Masası -> Kullanıcı Hesapları'nda mevcut olmalıdır). Bunu Hizmet konsolunun GUI'sini kullanarak yapabiliriz ancak bu eğitim, bunun PowerShell kullanılarak nasıl yapılacağına odaklanmaktadır. Öyleyse bunu yapmanın olası yollarına dalalım.
Aşağıdaki çözümleri kullanmak için PowerShell'i yönetici olarak çalıştırmanız gerekir.
Set-Service Cmdlet'ini kullanma [PowerShell 6.0+]
PowerShell'i kullanarak hizmet oturum açma hesabını değiştirmek için Set-Service Cmdlet'ini kullanın. PowerShell 6.0'da tanıtılan -Credential parametresini kullandığımız için yalnızca PowerShell sürüm 6 veya üstünü kullanıyorsanız, oturum açma hizmeti hesabını değiştirmek için bu cmdlet'in avantajından yararlanabilirsiniz.
Set-Service Cmdlet'i kullanın:
Set-Service -Name "XboxGipSvc" -Credential (Get-Credential)ÇIKTI:
PowerShell credential request
Enter your credentials.
User: DESKTOP-THAT\Tahir
Password for user DESKTOP-THAT\Tahir: ****Set-Service cmdlet'i hizmeti başlatmak, durdurmak ve askıya almak için kullanılır ve özelliklerini değiştirir. Hizmet oturum açma hesabını değiştirmek istediğimiz hizmetin adını belirtmek için -Name parametresi kullanıldı. Burada joker karakterler yasaktır, ancak hizmet adını Set-Service cmdlet'ine göndermek için ardışık düzeni kullanabilirsiniz. Yukarıdaki örnekte "XboxGipSvc" hizmet adıdır; bunu hizmet adınızla değiştirmeyi unutmayın.
-Credential parametresi, bir hizmet tarafından Hizmet Oturum Açma Hesabı olarak kullanılan hesabı belirtmek için kullanıldı. Bu hesap kimlik bilgileri Get-Credential cmdlet'i kullanılarak alındı (bunu () içine eklemeyi unutmayın). Kimlik bilgileri bir PSCredential nesnesinde, parola ise SecureString olarak depolanır.
Yukarıdaki kodda Set-Service cmdlet'i, Domain\User olarak girmemiz gereken User ve bir istedi. Şifre. Burada, Etki Alanı, Bu Bilgisayar -> Özellikler ve Kullanıcı altındaki Cihaz Özellikleri bölümünde bulabileceğiniz bilgisayar adıdır. > kullanıcı hesabı adıdır. Belirtilen kullanıcı için şifre ayarladıysanız bir * dizesi göreceksiniz; aksi halde devam etmek için Enter tuşuna basın.
6,0'dan daha düşük bir PowerShell sürümü kullanıyorsanız aşağıdaki çözümlerden herhangi birini kullanabilirsiniz.
Get-WmiObject Cmdlet'ini kullanma
PowerShell kullanarak hizmet oturum açma hesabını değiştirmek için:
- Kullanıcı adını, şifreyi (varsa) ve hizmet adını ayrı değişkenlerde saklayın.
- Belirtilen hizmet için bir WMI nesnesi almak üzere
Get-WmiObjectcmdlet'ini kullanın. - Rahatsızlığı önlemek ve döndürülen değeri bir değişkende saklamak amacıyla hizmeti durdurmak için
StopService()yöntemini kullanın. - Önceki adımda oluşturulan değişkenin
ReturnValueözelliğinin <'ye eşit olup olmadığını kontrol etmek için-eqoperatörüyle birlikte koşul ifadeleri (if-elseifadeleri) kullanın."0"veya"5". Aksi haldeelsebloğuna geçin. - Hizmetin tamamen durmasına izin vermek için
15saniye beklemek üzereUyku Başlatcmdlet'ini kullanın. - Oturum açma hizmeti hesabını değiştirmek ve döndürülen değeri bir değişkende depolamak için
Change()yöntemini kullanın. - Önceki adımda oluşturulan değişkenin
ReturnValueözelliğinin"0'a eşit olup olmadığını kontrol etmek için. Aksi haldeififadesini-eqoperatörüyle birlikte kullanın. "elsebloğuna geçin. - Tüm
if-elsebloklarındaWrite-Hostcmdlet'ini kullanarak özelleştirilmiş mesajları yazdırın.
Wmi-Object Cmdlet'ini kullanın:
$username="DESKTOP-THAT\Tahir"
$password="1234"
$serviceName="XboxGipSvc"
$serviceObj = Get-WmiObject -Class Win32_Service -Filter "name='$serviceName'"
$stopServiceStatus = $serviceObj.StopService()
if ($stopServiceStatus.ReturnValue -eq "0") {
Write-host "The '$serviceName' service Stopped." -f Green
} elseif($stopServiceStatus.ReturnValue -eq "5"){
Write-host "The '$serviceName' service is already stopped. Error code: $($stopServiceStatus.ReturnValue)" -f Yellow
}
else {
Write-host "Failed to Stop the '$serviceName' service. Error code: $($stopServiceStatus.ReturnValue)" -f Red
}
Start-Sleep -Seconds 15
$changeLogonAccountStatus = $serviceObj.Change($null,$null,$null,
$null,$null,$null,
$username,$password,$null,
$null,$null)
if ($changeLogonAccountStatus.ReturnValue -eq "0") {
Write-host "The logon account changed successfully for the '$serviceName' service." -f Green
}else {
Write-host "Failed to change the logon account for the '$serviceName' service. Error code: $($changeLogonAccountStatus.ReturnValue)" -f Red
}ÇIKTI:
The 'XboxGipSvc' service Stopped.
The logon account changed successfully for the 'XboxGipSvc' service.Öncelikle kullanıcı adını, şifreyi (varsa; aksi takdirde şöyle olurdu) içeren $username, $password ve $serviceName değişkenlerini tanımladık. "" şeklinde boş bir dize) ve hizmet adını girin. Daha sonra verilen hizmete ait Windows Yönetim Araçları (WMI) nesnesini almak için Get-WmiObject cmdlet'ini kullandık ve bu nesneyi $serviceObj değişkeninde sakladık.
Yukarıdaki örnekte, WMI nesnesi ($serviceObj), oturum açma hesabının değiştirileceği Windows hizmetini belirtiyordu. Yukarıdaki scriptte -Win32_Service sınıfını belirtmek için -Class parametresini kullandık.
Daha sonra servisi durdurmak için $serviceObj nesnesinin StopService() metodunu kullandık. Ancak if-else bloğu, $stopServiceStatus değişkeninde sakladığımız StopService()'ın döndürülen değerine göre yürütülecektir. Başarılı bir şekilde durdurulursa, ReturnValue özelliğinin değeri "0" olur ve bir mesaj görüntülemek için if bloğu yürütülür. yeşil renkte.
Hizmet durdurulursa ReturnValue özelliğinin değeri "5" olur ve bu da elseif bloğunun yürütülmesine neden olur; aksi halde else bloğu yürütülür. Koşul ifadelerinin içinde, başarılı olup olmadıklarına bağlı olarak mesajları yeşil, sarı ve kırmızı renkte yazdırmak için Write-Host cmdlet'ini biçim işleciyle (-f) birlikte kullandık , uyarı ve hata.
Daha sonra Start-Sleep cmdlet'ini kullanarak servisin tamamen bitmesi için 15 saniye bekledik. Daha sonra, hizmet oturum açma hesabını değiştirmek için $serviceObj nesnesinin Change() yöntemini kullandık ve döndürülen değeri $changeLogonAccountStatus adlı bir değişkende sakladık. Change() yöntemi 11 bağımsız değişken aldı. $username ve $password olan yedi ve sekiz numaralı bağımsız değişkenler hariç tüm bağımsız değişkenler $null idi.
Daha sonra, $changeLogonAccountStatus'un ReturnValue özelliğinin olup olmadığını kontrol etmek için if ifadesini -eq operatörüyle birlikte kullandık. "0"'a eşittir. Öyleyse, hizmet oturum açma hesabının değiştirildiğini belirten yeşil bir ileti görüntülemek için Write-Host'u kullandık; aksi takdirde, kırmızı renkte bir hata mesajı gösteren else bloğu yürütülür.
sc.exe Komutunu Kullanma
PowerShell'i kullanarak hizmet oturum açma hesabını değiştirmek için sc.exe komutunu kullanın.
Sc.exe Komutunu kullanın:
$serviceName = "XboxGipSvc"
$username = "DESKTOP-THAT\Tahir"
$password = "1234"
$arguments = "config $serviceName obj= <code>"$username</code>" password= <code>"$password</code>""
Start-Process -FilePath "sc.exe" -ArgumentList $arguments -Wait -NoNewWindowÇIKTI:
[SC] ChangeServiceConfig SUCCESSİlk olarak kullanıcı adını, şifreyi ve hizmet adını tutacak üç değişken tanımladık; önceki örnekte yaptığımızın aynısıdır. Daha sonra sc.exe komut satırı aracına iletmek istediğimiz komut satırı argümanlarını içeren bir string hazırladık. Bu dizeyi $arguments değişkeninde sakladık.
$arguments, $username, $password ve $serviceName değişkenlerinin değerleri kullanılarak oluşturulmuştur. $username ve $password karakterlerinden önce ve sonra çift tırnak işaretini kullanmak ve bunları sc.exe'ye değişmez değerler olarak iletmek için geri tıklamayı kullandığımızı unutmayın. .
Daha sonra, verilen $arguments ile sc.exe komut satırı aracını çalıştıran yeni bir işlemi başlatmak için Start-Process cmdlet'ini kullandık. -ArgumentList parametresi. Daha sonra, -FilePath parametresi sc.exe yürütülebilir dosyasının yolunu belirtirken, -Wait parametresi betiğin sc.exe komutunu kullanın.
Son olarak -NoNewWindow parametresi, sc.exe dosyasının aynı PowerShell konsol penceresinde çalıştırılıp çalıştırılmadığını kontrol etti. Genel olarak kod, "XboxGipSvc" hizmetinin hizmet oturum açma hesabını değiştirir; Bu çözümü benimserseniz bu hizmet adını değiştirmeyi unutmayın.
Hepsi PowerShell hizmeti oturum açma hesabını değiştirmekle ilgili.
