How to create a Windows Service in Powershell for Network Service account?

How to create a Windows Service in Powershell for Network Service account?

The correct name of the account is NT AUTHORITYNETWORK SERVICE.

This is the final version of Reinstall Service for everyones benefit, specially for Aniket.

function ReinstallService ($serviceName, $binaryPath, $description, $login, $password, $startUpType)
{
        Write-Host Trying to create service: $serviceName

        #Check Parameters
        if ((Test-Path $binaryPath)-eq $false)
        {
            Write-Host BinaryPath to service not found: $binaryPath
            Write-Host Service was NOT installed.
            return
        }

        if ((Automatic, Manual, Disabled) -notcontains $startUpType)
        {
            Write-Host Value for startUpType parameter should be (Automatic or Manual or Disabled) and it was $startUpType
            Write-Host Service was NOT installed.
            return
        }

        # Verify if the service already exists, and if yes remove it first
        if (Get-Service $serviceName -ErrorAction SilentlyContinue)
        {
            # using WMI to remove Windows service because PowerShell does not have CmdLet for this
            $serviceToRemove = Get-WmiObject -Class Win32_Service -Filter name=$serviceName

            $serviceToRemove.delete()
            Write-Host Service removed: $serviceName
        }

        # if password is empty, create a dummy one to allow have credentias for system accounts: 
        #NT AUTHORITYLOCAL SERVICE
        #NT AUTHORITYNETWORK SERVICE
        if ($password -eq ) 
        {
            #$secpassword = (new-object System.Security.SecureString)
            # Bug detected by @GaTechThomas
            $secpasswd = (new-object System.Security.SecureString)
        }
        else
        {
            $secpasswd = ConvertTo-SecureString $password -AsPlainText -Force
        }
        $mycreds = New-Object System.Management.Automation.PSCredential ($login, $secpasswd)

        # Creating Windows Service using all provided parameters
        Write-Host Installing service: $serviceName
        New-Service -name $serviceName -binaryPathName $binaryPath -Description $description -displayName $serviceName -startupType $startUpType -credential $mycreds

        Write-Host Installation completed: $serviceName

        # Trying to start new service
        Write-Host Trying to start new service: $serviceName
        $serviceToStart = Get-WmiObject -Class Win32_Service -Filter name=$serviceName
        $serviceToStart.startservice()
        Write-Host Service started: $serviceName

        #SmokeTest
        Write-Host Waiting 5 seconds to give time service to start...
        Start-Sleep -s 5
        $SmokeTestService = Get-Service -Name $serviceName
        if ($SmokeTestService.Status -ne Running)
        {
            Write-Host Smoke test: FAILED. (SERVICE FAILED TO START)
            Throw Smoke test: FAILED. (SERVICE FAILED TO START)
        }
        else
        {
            Write-Host Smoke test: OK.
        }

}

How to create a Windows Service in Powershell for Network Service account?

You could get a cred of network service straightforward like this:

$login = NT AUTHORITYNETWORK SERVICE
#### #just set a dummy psw since its just used to get credentials

$psw = dummy

$scuritypsw = ConvertTo-SecureString $psw -AsPlainText -Force

$mycreds = New-Object System.Management.Automation.PSCredential($login, $scuritypsw)
#### #then you can use the cred to new a windows service

$serviceName = Test
$binaryPath = C:TestTest.exe

New-Service -name $serviceName -binaryPathName $binaryPath -displayName $serviceName -startupType Automatic -credential $mycreds

Leave a Reply

Your email address will not be published. Required fields are marked *