How to create a Windows Service in Powershell for "Network Service" account?
The correct name of the account is NT AUTHORITY\NETWORK SERVICE
.
This is the final version of Reinstall Service for everyone's 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 AUTHORITY\LOCAL SERVICE #NT AUTHORITY\NETWORK 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." }}
You could get a cred of network service straightforward like this:
$login = "NT AUTHORITY\NETWORK SERVICE"#### #just set a dummy psw since it's 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:\Test\Test.exe"New-Service -name $serviceName -binaryPathName $binaryPath -displayName $serviceName -startupType Automatic -credential $mycreds