PowerShell Remoting básico

Hola a todos después de la charla de PowerShell en Microsoft me comprometí con subir los ejemplos de powershell remoting. asiq comencemos

Primero que todo deben habilitar la función de remoting con el comando

Enable-PSRemoting

image

Después de esto ya estamos listos para comenzar a invocar comandos de manera remota.

Recuerden que si están en un entorno con dominio de Active Directory y su cuenta tiene derechos sobre el computador de destino, todo funcionara OK, de lo contrario nos enviara un mensaje de acceso denegado, para solucionar ese problema usaremos el cmdlet
get-credential y lo pasaremos como parámetro.
Imaginemos que mi dominio se llama capacita.local

$credencial=Get-Credential CAPACITAAdministrador

image

Ahora si queremos invocar un cmdlet remoto solo debemos ejecutar el comando

Invoke-Command -ComputerName SERVIDOR01 -Credential $credencial
-ScriptBlock {Get-Process}

El cmdlet Invoke-Command abre una sesión el el servidor01 con las credenciales almacenadas en la variable $credencial , luego ejecuta todo lo que este dentro de las llaves del parámetro –ScriptBlock, que en este caso es el cmdlet Get-Process y lo muestra por pantalla.

El problema es que con el cmdlet Invoke-Command se abre y cierra una sesión, esta no es persistente y no guarda el estado de posibles variable, para esto debemos crear una nueva sesión y usarla como parámetro

$sesion1=New-PSSession -ComputerName SERVIDOR01 -Credential $credencial

Ahora tenemos en la variable $sesion1 una sesión abierta hacia el computador SERVIDOR1

Invoke-Command -Session $sesion1 -ScriptBlock {Get-EventLog -logname system -Newest 5}

Lo anterior trae los 5 últimos logs de sistema del SERVIDOR1

La mejor manera de comprobar que realmente esta sesión es persistente es hacer una variable local y incrementarla en cierto valor ejecutándola remotamente

EJ:

Variable local: $paso

$paso= {$total += 5;$total}

Invoke-Command -Session $sesion1 -ScriptBlock $paso

El primer valor seria 5, después 10, después 15 y así sucesivamente , con esto podemos probar que el estado de las variables se conserva 🙂

Imaginemos que nuestro servidor remoto esta corriendo un proceso llamado notepad 🙂 y nosotros de nuestra estación de trabajo lo queremos detener

Invoke-Command -Session $sesion1 -ScriptBlock {Stop-Process -name  notepad}

Ahora si queremos trabajar directamente en el servidor remota en una consola de PS, solo debemos entrar a esta con el comando

Enter-PSSession -ComputerName SERVIDOR01 -Credential $credencial

Con esto entramos a una sesión interactiva remota de powershell

Saludos

2 comentarios sobre “PowerShell Remoting básico”

  1. Si pero en este caso son varios ejemplos simples que solo demuestran el poder de romoting …. tu te puedes hacer uno y dejarlo todo dentro de un archivo ps1

Responder a pcampos Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *