Cuando lo utilizan los usuarios (no los administradores de sistemas ni los programadores), uno de los inconvenientes importantes de los scripts de PowerShell es su interfaz de línea de comandos. El resultado de los scripts se muestra en la consola de la CLI de PowerShell y no siempre es conveniente para el usuario final. Sin embargo, PowerShell es una herramienta de automatización potente y moderna para Windows que le permite utilizar de forma transparente una variedad de objetos de .NET Framework. Por ejemplo, utilizando la API .NET, puede crear fácilmente una interfaz gráfica (GUI) simple para sus scripts de PowerShell.

En este ejemplo, mostraremos cómo crear un formulario GUI de Windows simple usando PowerShell y colocar varios elementos de controles estándar de Windows Forms en él: cuadros de texto, botones, etiquetas, casillas de verificación / cuadros de lista, botones de radio, cuadrículas de datos, etc. Por ejemplo, nuestra tarea consiste en crear una GUI simple para un script de PowerShell que muestre la hora del último cambio de contraseña para el usuario de Active Directory. En este ejemplo, usamos PowerShell 3.0+ y PowerShell ISE para facilitar la edición de código.

Crear formulario de Windows con PowerShell

Para usar la funcionalidad .NET para crear formularios, usaremos la clase System.Windows.Forms. Para cargar esta clase en una sesión de PowerShell, puede usar el siguiente código:

Add-Type -assembly System.Windows.Forms

Ahora cree el formulario de pantalla (ventana) para contener elementos:

$main_form = New-Object System.Windows.Forms.Form

Establezca el título y el tamaño de la ventana:

$main_form.Text="GUI for my PoSh script"

$main_form.Width = 600

$main_form.Height = 400

Si los elementos del formulario están fuera de los límites de la ventana, use la propiedad AutoSize para hacer que el formulario se estire automáticamente.

$main_form.AutoSize = $true

Ahora puede mostrar el formulario en la pantalla.

$main_form.ShowDialog()

Agregar componentes de cuadro de diálogo a su formulario de PowerShell

Como puede ver, se muestra un formulario vacío. Para agregarle varios diálogos gráficos y elementos de control, agregue el código a continuación antes de la última línea ($ main_form.ShowDialog ()).

Cree un elemento de etiqueta en el formulario:

$Label = New-Object System.Windows.Forms.Label

$Label.Text = "AD users"

$Label.Location  = New-Object System.Drawing.Point(0,10)

$Label.AutoSize = $true

$main_form.Controls.Add($Label)

Cree una lista desplegable y rellénela con una lista de cuentas del dominio de Active Directory. Puede obtener la lista de usuarios de AD mediante el cmdlet Get-ADuser (del 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 in $Users)

{

$ComboBox.Items.Add($User.SamAccountName);

}

$ComboBox.Location  = New-Object System.Drawing.Point(60,10)

$main_form.Controls.Add($ComboBox)

Agregue dos etiquetas más al formulario. El segundo 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 ponga el botón en el formulario:

$Button = New-Object System.Windows.Forms.Button

$Button.Location = New-Object System.Drawing.Size(400,10)

$Button.Size = New-Object System.Drawing.Size(120,23)

$Button.Text = "Check"

$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 al formato más conveniente, usamos la función [datetime]:: FromFileTime:

$Button.Add_Click(

{

$Label3.Text =  [datetime]::FromFileTime((Get-ADUser -identity $ComboBox.selectedItem -Properties pwdLastSet).pwdLastSet).ToString('MM dd yy : hh ss')

}

)

Si desea ocultar algunos de los elementos de la GUI en un formulario de Windows, utilice el Visible propiedad. Por ejemplo:

$Label3.Text.Visible = $false

# or $True if you want to show it

Ejecute el script de PowerShell. Como puede ver, la lista desplegable se llena automáticamente con los nombres de las cuentas de usuario de Active Directory. Si selecciona la cuenta de usuario y hace clic en el Cheque , el formulario muestra la hora en que se cambió la última contraseña del usuario en Active Directory.

constructor de interfaz gráfica de usuario de powershell

Entonces, creó su primera interfaz gráfica de usuario simple para un script de PowerShell. ¿Que sigue? Ahora puede agregar un elemento de interfaz de usuario más complejo a su formulario de PowerShell.

Elementos de la interfaz de usuario de PowerShell más utilizados

Del mismo modo, puede crear los siguientes elementos gráficos en el formulario:

  • CheckBox: se utiliza para enumerar algunas opciones y seleccionarlas antes de ejecutar el script;
  • RadioButton: enumera algunas opciones de texto y permite seleccionar solo una de ellas;
  • TextBox: el usuario puede escribir texto. Puede usarse para obtener el valor del parámetro de secuencia de comandos PoSh;
  • Etiqueta: se utiliza para etiquetar algunas partes de la GUI de los scripts;
  • ChekedListBox: muestra una lista de elementos;
  • DataGridView: permite ver algunos datos tabulares;
  • GroupBox: permite ver y agrupar un conjunto de controles;
  • ListBox: puede almacenar varios elementos de texto;
  • TabControl: le permite dividir su formulario en diferentes áreas (pestañas);
  • 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 una imagen en el formulario;
  • ProgressBar: indica el progreso de la operación;
  • HScrollBar: barra de desplazamiento horizontal;
  • VScrollBar: barra de desplazamiento vertical;
  • ContextMenu: menús contextuales;
  • Menú - menú superior en su formulario.

Uso de componentes estándar del cuadro de diálogo de Windows en scripts de PowerShell

Puede invocar algunos de los cuadros de diálogo gráficos estándar de Windows para informar al usuario y pedirle que elija. Echemos un vistazo a algunas de las llamadas de ventana de gráficos estándar en PowerShell.

Mostrar cuadro de mensaje:

El mensaje es un atributo obligatorio de MessageBox. El título, el botón y el icono son opcionales.

Por ejemplo, para mostrar un cuadro de mensaje solo con Aceptar:

[void] [System.Windows.MessageBox]::Show( "All changes have been implemented successfully ", "Script completed", "OK", "Information" )

Mostrar un cuadro de mensaje con una respuesta obligatoria requerida:

$answer = [System.Windows.MessageBox]::Show( "Dou you want to remove this user?", " Removal Confirmation", "YesNoCancel", "Warning" )

powershell ui

Solicitar credenciales a un usuario y dividirlo en dos variables:

$creds = Get-Credential $UserName

$getUsername = $creds.GetNetworkCredential( ).UserName

$getPassword = $creds.GetNetworkCredential( ).Password

ejemplos de interfaz gráfica de usuario de powershell

Mostrar predeterminado Cuadro de diálogo de selección de archivo de Windows con un filtro por nombre de archivo:

Add-Type -AssemblyName System.Windows.Forms

$initialDirectory = [Environment]::GetFolderPath('Desktop')

$OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog

$OpenFileDialog.InitialDirectory = $initialDirectory

$OpenFileDialog.Filter="Script files (*.ps1;*.cmd;*.bat)|*.ps1;*.bat;*.cmd"

$OpenFileDialog.Multiselect = $false

$response = $OpenFileDialog.ShowDialog( ) # $response can return OK or Cancel

if ( $response -eq 'OK' ) { Write-Host 'You selected the file:' $OpenFileDialog.FileName }

interfaz gráfica de usuario del menú de powershell

Abre el Busca por carpetas ventana de diálogo:

$shell = New-Object -ComObject Shell.Application

$selectedfolder = $shell.BrowseForFolder( 0, 'Select a folder to proceed', 16, $shell.NameSpace( 17 ).Self.Path ).Self.Path

interfaz gráfica de usuario powershell

Seleccionar impresora formulario de diálogo:

Add-Type -AssemblyName System.Windows.Forms

$prntdlg = New-Object System.Windows.Forms.PrintDialog

$prntdlg.AllowCurrentPage = $false

$prntdlg.AllowPrintToFile = $trur

$prntdlg.AllowSelection = $false

$prntdlg.AllowSomePages = $true

$prntdlg.ShowNetwork = $true

$response = $prntdlg.ShowDialog( )# $response can return OK or Cancel

if ( $response -eq 'OK' ) { Write-Host 'Selected printer:' $prntdlg.PrinterSettings.PrinterName }

powershell crear interfaz gráfica de usuario

Otro comando de PowerShell útil para presentar información gráfica de un script a un usuario es Out-GridView. El cmdlet Out-GridView le permite mostrarlo en forma de tabla gráfica, en la que se puede filtrar y ordenar según los criterios deseados.

Por ejemplo, la siguiente secuencia de comandos enumerará los servicios en ejecución en Windows. El usuario debe seleccionar los servicios deseados (se pueden seleccionar varias líneas manteniendo presionada la tecla Ctrl) y guardar la selección en una variable.

$Svcs = Get-Service | Where-Object {$_.Status -EQ "Running"}| Out-GridView -Title "List of running services" -PassThru| Select -ExpandProperty Name

interfaz gráfica de powershell

Ahora puede usar la lista de servicios seleccionados por el usuario en Out-GridView para su posterior procesamiento en su script de PowerShell.

Creación de la GUI de PowerShell Scripts con Visual Studio

Puede usar Visual Studio con WPF (Windows Presentation Foundation) como un simple generador de GUI de PowerShell. Descargue e instale la versión 2019 de Visual Studio Community.

WPF es parte de .NET Framework que se puede usar para visualizar interfaces de usuario en aplicaciones de Windows.

Ejecute Microsoft Visual Studio y cree un nuevo proyecto (Archivo> Nuevo> Proyecto). Seleccione Visual C #> Aplicación Windows Forms (.NET Framework)

formas de powershell

Utilice el elemento de Windows Forms en el panel de la caja de herramientas de la izquierda para colocar su elemento de control en el formulario (con arrastrar y soltar).

editor de interfaz gráfica de usuario de powershell

Visual Studio generará un código XAML para usted. Guarde este código en el archivo C: PS Script MainWindow.xaml. Abra este archivo con el Bloc de notas y elimine la siguiente cadena:

x:Class="test.MainWindow”

Y guarde los cambios en el archivo xaml.

Ahora puede leer este código XAML desde su script de PowerShell y mostrar un formulario de Windows.

Use la siguiente función para cargar el objeto XAML:

$XamlPath = “C:PSScriptMainWindow.xaml”

[xml]$Global:xmlWPF = Get-Content -Path $XamlPath

try{

Add-Type -AssemblyName PresentationCore,PresentationFramework,WindowsBase,system.windows.forms

} catch {

Throw "Failed to load WPF."

}

$Global:xamGUI = [Windows.Markup.XamlReader]::Load((new-object System.Xml.XmlNodeReader $xmlWPF))

$xmlWPF.SelectNodes("//*[@*[contains(translate(name(.),'n','N'),'Name')]]") | %{

Set-Variable -Name ($_.Name) -Value $xamGUI.FindName($_.Name) -Scope Global

}

Para mostrar su formulario utilice:

$xamGUI.ShowDialog()

Utilice el editor en línea para crear un formulario para su script PoSh

Para una creación más conveniente de elementos gráficos para formularios de PowerShell, puede utilizar el editor en línea para crear un formulario de GUI para scripts de PowerShell: https://poshgui.com/ (ya no es gratuito). Con él, puede crear una hermosa forma con los elementos de diálogo necesarios.

interfaz gráfica de usuario para powershell

Y obtenga el código PoSh listo para sus scripts de GUI. Simplemente copie este código en su PowerShell ISE o Visual Studio Code con la extensión PowerShell, cambie los nombres de los elementos (opcionalmente) y ejecute el código para mostrar el formulario generado en su computadora.

crear gui para el script de powershell

Recomendado para ti

Bestseller No. 1
Snowden
  • Amazon Prime Video (Video on Demand)
  • Joseph Gordon-Levitt, Shailene Woodley, Melissa Leo (Actors)
  • Oliver Stone (Director)
Bestseller No. 2
Maras
  • Amazon Prime Video (Video on Demand)
  • Cristián Paredes, José Juan Rodríguez, María Isabel Díaz (Actors)
  • Globomedia The Mediapro Studio (Director)
Bestseller No. 3
The Unthinkable
  • Amazon Prime Video (Video on Demand)
  • Christoffer Nordenrot, Jesper Barkselius, Lisa Henni (Actors)
  • Victor Danell (Director)