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
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
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
se puede descargar el script completo en un sólo fichero .ps ??
salu2&grz
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