# encoding: ascii
# api: powershell
# title: sample Sys Info GUI
# description: Added Try block and missing brackets for sample GUI from post made by Vinith Menon.
# version: 0.1
# type: function
# author: BrianK
# license: CC0
# function: Load-ComboBox
# x-poshcode-id: 4485
# x-archived: 2016-07-25T21:36:25
# x-published: 2016-09-23T23:50:00
#
# http://www.vinithmenon.com/2013/07/building-gui-for-powershell-scripts.html
# This is only the code for the mainform.pff in his post. It cannot be run without the rest of the form project.
#
$OnLoadFormEvent={
#TODO: Initialize Form Controls here
# Create an Array for List of Properties which the user sees
$array = @("Bios_Information","Computer_System_Information","Processor_Information")
# Appending the list of items in $array to combobox
$array | ForEach-Object {Load-ComboBox -ComboBox $combobox1 -Append -Items $_ }
}
#region Control Helper Functions
function Load-ComboBox
{
<#
.SYNOPSIS
This functions helps you load items into a ComboBox.
.DESCRIPTION
Use this function to dynamically load items into the ComboBox control.
.PARAMETER ComboBox
The ComboBox control you want to add items to.
.PARAMETER Items
The object or objects you wish to load into the ComboBox's Items collection.
.PARAMETER DisplayMember
Indicates the property to display for the items in this control.
.PARAMETER Append
Adds the item(s) to the ComboBox without clearing the Items collection.
.EXAMPLE
Load-ComboBox $combobox1 "Red", "White", "Blue"
.EXAMPLE
Load-ComboBox $combobox1 "Red" -Append
Load-ComboBox $combobox1 "White" -Append
Load-ComboBox $combobox1 "Blue" -Append
.EXAMPLE
Load-ComboBox $combobox1 (Get-Process) "ProcessName"
#>
Param (
[ValidateNotNull()]
[Parameter(Mandatory=$true)]
[System.Windows.Forms.ComboBox]$ComboBox,
[ValidateNotNull()]
[Parameter(Mandatory=$true)]
$Items,
[Parameter(Mandatory=$false)]
[string]$DisplayMember,
[switch]$Append
)
if(-not $Append)
{
$ComboBox.Items.Clear()
}
if($Items -is [Object[]])
{
$ComboBox.Items.AddRange($Items)
}
elseif ($Items -is [Array])
{
$ComboBox.BeginUpdate()
foreach($obj in $Items)
{
$ComboBox.Items.Add($obj)
}
$ComboBox.EndUpdate()
}
else
{
$ComboBox.Items.Add($Items)
}
$ComboBox.DisplayMember = $DisplayMember
}
#endregion
$buttonResetComputerName_Click={
#TODO: Place custom script here
$textbox1.Clear()
}
$buttonGO_Click={
#TODO: Place custom script here
Try {
# Work only if Textbox1.text input is Not Null.
if ($textbox1.Text -ne $null)
{
# Selected index is greater than -1 (0,1,2), Iterate for each selected item generate bios info and Out-grid view
if ($combobox1.SelectedIndex -gt -1 -and $combobox1.SelectedItem -eq "Bios_Information")
{
$servername = $textbox1.Text
Get-WmiObject -Class win32_bios -ComputerName $servername -ea 'Stop' |
Out-GridView -Title "$($combobox1.SelectedItem) for $servername"
}
# Selected index is greater than -1 (0,1,2), Iterate for each selected item generate bios info and Out-grid view
elseif ($combobox1.SelectedIndex -gt -1 -and $combobox1.SelectedItem -eq "Computer_System_Information")
{
$servername = $textbox1.Text
Get-WmiObject -Class Win32_ComputerSystem -ComputerName $servername -ea 'Stop' |
Out-GridView -Title "$($combobox1.SelectedItem) for $servername"
}
<# Selected index is greater than -1 (0,1,2), Iterate for each selected item generate processor info and Out-grid view, error action stop
so that we can trap the error in try catch block #>
elseif ($combobox1.SelectedIndex -gt -1 -and $combobox1.SelectedItem -eq "Processor_Information")
{
$servername = $textbox1.Text
Get-WmiObject -Class Win32_Processor -ComputerName $servername -ea 'Stop' |
Out-GridView -Title "$($combobox1.SelectedItem) for $servername"
}
}
}
# Pop up a windows message box indicating the type of error.
catch {
[void][System.Windows.Forms.MessageBox]::Show(" $($servername) is ShutDown or not Reachable over the Network","Information")
}
}