PowerShell para principiantes (Parte 13): comunicación remota de PowerShell
No lo oculto: ahora llegamos a mi tema favorito: PowerShell Remoting. Me encanta. Espero que a ti también te guste. Si eres un apasionado ingeniero o desarrollador de sistemas, encontrarás muchos consejos y trucos en esta parte para hacer tu vida laboral más fácil y eficiente. Pero primero, un breve vistazo al ejercicio de la última parte.
Esta es la parte 13 de la serie PowerShell para principiantes. Todas las partes se pueden encontrar aquí: PowerShell para principiantes (Serie)
Revisión (Parte 12)
La última vez solicité importar un código y ponerlo a disposición de todos los usuarios en todas las sesiones de PowerShell. La solución ya está incluida en el artículo, por lo que no es necesario dar más explicaciones. Se puede encontrar al final del artículo y proporciona información sobre cómo almacenar el código para que esté cómodamente disponible para todos los usuarios.
Es mucho más importante que recuerde algunos conceptos básicos de los módulos PowerShell en el resumen a continuación.
Resumen (Parte 12)
Un módulo es un conjunto de funcionalidades relacionadas de Windows PowerShell, agrupadas como una unidad conveniente (normalmente guardadas en un único directorio). Suele ser un conjunto de comandos y códigos. Almacene todos los módulos personalizados en C:\ProgramFiles\WindowsPowerShell\Modules. Asegúrese de que el nombre de la carpeta y del archivo coincidan.
Comunicación remota con PowerShell
Primero que nada, tómate tu tiempo para esta parte de la serie. Esta parte es muy detallada, si no la más detallada.
Si quieres ser un tipo genial, es decir, un tipo realmente genial, entonces esta parte es para ti. Le prometo que si está familiarizado con la comunicación remota de PowerShell, será muy diferente de sus colegas. Trabajarás de manera diferente a los demás. Ok, basta de hablar, profundicemos.
Las muchas formas de comunicación remota
Lo determino: ya sabes que la mejor forma es PowerShell Remoting ?
Considere que existen muchas formas de administrar un Sistema Operativo Windows.
- Escritorio remoto (mstsc)
- Asistencia Remota (msra)
- ganadores
- Potencia Shell
- otras herramientas como sysinternals (psexec), TeamViewer, VNC…
Este ejemplo inicia cmd en Azdc01.
winrs -r:azdc01 -u:sid-500\patrick cmd
En este segundo ejemplo, se establece una sesión remota de PowerShell con Enter-PSSession.
Enter-PSSession -ComputerName Azdc01
En este artículo nos centraremos en el segundo ejemplo, ¿qué más? ?
Conceptos básicos de la comunicación remota de PowerShell
PowerShell usa WinRm para conexiones remotas. WinRm es un servicio de Windows.
Existen algunos inconvenientes al utilizar PowerShell Remoting. Recuerda lo siguiente y todo estará bien:
Dominio de directorio activo
- WinRm está habilitado en todos los Windows Server 2012/2016 de forma predeterminada, lo que significa que puede acceder a su dominio unido a Windows Server desde el primer momento con sus credenciales de administrador de dominio como se muestra arriba (Enter-PSSession)
- WinRm está deshabilitado de forma predeterminada en TODOS los sistemas operativos cliente (Windows 7/8/10), lo que significa que no puede acceder a estas computadoras de inmediato. Debe habilitar winrm con el comando winrm qc o con Políticas de grupo como se describe en mi artículo: Políticas de grupo: Habilitación de WinRM para sistemas operativos de cliente Windows (Windows 10, Windows 8 , Windows 7)
grupo de trabajo
- En un entorno de grupo de trabajo, debe editar la lista de Hosts confiables, porque en un dominio de Active Directory las computadoras confían entre sí, pero no en un escenario independiente.
¿Qué hemos aprendido hasta ahora?
La comunicación remota de PowerShell utiliza el servicio WinRm. WinRm está habilitado de forma predeterminada en Windows Server 2012/2016, pero no en clientes de Windows. Debe habilitar WinRm en todos los clientes de Windows. Cuide la lista de hosts de confianza, si trabaja en un entorno sin dominio.
Los comandos
Hay muchos comandos de sesión de PS. Sólo me centraré en algunos de ellos, que creo que son los más importantes para los principiantes:
Get-Command *pssession* | Select-Object Name
Comunicación remota de PowerShell (dominio de Active Directory)
Si bien PowerShell Remoting funciona de fábrica con Windows Server 2012/2016, ese no es el caso con versiones anteriores. Recuerde que debe habilitar WinRm, que es un requisito previo para PS Remoting, en todos los sistemas operativos más antiguos.
Lo mismo ocurre con los sistemas operativos de los clientes.
Este comando muestra el estado actual de WinRm o si no está activado, Windows iniciará el servicio:
winrm qc
Eso se ve bien …
Los lectores saben más. Aquí está la explicación de la ayuda de control de calidad de winrm. Descubrimos que suceden muchas más cosas detrás de escena al ejecutar winrm qc. Recuerda los 4 pasos...
Ok, basta de esto. Comencemos con algunas acciones remotas. Enter-PSSession y New-PSSession son nuestros amigos.
Este ejemplo reinicia la computadora remota Azdc01. Como puede ver, después del comando de reinicio la sesión se interrumpe. ¿Por qué? Debido a que el servidor actualmente se reinicia...
Enter-PSSession -ComputerName azdc01 -Credential patrick
Si su objetivo es conectarse a varios servidores a la vez, entonces New-PSSession es su amigo. Entonces podremos saltar de un lado a otro entre ellos.
New-PSSession -ComputerName Azdc01
New-PSSession -ComputerName AzServer01
Tenga en cuenta que ahora tenemos dos sesiones establecidas. Pero no entramos en ninguna de las sesiones. Pero podemos saltar hacia ellos. Mire los ID de sesión 5 y 6. Ese es el truco.
Y aquí vamos entrando en la sesión no. 5.
Enter-PSSession -Id 5
Volviendo atrás… y entrando a la sesión no. 6.
Exit-PSSession
Enter-PSSession -Id 6
Resumen
Enter-PSSession inicia una sesión interactiva con una única computadora remota. Sólo una sesión a la vez. New-PSSession hace lo mismo, pero la sesión es una conexión persistente y puedes establecer múltiples sesiones en diferentes servidores. Al utilizar New-PSSession recuerda que tienes que entrar en cada sesión.
Comunicación remota con PowerShell (computadoras independientes, grupos de trabajo, entornos no de Active Directory)
Si bien PS Remoting en un dominio de Active Directory funciona de maravilla, se necesita más preparación para establecer una conexión remota debido al hecho de que las computadoras que no pertenecen al dominio no confían entre sí de forma predeterminada.
A lo que me refiero es a la “Lista de servidores de confianza”. La lista de Hosts de confianza se puede modificar en GPO o con PowerShell. Esta publicación trata sobre PowerShell, así que echemos un vistazo a esta lista. ¡La configuración está en una unidad PowerShell! Esperamos que recuerdes que ya nos ocupamos de las unidades en la Parte 11: PowerShell para principiantes (Parte 11): Diviértete con las unidades PowerShell
Está en la unidad Web Service for Management (WSman):
La lista de Hosts de Confianza se puede mostrar de diferentes maneras…
cd wsman:
cd localhost
cd Client
Get-ChildItem
más rápido con…
dir WSMan:\localhost\Client\
Mi pantalla muestra un asterisco *. Esto significa que mi computadora confía en cualquier computadora.
Si esa es la forma en que quieres que funcione
Set-Item -Path WSMan:\localhost\Client\TrustedHosts -Value '*'
Presione Y.
O si desea restringir las conexiones remotas a una computadora (por ejemplo, dirección IP: 192.168.0.1), ejecute solo
Set-Item -Path WSMan:\localhost\Client\TrustedHosts -Value '192.168.0.1'
Comprueba tu configuración...
¿Qué has aprendido hasta ahora?
Cuando utilice la sesión remota de PowerShell, tenga cuidado con la lista de hosts confiables.
Análisis profundo de la comunicación remota con PowerShell
Ahora sabemos que debemos cuidar los Hosts Confiables y cuidar que los Sistemas Operativos del Cliente estén preparados antes de conectarse a ellos. Digamos que todo está bien y podemos seguir adelante. En esta parte voy a mostrar el poder de PowerShell Remoting.
Se introducirán nuevos cmdlets. Mire cuántos CmdLets admiten el parámetro ComputerName:
Restart-Computer -ComputerName client01
¿Puede client01 hacer ping a su puerta de enlace predeterminada? No es necesario una conexión remota con client01, no es necesario buscar la dirección IP de la puerta de enlace de client01, ¡bienvenido al mundo de PowerShell! ?
Mire este poderoso One-Liner:
Test-Connection -Source Client01 -Destination (Invoke-Command -ComputerName Client01 {Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Select-Object -ExpandProperty Nexthop})
Conclusión: Sí, Client01 puede acceder a su puerta de enlace predeterminada ?
¿Quieres eliminar una computadora remota del dominio de forma remota? No hay problema… Allá vamos…
Add-Computer -WorkgroupName Group -ComputerName client01 -Credential sid-500\administrator
¿Quieres unir una computadora al dominio? Ningún problema. Asegúrese de que la computadora del grupo de trabajo incluya su computadora como host confiable y que la conexión de red esté configurada en Red privada y WinRm esté habilitado.
Boom… Una vez completado, el cliente se reinicia… y se une al dominio. ¿Impresionante? En efecto …
Add-Computer -ComputerName Client01 -DomainName sid-500.com -LocalCredential client01\admin -Credential sid-500\administrator -Restart
¿Impresionado? Yo también. Pero no nos detenemos todavía. ¿Quiere reiniciar, unirse al Dominio o simplemente obtener otra información de cientos o miles de computadoras? Entonces primero obtenga una lista de ellos. Por ejemplo, una lista de todos los servidores.
(Get-ADComputer -Filter "operatingsystem -like '*server*'").Name
O una lista de todos los clientes…
(Get-ADComputer -Filter "operatingsystem -notlike '*server*'").Name
Luego toma las decisiones... por ejemplo, obtén su puerta de entrada.
Invoke-Command -ComputerName ((Get-ADComputer -Filter "operatingsystem -notlike '*server*'").Name) {Get-NetRoute -DestinationPrefix 0.0.0.0/0 | Select-Object -ExpandProperty Nexthop}
O reiniciarlos todos...
Restart-Computer -ComputerName ((Get-ADComputer -Filter "operatingsystem -notlike '*server*'").Name) -Force
Otra cosa interesante es que puedes hacer un ping remoto... Dicho esto, puedes iniciar un ping con un parámetro de origen y destino. Tenga en cuenta que he iniciado sesión en Server01. Quiero saber si el cliente01 puede hacer ping a dc01. No hay problema con PowerShell...
Test-Connection -Source client01 -Destination dc01
Vamos aún más lejos... ¿Puede el cliente 01 comunicarse con CNN.com en el puerto 80? Para esto, tenemos que usar Invoke-Command porque necesitamos un cmdlet que admita el parámetro nombre de computadora.
Invoke-Command -ComputerName client01 {Test-NetConnection -Port 80 -ComputerName cnn.com}
¿Cliente01 ha activado su firewall?
Invoke-Command -ComputerName client01 {Get-NetFirewallProfile -All | Select-Object Name,Enabled}
¿Cuánto tiempo lleva encendido DC01? (Recuerde la Parte 9 PowerShell para principiantes (Parte 9): obtenga todo desde Windows con PowerShell y WMI)
Get-CimInstance -ComputerName dc01 win32_operatingsystem | Select-Object lastbootuptime
Creo que he dado suficientes ejemplos. Lo que me lleva a la última parte. Instalaremos PowerShell Web Access, otra opción para acciones remotas…
¿Qué hemos aprendido hasta ahora?
Podemos usar Invoke-Command, Enter-PSSession, New-PSSession o, si está disponible, un parámetro ComputerName para realizar acciones remotas.
Acceso web a PowerShell
¿Alguna vez soñó con usar PowerShell en todas partes, desde cada dispositivo y en todo momento? Desde hace algún tiempo PowerShell Core está disponible. Se ejecuta en Linux y MAC. Pero también hay una función llamada PowerShell Web Access. PowerShell Web Access solo está disponible en Windows Server 2012/2016. Le permite acceder a su servidor Windows con una interfaz PowerShell basada en web. Eso significa que puede acceder a PowerShell desde cualquier dispositivo. Vamos.
Ejecute los siguientes comandos en Windows Server 2012 o 2016 para instalar PowerShell Web Access, crear un certificado autofirmado y agregar una regla de autorización para otorgar acceso a todas las computadoras.
Install-Windowsfeature WindowsPowerShellWebaccess -IncludeManagementTools
Install-PswaWebApplication -UseTestCertificate
Add-PswaAuthorizationRule -UserName * -ComputerName * -ConfigurationName *
Ahora abra https://localhost/pswa. Ingrese las credenciales de administrador y escriba el nombre de la computadora en el campo de nombre de la computadora. Es posible que se pregunte por qué necesitamos proporcionar un nombre de computadora. Porque el servidor puede actuar como PowerShell Web Access Gateway para otro host, lo que significa que puede saltar a otros servidores. Altamente flexible ?
¡Divertirse!
Resumen
PowerShell Web Access le permite acceder a su Windows Server en una interfaz basada en web desde cualquier dispositivo.
Ejercicio
No hay ejercicio para esta parte. ¿Por qué? Hay muchos ejemplos en esta publicación de blog. Intente ejecutarlos todos en su dominio o en un entorno sin dominio.
Nos vemos la próxima vez en la parte: PowerShell para principiantes (Parte 14): Los 10 principales comandos de PowerShell para principiantes




























