1649 lines
48 KiB
PowerShell
1649 lines
48 KiB
PowerShell
#------------------------------------------------------------------------
|
||
# Source File Information (DO NOT MODIFY)
|
||
# Source ID: f5f77db1-ba0b-4c5a-80b7-afa0e33b688d
|
||
# Source File: Remote Software Center.psproj
|
||
#------------------------------------------------------------------------
|
||
#region Project Recovery Data (DO NOT MODIFY)
|
||
<#RecoveryData:
|
||
/gEAAB+LCAAAAAAABACFkU9PwyAYh+9L9h0I966tc7YHxkGXmh38k3XxaqB9cSiFBuiWfXvRtssW
|
||
Nd54wu99fnmBbKAye7DHFfOMTicIkWdr3qHy3xDwBayTRtOrWULiEYa7QipYr6hYiCyreRpxlvDo
|
||
ulqwKE94FjHBEpjP+U2e1yQewsPo0LI9tkCD+BxHuVF1qEPxeZsbYEB020lVL3GCaemZ9V07a53r
|
||
u/5KonLHLITj1naA0QYEWNAVFJ2ufFhuidd6bz4guleGM/XauhTT/uyCPf3H/ouv3JlD9MCkLoxt
|
||
gk9gOlIQigthD/2ap2fp6cnKN6mZ+go8sgboBhrjAZVG+ENYCd2B9mCDsg1jJP6Rn05IfPHfn1/a
|
||
p1b+AQAA#>
|
||
#endregion
|
||
<#
|
||
.NOTES
|
||
--------------------------------------------------------------------------------
|
||
Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2016 v5.3.131
|
||
Generated on: 2017-01-18 13:57
|
||
Generated by: Timmy
|
||
--------------------------------------------------------------------------------
|
||
.DESCRIPTION
|
||
Script generated by PowerShell Studio 2016
|
||
#>
|
||
|
||
|
||
#region Source: Startup.pss
|
||
#region File Recovery Data (DO NOT MODIFY)
|
||
<#RecoveryData:
|
||
2gMAAB+LCAAAAAAABAC9k0tLAzEQgO+C/yH0vGR33a5rIbsglV4EFVfUazadLcE8yiRpyb+3rVJF
|
||
QaGHMJd5MPMxL/YIwm4A4w33nOwUJ61pJxe0nHTnZ4Swe5QrabhaSAV3XEPXe44+rOnaOZb/ih5y
|
||
rp0DPSgJ7mB/eWKnnbCo5JCR50/WlBZ7ycg8KB8QWgPBI1cZeQi7GuIW4pN9A9MOTcNrUV+Ws2oK
|
||
xdWM5ceqPyl9dB50CgZ9kWZpt44uLGqXhLjfVBoQ8q00q1NYRTXWYzOW5bIueMX/Z71qlaSnuUVI
|
||
MzyJILzF2ANupICTbuPvMR7Nj0dj+fdf7t4BtbYVHtoDAAA=#>
|
||
#endregion
|
||
#----------------------------------------------
|
||
#region Import Assemblies
|
||
#----------------------------------------------
|
||
[void][Reflection.Assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089')
|
||
[void][Reflection.Assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089')
|
||
[void][Reflection.Assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
|
||
[void][Reflection.Assembly]::Load('System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
|
||
#endregion Import Assemblies
|
||
|
||
#Define a Param block to use custom parameters in the project
|
||
#Param ($CustomParameter)
|
||
|
||
function Main {
|
||
<#
|
||
.SYNOPSIS
|
||
The Main function starts the project application.
|
||
|
||
.PARAMETER Commandline
|
||
$Commandline contains the complete argument string passed to the script packager executable.
|
||
|
||
.NOTES
|
||
Use this function to initialize your script and to call GUI forms.
|
||
|
||
.NOTES
|
||
To get the console output in the Packager (Forms Engine) use:
|
||
$ConsoleOutput (Type: System.Collections.ArrayList)
|
||
#>
|
||
Param ([String]$Commandline)
|
||
|
||
#--------------------------------------------------------------------------
|
||
#TODO: Add initialization script here (Load modules and check requirements)
|
||
|
||
|
||
#--------------------------------------------------------------------------
|
||
|
||
if((Show-MainForm_psf) -eq 'OK')
|
||
{
|
||
|
||
}
|
||
|
||
$script:ExitCode = 0 #Set the exit code for the Packager
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
#endregion Source: Startup.pss
|
||
|
||
#region Source: Globals.ps1
|
||
#--------------------------------------------
|
||
# Declare Global Variables and Functions here
|
||
#--------------------------------------------
|
||
|
||
|
||
#Sample function that provides the location of the script
|
||
function Get-ScriptDirectory
|
||
{
|
||
<#
|
||
.SYNOPSIS
|
||
Get-ScriptDirectory returns the proper location of the script.
|
||
|
||
.OUTPUTS
|
||
System.String
|
||
|
||
.NOTES
|
||
Returns the correct path within a packaged executable.
|
||
#>
|
||
[OutputType([string])]
|
||
param ()
|
||
if ($null -ne $hostinvocation)
|
||
{
|
||
Split-Path $hostinvocation.MyCommand.path
|
||
}
|
||
else
|
||
{
|
||
Split-Path $script:MyInvocation.MyCommand.Path
|
||
}
|
||
}
|
||
|
||
#Sample variable that provides the location of the script
|
||
[string]$ScriptDirectory = Get-ScriptDirectory
|
||
|
||
function Write-Status
|
||
{
|
||
[cmdletbinding()]
|
||
param
|
||
(
|
||
[Parameter(Mandatory)]
|
||
[ValidateNotNull()]
|
||
[String]$Message
|
||
|
||
)
|
||
$statusbar1.Text = $Message
|
||
}
|
||
|
||
function Invoke-OSDInstall
|
||
{
|
||
Param
|
||
(
|
||
[String][Parameter(Mandatory = $True, Position = 1)]
|
||
$Computername,
|
||
[String][Parameter(Mandatory = $True, Position = 2)]
|
||
$OSDName
|
||
|
||
)
|
||
Begin
|
||
{
|
||
|
||
$CIMClass = (Get-CimClass -Namespace root\ccm\clientsdk -ComputerName $Computername -ClassName CCM_ProgramsManager)
|
||
$OSD = (Get-CimInstance -ClassName CCM_Program -Namespace "root\ccm\clientSDK" -ComputerName $Computername | Where-Object { $_.Name -like "$OSDName" })
|
||
|
||
$Args = @{
|
||
PackageID = $OSD.PackageID
|
||
ProgramID = $OSD.ProgramID
|
||
}
|
||
}
|
||
|
||
Process
|
||
{
|
||
|
||
Invoke-CimMethod -CimClass $CIMClass -ComputerName $Computername -MethodName "ExecuteProgram" –Arguments $Args
|
||
|
||
}
|
||
End { }
|
||
}
|
||
|
||
Function Invoke-AppInstall
|
||
{
|
||
|
||
Param
|
||
(
|
||
[String][Parameter(Mandatory = $True, Position = 1)]
|
||
$Computername,
|
||
[String][Parameter(Mandatory = $True, Position = 2)]
|
||
$AppName,
|
||
[ValidateSet("Install", "Uninstall")]
|
||
[String][Parameter(Mandatory = $True, Position = 3)]
|
||
$Method
|
||
)
|
||
|
||
Begin
|
||
{
|
||
$Application = (Get-CimInstance -ClassName CCM_Application -Namespace "root\ccm\clientSDK" -ComputerName $Computername | Where-Object { $_.Name -like $AppName })
|
||
|
||
$Args = @{
|
||
EnforcePreference = [UINT32] 0
|
||
Id = "$($Application.id)"
|
||
IsMachineTarget = $Application.IsMachineTarget
|
||
IsRebootIfNeeded = $False
|
||
Priority = 'High'
|
||
Revision = "$($Application.Revision)"
|
||
}
|
||
|
||
}
|
||
|
||
Process
|
||
{
|
||
|
||
Invoke-CimMethod -Namespace "root\ccm\clientSDK" -ClassName CCM_Application -ComputerName $Computername -MethodName $Method -Arguments $Args
|
||
|
||
}
|
||
|
||
End { }
|
||
|
||
}
|
||
|
||
function Invoke-SupInstall
|
||
{
|
||
Param
|
||
(
|
||
[String][Parameter(Mandatory = $True, Position = 1)]
|
||
$Computername,
|
||
[String][Parameter(Mandatory = $True, Position = 2)]
|
||
$SupName
|
||
|
||
)
|
||
Begin
|
||
{
|
||
$AppEvalState0 = "0"
|
||
$AppEvalState1 = "1"
|
||
$ApplicationClass = [WmiClass]"root\ccm\clientSDK:CCM_SoftwareUpdatesManager"
|
||
}
|
||
|
||
Process
|
||
{
|
||
If ($SupName -Like "All" -or $SupName -like "all")
|
||
{
|
||
Foreach ($Computer in $Computername)
|
||
{
|
||
$Application = (Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_SoftwareUpdate -ComputerName $Computer | Where-Object { $_.EvaluationState -like "*$($AppEvalState0)*" -or $_.EvaluationState -like "*$($AppEvalState1)*" })
|
||
Invoke-WmiMethod -Class CCM_SoftwareUpdatesManager -Name InstallUpdates -ArgumentList ( ,$Application) -Namespace root\ccm\clientsdk -ComputerName $Computer
|
||
|
||
}
|
||
|
||
}
|
||
Else
|
||
{
|
||
Foreach ($Computer in $Computername)
|
||
{
|
||
$Application = (Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_SoftwareUpdate -ComputerName $Computer | Where-Object { $_.EvaluationState -like "*$($AppEvalState)*" -and $_.Name -like "*$($SupName)*" })
|
||
Invoke-WmiMethod -Class CCM_SoftwareUpdatesManager -Name InstallUpdates -ArgumentList ( ,$Application) -Namespace root\ccm\clientsdk -ComputerName $Computer
|
||
|
||
}
|
||
|
||
}
|
||
}
|
||
End { }
|
||
}
|
||
#endregion Source: Globals.ps1
|
||
|
||
#region Source: MainForm.psf
|
||
function Show-MainForm_psf
|
||
{
|
||
#region File Recovery Data (DO NOT MODIFY)
|
||
<#RecoveryData:
|
||
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
|
||
dPjP8lr/Bzk7bJalNwAA#>
|
||
#endregion
|
||
#----------------------------------------------
|
||
#region Import the Assemblies
|
||
#----------------------------------------------
|
||
[void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089')
|
||
[void][reflection.assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089')
|
||
[void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
|
||
#endregion Import Assemblies
|
||
|
||
#----------------------------------------------
|
||
#region Generated Form Objects
|
||
#----------------------------------------------
|
||
[System.Windows.Forms.Application]::EnableVisualStyles()
|
||
$formMain = New-Object 'System.Windows.Forms.Form'
|
||
$buttonInstallSUP = New-Object 'System.Windows.Forms.Button'
|
||
$comboboxSUP = New-Object 'System.Windows.Forms.ComboBox'
|
||
$labelSoftwareUpdates = New-Object 'System.Windows.Forms.Label'
|
||
$buttonInstallApp = New-Object 'System.Windows.Forms.Button'
|
||
$comboboxAPP = New-Object 'System.Windows.Forms.ComboBox'
|
||
$labelApplications = New-Object 'System.Windows.Forms.Label'
|
||
$labelOSDTaskSequence = New-Object 'System.Windows.Forms.Label'
|
||
$comboboxOSD = New-Object 'System.Windows.Forms.ComboBox'
|
||
$statusbar1 = New-Object 'System.Windows.Forms.StatusBar'
|
||
$picturebox1 = New-Object 'System.Windows.Forms.PictureBox'
|
||
$buttonInstallOSD = New-Object 'System.Windows.Forms.Button'
|
||
$textboxComputername = New-Object 'System.Windows.Forms.TextBox'
|
||
$buttonConnect = New-Object 'System.Windows.Forms.Button'
|
||
$buttonExit = New-Object 'System.Windows.Forms.Button'
|
||
$timerJobTracker = New-Object 'System.Windows.Forms.Timer'
|
||
$imagelistButtonBusyAnimation = New-Object 'System.Windows.Forms.ImageList'
|
||
$InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState'
|
||
#endregion Generated Form Objects
|
||
|
||
#----------------------------------------------
|
||
# User Generated Script
|
||
#----------------------------------------------
|
||
|
||
#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 [System.Collections.IEnumerable])
|
||
{
|
||
$ComboBox.BeginUpdate()
|
||
foreach($obj in $Items)
|
||
{
|
||
$ComboBox.Items.Add($obj)
|
||
}
|
||
$ComboBox.EndUpdate()
|
||
}
|
||
else
|
||
{
|
||
$ComboBox.Items.Add($Items)
|
||
}
|
||
|
||
$ComboBox.DisplayMember = $DisplayMember
|
||
}
|
||
|
||
function Load-ListBox
|
||
{
|
||
<#
|
||
.SYNOPSIS
|
||
This functions helps you load items into a ListBox or CheckedListBox.
|
||
|
||
.DESCRIPTION
|
||
Use this function to dynamically load items into the ListBox control.
|
||
|
||
.PARAMETER ListBox
|
||
The ListBox control you want to add items to.
|
||
|
||
.PARAMETER Items
|
||
The object or objects you wish to load into the ListBox's Items collection.
|
||
|
||
.PARAMETER DisplayMember
|
||
Indicates the property to display for the items in this control.
|
||
|
||
.PARAMETER Append
|
||
Adds the item(s) to the ListBox without clearing the Items collection.
|
||
|
||
.EXAMPLE
|
||
Load-ListBox $ListBox1 "Red", "White", "Blue"
|
||
|
||
.EXAMPLE
|
||
Load-ListBox $listBox1 "Red" -Append
|
||
Load-ListBox $listBox1 "White" -Append
|
||
Load-ListBox $listBox1 "Blue" -Append
|
||
|
||
.EXAMPLE
|
||
Load-ListBox $listBox1 (Get-Process) "ProcessName"
|
||
#>
|
||
Param (
|
||
[ValidateNotNull()]
|
||
[Parameter(Mandatory=$true)]
|
||
[System.Windows.Forms.ListBox]$ListBox,
|
||
[ValidateNotNull()]
|
||
[Parameter(Mandatory=$true)]
|
||
$Items,
|
||
[Parameter(Mandatory=$false)]
|
||
[string]$DisplayMember,
|
||
[switch]$Append
|
||
)
|
||
|
||
if(-not $Append)
|
||
{
|
||
$listBox.Items.Clear()
|
||
}
|
||
|
||
if($Items -is [System.Windows.Forms.ListBox+ObjectCollection])
|
||
{
|
||
$listBox.Items.AddRange($Items)
|
||
}
|
||
elseif ($Items -is [Array])
|
||
{
|
||
$listBox.BeginUpdate()
|
||
foreach($obj in $Items)
|
||
{
|
||
$listBox.Items.Add($obj)
|
||
}
|
||
$listBox.EndUpdate()
|
||
}
|
||
else
|
||
{
|
||
$listBox.Items.Add($Items)
|
||
}
|
||
|
||
$listBox.DisplayMember = $DisplayMember
|
||
}
|
||
|
||
function Load-DataGridView
|
||
{
|
||
<#
|
||
.SYNOPSIS
|
||
This functions helps you load items into a DataGridView.
|
||
|
||
.DESCRIPTION
|
||
Use this function to dynamically load items into the DataGridView control.
|
||
|
||
.PARAMETER DataGridView
|
||
The DataGridView control you want to add items to.
|
||
|
||
.PARAMETER Item
|
||
The object or objects you wish to load into the DataGridView's items collection.
|
||
|
||
.PARAMETER DataMember
|
||
Sets the name of the list or table in the data source for which the DataGridView is displaying data.
|
||
|
||
.PARAMETER AutoSizeColumns
|
||
Resizes DataGridView control's columns after loading the items.
|
||
#>
|
||
Param (
|
||
[ValidateNotNull()]
|
||
[Parameter(Mandatory = $true)]
|
||
[System.Windows.Forms.DataGridView]$DataGridView,
|
||
[ValidateNotNull()]
|
||
[Parameter(Mandatory = $true)]
|
||
$Item,
|
||
[Parameter(Mandatory = $false)]
|
||
[string]$DataMember,
|
||
[System.Windows.Forms.DataGridViewAutoSizeColumnMode]$AutoSizeColumns = 'None'
|
||
)
|
||
$DataGridView.SuspendLayout()
|
||
$DataGridView.DataMember = $DataMember
|
||
|
||
if ($Item -is [System.Data.DataSet] -and $Item.Tables.Count -gt 0)
|
||
{
|
||
$DataGridView.DataSource = $Item.Tables[0]
|
||
}
|
||
elseif ($Item -is [System.ComponentModel.IListSource]`
|
||
-or $Item -is [System.ComponentModel.IBindingList] -or $Item -is [System.ComponentModel.IBindingListView])
|
||
{
|
||
$DataGridView.DataSource = $Item
|
||
}
|
||
else
|
||
{
|
||
$array = New-Object System.Collections.ArrayList
|
||
|
||
if ($Item -is [System.Collections.IList])
|
||
{
|
||
$array.AddRange($Item)
|
||
}
|
||
else
|
||
{
|
||
$array.Add($Item)
|
||
}
|
||
$DataGridView.DataSource = $array
|
||
}
|
||
|
||
if ($AutoSizeColumns -ne 'None')
|
||
{
|
||
$DataGridView.AutoResizeColumns($AutoSizeColumns)
|
||
}
|
||
|
||
$DataGridView.ResumeLayout()
|
||
}
|
||
|
||
function ConvertTo-DataTable
|
||
{
|
||
<#
|
||
.SYNOPSIS
|
||
Converts objects into a DataTable.
|
||
|
||
.DESCRIPTION
|
||
Converts objects into a DataTable, which are used for DataBinding.
|
||
|
||
.PARAMETER InputObject
|
||
The input to convert into a DataTable.
|
||
|
||
.PARAMETER Table
|
||
The DataTable you wish to load the input into.
|
||
|
||
.PARAMETER RetainColumns
|
||
This switch tells the function to keep the DataTable's existing columns.
|
||
|
||
.PARAMETER FilterWMIProperties
|
||
This switch removes WMI properties that start with an underline.
|
||
|
||
.EXAMPLE
|
||
$DataTable = ConvertTo-DataTable -InputObject (Get-Process)
|
||
#>
|
||
[OutputType([System.Data.DataTable])]
|
||
param (
|
||
[ValidateNotNull()]
|
||
$InputObject,
|
||
[ValidateNotNull()]
|
||
[System.Data.DataTable]$Table,
|
||
[switch]$RetainColumns,
|
||
[switch]$FilterWMIProperties)
|
||
|
||
if ($null -eq $Table)
|
||
{
|
||
$Table = New-Object System.Data.DataTable
|
||
}
|
||
|
||
if ($InputObject -is [System.Data.DataTable])
|
||
{
|
||
$Table = $InputObject
|
||
}
|
||
elseif ($InputObject -is [System.Data.DataSet] -and $InputObject.Tables.Count -gt 0)
|
||
{
|
||
$Table = $InputObject.Tables[0]
|
||
}
|
||
else
|
||
{
|
||
if (-not $RetainColumns -or $Table.Columns.Count -eq 0)
|
||
{
|
||
#Clear out the Table Contents
|
||
$Table.Clear()
|
||
|
||
if ($null -eq $InputObject) { return } #Empty Data
|
||
|
||
$object = $null
|
||
#find the first non null value
|
||
foreach ($item in $InputObject)
|
||
{
|
||
if ($null -ne $item)
|
||
{
|
||
$object = $item
|
||
break
|
||
}
|
||
}
|
||
|
||
if ($null -eq $object) { return } #All null then empty
|
||
|
||
#Get all the properties in order to create the columns
|
||
foreach ($prop in $object.PSObject.Get_Properties())
|
||
{
|
||
if (-not $FilterWMIProperties -or -not $prop.Name.StartsWith('__')) #filter out WMI properties
|
||
{
|
||
#Get the type from the Definition string
|
||
$type = $null
|
||
|
||
if ($null -ne $prop.Value)
|
||
{
|
||
try { $type = $prop.Value.GetType() }
|
||
catch { }
|
||
}
|
||
|
||
if ($null -ne $type) # -and [System.Type]::GetTypeCode($type) -ne 'Object')
|
||
{
|
||
[void]$table.Columns.Add($prop.Name, $type)
|
||
}
|
||
else #Type info not found
|
||
{
|
||
[void]$table.Columns.Add($prop.Name)
|
||
}
|
||
}
|
||
}
|
||
|
||
if ($object -is [System.Data.DataRow])
|
||
{
|
||
foreach ($item in $InputObject)
|
||
{
|
||
$Table.Rows.Add($item)
|
||
}
|
||
return @( ,$Table)
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$Table.Rows.Clear()
|
||
}
|
||
|
||
foreach ($item in $InputObject)
|
||
{
|
||
$row = $table.NewRow()
|
||
|
||
if ($item)
|
||
{
|
||
foreach ($prop in $item.PSObject.Get_Properties())
|
||
{
|
||
if ($table.Columns.Contains($prop.Name))
|
||
{
|
||
$row.Item($prop.Name) = $prop.Value
|
||
}
|
||
}
|
||
}
|
||
[void]$table.Rows.Add($row)
|
||
}
|
||
}
|
||
|
||
return @( ,$Table)
|
||
}
|
||
#endregion
|
||
|
||
#region Search Function
|
||
function SearchGrid()
|
||
{
|
||
$RowIndex = 0
|
||
$ColumnIndex = 0
|
||
$seachString = $textboxComputername.Text
|
||
|
||
if($seachString -eq "")
|
||
{
|
||
return
|
||
}
|
||
|
||
if($datagridviewResults.SelectedCells.Count -ne 0)
|
||
{
|
||
$startCell = $datagridviewResults.SelectedCells[0];
|
||
$RowIndex = $startCell.RowIndex
|
||
$ColumnIndex = $startCell.ColumnIndex + 1
|
||
}
|
||
|
||
$columnCount = $datagridviewResults.ColumnCount
|
||
$rowCount = $datagridviewResults.RowCount
|
||
for(;$RowIndex -lt $rowCount; $RowIndex++)
|
||
{
|
||
$Row = $datagridviewResults.Rows[$RowIndex]
|
||
|
||
for(;$ColumnIndex -lt $columnCount; $ColumnIndex++)
|
||
{
|
||
$cell = $Row.Cells[$ColumnIndex]
|
||
|
||
if($null -ne $cell.Value -and $cell.Value.ToString().IndexOf($seachString, [StringComparison]::OrdinalIgnoreCase) -ne -1)
|
||
{
|
||
$datagridviewResults.CurrentCell = $cell
|
||
return
|
||
}
|
||
}
|
||
|
||
$ColumnIndex = 0
|
||
}
|
||
|
||
$datagridviewResults.CurrentCell = $null
|
||
[void][System.Windows.Forms.MessageBox]::Show("The search has reached the end of the grid.","String not Found")
|
||
|
||
}
|
||
#endregion
|
||
|
||
$formMain_Load={
|
||
#TODO: Initialize Form Controls here
|
||
|
||
}
|
||
|
||
$buttonExit_Click={
|
||
#TODO: Place custom script here
|
||
$formMain.Close()
|
||
}
|
||
|
||
$buttonConnect_Click={
|
||
#TODO: Place custom script here
|
||
try
|
||
{
|
||
$Empty = ""
|
||
Load-ComboBox $comboboxOSD $Empty
|
||
$comboboxOSD.SelectedIndex = 0
|
||
Load-ComboBox $comboboxAPP $Empty
|
||
$comboboxAPP.SelectedIndex = 0
|
||
Load-ComboBox $comboboxSUP $Empty
|
||
$comboboxSUP.SelectedIndex = 0
|
||
if (-not $textboxComputername.Text)
|
||
{
|
||
[System.Windows.Forms.MessageBox]::Show('No computer specified', 'Error')
|
||
Throw 'No Computer specified'
|
||
}
|
||
else
|
||
{
|
||
$global:Computername = $textboxComputername.Text
|
||
}
|
||
|
||
Write-Status -Message "Connecting to $computername"
|
||
$picturebox1.BackColor = "Gold"
|
||
|
||
If (-not (Test-Connection -ComputerName $Computername -Count 1 -Quiet))
|
||
{
|
||
$picturebox1.BackColor = "Red"
|
||
|
||
|
||
[System.Windows.Forms.MessageBox]::Show('No such computer or computer is offline', 'Error')
|
||
Throw 'No such computer or computer is offline'
|
||
|
||
}
|
||
|
||
Else
|
||
{
|
||
Write-status -Message "Connected to $Computername"
|
||
$picturebox1.BackColor = "Green"
|
||
|
||
# OSD Task Sequence #
|
||
$OSDTS = (Get-CimInstance -ClassName CCM_Program -Namespace "root\ccm\clientSDK" -ComputerName $Computername | Where-Object { $_.TaskSequence -like "True" })
|
||
$OSD = $OSDTS.Name
|
||
|
||
|
||
# Application #
|
||
$Application = (Get-CimInstance -ClassName CCM_Application -Namespace "root\ccm\clientSDK" -ComputerName $Computername | Where-Object { $_.InstallState -like "NotInstalled" })
|
||
$AppName = $Application.Name
|
||
|
||
# Software Updates #
|
||
$SUPEvalState0 = "0"
|
||
$SUPEvalState1 = "1"
|
||
$SUPClass = [WmiClass]"root\ccm\clientSDK:CCM_SoftwareUpdatesManager"
|
||
$SUPs = (Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_SoftwareUpdate -ComputerName $Computername | Where-Object { $_.EvaluationState -like "*$($SUPEvalState0)*" -or $_.EvaluationState -like "*$($SUPEvalState1)*" })
|
||
$SUPName = $SUPs.Name
|
||
|
||
if ($OSD)
|
||
{
|
||
Load-ComboBox $comboboxOSD $OSD -Append
|
||
$comboboxOSD.SelectedIndex = 1
|
||
}
|
||
if ($APPName)
|
||
{
|
||
Load-ComboBox $comboboxAPP $AppName -Append
|
||
$comboboxAPP.SelectedIndex = 1
|
||
}
|
||
if ($SUPName)
|
||
{
|
||
Load-ComboBox $comboboxSUP $SUPName -Append
|
||
$comboboxSUP.SelectedIndex = 1
|
||
}
|
||
|
||
|
||
} #Else
|
||
} #IF
|
||
Catch
|
||
{
|
||
Write-Status -Message $_.Exception.Message
|
||
}
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
$formMain_FormClosed=[System.Windows.Forms.FormClosedEventHandler]{
|
||
#Event Argument: $_ = [System.Windows.Forms.FormClosedEventArgs]
|
||
#Stop any pending jobs
|
||
Stop-JobTracker
|
||
}
|
||
|
||
$timerJobTracker_Tick={
|
||
Update-JobTracker
|
||
}
|
||
|
||
#region Job Tracker
|
||
$JobTrackerList = New-Object System.Collections.ArrayList
|
||
function Add-JobTracker
|
||
{
|
||
<#
|
||
.SYNOPSIS
|
||
Add a new job to the JobTracker and starts the timer.
|
||
|
||
.DESCRIPTION
|
||
Add a new job to the JobTracker and starts the timer.
|
||
|
||
.PARAMETER Name
|
||
The name to assign to the Job
|
||
|
||
.PARAMETER JobScript
|
||
The script block that the Job will be performing.
|
||
Important: Do not access form controls from this script block.
|
||
|
||
.PARAMETER ArgumentList
|
||
The arguments to pass to the job
|
||
|
||
.PARAMETER CompleteScript
|
||
The script block that will be called when the job is complete.
|
||
The job is passed as an argument. The Job argument is null when the job fails.
|
||
|
||
.PARAMETER UpdateScript
|
||
The script block that will be called each time the timer ticks.
|
||
The job is passed as an argument. Use this to get the Job's progress.
|
||
|
||
.EXAMPLE
|
||
Add-JobTracker -Name 'JobName' `
|
||
-JobScript {
|
||
Param($Argument1)#Pass any arguments using the ArgumentList parameter
|
||
#Important: Do not access form controls from this script block.
|
||
Get-WmiObject Win32_Process -Namespace "root\CIMV2"
|
||
}`
|
||
-CompletedScript {
|
||
Param($Job)
|
||
$results = Receive-Job -Job $Job
|
||
}`
|
||
-UpdateScript {
|
||
Param($Job)
|
||
#$results = Receive-Job -Job $Job -Keep
|
||
}
|
||
|
||
.LINK
|
||
|
||
#>
|
||
|
||
Param(
|
||
[ValidateNotNull()]
|
||
[Parameter(Mandatory=$true)]
|
||
[string]$Name,
|
||
[ValidateNotNull()]
|
||
[Parameter(Mandatory=$true)]
|
||
[ScriptBlock]$JobScript,
|
||
$ArgumentList = $null,
|
||
[ScriptBlock]$CompletedScript,
|
||
[ScriptBlock]$UpdateScript)
|
||
|
||
#Start the Job
|
||
$job = Start-Job -Name $Name -ScriptBlock $JobScript -ArgumentList $ArgumentList
|
||
|
||
if($null -ne $job)
|
||
{
|
||
#Create a Custom Object to keep track of the Job & Script Blocks
|
||
$members = @{ 'Job' = $Job;
|
||
'CompleteScript' = $CompletedScript;
|
||
'UpdateScript' = $UpdateScript}
|
||
|
||
$psObject = New-Object System.Management.Automation.PSObject -Property $members
|
||
|
||
[void]$JobTrackerList.Add($psObject)
|
||
|
||
#Start the Timer
|
||
if(-not $timerJobTracker.Enabled)
|
||
{
|
||
$timerJobTracker.Start()
|
||
}
|
||
}
|
||
elseif($null -ne $CompletedScript)
|
||
{
|
||
#Failed
|
||
Invoke-Command -ScriptBlock $CompletedScript -ArgumentList $null
|
||
}
|
||
|
||
}
|
||
|
||
function Update-JobTracker
|
||
{
|
||
<#
|
||
.SYNOPSIS
|
||
Checks the status of each job on the list.
|
||
#>
|
||
|
||
#Poll the jobs for status updates
|
||
$timerJobTracker.Stop() #Freeze the Timer
|
||
|
||
for($index =0; $index -lt $JobTrackerList.Count; $index++)
|
||
{
|
||
$psObject = $JobTrackerList[$index]
|
||
|
||
if($null -ne $psObject)
|
||
{
|
||
if($null -ne $psObject.Job)
|
||
{
|
||
if($psObject.Job.State -ne "Running")
|
||
{
|
||
#Call the Complete Script Block
|
||
if($null -ne $psObject.CompleteScript)
|
||
{
|
||
#$results = Receive-Job -Job $psObject.Job
|
||
Invoke-Command -ScriptBlock $psObject.CompleteScript -ArgumentList $psObject.Job
|
||
}
|
||
|
||
$JobTrackerList.RemoveAt($index)
|
||
Remove-Job -Job $psObject.Job
|
||
$index-- #Step back so we don't skip a job
|
||
}
|
||
elseif($null -ne $psObject.UpdateScript)
|
||
{
|
||
#Call the Update Script Block
|
||
Invoke-Command -ScriptBlock $psObject.UpdateScript -ArgumentList $psObject.Job
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$JobTrackerList.RemoveAt($index)
|
||
$index-- #Step back so we don't skip a job
|
||
}
|
||
}
|
||
|
||
if($JobTrackerList.Count -gt 0)
|
||
{
|
||
$timerJobTracker.Start()#Resume the timer
|
||
}
|
||
}
|
||
|
||
function Stop-JobTracker
|
||
{
|
||
<#
|
||
.SYNOPSIS
|
||
Stops and removes all Jobs from the list.
|
||
#>
|
||
#Stop the timer
|
||
$timerJobTracker.Stop()
|
||
|
||
#Remove all the jobs
|
||
while($JobTrackerList.Count -gt 0)
|
||
{
|
||
$job = $JobTrackerList[0].Job
|
||
$JobTrackerList.RemoveAt(0)
|
||
Stop-Job $job
|
||
Remove-Job $job
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
|
||
$textboxComputername_KeyDown=[System.Windows.Forms.KeyEventHandler]{
|
||
#Event Argument: $_ = [System.Windows.Forms.KeyEventArgs]
|
||
if($_.KeyCode -eq 'Enter' -and $buttonConnect.Enabled)
|
||
{
|
||
#SearchGrid
|
||
try
|
||
{
|
||
$Empty = ""
|
||
Load-ComboBox $comboboxOSD $Empty
|
||
$comboboxOSD.SelectedIndex = 0
|
||
Load-ComboBox $comboboxAPP $Empty
|
||
$comboboxAPP.SelectedIndex = 0
|
||
Load-ComboBox $comboboxSUP $Empty
|
||
$comboboxSUP.SelectedIndex = 0
|
||
if (-not $textboxComputername.Text)
|
||
{
|
||
[System.Windows.Forms.MessageBox]::Show('No computer specified', 'Error')
|
||
Throw 'No Computer specified'
|
||
}
|
||
else
|
||
{
|
||
$global:Computername = $textboxComputername.Text
|
||
}
|
||
|
||
Write-Status -Message "Connecting to $computername"
|
||
$picturebox1.BackColor = "Gold"
|
||
|
||
If (-not (Test-Connection -ComputerName $Computername -Count 1 -Quiet))
|
||
{
|
||
$picturebox1.BackColor = "Red"
|
||
|
||
|
||
[System.Windows.Forms.MessageBox]::Show('No such Computer or computer is offline', 'Error')
|
||
Throw 'No such Computer or computer is offline'
|
||
|
||
}
|
||
|
||
Else
|
||
{
|
||
Write-status -Message "Connected to $Computername"
|
||
$picturebox1.BackColor = "Green"
|
||
|
||
# OSD Task Sequence #
|
||
$OSDTS = (Get-CimInstance -ClassName CCM_Program -Namespace "root\ccm\clientSDK" -ComputerName $Computername | Where-Object { $_.TaskSequence -like "True" })
|
||
$OSD = $OSDTS.Name
|
||
|
||
|
||
# Application #
|
||
$Application = (Get-CimInstance -ClassName CCM_Application -Namespace "root\ccm\clientSDK" -ComputerName $Computername | Where-Object { $_.InstallState -like "NotInstalled" })
|
||
$AppName = $Application.Name
|
||
|
||
# Software Updates #
|
||
$SUPEvalState0 = "0"
|
||
$SUPEvalState1 = "1"
|
||
$SUPClass = [WmiClass]"root\ccm\clientSDK:CCM_SoftwareUpdatesManager"
|
||
$SUPs = (Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_SoftwareUpdate -ComputerName $Computername | Where-Object { $_.EvaluationState -like "*$($SUPEvalState0)*" -or $_.EvaluationState -like "*$($SUPEvalState1)*" })
|
||
$SUPName = $SUPs.Name
|
||
|
||
if ($OSD)
|
||
{
|
||
Load-ComboBox $comboboxOSD $OSD -Append
|
||
$comboboxOSD.SelectedIndex = 1
|
||
}
|
||
if ($APPName)
|
||
{
|
||
Load-ComboBox $comboboxAPP $AppName -Append
|
||
$comboboxAPP.SelectedIndex = 1
|
||
}
|
||
if ($SUPName)
|
||
{
|
||
Load-ComboBox $comboboxSUP $SUPName -Append
|
||
$comboboxSUP.SelectedIndex = 1
|
||
}
|
||
|
||
|
||
} #Else
|
||
} #IF
|
||
Catch
|
||
{
|
||
Write-Status -Message $_.Exception.Message
|
||
}
|
||
|
||
$_.SuppressKeyPress = $true
|
||
}
|
||
}
|
||
|
||
$textboxComputername_TextChanged={
|
||
#TODO: Place custom script here
|
||
|
||
}
|
||
|
||
$statusbar1_PanelClick=[System.Windows.Forms.StatusBarPanelClickEventHandler]{
|
||
#Event Argument: $_ = [System.Windows.Forms.StatusBarPanelClickEventArgs]
|
||
#TODO: Place custom script here
|
||
|
||
}
|
||
|
||
$toolstripstatuslabel1_Click={
|
||
#TODO: Place custom script here
|
||
|
||
}
|
||
|
||
|
||
$comboboxOSD_SelectedIndexChanged={
|
||
#TODO: Place custom script here
|
||
|
||
}
|
||
|
||
$labelOSDTaskSequence_Click={
|
||
#TODO: Place custom script here
|
||
|
||
}
|
||
|
||
$comboboxAPP_SelectedIndexChanged={
|
||
#TODO: Place custom script here
|
||
|
||
}
|
||
|
||
$buttonInstallOSD_Click={
|
||
#TODO: Place custom script here
|
||
Invoke-OSDInstall -Computername $Computername -OSDName $comboboxOSD.SelectedItem
|
||
}
|
||
|
||
$buttonInstallApp_Click={
|
||
#TODO: Place custom script here
|
||
Invoke-AppInstall -Computername $Computername -Method Install -AppName $comboboxAPP.SelectedItem
|
||
}
|
||
|
||
$buttonInstallSUP_Click={
|
||
#TODO: Place custom script here
|
||
Invoke-SupInstall -Computername $Computername -SupName $comboboxSUP.SelectedItem
|
||
}
|
||
|
||
$buttonCancelProcess_Click={
|
||
$script:CancelLoop = $true
|
||
}
|
||
|
||
$buttonStartProcess_Click={
|
||
#Init CancelLoop
|
||
$script:CancelLoop = $false
|
||
$buttonCancelProcess.Enabled = $true
|
||
#Disable the button so we don't trigger it again
|
||
$this.Enabled = $false
|
||
#Reset the Progress Bar
|
||
$progressbar1.Value = 0
|
||
|
||
for($i = 0; $i -lt $progressbar1.Maximum; $i++)
|
||
{
|
||
#----------------------------------------
|
||
#Place custom script here
|
||
sleep -Milliseconds 200
|
||
|
||
#----------------------------------------
|
||
#process the pending message
|
||
[System.Windows.Forms.Application]::DoEvents()
|
||
|
||
if($script:CancelLoop -eq $true)
|
||
{
|
||
#Clear the progress bar
|
||
$progressbar1.Value = 0
|
||
#Exit the loop
|
||
break;
|
||
}
|
||
#Step the progress bar
|
||
$progressbar1.PerformStep()
|
||
}
|
||
|
||
#Enable the button so we can click it again
|
||
$this.Enabled = $true
|
||
$buttonCancelProcess.Enabled = $false
|
||
}
|
||
|
||
$buttonRunProcess_Click={
|
||
$buttonRunProcess.Enabled = $false
|
||
#TODO: Set the process path there
|
||
Add-ProcessTracker -FilePath "$env:windir/System32/notepad.exe" `
|
||
-CompletedScript {
|
||
$buttonRunProcess.Enabled = $true
|
||
$buttonRunProcess.ImageIndex = -1
|
||
}`
|
||
-UpdateScript {
|
||
#Animate the Button
|
||
if($null -ne $buttonRunProcess.ImageList)
|
||
{
|
||
if($buttonRunProcess.ImageIndex -lt $buttonRunProcess.ImageList.Images.Count - 1)
|
||
{
|
||
$buttonRunProcess.ImageIndex += 1
|
||
}
|
||
else
|
||
{
|
||
$buttonRunProcess.ImageIndex = 0
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
$processTracker_FormClosed=[System.Windows.Forms.FormClosedEventHandler]{
|
||
#Event Argument: $_ = [System.Windows.Forms.FormClosedEventArgs]
|
||
#Stop any pending processes
|
||
#Stop-ProcessTracker
|
||
}
|
||
|
||
$timerProcessTracker_Tick={
|
||
Update-ProcessTracker
|
||
}
|
||
|
||
#region Process Tracker
|
||
$ProcessTrackerList = New-Object System.Collections.ArrayList
|
||
function Add-ProcessTracker
|
||
{
|
||
<#
|
||
.SYNOPSIS
|
||
Add a new process to the ProcessTracker and starts the timer.
|
||
|
||
.DESCRIPTION
|
||
Add a new process to the ProcessTracker and starts the timer.
|
||
|
||
.PARAMETER FilePath
|
||
The path to executable.
|
||
|
||
.PARAMETER ArgumentList
|
||
The arguments to pass to the process.
|
||
|
||
.PARAMETER CompleteScript
|
||
The script block that will be called when the process is complete.
|
||
The process is passed as an argument. The process argument is null when the job fails.
|
||
|
||
.PARAMETER UpdateScript
|
||
The script block that will be called each time the timer ticks.
|
||
The process is passed as an argument.
|
||
|
||
.EXAMPLE
|
||
Add-ProcessTracker -FilePath "$env:windir/System32/notepad.exe" `
|
||
-CompletedScript {
|
||
Param([System.Diagnostics.Process]$Process)
|
||
$button.Enable = $true
|
||
}`
|
||
-UpdateScript {
|
||
Param([System.Diagnostics.Process]$Process)
|
||
Function-Animate $button
|
||
}
|
||
|
||
.LINK
|
||
|
||
#>
|
||
|
||
Param(
|
||
[ValidateNotNull()]
|
||
[Parameter(Mandatory=$true)]
|
||
[string]$FilePath,
|
||
$ArgumentList = $null,
|
||
[ScriptBlock]$CompletedScript,
|
||
[ScriptBlock]$UpdateScript)
|
||
|
||
#Start the Job
|
||
if($ArgumentList)
|
||
{
|
||
$process = Start-Process -FilePath $FilePath -ArgumentList $ArgumentList -PassThru
|
||
}
|
||
else
|
||
{
|
||
$process = Start-Process -FilePath $FilePath -PassThru
|
||
}
|
||
|
||
if($null -ne $process)
|
||
{
|
||
#Create a Custom Object to keep track of the Job & Script Blocks
|
||
$members = @{ "Process" = $process;
|
||
"CompleteScript" = $CompletedScript;
|
||
"UpdateScript" = $UpdateScript}
|
||
|
||
$psObject = New-Object System.Management.Automation.PSObject -Property $members
|
||
|
||
[void]$ProcessTrackerList.Add($psObject)
|
||
|
||
#Start the Timer
|
||
if(-not $timerProcessTracker.Enabled)
|
||
{
|
||
$timerProcessTracker.Start()
|
||
}
|
||
}
|
||
elseif($null -ne $CompletedScript)
|
||
{
|
||
#Failed
|
||
Invoke-Command -ScriptBlock $CompletedScript -ArgumentList $null
|
||
}
|
||
|
||
}
|
||
|
||
function Update-ProcessTracker
|
||
{
|
||
<#
|
||
.SYNOPSIS
|
||
Checks the status of each job on the list.
|
||
#>
|
||
|
||
#Poll the jobs for status updates
|
||
$timerProcessTracker.Stop() #Freeze the Timer
|
||
|
||
for($index =0; $index -lt $ProcessTrackerList.Count; $index++)
|
||
{
|
||
$psObject = $ProcessTrackerList[$index]
|
||
|
||
if($null -ne $psObject)
|
||
{
|
||
if($null -ne $psObject.Process)
|
||
{
|
||
if($psObject.Process.HasExited)
|
||
{
|
||
#Call the Complete Script Block
|
||
if($null -ne $psObject.CompleteScript)
|
||
{
|
||
#$results = Receive-Job -Job $psObject.Job
|
||
Invoke-Command -ScriptBlock $psObject.CompleteScript -ArgumentList $psObject.Process
|
||
}
|
||
|
||
$ProcessTrackerList.RemoveAt($index)
|
||
$index-- #Step back so we don't skip a job
|
||
}
|
||
elseif($null -ne $psObject.UpdateScript)
|
||
{
|
||
#Call the Update Script Block
|
||
Invoke-Command -ScriptBlock $psObject.UpdateScript -ArgumentList $psObject.Process
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$ProcessTrackerList.RemoveAt($index)
|
||
$index-- #Step back so we don't skip a job
|
||
}
|
||
}
|
||
|
||
if($ProcessTrackerList.Count -gt 0)
|
||
{
|
||
$timerProcessTracker.Start()#Resume the timer
|
||
}
|
||
}
|
||
|
||
function Stop-ProcessTracker
|
||
{
|
||
<#
|
||
.SYNOPSIS
|
||
Stops and removes all processes from the list.
|
||
#>
|
||
#Stop the timer
|
||
$timerProcessTracker.Stop()
|
||
|
||
#Remove all the processes
|
||
while($ProcessTrackerList.Count -gt 0)
|
||
{
|
||
$process = $ProcessTrackerList[0].Process
|
||
$ProcessTrackerList.RemoveAt(0)
|
||
if(-not $psObject.Process.HasExited)
|
||
{
|
||
Stop-Process -InputObject $process
|
||
}
|
||
}
|
||
}
|
||
#endregion
|
||
# --End User Generated Script--
|
||
#----------------------------------------------
|
||
#region Generated Events
|
||
#----------------------------------------------
|
||
|
||
$Form_StateCorrection_Load=
|
||
{
|
||
#Correct the initial state of the form to prevent the .Net maximized form issue
|
||
$formMain.WindowState = $InitialFormWindowState
|
||
}
|
||
|
||
$Form_StoreValues_Closing=
|
||
{
|
||
#Store the control values
|
||
$script:MainForm_comboboxSUP = $comboboxSUP.Text
|
||
$script:MainForm_comboboxSUP_SelectedItem = $comboboxSUP.SelectedItem
|
||
$script:MainForm_comboboxAPP = $comboboxAPP.Text
|
||
$script:MainForm_comboboxAPP_SelectedItem = $comboboxAPP.SelectedItem
|
||
$script:MainForm_comboboxOSD = $comboboxOSD.Text
|
||
$script:MainForm_comboboxOSD_SelectedItem = $comboboxOSD.SelectedItem
|
||
$script:MainForm_textboxComputername = $textboxComputername.Text
|
||
}
|
||
|
||
|
||
$Form_Cleanup_FormClosed=
|
||
{
|
||
#Remove all event handlers from the controls
|
||
try
|
||
{
|
||
$buttonInstallSUP.remove_Click($buttonInstallSUP_Click)
|
||
$buttonInstallApp.remove_Click($buttonInstallApp_Click)
|
||
$comboboxAPP.remove_SelectedIndexChanged($comboboxAPP_SelectedIndexChanged)
|
||
$labelOSDTaskSequence.remove_Click($labelOSDTaskSequence_Click)
|
||
$comboboxOSD.remove_SelectedIndexChanged($comboboxOSD_SelectedIndexChanged)
|
||
$buttonInstallOSD.remove_Click($buttonInstallOSD_Click)
|
||
$textboxComputername.remove_TextChanged($textboxComputername_TextChanged)
|
||
$textboxComputername.remove_KeyDown($textboxComputername_KeyDown)
|
||
$buttonConnect.remove_Click($buttonConnect_Click)
|
||
$buttonExit.remove_Click($buttonExit_Click)
|
||
$formMain.remove_FormClosed($formMain_FormClosed)
|
||
$formMain.remove_Load($formMain_Load)
|
||
$timerJobTracker.remove_Tick($timerJobTracker_Tick)
|
||
$formMain.remove_Load($Form_StateCorrection_Load)
|
||
$formMain.remove_Closing($Form_StoreValues_Closing)
|
||
$formMain.remove_FormClosed($Form_Cleanup_FormClosed)
|
||
}
|
||
catch { Out-Null <# Prevent PSScriptAnalyzer warning #> }
|
||
}
|
||
#endregion Generated Events
|
||
|
||
#----------------------------------------------
|
||
#region Generated Form Code
|
||
#----------------------------------------------
|
||
$formMain.SuspendLayout()
|
||
#
|
||
# formMain
|
||
#
|
||
$formMain.Controls.Add($buttonInstallSUP)
|
||
$formMain.Controls.Add($comboboxSUP)
|
||
$formMain.Controls.Add($labelSoftwareUpdates)
|
||
$formMain.Controls.Add($buttonInstallApp)
|
||
$formMain.Controls.Add($comboboxAPP)
|
||
$formMain.Controls.Add($labelApplications)
|
||
$formMain.Controls.Add($labelOSDTaskSequence)
|
||
$formMain.Controls.Add($comboboxOSD)
|
||
$formMain.Controls.Add($statusbar1)
|
||
$formMain.Controls.Add($picturebox1)
|
||
$formMain.Controls.Add($buttonInstallOSD)
|
||
$formMain.Controls.Add($textboxComputername)
|
||
$formMain.Controls.Add($buttonConnect)
|
||
$formMain.Controls.Add($buttonExit)
|
||
$formMain.AutoScaleDimensions = '6, 13'
|
||
$formMain.AutoScaleMode = 'Font'
|
||
$formMain.ClientSize = '475, 371'
|
||
$formMain.Name = 'formMain'
|
||
$formMain.StartPosition = 'CenterScreen'
|
||
$formMain.Text = 'Remote Software Center'
|
||
$formMain.add_FormClosed($formMain_FormClosed)
|
||
$formMain.add_Load($formMain_Load)
|
||
#
|
||
# buttonInstallSUP
|
||
#
|
||
$buttonInstallSUP.Anchor = 'Bottom, Left'
|
||
$buttonInstallSUP.Location = '362, 229'
|
||
$buttonInstallSUP.Name = 'buttonInstallSUP'
|
||
$buttonInstallSUP.Size = '75, 23'
|
||
$buttonInstallSUP.TabIndex = 16
|
||
$buttonInstallSUP.Text = '&Install SUP'
|
||
$buttonInstallSUP.TextImageRelation = 'ImageBeforeText'
|
||
$buttonInstallSUP.UseVisualStyleBackColor = $True
|
||
$buttonInstallSUP.add_Click($buttonInstallSUP_Click)
|
||
#
|
||
# comboboxSUP
|
||
#
|
||
$comboboxSUP.FormattingEnabled = $True
|
||
$comboboxSUP.Location = '11, 229'
|
||
$comboboxSUP.Name = 'comboboxSUP'
|
||
$comboboxSUP.Size = '308, 21'
|
||
$comboboxSUP.TabIndex = 15
|
||
#
|
||
# labelSoftwareUpdates
|
||
#
|
||
$labelSoftwareUpdates.AutoSize = $True
|
||
$labelSoftwareUpdates.Font = 'Microsoft Sans Serif, 9pt, style=Bold'
|
||
$labelSoftwareUpdates.Location = '11, 211'
|
||
$labelSoftwareUpdates.Name = 'labelSoftwareUpdates'
|
||
$labelSoftwareUpdates.Size = '120, 15'
|
||
$labelSoftwareUpdates.TabIndex = 14
|
||
$labelSoftwareUpdates.Text = 'Software Updates'
|
||
#
|
||
# buttonInstallApp
|
||
#
|
||
$buttonInstallApp.Anchor = 'Bottom, Left'
|
||
$buttonInstallApp.Location = '362, 157'
|
||
$buttonInstallApp.Name = 'buttonInstallApp'
|
||
$buttonInstallApp.Size = '75, 23'
|
||
$buttonInstallApp.TabIndex = 13
|
||
$buttonInstallApp.Text = '&Install App'
|
||
$buttonInstallApp.TextImageRelation = 'ImageBeforeText'
|
||
$buttonInstallApp.UseVisualStyleBackColor = $True
|
||
$buttonInstallApp.add_Click($buttonInstallApp_Click)
|
||
#
|
||
# comboboxAPP
|
||
#
|
||
$comboboxAPP.FormattingEnabled = $True
|
||
$comboboxAPP.Location = '11, 157'
|
||
$comboboxAPP.Name = 'comboboxAPP'
|
||
$comboboxAPP.Size = '308, 21'
|
||
$comboboxAPP.TabIndex = 12
|
||
$comboboxAPP.add_SelectedIndexChanged($comboboxAPP_SelectedIndexChanged)
|
||
#
|
||
# labelApplications
|
||
#
|
||
$labelApplications.AutoSize = $True
|
||
$labelApplications.Font = 'Microsoft Sans Serif, 9pt, style=Bold'
|
||
$labelApplications.Location = '11, 139'
|
||
$labelApplications.Name = 'labelApplications'
|
||
$labelApplications.Size = '85, 15'
|
||
$labelApplications.TabIndex = 11
|
||
$labelApplications.Text = 'Applications'
|
||
#
|
||
# labelOSDTaskSequence
|
||
#
|
||
$labelOSDTaskSequence.AutoSize = $True
|
||
$labelOSDTaskSequence.Font = 'Microsoft Sans Serif, 9pt, style=Bold'
|
||
$labelOSDTaskSequence.Location = '14, 72'
|
||
$labelOSDTaskSequence.Name = 'labelOSDTaskSequence'
|
||
$labelOSDTaskSequence.Size = '138, 15'
|
||
$labelOSDTaskSequence.TabIndex = 10
|
||
$labelOSDTaskSequence.Text = 'OSD Task Sequence'
|
||
$labelOSDTaskSequence.add_Click($labelOSDTaskSequence_Click)
|
||
#
|
||
# comboboxOSD
|
||
#
|
||
$comboboxOSD.FormattingEnabled = $True
|
||
$comboboxOSD.Location = '11, 90'
|
||
$comboboxOSD.Name = 'comboboxOSD'
|
||
$comboboxOSD.Size = '308, 21'
|
||
$comboboxOSD.TabIndex = 9
|
||
$comboboxOSD.add_SelectedIndexChanged($comboboxOSD_SelectedIndexChanged)
|
||
#
|
||
# statusbar1
|
||
#
|
||
$statusbar1.Location = '0, 349'
|
||
$statusbar1.Name = 'statusbar1'
|
||
$statusbar1.Size = '475, 22'
|
||
$statusbar1.TabIndex = 8
|
||
#
|
||
# picturebox1
|
||
#
|
||
$picturebox1.BackColor = 'Transparent'
|
||
$picturebox1.Location = '0, 320'
|
||
$picturebox1.Name = 'picturebox1'
|
||
$picturebox1.Size = '25, 27'
|
||
$picturebox1.TabIndex = 7
|
||
$picturebox1.TabStop = $False
|
||
#
|
||
# buttonInstallOSD
|
||
#
|
||
$buttonInstallOSD.Anchor = 'Bottom, Left'
|
||
$buttonInstallOSD.ImageList = $imagelistButtonBusyAnimation
|
||
$buttonInstallOSD.Location = '362, 90'
|
||
$buttonInstallOSD.Name = 'buttonInstallOSD'
|
||
$buttonInstallOSD.Size = '75, 23'
|
||
$buttonInstallOSD.TabIndex = 0
|
||
$buttonInstallOSD.Text = '&Install OSD'
|
||
$buttonInstallOSD.TextImageRelation = 'ImageBeforeText'
|
||
$buttonInstallOSD.UseVisualStyleBackColor = $True
|
||
$buttonInstallOSD.add_Click($buttonInstallOSD_Click)
|
||
#
|
||
# textboxComputername
|
||
#
|
||
$textboxComputername.Anchor = 'Top, Left, Right'
|
||
$textboxComputername.Location = '13, 15'
|
||
$textboxComputername.Name = 'textboxComputername'
|
||
$textboxComputername.Size = '118, 20'
|
||
$textboxComputername.TabIndex = 0
|
||
$textboxComputername.add_TextChanged($textboxComputername_TextChanged)
|
||
$textboxComputername.add_KeyDown($textboxComputername_KeyDown)
|
||
#
|
||
# buttonConnect
|
||
#
|
||
$buttonConnect.Anchor = 'Top, Right'
|
||
$buttonConnect.Location = '150, 12'
|
||
$buttonConnect.Name = 'buttonConnect'
|
||
$buttonConnect.Size = '75, 23'
|
||
$buttonConnect.TabIndex = 1
|
||
$buttonConnect.Text = '&Connect'
|
||
$buttonConnect.UseVisualStyleBackColor = $True
|
||
$buttonConnect.add_Click($buttonConnect_Click)
|
||
#
|
||
# buttonExit
|
||
#
|
||
$buttonExit.Anchor = 'Bottom, Right'
|
||
$buttonExit.Location = '362, 320'
|
||
$buttonExit.Name = 'buttonExit'
|
||
$buttonExit.Size = '75, 23'
|
||
$buttonExit.TabIndex = 4
|
||
$buttonExit.Text = 'E&xit'
|
||
$buttonExit.UseVisualStyleBackColor = $True
|
||
$buttonExit.add_Click($buttonExit_Click)
|
||
#
|
||
# timerJobTracker
|
||
#
|
||
$timerJobTracker.add_Tick($timerJobTracker_Tick)
|
||
#
|
||
# imagelistButtonBusyAnimation
|
||
#
|
||
$Formatter_binaryFomatter = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||
#region Binary Data
|
||
$System_IO_MemoryStream = New-Object System.IO.MemoryStream (,[byte[]][System.Convert]::FromBase64String('
|
||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAu
|
||
MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAA
|
||
ACZTeXN0ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkD
|
||
AAAADwMAAAB2CgAAAk1TRnQBSQFMAgEBCAEAAbgBAAG4AQABEAEAARABAAT/ASEBAAj/AUIBTQE2
|
||
BwABNgMAASgDAAFAAwABMAMAAQEBAAEgBgABMP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/
|
||
AP8AugADwgH/AzUB/wM1Af8DwgH/MAADwgH/A1UB/wOCAf8DwgH/sAADNQH/AwAB/wMAAf8DNQH/
|
||
MAADggH/AzUB/wM1Af8DVQH/gAADwgH/AzUB/wM1Af8DwgH/IAADNQH/AwAB/wMAAf8DNQH/A8IB
|
||
/wNVAf8DggH/A8IB/xAAA8IB/wM1Af8DNQH/A8IB/wNVAf8DNQH/AzUB/wNVAf8EAAOSAf8DkgH/
|
||
A8IB/3AAAzUB/wMAAf8DAAH/AzUB/yAAA8IB/wM1Af8DNQH/A8IB/wOCAf8DNQH/AzUB/wOCAf8Q
|
||
AAM1Af8DAAH/AwAB/wM1Af8DwgH/A1UB/wOCAf8DwgH/A5IB/wOCAf8DggH/A5IB/3AAAzUB/wMA
|
||
Af8DAAH/AzUB/zAAA1UB/wM1Af8DNQH/A1UB/xAAAzUB/wMAAf8DAAH/AzUB/xAAA5IB/wOSAf8D
|
||
kgH/A8IB/3AAA8IB/wM1Af8DNQH/A8IB/zAAA8IB/wNVAf8DggH/A8IB/xAAA8IB/wM1Af8DNQH/
|
||
A8IB/xAAA8IB/wOSAf8DkgH/A8IB/zgAA8IB/wM1Af8DNQH/A8IB/zAAA8IB/wOCAf8DVQH/A8IB
|
||
/zAAA8IB/wPCAf8DkgH/A8IB/zQAA8IB/wPCAf80AAM1Af8DAAH/AwAB/wM1Af8wAANVAf8DNQH/
|
||
AzUB/wNVAf8wAAOSAf8DggH/A4IB/wOSAf8wAAPCAf8DwgH/A8IB/wPCAf8wAAM1Af8DAAH/AwAB
|
||
/wM1Af8wAAOCAf8DNQH/AzUB/wOCAf8wAAPCAf8DggH/A5IB/wOSAf8wAAPCAf8DwgH/A8IB/wPC
|
||
Af8wAAPCAf8DNQH/AzUB/wPCAf8wAAPCAf8DggH/A1UB/wPCAf8wAAPCAf8DkgH/A5IB/wPCAf80
|
||
AAPCAf8DwgH/EAADwgH/A8IB/xQAA8IB/wOCAf8DVQH/A8IB/zAAA8IB/wOSAf8DkgH/A8IB/zQA
|
||
A8IB/wPCAf9UAAPCAf8DwgH/A8IB/wPCAf8QAANVAf8DNQH/AzUB/wNVAf8wAAOSAf8DggH/A5IB
|
||
/wOSAf8wAAPCAf8DwgH/A8IB/wPCAf9QAAPCAf8DwgH/A8IB/wPCAf8DwgH/A8IB/wOSAf8DwgH/
|
||
A4IB/wM1Af8DNQH/A4IB/yQAA8IB/wPCAf8EAAPCAf8DggH/A5IB/wOSAf8wAAPCAf8DwgH/A8IB
|
||
/wPCAf9UAAPCAf8DwgH/BAADkgH/A4IB/wOCAf8DkgH/A8IB/wOCAf8DVQH/A8IB/yAAA8IB/wPC
|
||
Af8DwgH/A8IB/wPCAf8DkgH/A5IB/wPCAf80AAPCAf8DwgH/ZAADkgH/A5IB/wOSAf8DkgH/MAAD
|
||
wgH/A8IB/wPCAf8DwgH/sAADwgH/A5IB/wOSAf8DwgH/NAADwgH/A8IB/7QAA8IB/wPCAf8DkgH/
|
||
A8IB/zQAA8IB/wPCAf+0AAOSAf8DggH/A4IB/wOSAf8wAAPCAf8DwgH/A8IB/wPCAf+gAAPCAf8D
|
||
VQH/A4IB/wPCAf8DkgH/A5IB/wOSAf8DwgH/BAADwgH/A8IB/xQAA8IB/wPCAf8DkgH/A8IB/wPC
|
||
Af8DwgH/A8IB/wPCAf8kAAPCAf8DwgH/dAADggH/AzUB/wM1Af8DggH/A8IB/wOSAf8DkgH/A8IB
|
||
/wPCAf8DwgH/A8IB/wPCAf8QAAOSAf8DggH/A4IB/wOSAf8EAAPCAf8DwgH/JAADwgH/A8IB/wPC
|
||
Af8DwgH/cAADVQH/AzUB/wM1Af8DggH/EAADwgH/A8IB/wPCAf8DwgH/EAADkgH/A5IB/wOSAf8D
|
||
kgH/MAADwgH/A8IB/wPCAf8DwgH/cAADwgH/A1UB/wNVAf8DwgH/FAADwgH/A8IB/xQAA8IB/wOS
|
||
Af8DkgH/A8IB/zQAA8IB/wPCAf9sAAPCAf8DNQH/AzUB/wPCAf8wAAPCAf8DVQH/A4IB/wPCAf8w
|
||
AAPCAf8DwgH/A5IB/wPCAf80AAPCAf8DwgH/NAADNQH/AwAB/wMAAf8DNQH/MAADggH/AzUB/wM1
|
||
Af8DVQH/MAADkgH/A4IB/wOCAf8DkgH/MAADwgH/A8IB/wPCAf8DwgH/MAADNQH/AwAB/wMAAf8D
|
||
NQH/MAADVQH/AzUB/wM1Af8DggH/MAADkgH/A5IB/wOSAf8DkgH/MAADwgH/A8IB/wPCAf8DwgH/
|
||
MAADwgH/AzUB/wM1Af8DwgH/MAADwgH/A1UB/wNVAf8DwgH/MAADwgH/A5IB/wOSAf8DwgH/NAAD
|
||
wgH/A8IB/3wAA8IB/wM1Af8DNQH/A8IB/zAAA8IB/wNVAf8DggH/A8IB/zAAA8IB/wPCAf8DkgH/
|
||
A8IB/xAAA8IB/wM1Af8DNQH/A8IB/1AAAzUB/wMAAf8DAAH/AzUB/zAAA4IB/wM1Af8DNQH/A1UB
|
||
/zAAA5IB/wOCAf8DggH/A5IB/xAAAzUB/wMAAf8DAAH/AzUB/1AAAzUB/wMAAf8DAAH/AzUB/zAA
|
||
A1UB/wM1Af8DNQH/A4IB/wOSAf8DNQH/AzUB/wPCAf8gAAOSAf8DkgH/A5IB/wOSAf8DwgH/A1UB
|
||
/wOCAf8DwgH/AzUB/wMAAf8DAAH/AzUB/1AAA8IB/wM1Af8DNQH/A8IB/zAAA8IB/wOCAf8DVQH/
|
||
A8IB/wM1Af8DAAH/AwAB/wM1Af8gAAPCAf8DkgH/A5IB/wPCAf8DggH/AzUB/wM1Af8DVQH/A8IB
|
||
/wM1Af8DNQH/A8IB/6AAAzUB/wMAAf8DAAH/AzUB/zAAA1UB/wM1Af8DNQH/A4IB/7AAA8IB/wM1
|
||
Af8DNQH/A8IB/zAAA8IB/wOCAf8DVQH/A8IB/xgAAUIBTQE+BwABPgMAASgDAAFAAwABMAMAAQEB
|
||
AAEBBQABgAEBFgAD/4EABP8B/AE/AfwBPwT/AfwBPwH8AT8D/wHDAfwBAwHAASMD/wHDAfwBAwHA
|
||
AQMD/wHDAf8DwwP/AcMB/wPDAf8B8AH/AfAB/wHwAf8B+QH/AfAB/wHwAf8B8AH/AfAB/wHwAf8B
|
||
8AH/AfAB/wHwAf8B8AH/AfAB/wHwAf8B+QHnAcMB/wHDAf8B5wL/AsMB/wHDAf8BwwL/AcABAwH+
|
||
AUMB/wHDAv8B5AEDAfwBAwH/AecC/wH8AT8B/AE/BP8B/AE/Af4BfwT/AfwBPwH+AX8E/wH8AT8B
|
||
/AE/BP8BwAEnAcABPwHnA/8BwAEDAcIBfwHDA/8DwwH/AcMD/wHDAecBwwH/AecD/wEPAf8BDwH/
|
||
AQ8B/wGfAf8BDwH/AQ8B/wEPAf8BDwH/AQ8B/wEPAf8BDwH/AQ8B/wEPAf8BDwH/AQ8B/wGfA/8B
|
||
wwH/AcMB/wLDAv8BwwH/AcMB/wLDAv8BwwH/AcABPwHAAQMC/wHDAf8BwAE/AcABAwT/AfwBPwH8
|
||
AT8E/wH8AT8B/AE/Cw=='))
|
||
#endregion
|
||
$imagelistButtonBusyAnimation.ImageStream = $Formatter_binaryFomatter.Deserialize($System_IO_MemoryStream)
|
||
$Formatter_binaryFomatter = $null
|
||
$System_IO_MemoryStream = $null
|
||
$imagelistButtonBusyAnimation.TransparentColor = 'Transparent'
|
||
$formMain.ResumeLayout()
|
||
#endregion Generated Form Code
|
||
|
||
#----------------------------------------------
|
||
|
||
#Save the initial state of the form
|
||
$InitialFormWindowState = $formMain.WindowState
|
||
#Init the OnLoad event to correct the initial state of the form
|
||
$formMain.add_Load($Form_StateCorrection_Load)
|
||
#Clean up the control events
|
||
$formMain.add_FormClosed($Form_Cleanup_FormClosed)
|
||
#Store the control values when form is closing
|
||
$formMain.add_Closing($Form_StoreValues_Closing)
|
||
#Show the Form
|
||
return $formMain.ShowDialog()
|
||
|
||
}
|
||
#endregion Source: MainForm.psf
|
||
|
||
#Start the application
|
||
Main ($CommandLine)
|