Powershell script to change service account

前端 未结 10 2341
小蘑菇
小蘑菇 2020-12-15 03:07

Does anyone have a Powershell script to change the credentials used by a Windows service?

相关标签:
10条回答
  • 2020-12-15 03:31

    I created a text file "changeserviceaccount.ps1" containing the following script:

    $account="domain\user"
    $password="passsword"
    $service="name='servicename'"
    
    $svc=gwmi win32_service -filter $service
    $svc.StopService()
    $svc.change($null,$null,$null,$null,$null,$null,$account,$password,$null,$null,$null)
    $svc.StartService()
    

    I used this as part of by post-build command line during the development of a windows service:

    Visual Studio: Project properties\Build Events

    Pre-build event command line:

    "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\installutil.exe" myservice.exe /u
    

    Post-build event command line:

    "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\installutil.exe" myservice.exe
    powershell -command - < c:\psscripts\changeserviceaccount.ps1
    
    0 讨论(0)
  • 2020-12-15 03:32

    The given answers do the job.

    Although, there is another important detail; in order to change the credentials and run the service successfully, you first have to grant that user account permissions to 'Log on as a Service'.

    To grant that privilege to a user, use the Powershell script provided here by just providing the username of the account and then run the other commands to update the credentials for a service as mentioned in the other answers, i.e.,

    $svc=gwmi win32_service -filter 'Service Name'
    
    $svc.change($null,$null,$null,$null,$null,$null,'.\username','password',$null,$null,$null)
    
    0 讨论(0)
  • 2020-12-15 03:38
    $svc = Get-WmiObject win32_service -filter "name='serviceName'"
    

    the position of username and password can change so try this line to find the right place$svc.GetMethodParameters("change")

    $svc.change($null,$null,$null,$null,$null,$null,$null,$null,$null,"admin-username","admin-password")
    
    0 讨论(0)
  • 2020-12-15 03:41

    Considering that whithin this class:

    $class=[WMICLASS]'\\.\root\Microsoft\SqlServer\ComputerManagement:SqlService'
    

    there's a method named setserviceaccount(), may be this script will do what you want:

    # Copyright Buck Woody, 2007
    # All scripts provided AS-IS. No functionality is guaranteed in any way.
    # Change Service Account name and password using PowerShell and WMI
    $class = Get-WmiObject -computername "SQLVM03-QF59YPW" -namespace
    root\Microsoft\SqlServer\ComputerManagement -class SqlService
    
    #This remmed out part shows the services - I'll just go after number 6 (SQL
    #Server Agent in my case):
    # foreach ($classname in $class) {write-host $classname.DisplayName}
    # $class[6].DisplayName
    stop-service -displayName $class[6].DisplayName
    
    # Note: I recommend you make these parameters, so that you don't store
    # passwords. At your own risk here!
    $class[6].SetServiceAccount("account", "password")
    start-service -displayName $class[6].DisplayName
    
    0 讨论(0)
提交回复
热议问题