Ich aktualisiere einen Windows-Dienst so, dass er unter einem bestimmten Benutzer ausgeführt wird, anstelle des lokalen Benutzers, der PowerShell verwendet.Ändern Sie das Kennwort des Kontos, das für die Ausführung eines Dienstes verwendet wird
Wenn ich es manuell aktualisiere funktioniert es, aber ich bin nicht in der Lage, das Passwort mit meinem Skript zu aktualisieren.
Function RunWindowsServiceUnderSpecificUser{
Param(
[Parameter(Mandatory=$true)]
[string] $ServiceName,
[Parameter(Mandatory=$true)]
[string] $UserName,
[Parameter(Mandatory=$true)]
[string] $Password)
$Service = Get-WmiObject -Class Win32_service -Filter "name='$ServiceName'"
$NoDesktopInteract = $false
[string]$DomainUser=(gwmi win32_userAccount -Filter "Name='$UserName'").Caption
if ($Service.Started){
Get-Service $Service.Name | Stop-Service -Force
while ($Service.Started){
Write-Output "Waiting for $ServiceName to stop..."
sleep 2
$Service = Get-WmiObject -Class Win32_service -Filter"name='$ServiceName'"}}
Write-Output "$ServiceName stopped."
Write-Output "Changing $ServiceName logon account to $DomainUser."
$result = $Service.Change($null,$null,$null,$null,$null,$NoDesktopInteract,$DomainUser,$Password,$null,$null,$null) | Select -ExpandProperty ReturnValue
Write-Output "Changed with return value: $result"
$service.Change($Null,$Null,$Null,$Null,$Null,$Null,$Null,$Password)
& sc.exe config $ServiceName obj= $DomainUser password= $Password
Write-Output "Starting $ServiceName... "
$result = $Service.StartService() | Select -ExpandProperty ReturnValue
Write-Output "done with return value: $result."}
Sie versuchen, den $ Password-Parameter in WMI als Nur-Text zu setzen, und ich denke, dass es den verschlüsselten Wert erwartet. Sie könnten dies für Ihre Passwortvariable versuchen und dann das neue $ EncPassword als Parameter für $ Service.Change verwenden: $ EncPassword = $ Password | ConvertTo-SecureString -AsPlainText -Force Oder Sie können ein bereits gemachtes Skript zum Beispiel von hier: http://windowsitpro.com/powershell/changing-service-credentials-using-powershell – Narcis
führen Sie die PS mit erhöhten Modus. Es sollte funktionieren und bitte das Passwort in verschlüsselter Form weitergeben. –
Danke für deine Antwort, ich habe es mit einem verschlüsselten Passwort versucht, aber jetzt funktioniert es auch nicht. Ich verwende dieses Skript unter Windows 7. Gibt es irgendetwas mit OS-spezifisch? $ EncPassword = $ Passwort | ConvertTo-SecureString -AsPlainText -Force $ ergebnis = $ Service.Change ($ null, $ null, $ null, $ null, $ null, $ null, $ DomainUser, $ EncPassword, $ null, $ null, $ null) | Wählen Sie -ExpandProperty ReturnValue –