usar sintaxis script para instrucciones equipos como comandos basicos apagar active powershell

powershell - sintaxis - script para apagar equipos en red



Uso de Powershell para detener un servicio de forma remota sin WMI o remoto (8)

Basado en los ejemplos incorporados de Powershell, esto es lo que sugiere Microsoft. Probado y verificado:

Para detener:

(Get-WmiObject Win32_Service -filter "name=''IPEventWatcher''" -ComputerName Server01).StopService()

Para comenzar:

(Get-WmiObject Win32_Service -filter "name=''IPEventWatcher''" -ComputerName Server01).StartService()

Me encontré con un forro que parece funcionar:

stop-service -inputobject $(get-service -ComputerName remotePC -Name Spooler)

¿Alguien puede explicar por qué? Porque pensé que el servicio de parada no funcionaba a menos que usted usara la comunicación remota o ocurriera en el host local.


Esto funcionó para mí, pero lo usé como inicio. Las salidas de powershell, esperando que el servicio termine de comenzar varias veces, luego finalizan y luego un servicio de obtención en el servidor remoto muestra el servicio iniciado.

**start**-service -inputobject $(get-service -ComputerName remotePC -Name Spooler)


Gracias a las contribuciones de todos a esta pregunta, se me ocurrió el siguiente script. Cambie los valores de $SvcName y $SvrName para adaptarlos a sus necesidades. Esta secuencia de comandos iniciará el servicio remoto si se detiene o si se inicia. Y utiliza el método fresco .WaitForStatus para esperar mientras el servicio responde.

#Change this values to suit your needs: $SvcName = ''Spooler'' $SvrName = ''remotePC'' #Initialize variables: [string]$WaitForIt = "" [string]$Verb = "" [string]$Result = "FAILED" $svc = (get-service -computername $SvrName -name $SvcName) Write-host "$SvcName on $SvrName is $($svc.status)" Switch ($svc.status) { ''Stopped'' { Write-host "Starting $SvcName..." $Verb = "start" $WaitForIt = ''Running'' $svc.Start()} ''Running'' { Write-host "Stopping $SvcName..." $Verb = "stop" $WaitForIt = ''Stopped'' $svc.Stop()} Default { Write-host "$SvcName is $($svc.status). Taking no action."} } if ($WaitForIt -ne "") { Try { # For some reason, we cannot use -ErrorAction after the next statement: $svc.WaitForStatus($WaitForIt,''00:02:00'') } Catch { Write-host "After waiting for 2 minutes, $SvcName failed to $Verb." } $svc = (get-service -computername $SvrName -name $SvcName) if ($svc.status -eq $WaitForIt) {$Result = ''SUCCESS''} Write-host "$Result`: $SvcName on $SvrName is $($svc.status)" }

Por supuesto, la cuenta en la que se ejecuta esto necesitará los privilegios adecuados para acceder a la computadora remota e iniciar y detener los servicios. Y al ejecutar esto contra máquinas remotas más antiguas, es posible que primero tenga que instalar WinRM 3.0 en la máquina más antigua.


La salida de Get-Service es una clase System.ServiceProcess.ServiceController .NET que puede operar en computadoras remotas. Cómo lo logra, no lo sé, probablemente DCOM o WMI. Una vez que haya obtenido uno de estos de Get-Service , se puede pasar a Stop-Service que probablemente solo llame al método Stop() en este objeto. Eso detiene el servicio en la máquina remota. De hecho, probablemente podrías hacer esto también:

(get-service -ComputerName remotePC -Name Spooler).Stop()


Otra opción; usar invoke-command :

cls $cred = Get-Credential $server = ''MyRemoteComputer'' $service = ''My Service Name'' invoke-command -Credential $cred -ComputerName $server -ScriptBlock { param( [Parameter(Mandatory=$True,Position=0)] [string]$service ) stop-service $service } -ArgumentList $service

NB: para usar esta opción, necesitará que PowerShell esté instalado en la máquina remota y que el firewall permita las solicitudes y para que el servicio de administración remota de Windows se ejecute en la máquina de destino. Puede configurar el firewall ejecutando el siguiente script directamente en la máquina de destino (una sola tarea): Enable-PSRemoting -force .


Por lo que sé, y no puedo verificarlo ahora, no puede detener los servicios remotos con el cmdlet Stop-Service o con .Net, no es compatible.

Sí, funciona, pero detiene el servicio en su máquina local, no en la computadora remota.

Ahora, si lo anterior es correcto, sin remotación o wmi habilitado, puede configurar un trabajo programado en el sistema remoto, usando AT, que ejecuta Stop-Service localmente.


También puede hacer (Get-Service -Name "what ever" - ComputerName RemoteHost).Status = "Stopped"


stop-service -inputobject $(get-service -ComputerName remotePC -Name Spooler)

Esto falla debido a que sus variables -ComputerName remotePC deben ser una variable $remotePC o una cadena "remotePC" -Name Spooler (lo mismo para spooler)