start powershell windows-7 windows-services

start - ¿Cómo crear un servicio de Windows en Powershell para la cuenta "Servicio de red"?



get-service powershell (3)

El nombre correcto de la cuenta es NT AUTHORITY/NETWORK SERVICE .

Quiero crear un servicio de Windows usando Powershell. Crearlo para un usuario dado es pan comido. Utilicé esta función adaptada desde aquí .

function ReinstallService1 ($serviceName, $binaryPath, $login, $pass) { Write-Host "installing service" # creating credentials which can be used to run my windows service $secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force $mycreds = New-Object System.Management.Automation.PSCredential ($login, $secpasswd) # creating widnows service using all provided parameters New-Service -name $serviceName -binaryPathName $binaryPath -displayName $serviceName -startupType Automatic -credential $mycreds Write-Host "installation completed" }

Mi pregunta es: ¿cómo puedo crear para la cuenta "Servicio de red"?

Si modifico la línea New-Service y elimino el parámetro de credencial, el servicio se crea para la cuenta "Sistema local" . Casi echo de menos.

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

Busqué mucho en Google y no vi forma de indicar la cuenta de servicio. Si trato de usar el parámetro Credential para el usuario "NETWORK SSERVICE" , no sé qué contraseña poner y si invento uno (solo en el caso de que cmdlet lo ignore) no funciona. El error es:

Servicio nuevo: no se puede crear el servicio ''XXXX (XXXX)'' debido al siguiente error: el nombre de la cuenta no es válido o no existe o la contraseña no es válida para el nombre de cuenta especificado


Esta es la versión final del Servicio de reinstalación para el beneficio de todos, especialmente para 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 "") { $password = "dummy" } $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." } }


Puede obtener una credibilidad de servicio de red sencillo como este:

$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