Invoke-Command: Cómo ejecutar comandos de PowerShell de forma remota
En esta guía, aprenderá a utilizar el comando invoke para ejecutar comandos y scripts de PowerShell en computadoras remotas.
Índice de contenidos:
- Requisitos de comando de invocación
- Configuración de política de grupo
- Ejemplos de comando de invocación
Empecemos.
Requisitos de comando de invocación
Antes de poder utilizar el comando invoke, la computadora remota debe tener:
- El servicio de administración remota de Windows debe estar ejecutándose.
- Permitir la administración remota de Windows en el Firewall de Windows
En la siguiente sección, explicaré cómo habilitar esto para varias computadoras mediante la política de grupo.
Configuración de política de grupo
De forma predeterminada, el servicio de administración remota de Windows no se ejecuta y el firewall bloquea la conexión entrante. Puede utilizar la política de grupo para controlar esta configuración en todas las computadoras unidas al dominio.
Paso 1: crear un nuevo GPO
Puede agregar esta configuración a un GPO existente o crear un GPO nuevo. En este ejemplo, crearé un nuevo GPO.
1. Cree o edite un GPO existente. Vinculé el mío a la raíz del dominio y lo llamé PSRemoting. Al vincular en la raíz del dominio se aplicará este GPO a todos los usuarios y computadoras. Puede vincularlo a una unidad organizativa para limitar el alcance.
2. Edite el GPO y navegue hasta Configuración del equipo -> Configuración de Windows -> Configuración de seguridad -> Servicios del sistema
3. Seleccione Administración remota de Windows (WS-Management) y configure el modo de inicio del servicio en Automático.
4. Vaya a Configuración del equipo -> Configuración de Windows -> Configuración de seguridad -> Firewall de Windows Defender con seguridad avanzada
5. Haga clic derecho en la regla de entrada y seleccione "Nueva regla".
En la pantalla de tipo de regla, seleccione predefinido y seleccione "Administración remota de Windows" y luego haga clic en Siguiente.
Seleccione el perfil "Dominio, Privado" y desmarque el perfil Público. Haga clic en Siguiente
Seleccione "Permitir la conexión" y haga clic en Finalizar
Consejo: Por razones de seguridad, recomiendo permitir que solo computadoras autorizadas específicas utilicen comandos de PowerShell de forma remota. Puede limitar esto utilizando la configuración de alcance en la regla de firewall. En la sección de dirección IP remota, indique la dirección IP de su computadora o cualquier otra computadora que desee permitir.
Eso completa la configuración de GPO.
Paso 2: ejecute gpupdate o reinicie la computadora
A continuación, las computadoras remotas necesitan actualizar sus políticas para eliminar el nuevo GPO. Se actualizarán cada 90 minutos por sí solos, pero para forzar una actualización, ejecute gpupdate en la computadora. Esto iniciará el servicio de administración remota de Windows y agregará la regla de firewall en las computadoras remotas.
Ahora comprobaré los servicios y el firewall.
El servicio ya está funcionando.
Se agrega la regla de Firewall.
Ejemplos de comando de invocación
A continuación se muestran algunos ejemplos del uso del comando invocar.
Ejemplo 1: obtener servicios en una computadora remota
El parámetro scriptblock especifica el comando de PowerShell que se ejecutará.
invoke-command -ComputerName pc1 -scriptblock {Get-Service} Ejemplo 2: obtener servicios en varias computadoras
Para ejecutar comandos de PowerShell en varias computadoras remotas, simplemente sepárelas con una coma. Puede utilizar el nombre de host o la dirección IP.
invoke-command -ComputerName pc1, srv-vm1 -scriptblock {Get-Service} Ejemplo 3. Ejecutar un script en una computadora remota
Este ejemplo ejecutará el script getinfo.ps1 en computadoras remotas pc1 y srv-vm1.
Invoke-Command -FilePath c:\scripts\getinfo.ps1 -ComputerName pc1, srv-vm1Ejemplo 4: obtener la versión de Windows en una computadora remota
Utilice el comando systeminfo para obtener información de la versión de Windows de computadoras remotas.
invoke-command -ComputerName pc1 -scriptblock {systeminfo} Ejemplo 5: ejecutar comandos en todas las computadoras desde un archivo de texto
Si tiene una lista grande de computadoras, puede colocarlas en un archivo de texto. Por ejemplo, tengo una lista de computadoras en un archivo llamado computadoras.txt.
Invoke-Command -ComputerName (Get-Content c:\it\computers.txt) -scriptblock {systeminfo}Ejemplo 6: establecer credenciales
Si la computadora se encuentra en un contexto de seguridad diferente, es posible que deba especificar credenciales.
$Credential = Get-Credential
Invoke-Command -ComputerName pc1 -Credential $Credential -ScriptBlock { Get-service}Ejemplo 7: obtener registros de eventos desde una computadora remota
En este ejemplo, obtendré el ID de evento 4624 de una computadora remota.
invoke-command -ComputerName pc1 -scriptblock {Get-WinEvent @{logname='security';ID=4624} -MaxEvents 5}Ejemplo 8: Obtener la versión de PowerShell
Este ejemplo obtendrá la versión de PowerShell en computadoras remotas.
Invoke-Command -ComputerName pc1, srv-vm1 -ScriptBlock {$PSVersionTable.PSVersion}Ejemplo 9: ejecutar varios comandos
En este ejemplo, estoy ejecutando get-process y get-service en la computadora remota.
Invoke-Command -ComputerName pc1 -ScriptBlock {(get-process), (get-service)}Con suerte, los ejemplos anteriores le darán una idea de cómo ejecutar comandos de PowerShell de forma remota. Consulte la documentación del comando de invocación de Microsoft para obtener más información.
Una alternativa al comando invoke es el comando psexec. El comando PsExec es una utilidad liviana que le permite ejecutar procesos en comandos remotos, también le permite iniciar programas e interactúa con la consola.













