Introducción a PowerShell en Citrix Virtual Apps and Desktops
CITRIX y PowerShell son nombres destacados cuando se trata de gestionar infraestructuras de TI complejas. No en vano, se complementan a la perfección para ampliar el ámbito de actuación de los profesionales TI.
Por ejemplo, al administrar Citrix Virtual Apps and Desktops, PowerShell permite que ciertas funciones de Citrix Studio se apliquen con mayor precisión y a múltiples destinos simultáneamente.
Consulte el artículo para obtener más ejemplos de cómo PowerShell puede ahorrarle tiempo y esfuerzo en la gestión de CVDA.
¿Por qué utilizar PowerShell para la gestión de CVAD?
Hay varias razones por las que quizás desee considerar el uso de PowerShell para ayudar a administrar su entorno Citrix.
Para mí, tendré abierto un indicador de PowerShell donde tengo disponibles los cmdlets de Citrix necesarios (ver más adelante), donde puedo ver rápidamente el estado del entorno desde un solo comando y, cuando lo ejecuto antes, puedo encontrarlo rápidamente. en mi historial persistente de PowerShell (a través de ctrl+r), por lo que ni siquiera tengo que recordar qué parámetros usar ni escribir nada más.
Esto puede incluir la búsqueda de servidores sobrecargados, sesiones desconectadas que no se han reiniciado (y reiniciadas), servidores inesperadamente en modo de mantenimiento o no registrados, etc.
Otra razón es la automatización. Por ejemplo, tuve un problema con un cliente en el que un evento específico en el registro de eventos local en un servidor CVAD significaba que la cola de impresión estaba en un estado que no se podía recuperar hasta que se reiniciaba y cualquier aplicación que intentara imprimir se bloqueaba.
Como mitigación a corto plazo, escribí un script que se ejecutaba regularmente como una tarea programada para verificar este evento y, si hubiera sucedido, pondría el servidor en modo de mantenimiento para evitar nuevos inicios de sesión y enviaría mensajes a los usuarios que tal vez quisieran. cerrar sesión y volver a iniciarla, para que vayan a un servidor no afectado.
En ejecuciones posteriores del script, buscará usuarios en los servidores que sufran el problema y, si no hay ninguno, lo sacará del modo de mantenimiento y lo reiniciará.
Requisitos previos
La primera decisión es si necesita administrar la infraestructura local o en la nube, ya que requieren diferentes módulos de PowerShell que no pueden coexistir en la misma máquina, aunque afortunadamente la mayoría de los comandos son los mismos entre los dos, por lo que una vez que conoce uno, es Muy fácil de cambiar para usar el otro.
Los cmdlets de PowerShell necesarios para el sistema local se instalan cuando se instala Citrix Studio, pero no se recomienda ejecutar ninguna consola o herramienta de administración en los Delivery Controllers, ya que esto consume recursos que luego no están disponibles para su función principal.
Por lo tanto, la forma más sencilla de instalar los cmdlets de PowerShell necesarios para el sistema local es instalar Citrix Studio desde CVAD ISO en otra máquina, como un servidor de administración donde están instaladas todas las consolas.
Alternativamente, si no desea instalar Studio, monte el ISO CVAD y ejecute lo siguiente en un mensaje elevado de PowerShell desde la carpeta X64Citrix Desktop Delivery Controller del ISO montado:
PowerShell in CVAD-1:
gci -Name *powershell*.msi | %{ $_ ; start msiexec "/i ""$_"" /qn /norestart" -wait }
Los cmdlets de PowerShell necesarios para Citrix Cloud están disponibles en el SDK de PowerShell remoto de Citrix Virtual Apps and Desktops.
La página web también incluye información sobre la autenticación adicional que se requiere. No deben instalarse en una máquina que tenga instalados los componentes de PowerShell locales.
Es una buena idea hacer coincidir la versión de los cmdlets de PowerShell con la versión (mínima) de CVAD que ha instalado, tal como lo haría con Studio.
La versión de Windows PowerShell que utilice depende de usted, ya que funcionará entre 2.0 y 5.1, aunque recomendaría implementar la 5.1, ya que ofrece la mayor cantidad de cmdlets y, por lo tanto, capacidades.
Preparación
Para utilizar los cmdlets CVAD, necesitamos cargar los módulos de PowerShell en los que residen, excepto que hasta versiones recientes Citrix colocaba estos cmdlets en complementos de PowerShell en lugar de módulos, lo que significa que los cargamos de una manera ligeramente diferente.
Para cargar todos los cmdlets de Citrix desde el complemento podemos ejecutar esto:
PowerShell in CVAD-2:
Add-PSSnapin -Name Citrix*Sin embargo, esto puede tardar una cantidad considerable de tiempo en completarse porque carga todos los cmdlet disponibles, mientras que es posible que solo necesite un complemento. Por ejemplo, si está utilizando Get-BrokerMachine y cmdlets asociados para recuperar máquinas CVAD, puede ejecutar esto en su lugar, que es mucho más rápido:
PowerShell in CVAD-3:
Add-PSSnapin -Name Citrix.Broker.Admin.*Para saber en qué complemento se encuentra un cmdlet en particular, cargue todos los complementos de Citrix como se muestra primero en esta sección y luego especifique el cmdlet como argumento para Get-Command, tras lo cual le indicará el nombre del complemento. que lo contiene y que puedes cargar en su lugar.
Con las versiones de CVAD desde 1912 LTSR en adelante, podemos cargar cmdlets desde módulos a través de Import-Module (alias ipmo) en lugar de Add-PSSnapin (alias asnp) pero se aplica lo mismo que arriba en el sentido de que podemos cargar todos los módulos Citrix especificando "Citrix*" en Import-Module o solo los módulos específicos requeridos, nuevamente cargando todos los módulos de Citrix y luego usando Get-Command en los cmdlets necesitamos ver en qué módulos existen.
Para que mis scripts sean compatibles con versiones CVAD más nuevas y antiguas, generalmente uso algo como el código que se muestra a continuación, que primero intenta cargar el módulo Citrix necesario y, si eso falla, intentará cargar el complemento equivalente:
PowerShell in CVAD-4:
## new CVAD have modules so use these in preference to snapins which are there for backward compatibility
if(!(Import-Module -Name Citrix.DelegateAdmin.Commands -ErrorAction SilentlyContinue -PassThru -Verbose:$false) -and! (Add-PSSnapin -Name Citrix.Broker.Admin.* -ErrorAction SilentlyContinue -PassThru -Verbose:$false))
{Throw 'Failed to load Citrix PowerShell cmdlets - is this a Delivery Controller or have Studio or the PowerShell SDK installed?'
}Recuperación de información
Una vez que hayamos instalado y cargado los cmdlets que necesitamos, estamos listos para comenzar. Los comandos que uso principalmente para recuperar información comienzan con Get-Broker, como Get-BrokerMachine, GetBrokerDesktopGroup (para grupos de entrega), Get-BrokerCatalog y Get-BrokerSession. Para ver todos los cmdlets de Citrix para recuperar información, puede ejecutar lo siguiente:
PowerShell in CVAD-5:
Get-Command -Module Citrix* -Verb GetLo cual funcionará ya sea que esté usando complementos o módulos. Para ver ayuda para un comando específico, ejecute algo como esto:
PowerShell in CVAD-6:
Get-Help -Name Get-BrokerMachine -ShowWindowTambién puedes reemplazar -ShowWindow con -Online para abrir una ventana del navegador con la ayuda, suponiendo que tengas acceso externo a Internet.
Sin embargo, rara vez tengo que hacer RTFM ya que los argumentos pasados a los cmdlets son generalmente los mismos y puede pasar por ellos o presionar ctrl+espacio después de escribir un signo menos/guión después del nombre del cmdlet para enumerar todos los posibles. argumentos por los que puede moverse con las teclas del cursor.
Entonces, veamos qué máquinas tenemos en CVAD ejecutando Get-BrokerMachine (figura 1):
Fig. 1: salida de PowerShell al ejecutar Get-BrokerMachine
Bueno, eso no salió tan bien ahora, ¿verdad? Si ejecutara esto en un Delivery Controller, lo cual no se recomienda, en realidad funcionaría y enumeraría las máquinas.
Sin embargo, ejecuté esto en una máquina virtual que cumple los requisitos previos pero no es un Delivery Controller, por lo que no sabe a qué máquina (Delivery Controller) enviar la solicitud, por lo que de forma predeterminada consulta el host local, lo cual falla porque no es un Delivery Controller (o Cloud Connector si utiliza Citrix Cloud).
Para indicar a los cmdlets a qué Delivery Controller conectarse, lo que significa que podemos conectarnos a diferentes granjas/instancias desde la misma máquina, lo cual es complicado con Studio, usamos el argumento -AdminAddress (consulte la figura 2). :
Fig. 2: Salida de PowerShell al ejecutar Get-BrokerMachine con el argumento -AdminAddress
Pero eso puede dar como resultado un listado muy largo que es difícil de comprender, por lo que podemos seleccionar las propiedades que nos interesan mirando este listado largo (consulte la figura 3; también puede completar con pestañas las propiedades pasadas a ). Select-Object (alias select)), o mi preferencia es canalizar a Out-GridView, que ofrece una vista de cuadrícula en pantalla donde puedes ordenar y filtrar aún más. los datos (figura 4).
Fig. 3: Puede mostrar propiedades específicas pasando la salida de Get-BrokerMachine a Select-Object
Fig. 4: Canalizar la salida de Get-BrokerMachine a Out-Gridview le brinda una descripción general clara de los datos
Cambiando las cosas
Bien, sabemos cómo consultar la mayor parte de lo que podemos ver en Studio con solo unos pocos cmdlets Get-Broker*, pero ¿qué pasa si queremos cambiar algo? Por ejemplo, si queremos poner algunas máquinas en modo de mantenimiento, podemos hacerlo a través de sus nombres, incluido un patrón, canalizando resultados (filtrados) desde Get-BrokerMachine o pasando una o más máquinas. devuelto previamente desde Get-BrokerMachine, almacenado en una matriz, al argumento -InputObject de Set-BrokerMachine.
Fig. 5: Configuración de máquinas en CVAD vía PowerShell
Asegúrese de saber lo que pretende lograr y lo que realmente hará el script; puede ver que sería muy fácil, por ejemplo, poner todas las máquinas en modo de mantenimiento, lo que puede no ser una buena noticia para sus usuarios a las 0900 del día. un lunes por la mañana.
Cuando escribo scripts que podrían realizar acciones no deseadas, normalmente uso el mecanismo de confirmación integrado de PowerShell donde envuelvo los comandos que cambian las cosas en un bloque $PSCmdlet.ShouldProcess según este artículo.
Estos scripts aún se pueden ejecutar sin la intervención del usuario especificando -Confirm:$false.
Observe que una vez que hayamos usado -AdminAddress una vez en una sesión, ya no Ya no es necesario especificarlo.
PowerShell en Citrix Studio
Con suerte, hay suficiente en este artículo para comenzar con PowerShell en CVAD: hay muchos ejemplos de scripts disponibles para todo tipo de tareas, aunque verifíquelos siempre antes de ejecutarlos en un entorno de producción para que no lo dañen accidental o deliberadamente. Aquí es donde un entorno de prueba aislado puede resultar invaluable.
En ocasiones, puede que no sea obvio cómo realizar una tarea particular que puede realizar en Studio. Si esto sucede, ejecute la acción en Studio y luego vaya a la pestaña PowerShell para ver el cmdlet de PowerShell utilizado y los argumentos utilizados.
Fig. 6: La pestaña PowerShell en Citrix Studio muestra el cmdlet de PowerShell utilizado para ejecutar una acción
En lo anterior, podemos ignorar -BearerToken y -LoggingId ya que no son necesarios. Para obtener el UID del catálogo al que agregar la máquina, llamamos a Get-BrokerCatalog para el catálogo que queremos:
Fig. 7: Comando de PowerShell simplificado para recuperar el UID de un catálogo
Conclusión
Espero que este artículo le haya presentado algunos enfoques e ideas que pueden ayudarle a simplificar su trabajo diario con CVAD.
Si desea obtener más información sobre la interacción de CITRIX y PowerShell, puede esperar el siguiente artículo, que se centrará en el uso de PowerShell con CITRIX Machine Creation Services (MCS).
Colección gratuita de scripts de PowerShell









