# 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")
 
}
}
