Una de las desventajas significativas de los scripts de PowerShell, cuando son usados por los usuarios (no por los administradores de sistemas o los programadores), es su interfaz de línea de comandos. El resultado de los scripts se muestra en la consola CLI de PowerShell y no siempre es conveniente para el usuario final. Sin embargo, Powershell es una poderosa y moderna herramienta de automatización para Windows que le permite utilizar de forma transparente una variedad de objetos de .NET Framework. Por ejemplo, utilizando la API de .NET, puede crear fácilmente una simple interfaz gráfica (GUI) para sus scripts de PowerShell.
En este ejemplo, le mostraremos cómo crear un formulario simple de la interfaz gráfica de Windows utilizando PowerShell y colocar en él varios elementos de control de formularios estándar de Windows: cuadros de texto, botones, etiquetas, casillas de verificación/cuadros de lista, radiobotones, cuadrículas de datos, etc. Por ejemplo, nuestra tarea es construir una GUI simple para un script de PowerShell que muestre el último tiempo de cambio de contraseña para el usuario de Active Directory. En este ejemplo, usamos PowerShell 3.0+ y PowerShell ISE para una fácil edición de código.
Contenido
Crear un formulario Windows con PowerShell
Para usar la funcionalidad .NET para crear formularios, usamos la clase System.Windows.Forms. Para cargar esta clase en una sesión de PowerShell, puede utilizar el siguiente código:
Sistema de ensamblaje de tipo adicional.Windows.Formas
Ahora crea el formulario de la pantalla (ventana) para contener elementos:
$main_form = New-Object System.Windows.Forms.Form
Establece el título y el tamaño de la ventana:
$main_form.Text =$0027GUI for my PoSh script$0027 $main_form.Width = 600 $main_form.Height = 400
Para hacer que la forma se estire automáticamente, si los elementos de la forma están fuera de los límites de la ventana, use la propiedad AutoSize.
$main_form.AutoSize = $true Ahora puedes mostrar el formulario en la pantalla. $main_form.ShowDialog()

Agregar componentes del cuadro de diálogo a su formulario PowerShell
Como pueden ver, se mostró un formulario vacío. Para añadirle varios elementos gráficos de diálogo y control, añade el código de abajo antes de la última línea ( $main_form.ShowDialog() ).
LEER TAMBIÉN usando el parámetro WhatIf en PowerShell
Crear un elemento de etiqueta en el formulario:
$Label = New-Object System.Windows.Forms.Label $Label.Text = "Usuarios de AD" $Label.Location = New-Object System.Drawing.Point(0,10) Autotamaño = $verdadero $main_form.Controls.Add($Label)
Crea una lista desplegable y llénala con una lista de cuentas del dominio de Active Directory. Puede obtener la lista de usuarios de AD mediante el cmdlet Get-ADuser (de Módulo Active Directory para Windows PowerShell ):
$ComboBox = New-Object System.Windows.Forms.ComboBox
$ComboBox.Width = 300
$Users = get-aduser -filter * -Properties SamAccountName
Foreach ($User en $Users)
{
$ComboBox.Items.Add($Usuario.NombreDeCuentaSam);
}
$ComboBox.Location = New-Object System.Drawing.Point(60,10)
$main_form.Controls.Add($ComboBox)
Añade dos etiquetas más al formulario. La segunda mostrará la hora del último cambio de contraseña para la cuenta de usuario seleccionada:
$Label2 = New-Object System.Windows.Forms.Label $Label2.Text = "Last Password Set:" $Label2.Location = New-Object System.Drawing.Point(0,40) $Label2.AutoSize = $true $main_form.Controls.Add($Label2) $Label3 = New-Object System.Windows.Forms.Label $Label3.Text = "" $Label3.Location = New-Object System.Drawing.Point(110,40) $Label3.AutoSize = $true $main_form.Controls.Add($Label3)
Ahora pon el botón en el formulario:
$Button = New-Object System.Windows.Forms.Button $Botón.Ubicación = Sistema.de.dibujo.de.nuevos.objetos(400,10) $Button.Size = New-Object System.Drawing.Size(120,23) Botón. Texto = "Chequear" $main_form.Controls.Add($Button)
El siguiente código se ejecutará cuando el usuario haga clic en el botón. Para convertir la fecha del formato TimeStamp a la forma más conveniente, utilizamos la función [datetime]::FromFileTime:
$Button.Add_Click(
{
$Label3.Text = [datetime]::FromFileTime((Get-ADUser -identity $ComboBox.selectedItem -Properties pwdLastSet).pwdLastSet).ToString($0027MM dd yy : hh ss$0027)
}
)
Ejecuta el guión de PowerShell. Como puede ver, la lista desplegable se llena automáticamente con los nombres de las cuentas de usuario del Directorio Activo. Si selecciona la cuenta de usuario y hace clic en el botón Check , el formulario muestra la hora en que se cambió la última contraseña del usuario en Active Directory.

Así que construiste tu primera interfaz gráfica simple para un guión de PowerShell. ¿Qué es lo siguiente? Ahora puede agregar un elemento de UI más complejo a su formulario de PowerShell.
Elementos de UI de PowerShell de uso común
Del mismo modo, puede crear los siguientes elementos gráficos en el formulario:
- CheckBox – se utiliza para listar algunas opciones y seleccionarlas antes de ejecutar el script
- RadioButton – lista algunas opciones de texto y permite seleccionar sólo una de ellas;
- TextBox – el usuario puede escribir algo de texto. Puede ser usado para obtener el vapor del parámetro de escritura PoSh;
- Etiqueta – usada para etiquetar algunas partes de la interfaz gráfica de los guiones.
- ChekedListBox – muestra una lista de artículos;
- DataGridView – permite ver algunos datos tabulares;
- GroupBox – permite ver para agrupar un conjunto de controles juntos;
- ListBox – puede almacenar varios elementos de texto;
- TabControl – permite dividir su formulario en diferentes áreas (tabulaciones)
- ListView – muestra una lista de elementos con texto y (opcionalmente) un icono
- TreeView – vista de objetos jerárquicos;
- DateTimePicker – permite seleccionar la fecha y la hora;
- TrackBar – control desplazable;
- PictureBox – permite mostrar la imagen en el formulario;
- ProgressBar – indica el progreso de la operación
- HScrollBar – barra de desplazamiento horizontal;
- VScrollBar – barra de desplazamiento vertical;
- ContextMenu – menú del botón derecho del ratón;
- Menú: el menú superior en su forma.
Construyendo la GUI de PowerShell Scripts usando Visual Studio
Puede usar Visual Studio con un WPF (Windows Presentation Foundation) como un simple constructor de interfaz gráfica de usuario de PowerShell. Descargue e instale la versión 2019 de Visual Studio Community.
WPF es una parte del .NET Framework que se puede usar para visualizar las interfaces de usuario en las aplicaciones de Windows.
Ejecute Microsoft Visual Studio y cree un nuevo proyecto (Archivo> Nuevo> Proyecto). Seleccione Visual C#> Windows Forms App (.NET Framework)
LEE TAMBIÉN Importar Usuarios en el Directorio Activo desde CSV

Utilice el elemento Formularios de Windows en el panel izquierdo de la Caja de herramientas para colocar (con arrastrar y soltar) su elemento de control en el formulario.

El Estudio Visual generará un código XAML para ti. Guarda este código en el archivo C:PSScriptMainWindow.xaml. Abre este archivo con el Bloc de notas y elimina la siguiente cadena:
x:Class="test.MainWindow"
Y guarda los cambios en el archivo xaml.
Ahora puedes leer este código XAML desde tu script de PowerShell y mostrar un formulario de Windows.
Utilice la siguiente función para cargar el objeto XAML:
$XamlPath = "C:PSScriptNMainWindow.xaml"
[xml]$Global:xmlWPF = Get-Content -Path $XamlPath
Inténtalo.
Add-Type -AssemblyName PresentationCore,PresentationFramework,WindowsBase,system.windows.forms
} atrapar {
Lanza "No se cargó el WPF".
}
$Global:xamGUI = [Windows.Markup.XamlReader]::Load(( new-object System.Xml.XmlNodeReader $xmlWPF))
$xmlWPF.SelectNodes("//*[@*[contains(translate(name(.),$0027n$0027,$0027N$0027),$0027Name$0027)]]") | % {
Set-Variable -Nombre ($_.Nombre) -Valor $xamGUI.FindName($_.Nombre) -Alcance Global
}
Para mostrar su formulario use:
ShowDialog()
Usa el editor en línea para crear un formulario para tu guión PoSh
Para una creación más conveniente de elementos gráficos para los formularios de PowerShell, puede utilizar el editor en línea para crear un formulario GUI para los scripts de PowerShell: https://poshgui.com/Editor. Con él, puede crear un hermoso formulario con los elementos de diálogo necesarios.

Y prepara el código PoSh para tus scripts GUI. Sólo copie este código en su ISE de PowerShell, cambie los nombres de los elementos (opcionalmente) y ejecute el código para mostrar el formulario generado en su computadora.
