¿Cómo ejecutar el Script de PowerShell en un ordenador remoto?

La funcionalidad de la ejecución de comandos remotos en PowerShell se llama PowerShell Remoting (aparecida en PowerShell 2.0) y se basa en las capacidades del protocolo Web Services for Management (WS-Management). Con PowerShell Remoting, usted puede ejecutar comandos en uno o varios equipos remotos. Usted puede utilizar el modo de sesión interactivo con ordenadores remotos, conexión temporal o permanente. En este artículo, veremos varios ejemplos de cómo ejecutar el script de PowerShell en forma remota.

Para conectarse a un ordenador de forma remota a través de PowerShell, el WinRM (servicio de administración remota de Windows) debe estar habilitado y configurado en él (está deshabilitado de forma predeterminada). La comunicación entre los ordenadores se realiza a través de los protocolos HTTP o HTTPS, y todo el tráfico de red entre los ordenadores está cifrado. Puede utilizar NTLM y Kerberos para autenticarse en un equipo remoto.

Para comprobar el estado del servicio WinRM, ejecute el siguiente comando:

get-service winrm

Como pueden ver, el servicio de WS-Management está funcionando.

Para conectarse interactivamente a una computadora remota del Servidor1 a través de PowerShell, ejecute el siguiente comando:

Servidor de la sesión 1

La vista de la CLI del PoSh cambiará. Al principio de la línea estará presente el nombre del ordenador remoto al que está conectado a través de WinRM. Una vez establecida la sesión, todos los comandos que se introducen en la consola de PowerShell se ejecutan en el ordenador remoto. PS Remoting funciona de la siguiente manera: los comandos introducidos en el ordenador local se transmiten al ordenador remoto y se ejecutan allí, luego el resultado se transmite de vuelta. Como todos los comandos se ejecutan localmente, no hay necesidad de preocuparse por la compatibilidad con la versión y los módulos de PoSh.

LEER TAMBIÉN El servidor RPC no está disponible 0x800706BA

Para terminar una sesión interactiva, ejecute el comando:

Salir de la sesión de PSP

Sólo las tareas simples de control remoto se realizan típicamente en computadoras en el modo interactivo. Para ejecutar un comando complejo o ejecutar el script de PowerShell de forma remota, se debe utilizar el cmdlet Invoke-Command .

El siguiente comando creará una conexión remota con el ordenador Server1 y ejecutará el bloque de comandos especificado en el parámetro ScriptBlock. Después de eso, la sesión remota se cerrará automáticamente.

Invoke-Command -ScriptBlock {Restar-Servicio spooler} -ComputerName server1

Puedes ejecutar la tarea en segundo plano ejecutando Invoke-Command con el parámetro -AsJob. Pero en este caso, el comando no devolverá el resultado a la consola PoSh. Para obtener información sobre la tarea en segundo plano, usa el cmdlet Receive-Job.

PowerShell permite ejecutar scripts PS1 locales en computadoras remotas. La idea es que usted almacene todas las instrucciones de PowerShell en un archivo local .PS1 en su computadora. Para hacer esto, use el parámetro -FilePath en el cmdlet Invoke-Command en lugar de -ScriptBlock. Por ejemplo, para ejecutar el script c:pstune.ps1 en tres servidores remotos, puede usar el siguiente comando:

Invoke-Command -FilePath c:pstune.ps1 -ComputerName server1,server2,server3

La principal ventaja de esta forma de ejecutar los scripts de PowerShell es que no es necesario copiar el archivo del script a los ordenadores remotos. Puede utilizar no sólo el script local, sino también el script PS en una carpeta compartida de la red a la que se puede acceder desde el ordenador local.

LEER TAMBIÉN Office 365 Detalles de la cuenta de usuario usando Get-MsolUser

Puedes guardar la lista de ordenadores en un archivo de texto y ejecutar el script de PowerShell de forma remota en todos los ordenadores:

Invoke-command -comp (get-content c:pservers.txt) -filepath c:pstune.ps1

Por defecto, envía el script de PS1 a 32 ordenadores remotos de la lista al mismo tiempo. Si hay más de 32 ordenadores, entonces PoSh monitoriza el estado de ejecución del script en los primeros 32 ordenadores, y si el script se completa, el comando se ejecuta en el siguiente ordenador. Con el parámetro ThrottleLimit, puedes aumentar este límite, pero ten cuidado de no sobrecargar tu red.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.