├── AD-User-Unlocker ├── AD-USER-Unlocker.psf └── Archives │ ├── AD-USER-Unlocker.ps1 │ ├── AD-USER-Unlocker.psf │ └── AD-USER-Unlocker_OutGridView.psf ├── LICENSE.md ├── README.md └── _Examples ├── ClipBoard_Paste.Export.ps1 ├── ClipBoard_Paste.psf ├── Combobox_reset.Export.ps1 ├── Combobox_reset.exe ├── Combobox_reset.psf ├── Combobox_reset.psf.psbuild ├── DataGridView ├── DataGridView.psf ├── DataGridView_CellMouseEnter.Export.ps1 ├── DataGridView_CellMouseEnter.psf ├── DataGridView_ColumnHeader_Sorting │ ├── DataGridView_ColumnHeader_Sorting.Export.ps1 │ ├── DataGridView_ColumnHeader_Sorting.Export.zip │ └── DataGridView_ColumnHeader_Sorting.psf ├── DataGridView_Load_ListView_Items.psf └── DataGridView_RowHeader │ ├── DataGridView_RowHeader.Export.ps1 │ └── DataGridView_RowHeader.psf ├── ErrorProvider.Export.ps1 ├── ErrorProvider.psf ├── KeyCapture.psf ├── MultiThreading.Export.ps1 ├── MultiThreading.psf ├── MultiThreading_Arguments.Export.ps1 ├── MultiThreading_Arguments.psf ├── WinFormPS ├── DataGridView │ ├── Add-DataGridViewCell.psf │ ├── Add-DataGridViewColumn.TempPoint.psf │ ├── Add-DataGridViewColumn.psf │ ├── Add-DataGridViewRow.psf │ ├── Find-DataGridViewValue.psf │ ├── Get-DataGridViewItem.psf │ ├── Set-DataGridView.psf │ └── Set-DataGridViewFilter.psf ├── ErrorProvider │ ├── ErrorProvider.Export.ps1 │ └── ErrorProvider.psf ├── ListBox │ └── Get-ListBoxItem.psf └── ListView │ └── Get-ListViewItem.psf └── dropdownlist_alignement.psf /AD-User-Unlocker/Archives/AD-USER-Unlocker.ps1: -------------------------------------------------------------------------------- 1 | # ############################################################################# 2 | # NAME: AD-USER-Unlocker.ps1 3 | # 4 | # AUTHOR: Francois-Xavier Cat 5 | # DATE: 2013/03/22 6 | # EMAIL: fxcat@lazywinadmin.com 7 | # WEBSITE: LazyWinAdmin.com 8 | # TWiTTER: @lazywinadm 9 | # 10 | # COMMENT: This script generate a GUI to unlock Active Directory 11 | # User Account. 12 | # 13 | # REQUIRE: Permission to unlock account 14 | # USAGE: .\AD-USER-Unlocker.ps1 15 | # 16 | # VERSION HISTORY 17 | # 1.0 2013.03.22 Initial Version. 18 | # 19 | # ############################################################################# 20 | 21 | #---------------------------------------------- 22 | # GLOBAL SETTINGS 23 | #---------------------------------------------- 24 | # Set the Action Preference level 25 | $ErrorActionPreference = "SilentlyContinue" 26 | #---------------------------------------------- 27 | 28 | function OnApplicationLoad { 29 | return $true #return true for success or false for failure 30 | } 31 | 32 | function OnApplicationExit { 33 | $script:ExitCode = 0 #Set the exit code for the Packager 34 | } 35 | 36 | #---------------------------------------------- 37 | # Generated Form Function 38 | #---------------------------------------------- 39 | function Call-Unlocker_pff { 40 | 41 | #---------------------------------------------- 42 | #region Import the Assemblies 43 | #---------------------------------------------- 44 | [void][reflection.assembly]::Load(` 45 | "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") 46 | [void][reflection.assembly]::Load(` 47 | "System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") 48 | [void][reflection.assembly]::Load(` 49 | "System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") 50 | [void][reflection.assembly]::Load(` 51 | "System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") 52 | [void][reflection.assembly]::Load(` 53 | "System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") 54 | [void][reflection.assembly]::Load(` 55 | "System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") 56 | [void][reflection.assembly]::Load(` 57 | "System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") 58 | [void][reflection.assembly]::Load(` 59 | "System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089") 60 | [void][reflection.assembly]::Load(` 61 | "System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a") 62 | #endregion Import Assemblies 63 | 64 | #---------------------------------------------- 65 | #region Generated Form Objects 66 | #---------------------------------------------- 67 | [System.Windows.Forms.Application]::EnableVisualStyles() 68 | $formUnlocker = New-Object 'System.Windows.Forms.Form' 69 | $statusbar1 = New-Object 'System.Windows.Forms.StatusBar' 70 | $listbox1 = New-Object 'System.Windows.Forms.ListBox' 71 | $buttonUnlock = New-Object 'System.Windows.Forms.Button' 72 | $buttonCheck = New-Object 'System.Windows.Forms.Button' 73 | $textbox1 = New-Object 'System.Windows.Forms.TextBox' 74 | $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' 75 | #endregion Generated Form Objects 76 | 77 | #---------------------------------------------- 78 | # User Generated Script 79 | #---------------------------------------------- 80 | 81 | $formUnlocker_Load={ 82 | } 83 | 84 | #region Control Helper Functions 85 | function Load-ListBox 86 | { 87 | <# 88 | .SYNOPSIS 89 | This functions helps you load items into a ListBox or CheckedListBox. 90 | 91 | .DESCRIPTION 92 | Use this function to dynamically load items into the ListBox control. 93 | 94 | .PARAMETER ListBox 95 | The ListBox control you want to add items to. 96 | 97 | .PARAMETER Items 98 | The object or objects you wish to load into the ListBox's Items 99 | collection. 100 | 101 | .PARAMETER DisplayMember 102 | Indicates the property to display for the items in this control. 103 | 104 | .PARAMETER Append 105 | Adds the item(s) to the ListBox without clearing the Items collection. 106 | 107 | .EXAMPLE 108 | Load-ListBox $ListBox1 "Red", "White", "Blue" 109 | 110 | .EXAMPLE 111 | Load-ListBox $listBox1 "Red" -Append 112 | Load-ListBox $listBox1 "White" -Append 113 | Load-ListBox $listBox1 "Blue" -Append 114 | 115 | .EXAMPLE 116 | Load-ListBox $listBox1 (Get-Process) "ProcessName" 117 | #> 118 | Param ( 119 | [ValidateNotNull()] 120 | [Parameter(Mandatory=$true)] 121 | [System.Windows.Forms.ListBox]$ListBox, 122 | [ValidateNotNull()] 123 | [Parameter(Mandatory=$true)] 124 | $Items, 125 | [Parameter(Mandatory=$false)] 126 | [string]$DisplayMember, 127 | [switch]$Append 128 | ) 129 | 130 | if(-not $Append) 131 | { 132 | $listBox.Items.Clear() 133 | } 134 | 135 | if($Items -is [System.Windows.Forms.ListBox+ObjectCollection]) 136 | { 137 | $listBox.Items.AddRange($Items) 138 | } 139 | elseif ($Items -is [Array]) 140 | { 141 | $listBox.BeginUpdate() 142 | foreach($obj in $Items) 143 | { 144 | $listBox.Items.Add($obj) 145 | } 146 | $listBox.EndUpdate() 147 | } 148 | else 149 | { 150 | $listBox.Items.Add($Items) 151 | } 152 | 153 | $listBox.DisplayMember = $DisplayMember 154 | } 155 | #endregion 156 | 157 | $buttonCheck_Click={ 158 | 159 | # Get the Current text in $textbox1 160 | $name = $textbox1.Text 161 | 162 | # Search for this account in the current domain 163 | $Searcher = [ADSISearcher]"(sAMAccountName=$Name)" 164 | $Results = $Searcher.FindOne() 165 | 166 | # Get the current date and time 167 | $DateFormat = Get-Date -Format "yyyy/MM/dd-HH:mm:ss" 168 | 169 | if ($Results -ne $null){ 170 | # If an Account is found do the following 171 | 172 | # Here we check the property "LockOutTime", if it is greater that 0 173 | # this mean the account is lockedout 174 | if($Results.properties.lockouttime -gt 0){ 175 | # Show the information in the ListBox 176 | Load-ListBox ` 177 | -ListBox $listBox1 ` 178 | -Items "$DateFormat - $name - Account Locked Out" ` 179 | -Append 180 | }else{ 181 | # Show the information in the ListBox 182 | Load-ListBox ` 183 | -ListBox $listBox1 ` 184 | -Items "$DateFormat - $name - Account NOT Locked Out!" ` 185 | -Append} 186 | }else { 187 | # Show the information in the ListBox 188 | Load-ListBox ` 189 | -ListBox $listbox1 ` 190 | -Items "$DateFormat - $name - Account Not Found!" ` 191 | -Append} 192 | } 193 | 194 | $buttonUnlock_Click={ 195 | 196 | # Get the Current text in $textbox1 197 | $name = $textbox1.Text 198 | 199 | # Search for this account in the current domain 200 | $Searcher = [ADSISearcher]"(sAMAccountName=$Name)" 201 | $Results = $Searcher.FindOne() 202 | 203 | if ($Results -ne $null){ 204 | # If an Account is found do the following 205 | 206 | # Get the current date and time 207 | $DateFormat = Get-Date -Format "yyyy/MM/dd-HH:mm:ss" 208 | 209 | # Here we get Unlock the account 210 | $unlock = [ADSI]"$($Results.properties.adspath)" 211 | $unlock.Put("lockouttime",0) 212 | $unlock.SetInfo() 213 | 214 | # Show the information in the ListBox 215 | Load-ListBox ` 216 | -ListBox $listBox1 ` 217 | -Items "$DateFormat - $name - Account Unlocked!" ` 218 | -Append 219 | }else { 220 | # Show the information in the ListBox 221 | Load-ListBox ` 222 | -ListBox $listbox1 ` 223 | -Items "$DateFormat - $name - Account Not Found!" ` 224 | -Append} 225 | }#$buttonUnlock_Click 226 | 227 | $textbox1_TextChanged={ 228 | # This part will check that the Textbox is not empty 229 | if ($textbox1.Text -eq "") { 230 | # If Empty, Back Color of the Textbox1 will be Red 231 | $textbox1.BackColor = [System.Drawing.Color]::FromArgb(255, 128, 128); 232 | Load-ListBox ` 233 | -ListBox $listbox1 ` 234 | -Items "Please Enter an Account" ` 235 | -Append 236 | } 237 | if ($textbox1.Text -ne "") { 238 | 239 | # If NOT Empty, Back Color of the Textbox1 will be Yellow 240 | $textbox1.BackColor = [System.Drawing.Color]::FromArgb(255, 255, 192) 241 | } 242 | 243 | # In anycase, if the Textbox1 is empty, buttons will be disabled. 244 | $buttonCheck.Enabled = $textbox1.Text -ne "" 245 | $buttonLock.Enabled = $textbox1.Text -ne "" 246 | $buttonUnlock.Enabled = $textbox1.Text -ne "" 247 | }#$textbox1_TextChanged 248 | 249 | # --End User Generated Script-- 250 | #---------------------------------------------- 251 | #region Generated Events 252 | #---------------------------------------------- 253 | 254 | $Form_StateCorrection_Load= 255 | { 256 | #Correct the initial state of the form to prevent the .Net maximized form issue 257 | $formUnlocker.WindowState = $InitialFormWindowState 258 | } 259 | 260 | $Form_Cleanup_FormClosed= 261 | { 262 | #Remove all event handlers from the controls 263 | try 264 | { 265 | $buttonUnlock.remove_Click($buttonUnlock_Click) 266 | $buttonCheck.remove_Click($buttonCheck_Click) 267 | $textbox1.remove_TextChanged($textbox1_TextChanged) 268 | $formUnlocker.remove_Load($formUnlocker_Load) 269 | $formUnlocker.remove_Load($Form_StateCorrection_Load) 270 | $formUnlocker.remove_FormClosed($Form_Cleanup_FormClosed) 271 | } 272 | catch [Exception] 273 | { } 274 | } 275 | #endregion Generated Events 276 | 277 | #---------------------------------------------- 278 | #region Generated Form Code 279 | #---------------------------------------------- 280 | # 281 | # formUnlocker 282 | # 283 | $formUnlocker.Controls.Add($statusbar1) 284 | $formUnlocker.Controls.Add($listbox1) 285 | $formUnlocker.Controls.Add($buttonUnlock) 286 | $formUnlocker.Controls.Add($buttonCheck) 287 | $formUnlocker.Controls.Add($textbox1) 288 | $formUnlocker.ClientSize = '450, 275' 289 | $formUnlocker.MaximumSize = '450, 314' 290 | $formUnlocker.Name = "formUnlocker" 291 | $formUnlocker.Text = "Unlocker" 292 | $formUnlocker.add_Load($formUnlocker_Load) 293 | # 294 | # statusbar1 295 | # 296 | $statusbar1.Location = '0, 253' 297 | $statusbar1.Name = "statusbar1" 298 | $statusbar1.Size = '260, 22' 299 | $statusbar1.TabIndex = 5 300 | $statusbar1.Text = "LazyWinAdmin.com - Francois-Xavier Cat" 301 | # 302 | # listbox1 303 | # 304 | $listbox1.Font = "Consolas, 9.75pt" 305 | $listbox1.FormattingEnabled = $True 306 | $listbox1.ItemHeight = 15 307 | $listbox1.Location = '12, 77' 308 | $listbox1.Name = "listbox1" 309 | $listbox1.Size = '415, 169' 310 | $listbox1.TabIndex = 4 311 | # 312 | # buttonUnlock 313 | # 314 | $buttonUnlock.Font = "Consolas, 12pt" 315 | $buttonUnlock.Location = '137, 48' 316 | $buttonUnlock.Name = "buttonUnlock" 317 | $buttonUnlock.Size = '113, 23' 318 | $buttonUnlock.TabIndex = 2 319 | $buttonUnlock.Text = "Unlock" 320 | $buttonUnlock.UseVisualStyleBackColor = $True 321 | $buttonUnlock.add_Click($buttonUnlock_Click) 322 | # 323 | # buttonCheck 324 | # 325 | $buttonCheck.Font = "Consolas, 12pt" 326 | $buttonCheck.Location = '12, 48' 327 | $buttonCheck.Name = "buttonCheck" 328 | $buttonCheck.Size = '114, 23' 329 | $buttonCheck.TabIndex = 1 330 | $buttonCheck.Text = "Check" 331 | $buttonCheck.UseVisualStyleBackColor = $True 332 | $buttonCheck.add_Click($buttonCheck_Click) 333 | # 334 | # textbox1 335 | # 336 | $textbox1.Font = "Microsoft Sans Serif, 14.25pt" 337 | $textbox1.Location = '12, 13' 338 | $textbox1.Name = "textbox1" 339 | $textbox1.Size = '238, 29' 340 | $textbox1.TabIndex = 0 341 | $textbox1.Text = "" 342 | $textbox1.add_TextChanged($textbox1_TextChanged) 343 | #endregion Generated Form Code 344 | 345 | #---------------------------------------------- 346 | 347 | #Save the initial state of the form 348 | $InitialFormWindowState = $formUnlocker.WindowState 349 | #Init the OnLoad event to correct the initial state of the form 350 | $formUnlocker.add_Load($Form_StateCorrection_Load) 351 | #Clean up the control events 352 | $formUnlocker.add_FormClosed($Form_Cleanup_FormClosed) 353 | #Show the Form 354 | return $formUnlocker.ShowDialog() 355 | 356 | } #End Function 357 | 358 | #Call OnApplicationLoad to initialize 359 | if((OnApplicationLoad) -eq $true) 360 | { 361 | #Call the form 362 | Call-Unlocker_pff | Out-Null 363 | #Perform cleanup 364 | OnApplicationExit 365 | } -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Francois-Xavier Cat 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | PowerShellGUI 2 | ============= 3 | 4 | This repository contains some of my PowerShell script that generate GUI forms (Winforms). 5 | 6 | Those were tested using SAPIEN PowerShell Studio 2014 7 | -------------------------------------------------------------------------------- /_Examples/ClipBoard_Paste.Export.ps1: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------ 2 | # Source File Information (DO NOT MODIFY) 3 | # Source ID: 7cc35deb-97f1-4821-9fac-1339de8a644c 4 | # Source File: ClipBoard_Paste.psf 5 | #------------------------------------------------------------------------ 6 | 7 | <# 8 | .NOTES 9 | -------------------------------------------------------------------------------- 10 | Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2014 v4.1.71 11 | Generated on: 2014-10-24 10:21 PM 12 | Generated by: Francois-Xavier Cat 13 | Organization: LazyWinAdmin.com 14 | -------------------------------------------------------------------------------- 15 | .DESCRIPTION 16 | GUI script generated by PowerShell Studio 2014 17 | #> 18 | #---------------------------------------------- 19 | #region Application Functions 20 | #---------------------------------------------- 21 | 22 | function OnApplicationLoad { 23 | #Note: This function is not called in Projects 24 | #Note: This function runs before the form is created 25 | #Note: To get the script directory in the Packager use: Split-Path $hostinvocation.MyCommand.path 26 | #Note: To get the console output in the Packager (Windows Mode) use: $ConsoleOutput (Type: System.Collections.ArrayList) 27 | #Important: Form controls cannot be accessed in this function 28 | #TODO: Add modules and custom code to validate the application load 29 | 30 | return $true #return true for success or false for failure 31 | } 32 | 33 | function OnApplicationExit { 34 | #Note: This function is not called in Projects 35 | #Note: This function runs after the form is closed 36 | #TODO: Add custom code to clean up and unload modules when the application exits 37 | 38 | $script:ExitCode = 0 #Set the exit code for the Packager 39 | } 40 | 41 | #endregion Application Functions 42 | 43 | #---------------------------------------------- 44 | # Generated Form Function 45 | #---------------------------------------------- 46 | function Call-ClipBoard_Paste_psf { 47 | 48 | #---------------------------------------------- 49 | #region Import the Assemblies 50 | #---------------------------------------------- 51 | [void][reflection.assembly]::Load('mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 52 | [void][reflection.assembly]::Load('System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 53 | [void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 54 | [void][reflection.assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 55 | [void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 56 | [void][reflection.assembly]::Load('System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 57 | [void][reflection.assembly]::Load('System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 58 | [void][reflection.assembly]::Load('System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 59 | [void][reflection.assembly]::Load('System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 60 | #endregion Import Assemblies 61 | 62 | #---------------------------------------------- 63 | #region Generated Form Objects 64 | #---------------------------------------------- 65 | [System.Windows.Forms.Application]::EnableVisualStyles() 66 | $form1 = New-Object 'System.Windows.Forms.Form' 67 | $textbox1 = New-Object 'System.Windows.Forms.TextBox' 68 | $buttonPasteClipboard = New-Object 'System.Windows.Forms.Button' 69 | $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' 70 | #endregion Generated Form Objects 71 | 72 | #---------------------------------------------- 73 | # User Generated Script 74 | #---------------------------------------------- 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | $form1_Load={ 83 | #TODO: Initialize Form Controls here 84 | 85 | } 86 | 87 | $buttonPasteClipboard_Click={ 88 | $textbox1.Text = [Windows.Clipboard]::GetText() 89 | } 90 | 91 | # --End User Generated Script-- 92 | #---------------------------------------------- 93 | #region Generated Events 94 | #---------------------------------------------- 95 | 96 | $Form_StateCorrection_Load= 97 | { 98 | #Correct the initial state of the form to prevent the .Net maximized form issue 99 | $form1.WindowState = $InitialFormWindowState 100 | } 101 | 102 | $Form_Cleanup_FormClosed= 103 | { 104 | #Remove all event handlers from the controls 105 | try 106 | { 107 | $buttonPasteClipboard.remove_Click($buttonPasteClipboard_Click) 108 | $form1.remove_Load($form1_Load) 109 | $form1.remove_Load($Form_StateCorrection_Load) 110 | $form1.remove_FormClosed($Form_Cleanup_FormClosed) 111 | } 112 | catch [Exception] 113 | { } 114 | } 115 | #endregion Generated Events 116 | 117 | #---------------------------------------------- 118 | #region Generated Form Code 119 | #---------------------------------------------- 120 | $form1.SuspendLayout() 121 | # 122 | # form1 123 | # 124 | $form1.Controls.Add($textbox1) 125 | $form1.Controls.Add($buttonPasteClipboard) 126 | $form1.ClientSize = '175, 68' 127 | $form1.MaximumSize = '191, 107' 128 | $form1.MinimumSize = '191, 107' 129 | $form1.Name = "form1" 130 | $form1.Text = "Form" 131 | $form1.add_Load($form1_Load) 132 | # 133 | # textbox1 134 | # 135 | $textbox1.Location = '12, 42' 136 | $textbox1.Name = "textbox1" 137 | $textbox1.Size = '155, 20' 138 | $textbox1.TabIndex = 1 139 | # 140 | # buttonPasteClipboard 141 | # 142 | $buttonPasteClipboard.Location = '12, 12' 143 | $buttonPasteClipboard.Name = "buttonPasteClipboard" 144 | $buttonPasteClipboard.Size = '155, 23' 145 | $buttonPasteClipboard.TabIndex = 0 146 | $buttonPasteClipboard.Text = "Paste Clipboard" 147 | $buttonPasteClipboard.UseVisualStyleBackColor = $True 148 | $buttonPasteClipboard.add_Click($buttonPasteClipboard_Click) 149 | $form1.ResumeLayout() 150 | #endregion Generated Form Code 151 | 152 | #---------------------------------------------- 153 | 154 | #Save the initial state of the form 155 | $InitialFormWindowState = $form1.WindowState 156 | #Init the OnLoad event to correct the initial state of the form 157 | $form1.add_Load($Form_StateCorrection_Load) 158 | #Clean up the control events 159 | $form1.add_FormClosed($Form_Cleanup_FormClosed) 160 | #Show the Form 161 | return $form1.ShowDialog() 162 | 163 | } #End Function 164 | 165 | #Call OnApplicationLoad to initialize 166 | if((OnApplicationLoad) -eq $true) 167 | { 168 | #Call the form 169 | Call-ClipBoard_Paste_psf | Out-Null 170 | #Perform cleanup 171 | OnApplicationExit 172 | } 173 | -------------------------------------------------------------------------------- /_Examples/Combobox_reset.Export.ps1: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------ 2 | # Source File Information (DO NOT MODIFY) 3 | # Source ID: dab5d68e-c98b-4cc4-8f62-b0b7b421a6e1 4 | # Source File: C:\Users\Francois-Xavier\SkyDrive\Scripts\PowerShell\GitHub\PowerShellGUI\WinForm_Tips\Combobox_reset.psf 5 | #------------------------------------------------------------------------ 6 | #region File Recovery Data (DO NOT MODIFY) 7 | <#RecoveryData: 8 | uQwAAB+LCAAAAAAABADFV11v2jAUfZ+0/2DlOSKEED6kEIlCK1VjW1VYt7fKSS6dh2Mj26Gkv37O 9 | BywttISJUiEBdu7xufce+xi8Wwj5CkQ6xgoj/UUSzgZGy/A/f0LI+y7IA2GYXhEK33AM/ojHAQ/4 10 | +l6ABNVYyrln7QQV0OAPhAqpdAkDY5pKBXHjJ2ERf5SNKy7i4t1E+x6Z6K7MpN1oZi8TjRKqEgED 11 | BokSmJroJgkoCb9AOuMLYIOg28Vu6HbsvtOGZq9vIKZTGRhzvd4EP6V6/WEUExby2EDhb0IjoVHG 12 | iDMlOJVFvTrtG8GXIFRawkeUAFNT8gSG33L7JnKbnrWJeQWT9cDw9xAfRM5grQy/imrshV2udFIl 13 | ZsJxtJftPnviWXnsBnhYlFzgC75+d2HCcifZb8mx26KxHo75I5uqlOoub4YTItVOn3bRWRFYKcIe 14 | LhkOKOjOzUQCNZDXuheVtHRANvO8k1Ml9MomimXIBSXBKbrlZzS2Z2UfH8Te+lB250PZ2y/Ya+yU 15 | CQ+x0tSGb7dMZLdqQArH2J6IGojCkWy3Z6JWnfgZDq5ZBGuN2bUTq7CF+iZxkSjF2btbRJDT3GY3 16 | zXEmUZGg29Ea7Hr2axpUKGur0HW1CM5RItRJqLgMRM1Ufki4IzLBNDfGCxwuRpxy8bq/Ve8QfcuF 17 | i2fF3+dTL26P6j55PhhKCbHWFOQmtpxJ/XKPfMUMP0CsV2sME8XjXJ9/e8Wuu1ccO5g7PbeDI6fT 18 | Bsf1rC3TS+YTmsEbLEV95+A4+Tk7zJj9KjwPkcCPuYMfz9V05u68O7ftyG1iBx/m+hXT89REhD4g 19 | XKRTECsSwn9JdnR1Iy7gLOWVVWln0aW9Q23bYeEqnlX9q+L/BflCTfK5DAAA#> 20 | #endregion 21 | #======================================================================== 22 | # Code Generated By: SAPIEN Technologies, Inc., PowerShell Studio 2014 v4.1.53 23 | # Generated On: 2014-04-07 10:10 PM 24 | # Generated By: Francois-Xavier Cat 25 | # Organization: LazyWinAdmin.com 26 | #======================================================================== 27 | #---------------------------------------------- 28 | #region Application Functions 29 | #---------------------------------------------- 30 | 31 | function OnApplicationLoad { 32 | #Note: This function is not called in Projects 33 | #Note: This function runs before the form is created 34 | #Note: To get the script directory in the Packager use: Split-Path $hostinvocation.MyCommand.path 35 | #Note: To get the console output in the Packager (Windows Mode) use: $ConsoleOutput (Type: System.Collections.ArrayList) 36 | #Important: Form controls cannot be accessed in this function 37 | #TODO: Add modules and custom code to validate the application load 38 | 39 | return $true #return true for success or false for failure 40 | } 41 | 42 | function OnApplicationExit { 43 | #Note: This function is not called in Projects 44 | #Note: This function runs after the form is closed 45 | #TODO: Add custom code to clean up and unload modules when the application exits 46 | 47 | $script:ExitCode = 0 #Set the exit code for the Packager 48 | } 49 | 50 | #endregion Application Functions 51 | 52 | #---------------------------------------------- 53 | # Generated Form Function 54 | #---------------------------------------------- 55 | function Call-Combobox_reset_psf { 56 | 57 | #---------------------------------------------- 58 | #region Import the Assemblies 59 | #---------------------------------------------- 60 | [void][reflection.assembly]::Load('mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 61 | [void][reflection.assembly]::Load('System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 62 | [void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 63 | [void][reflection.assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 64 | [void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 65 | [void][reflection.assembly]::Load('System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 66 | [void][reflection.assembly]::Load('System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 67 | [void][reflection.assembly]::Load('System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 68 | [void][reflection.assembly]::Load('System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 69 | #endregion Import Assemblies 70 | 71 | #---------------------------------------------- 72 | #region Generated Form Objects 73 | #---------------------------------------------- 74 | [System.Windows.Forms.Application]::EnableVisualStyles() 75 | $formLazyWinAdmincom = New-Object 'System.Windows.Forms.Form' 76 | $combobox1 = New-Object 'System.Windows.Forms.ComboBox' 77 | $buttonReset = New-Object 'System.Windows.Forms.Button' 78 | $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' 79 | #endregion Generated Form Objects 80 | 81 | #---------------------------------------------- 82 | # User Generated Script 83 | #---------------------------------------------- 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | $formLazyWinAdmincom_Load={ 92 | #TODO: Initialize Form Controls here 93 | 94 | } 95 | 96 | #region Control Helper Functions 97 | function Load-ComboBox 98 | { 99 | <# 100 | .SYNOPSIS 101 | This functions helps you load items into a ComboBox. 102 | 103 | .DESCRIPTION 104 | Use this function to dynamically load items into the ComboBox control. 105 | 106 | .PARAMETER ComboBox 107 | The ComboBox control you want to add items to. 108 | 109 | .PARAMETER Items 110 | The object or objects you wish to load into the ComboBox's Items collection. 111 | 112 | .PARAMETER DisplayMember 113 | Indicates the property to display for the items in this control. 114 | 115 | .PARAMETER Append 116 | Adds the item(s) to the ComboBox without clearing the Items collection. 117 | 118 | .EXAMPLE 119 | Load-ComboBox $combobox1 "Red", "White", "Blue" 120 | 121 | .EXAMPLE 122 | Load-ComboBox $combobox1 "Red" -Append 123 | Load-ComboBox $combobox1 "White" -Append 124 | Load-ComboBox $combobox1 "Blue" -Append 125 | 126 | .EXAMPLE 127 | Load-ComboBox $combobox1 (Get-Process) "ProcessName" 128 | #> 129 | Param ( 130 | [ValidateNotNull()] 131 | [Parameter(Mandatory=$true)] 132 | [System.Windows.Forms.ComboBox]$ComboBox, 133 | [ValidateNotNull()] 134 | [Parameter(Mandatory=$true)] 135 | $Items, 136 | [Parameter(Mandatory=$false)] 137 | [string]$DisplayMember, 138 | [switch]$Append 139 | ) 140 | 141 | if(-not $Append) 142 | { 143 | $ComboBox.Items.Clear() 144 | } 145 | 146 | if($Items -is [Object[]]) 147 | { 148 | $ComboBox.Items.AddRange($Items) 149 | } 150 | elseif ($Items -is [Array]) 151 | { 152 | $ComboBox.BeginUpdate() 153 | foreach($obj in $Items) 154 | { 155 | $ComboBox.Items.Add($obj) 156 | } 157 | $ComboBox.EndUpdate() 158 | } 159 | else 160 | { 161 | $ComboBox.Items.Add($Items) 162 | } 163 | 164 | $ComboBox.DisplayMember = $DisplayMember 165 | } 166 | #endregion 167 | 168 | $buttonReset_Click={ 169 | $combobox1.SelectedIndex = -1 170 | } 171 | 172 | # --End User Generated Script-- 173 | #---------------------------------------------- 174 | #region Generated Events 175 | #---------------------------------------------- 176 | 177 | $Form_StateCorrection_Load= 178 | { 179 | #Correct the initial state of the form to prevent the .Net maximized form issue 180 | $formLazyWinAdmincom.WindowState = $InitialFormWindowState 181 | } 182 | 183 | $Form_Cleanup_FormClosed= 184 | { 185 | #Remove all event handlers from the controls 186 | try 187 | { 188 | $buttonReset.remove_Click($buttonReset_Click) 189 | $formLazyWinAdmincom.remove_Load($formLazyWinAdmincom_Load) 190 | $formLazyWinAdmincom.remove_Load($Form_StateCorrection_Load) 191 | $formLazyWinAdmincom.remove_FormClosed($Form_Cleanup_FormClosed) 192 | } 193 | catch [Exception] 194 | { } 195 | } 196 | #endregion Generated Events 197 | 198 | #---------------------------------------------- 199 | #region Generated Form Code 200 | #---------------------------------------------- 201 | $formLazyWinAdmincom.SuspendLayout() 202 | # 203 | # formLazyWinAdmincom 204 | # 205 | $formLazyWinAdmincom.Controls.Add($combobox1) 206 | $formLazyWinAdmincom.Controls.Add($buttonReset) 207 | $formLazyWinAdmincom.ClientSize = '259, 50' 208 | $formLazyWinAdmincom.Name = "formLazyWinAdmincom" 209 | $formLazyWinAdmincom.Text = "LazyWinAdmin.com" 210 | $formLazyWinAdmincom.add_Load($formLazyWinAdmincom_Load) 211 | # 212 | # combobox1 213 | # 214 | $combobox1.DropDownStyle = 'DropDownList' 215 | $combobox1.FormattingEnabled = $True 216 | [void]$combobox1.Items.Add("Item1") 217 | [void]$combobox1.Items.Add("Item2") 218 | [void]$combobox1.Items.Add("Item3") 219 | [void]$combobox1.Items.Add("Item4") 220 | $combobox1.Location = '12, 12' 221 | $combobox1.Name = "combobox1" 222 | $combobox1.Size = '158, 21' 223 | $combobox1.TabIndex = 1 224 | # 225 | # buttonReset 226 | # 227 | $buttonReset.Location = '176, 10' 228 | $buttonReset.Name = "buttonReset" 229 | $buttonReset.Size = '75, 23' 230 | $buttonReset.TabIndex = 0 231 | $buttonReset.Text = "reset" 232 | $buttonReset.UseVisualStyleBackColor = $True 233 | $buttonReset.add_Click($buttonReset_Click) 234 | $formLazyWinAdmincom.ResumeLayout($false) 235 | #endregion Generated Form Code 236 | 237 | #---------------------------------------------- 238 | 239 | #Save the initial state of the form 240 | $InitialFormWindowState = $formLazyWinAdmincom.WindowState 241 | #Init the OnLoad event to correct the initial state of the form 242 | $formLazyWinAdmincom.add_Load($Form_StateCorrection_Load) 243 | #Clean up the control events 244 | $formLazyWinAdmincom.add_FormClosed($Form_Cleanup_FormClosed) 245 | #Show the Form 246 | return $formLazyWinAdmincom.ShowDialog() 247 | 248 | } #End Function 249 | 250 | #Call OnApplicationLoad to initialize 251 | if((OnApplicationLoad) -eq $true) 252 | { 253 | #Call the form 254 | Call-Combobox_reset_psf | Out-Null 255 | #Perform cleanup 256 | OnApplicationExit 257 | } 258 | -------------------------------------------------------------------------------- /_Examples/Combobox_reset.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lazywinadmin/PowerShellGUI/6a8a87ab41915fe5c5462025cf46dc97d26a27dc/_Examples/Combobox_reset.exe -------------------------------------------------------------------------------- /_Examples/Combobox_reset.psf.psbuild: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lazywinadmin/PowerShellGUI/6a8a87ab41915fe5c5462025cf46dc97d26a27dc/_Examples/Combobox_reset.psf.psbuild -------------------------------------------------------------------------------- /_Examples/DataGridView/DataGridView_CellMouseEnter.Export.ps1: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------ 2 | # Source File Information (DO NOT MODIFY) 3 | # Source ID: a8049107-69dd-46f7-880d-8c4b7cf593c8 4 | # Source File: DataGridView_CellMouseEnter.psf 5 | #------------------------------------------------------------------------ 6 | #region File Recovery Data (DO NOT MODIFY) 7 | <#RecoveryData: 8 | 2wsAAB+LCAAAAAAABAC9Vl1v2jAUfZ+0/2DlmQEhBFopRKK0rNPoVo2O7Q05yYV6OHZlO7Tpr98N 9 | gYqPZgkTrZAQSXzuObnn+BrvB4RyCSq9pIYS/KGZFD2rVbct/+MHQrzvis2ZoHzIOHyjMfjZws+K 10 | RRMGj9MBcH4jEw1XwoCqP+iZ1zhA5HWCPxAaYtIH6FnjVBuI67+YiOSjrg+livPvGnntUY1M1sLa 11 | 9Wb2qZFBwk2ioCcgMYryGrlNAs7Cr5DeyQWIXtDtUjd0O/a504bm2blFBErpWTOsN6LPKdbvRzET 12 | m7exSHjPeKQQag2kMEpynXcAtd8q+QDKpOsa/cTIcUg5XLIYRKYLl3ZqxHa8xmZpGfRGRmD5Q2Qq 13 | xQw4A2HG7BkBbqdVI61OqxSUNd7yi962FH4HT8byt6HkE9l2nuw6f1jwaomi19VGkkbFYqbZY6+x 14 | AmzQ5WkZ0QD4m8eFZyz2v8JR4PHKrTuVwEFnDgEjGVKDci3fbrYxRt0KmNzfXF6F5bkex301pK/Y 15 | T4MvIoInyz9MWlFYCrTgPFh5Wd3Zi8QYKd7c2mBFg2pD0Po4h7cMw+1oV+lR7tcOZ2Xbumhb6zjb 16 | qmQit626mJ8aJkwnlI9NyuGChouB5FIVx3x7BOAQCxd7DZiubu7t/KPjsj2V3jw0EZLNkWyJZEeO 17 | BWxWEotroBGKuQY2v1/N9Pwg2MyM46YFhs85rxy+He2Vw+c6Z5g+u1KgXuLXLI3Dzumxp226f7YU 18 | BmT3oq81xGgj6M3a9Z3Uj3UoFWfBCaLgNV6q7rPk4XsPjpMHvJwx22fvQ6ToIxPz/+FqOjN31p3Z 19 | duQ2qUPLuX7H/F3eaSAVnJ7o5TKPvNfY/jPv/wUDXtte2wsAAA==#> 20 | #endregion 21 | 22 | <# 23 | .NOTES 24 | -------------------------------------------------------------------------------- 25 | Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2016 v5.3.130 26 | Generated on: 2016-11-22 10:13 PM 27 | Generated by: Francois-Xavier Cat 28 | Organization: LazyWinAdmin.com 29 | -------------------------------------------------------------------------------- 30 | .DESCRIPTION 31 | GUI script generated by PowerShell Studio 2016 32 | #> 33 | #---------------------------------------------- 34 | #region Application Functions 35 | #---------------------------------------------- 36 | 37 | #endregion Application Functions 38 | 39 | #---------------------------------------------- 40 | # Generated Form Function 41 | #---------------------------------------------- 42 | function Show-DataGridView_CellMouseEnter_psf { 43 | 44 | #---------------------------------------------- 45 | #region Import the Assemblies 46 | #---------------------------------------------- 47 | [void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 48 | [void][reflection.assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 49 | [void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 50 | #endregion Import Assemblies 51 | 52 | #---------------------------------------------- 53 | #region Generated Form Objects 54 | #---------------------------------------------- 55 | [System.Windows.Forms.Application]::EnableVisualStyles() 56 | $formLazyWinAdminDataGrid = New-Object 'System.Windows.Forms.Form' 57 | $label1 = New-Object 'System.Windows.Forms.Label' 58 | $buttonProcess = New-Object 'System.Windows.Forms.Button' 59 | $datagridview1 = New-Object 'System.Windows.Forms.DataGridView' 60 | $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' 61 | #endregion Generated Form Objects 62 | 63 | #---------------------------------------------- 64 | # User Generated Script 65 | #---------------------------------------------- 66 | 67 | $formLazyWinAdminDataGrid_Load={ 68 | #TODO: Initialize Form Controls here 69 | 70 | } 71 | 72 | #region Control Helper Functions 73 | function Load-DataGridView 74 | { 75 | <# 76 | .SYNOPSIS 77 | This functions helps you load items into a DataGridView. 78 | 79 | .DESCRIPTION 80 | Use this function to dynamically load items into the DataGridView control. 81 | 82 | .PARAMETER DataGridView 83 | The DataGridView control you want to add items to. 84 | 85 | .PARAMETER Item 86 | The object or objects you wish to load into the DataGridView's items collection. 87 | 88 | .PARAMETER DataMember 89 | Sets the name of the list or table in the data source for which the DataGridView is displaying data. 90 | 91 | .PARAMETER AutoSizeColumns 92 | Resizes DataGridView control's columns after loading the items. 93 | #> 94 | Param ( 95 | [ValidateNotNull()] 96 | [Parameter(Mandatory=$true)] 97 | [System.Windows.Forms.DataGridView]$DataGridView, 98 | [ValidateNotNull()] 99 | [Parameter(Mandatory=$true)] 100 | $Item, 101 | [Parameter(Mandatory=$false)] 102 | [string]$DataMember, 103 | [System.Windows.Forms.DataGridViewAutoSizeColumnMode]$AutoSizeColumns = 'None' 104 | ) 105 | $DataGridView.SuspendLayout() 106 | $DataGridView.DataMember = $DataMember 107 | 108 | if ($Item -is [System.Data.DataSet] -and $Item.Tables.Count -gt 0) 109 | { 110 | $DataGridView.DataSource = $Item.Tables[0] 111 | } 112 | elseif ($Item -is [System.ComponentModel.IListSource]` 113 | -or $Item -is [System.ComponentModel.IBindingList] -or $Item -is [System.ComponentModel.IBindingListView] ) 114 | { 115 | $DataGridView.DataSource = $Item 116 | } 117 | else 118 | { 119 | $array = New-Object System.Collections.ArrayList 120 | 121 | if ($Item -is [System.Collections.IList]) 122 | { 123 | $array.AddRange($Item) 124 | } 125 | else 126 | { 127 | $array.Add($Item) 128 | } 129 | $DataGridView.DataSource = $array 130 | } 131 | 132 | if ($AutoSizeColumns -ne 'None') 133 | { 134 | $DataGridView.AutoResizeColumns($AutoSizeColumns) 135 | } 136 | 137 | $DataGridView.ResumeLayout() 138 | } 139 | 140 | function ConvertTo-DataTable 141 | { 142 | <# 143 | .SYNOPSIS 144 | Converts objects into a DataTable. 145 | 146 | .DESCRIPTION 147 | Converts objects into a DataTable, which are used for DataBinding. 148 | 149 | .PARAMETER InputObject 150 | The input to convert into a DataTable. 151 | 152 | .PARAMETER Table 153 | The DataTable you wish to load the input into. 154 | 155 | .PARAMETER RetainColumns 156 | This switch tells the function to keep the DataTable's existing columns. 157 | 158 | .PARAMETER FilterWMIProperties 159 | This switch removes WMI properties that start with an underline. 160 | 161 | .EXAMPLE 162 | $DataTable = ConvertTo-DataTable -InputObject (Get-Process) 163 | #> 164 | [OutputType([System.Data.DataTable])] 165 | param( 166 | [ValidateNotNull()] 167 | $InputObject, 168 | [ValidateNotNull()] 169 | [System.Data.DataTable]$Table, 170 | [switch]$RetainColumns, 171 | [switch]$FilterWMIProperties) 172 | 173 | if($null -eq $Table) 174 | { 175 | $Table = New-Object System.Data.DataTable 176 | } 177 | 178 | if ($InputObject -is [System.Data.DataTable]) 179 | { 180 | $Table = $InputObject 181 | } 182 | elseif ($InputObject -is [System.Data.DataSet] -and $InputObject.Tables.Count -gt 0) 183 | { 184 | $Table = $InputObject.Tables[0] 185 | } 186 | else 187 | { 188 | if (-not $RetainColumns -or $Table.Columns.Count -eq 0) 189 | { 190 | #Clear out the Table Contents 191 | $Table.Clear() 192 | 193 | if ($null -eq $InputObject) { return } #Empty Data 194 | 195 | $object = $null 196 | #find the first non null value 197 | foreach ($item in $InputObject) 198 | { 199 | if ($null -ne $item) 200 | { 201 | $object = $item 202 | break 203 | } 204 | } 205 | 206 | if ($null -eq $object) { return } #All null then empty 207 | 208 | #Get all the properties in order to create the columns 209 | foreach ($prop in $object.PSObject.Get_Properties()) 210 | { 211 | if (-not $FilterWMIProperties -or -not $prop.Name.StartsWith('__')) #filter out WMI properties 212 | { 213 | #Get the type from the Definition string 214 | $type = $null 215 | 216 | if ($null -ne $prop.Value) 217 | { 218 | try { $type = $prop.Value.GetType() } 219 | catch { } 220 | } 221 | 222 | if ($null -ne $type) # -and [System.Type]::GetTypeCode($type) -ne 'Object') 223 | { 224 | [void]$table.Columns.Add($prop.Name, $type) 225 | } 226 | else #Type info not found 227 | { 228 | [void]$table.Columns.Add($prop.Name) 229 | } 230 | } 231 | } 232 | 233 | if ($object -is [System.Data.DataRow]) 234 | { 235 | foreach ($item in $InputObject) 236 | { 237 | $Table.Rows.Add($item) 238 | } 239 | return @( ,$Table) 240 | } 241 | } 242 | else 243 | { 244 | $Table.Rows.Clear() 245 | } 246 | 247 | foreach ($item in $InputObject) 248 | { 249 | $row = $table.NewRow() 250 | 251 | if ($item) 252 | { 253 | foreach ($prop in $item.PSObject.Get_Properties()) 254 | { 255 | if ($table.Columns.Contains($prop.Name)) 256 | { 257 | $row.Item($prop.Name) = $prop.Value 258 | } 259 | } 260 | } 261 | [void]$table.Rows.Add($row) 262 | } 263 | } 264 | 265 | return @(,$Table) 266 | } 267 | #endregion 268 | 269 | $buttonProcess_Click={ 270 | #TODO: Place custom script here 271 | Load-DataGridView -DataGridView $datagridview1 -Item (Get-Process) 272 | 273 | } 274 | 275 | $datagridview1_CellMouseEnter=[System.Windows.Forms.DataGridViewCellEventHandler]{ 276 | #Event Argument: $_ = [System.Windows.Forms.DataGridViewCellEventArgs] 277 | #TODO: Place custom script here 278 | 279 | 280 | 281 | $label1.Text = $datagridview1.rows[$_.RowIndex].Cells[$_.ColumnIndex].Value 282 | } 283 | 284 | # --End User Generated Script-- 285 | #---------------------------------------------- 286 | #region Generated Events 287 | #---------------------------------------------- 288 | 289 | $Form_StateCorrection_Load= 290 | { 291 | #Correct the initial state of the form to prevent the .Net maximized form issue 292 | $formLazyWinAdminDataGrid.WindowState = $InitialFormWindowState 293 | } 294 | 295 | $Form_Cleanup_FormClosed= 296 | { 297 | #Remove all event handlers from the controls 298 | try 299 | { 300 | $buttonProcess.remove_Click($buttonProcess_Click) 301 | $datagridview1.remove_CellMouseEnter($datagridview1_CellMouseEnter) 302 | $formLazyWinAdminDataGrid.remove_Load($formLazyWinAdminDataGrid_Load) 303 | $formLazyWinAdminDataGrid.remove_Load($Form_StateCorrection_Load) 304 | $formLazyWinAdminDataGrid.remove_FormClosed($Form_Cleanup_FormClosed) 305 | } 306 | catch { Out-Null <# Prevent PSScriptAnalyzer warning #> } 307 | } 308 | #endregion Generated Events 309 | 310 | #---------------------------------------------- 311 | #region Generated Form Code 312 | #---------------------------------------------- 313 | $formLazyWinAdminDataGrid.SuspendLayout() 314 | # 315 | # formLazyWinAdminDataGrid 316 | # 317 | $formLazyWinAdminDataGrid.Controls.Add($label1) 318 | $formLazyWinAdminDataGrid.Controls.Add($buttonProcess) 319 | $formLazyWinAdminDataGrid.Controls.Add($datagridview1) 320 | $formLazyWinAdminDataGrid.AutoScaleDimensions = '6, 13' 321 | $formLazyWinAdminDataGrid.AutoScaleMode = 'Font' 322 | $formLazyWinAdminDataGrid.ClientSize = '562, 262' 323 | $formLazyWinAdminDataGrid.Name = 'formLazyWinAdminDataGrid' 324 | $formLazyWinAdminDataGrid.Text = 'LazyWinAdmin - DataGridView CellMouseEnter' 325 | $formLazyWinAdminDataGrid.add_Load($formLazyWinAdminDataGrid_Load) 326 | # 327 | # label1 328 | # 329 | $label1.AutoSize = $True 330 | $label1.Location = '104, 17' 331 | $label1.Name = 'label1' 332 | $label1.Size = '35, 13' 333 | $label1.TabIndex = 2 334 | $label1.Text = 'label1' 335 | # 336 | # buttonProcess 337 | # 338 | $buttonProcess.Location = '12, 12' 339 | $buttonProcess.Name = 'buttonProcess' 340 | $buttonProcess.Size = '75, 23' 341 | $buttonProcess.TabIndex = 1 342 | $buttonProcess.Text = 'Process' 343 | $buttonProcess.UseVisualStyleBackColor = $True 344 | $buttonProcess.add_Click($buttonProcess_Click) 345 | # 346 | # datagridview1 347 | # 348 | $datagridview1.ColumnHeadersHeightSizeMode = 'AutoSize' 349 | $datagridview1.Location = '12, 39' 350 | $datagridview1.Name = 'datagridview1' 351 | $datagridview1.Size = '538, 211' 352 | $datagridview1.TabIndex = 0 353 | $datagridview1.add_CellMouseEnter($datagridview1_CellMouseEnter) 354 | $formLazyWinAdminDataGrid.ResumeLayout() 355 | #endregion Generated Form Code 356 | 357 | #---------------------------------------------- 358 | 359 | #Save the initial state of the form 360 | $InitialFormWindowState = $formLazyWinAdminDataGrid.WindowState 361 | #Init the OnLoad event to correct the initial state of the form 362 | $formLazyWinAdminDataGrid.add_Load($Form_StateCorrection_Load) 363 | #Clean up the control events 364 | $formLazyWinAdminDataGrid.add_FormClosed($Form_Cleanup_FormClosed) 365 | #Show the Form 366 | return $formLazyWinAdminDataGrid.ShowDialog() 367 | 368 | } #End Function 369 | 370 | #Call the form 371 | Show-DataGridView_CellMouseEnter_psf | Out-Null 372 | -------------------------------------------------------------------------------- /_Examples/DataGridView/DataGridView_ColumnHeader_Sorting/DataGridView_ColumnHeader_Sorting.Export.ps1: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------ 2 | # Source File Information (DO NOT MODIFY) 3 | # Source ID: f426f1e9-20a8-4395-ab6f-034a4440c281 4 | # Source File: DataGridView_ColumnHeader_Sorting.psf 5 | #------------------------------------------------------------------------ 6 | 7 | <# 8 | .NOTES 9 | -------------------------------------------------------------------------------- 10 | Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2014 v4.1.75 11 | Generated on: 2015-01-10 7:08 PM 12 | Generated by: Francois-Xavier Cat 13 | Organization: LazyWinAdmin.com 14 | -------------------------------------------------------------------------------- 15 | .DESCRIPTION 16 | GUI script generated by PowerShell Studio 2014 17 | #> 18 | #---------------------------------------------- 19 | #region Application Functions 20 | #---------------------------------------------- 21 | 22 | function OnApplicationLoad { 23 | #Note: This function is not called in Projects 24 | #Note: This function runs before the form is created 25 | #Note: To get the script directory in the Packager use: Split-Path $hostinvocation.MyCommand.path 26 | #Note: To get the console output in the Packager (Windows Mode) use: $ConsoleOutput (Type: System.Collections.ArrayList) 27 | #Important: Form controls cannot be accessed in this function 28 | #TODO: Add modules and custom code to validate the application load 29 | 30 | return $true #return true for success or false for failure 31 | } 32 | 33 | function OnApplicationExit { 34 | #Note: This function is not called in Projects 35 | #Note: This function runs after the form is closed 36 | #TODO: Add custom code to clean up and unload modules when the application exits 37 | 38 | $script:ExitCode = 0 #Set the exit code for the Packager 39 | } 40 | 41 | #endregion Application Functions 42 | 43 | #---------------------------------------------- 44 | # Generated Form Function 45 | #---------------------------------------------- 46 | function Call-DataGridView_ColumnHeader_Sorting_psf { 47 | 48 | #---------------------------------------------- 49 | #region Import the Assemblies 50 | #---------------------------------------------- 51 | [void][reflection.assembly]::Load('mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 52 | [void][reflection.assembly]::Load('System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 53 | [void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 54 | [void][reflection.assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 55 | [void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 56 | [void][reflection.assembly]::Load('System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 57 | [void][reflection.assembly]::Load('System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 58 | [void][reflection.assembly]::Load('System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 59 | [void][reflection.assembly]::Load('System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 60 | #endregion Import Assemblies 61 | 62 | #---------------------------------------------- 63 | #region Generated Form Objects 64 | #---------------------------------------------- 65 | [System.Windows.Forms.Application]::EnableVisualStyles() 66 | $form1 = New-Object 'System.Windows.Forms.Form' 67 | $datagridview1 = New-Object 'System.Windows.Forms.DataGridView' 68 | $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' 69 | #endregion Generated Form Objects 70 | 71 | #---------------------------------------------- 72 | # User Generated Script 73 | #---------------------------------------------- 74 | 75 | 76 | 77 | 78 | $form1_Load = { 79 | $Processes = Get-Process | Select-Object -Property Name, id, ws 80 | $ProcessesDT = ConvertTo-DataTable -InputObject $Processes 81 | Load-DataGridView -DataGridView $datagridview1 -Item $ProcessesDT 82 | } 83 | 84 | #region Control Helper Functions 85 | function Load-DataGridView 86 | { 87 | <# 88 | .SYNOPSIS 89 | This functions helps you load items into a DataGridView. 90 | 91 | .DESCRIPTION 92 | Use this function to dynamically load items into the DataGridView control. 93 | 94 | .PARAMETER DataGridView 95 | The ComboBox control you want to add items to. 96 | 97 | .PARAMETER Item 98 | The object or objects you wish to load into the ComboBox's items collection. 99 | 100 | .PARAMETER DataMember 101 | Sets the name of the list or table in the data source for which the DataGridView is displaying data. 102 | 103 | #> 104 | Param ( 105 | [ValidateNotNull()] 106 | [Parameter(Mandatory=$true)] 107 | [System.Windows.Forms.DataGridView]$DataGridView, 108 | [ValidateNotNull()] 109 | [Parameter(Mandatory=$true)] 110 | $Item, 111 | [Parameter(Mandatory=$false)] 112 | [string]$DataMember 113 | ) 114 | $DataGridView.SuspendLayout() 115 | $DataGridView.DataMember = $DataMember 116 | 117 | if ($Item -is [System.ComponentModel.IListSource]` 118 | -or $Item -is [System.ComponentModel.IBindingList] -or $Item -is [System.ComponentModel.IBindingListView] ) 119 | { 120 | $DataGridView.DataSource = $Item 121 | } 122 | else 123 | { 124 | $array = New-Object System.Collections.ArrayList 125 | 126 | if ($Item -is [System.Collections.IList]) 127 | { 128 | $array.AddRange($Item) 129 | } 130 | else 131 | { 132 | $array.Add($Item) 133 | } 134 | $DataGridView.DataSource = $array 135 | } 136 | 137 | $DataGridView.ResumeLayout() 138 | } 139 | 140 | function ConvertTo-DataTable 141 | { 142 | <# 143 | .SYNOPSIS 144 | Converts objects into a DataTable. 145 | 146 | .DESCRIPTION 147 | Converts objects into a DataTable, which are used for DataBinding. 148 | 149 | .PARAMETER InputObject 150 | The input to convert into a DataTable. 151 | 152 | .PARAMETER Table 153 | The DataTable you wish to load the input into. 154 | 155 | .PARAMETER RetainColumns 156 | This switch tells the function to keep the DataTable's existing columns. 157 | 158 | .PARAMETER FilterWMIProperties 159 | This switch removes WMI properties that start with an underline. 160 | 161 | .EXAMPLE 162 | $DataTable = ConvertTo-DataTable -InputObject (Get-Process) 163 | #> 164 | [OutputType([System.Data.DataTable])] 165 | param ( 166 | [ValidateNotNull()] 167 | $InputObject, 168 | [ValidateNotNull()] 169 | [System.Data.DataTable]$Table, 170 | [switch]$RetainColumns, 171 | [switch]$FilterWMIProperties) 172 | 173 | if ($Table -eq $null) 174 | { 175 | $Table = New-Object System.Data.DataTable 176 | } 177 | 178 | if ($InputObject -is [System.Data.DataTable]) 179 | { 180 | $Table = $InputObject 181 | } 182 | else 183 | { 184 | if (-not $RetainColumns -or $Table.Columns.Count -eq 0) 185 | { 186 | #Clear out the Table Contents 187 | $Table.Clear() 188 | 189 | if ($InputObject -eq $null) { return } #Empty Data 190 | 191 | $object = $null 192 | #find the first non null value 193 | foreach ($item in $InputObject) 194 | { 195 | if ($item -ne $null) 196 | { 197 | $object = $item 198 | break 199 | } 200 | } 201 | 202 | if ($object -eq $null) { return } #All null then empty 203 | 204 | #Get all the properties in order to create the columns 205 | foreach ($prop in $object.PSObject.Get_Properties()) 206 | { 207 | if (-not $FilterWMIProperties -or -not $prop.Name.StartsWith('__'))#filter out WMI properties 208 | { 209 | #Get the type from the Definition string 210 | $type = $null 211 | 212 | if ($prop.Value -ne $null) 213 | { 214 | try { $type = $prop.Value.GetType() } 215 | catch { } 216 | } 217 | 218 | if ($type -ne $null) # -and [System.Type]::GetTypeCode($type) -ne 'Object') 219 | { 220 | [void]$table.Columns.Add($prop.Name, $type) 221 | } 222 | else #Type info not found 223 | { 224 | [void]$table.Columns.Add($prop.Name) 225 | } 226 | } 227 | } 228 | 229 | if ($object -is [System.Data.DataRow]) 230 | { 231 | foreach ($item in $InputObject) 232 | { 233 | $Table.Rows.Add($item) 234 | } 235 | return @(, $Table) 236 | } 237 | } 238 | else 239 | { 240 | $Table.Rows.Clear() 241 | } 242 | 243 | foreach ($item in $InputObject) 244 | { 245 | $row = $table.NewRow() 246 | 247 | if ($item) 248 | { 249 | foreach ($prop in $item.PSObject.Get_Properties()) 250 | { 251 | if ($table.Columns.Contains($prop.Name)) 252 | { 253 | $row.Item($prop.Name) = $prop.Value 254 | } 255 | } 256 | } 257 | [void]$table.Rows.Add($row) 258 | } 259 | } 260 | 261 | return @(, $Table) 262 | } 263 | 264 | function Out-DataTable 265 | { 266 | <# 267 | .SYNOPSIS 268 | Creates a DataTable for an object 269 | .DESCRIPTION 270 | Creates a DataTable based on an objects properties. 271 | .INPUTS 272 | Object 273 | Any object can be piped to Out-DataTable 274 | .OUTPUTS 275 | System.Data.DataTable 276 | .EXAMPLE 277 | $dt = Get-psdrive| Out-DataTable 278 | This example creates a DataTable from the properties of Get-psdrive and assigns output to $dt variable 279 | .NOTES 280 | Adapted from script by Marc van Orsouw see link 281 | Version History 282 | v1.0 - Chad Miller - Initial Release 283 | v1.1 - Chad Miller - Fixed Issue with Properties 284 | v1.2 - Chad Miller - Added setting column datatype by property as suggested by emp0 285 | v1.3 - Chad Miller - Corrected issue with setting datatype on empty properties 286 | v1.4 - Chad Miller - Corrected issue with DBNull 287 | v1.5 - Chad Miller - Updated example 288 | v1.6 - Chad Miller - Added column datatype logic with default to string 289 | v1.7 - Chad Miller - Fixed issue with IsArray 290 | .LINK 291 | http://thepowershellguy.com/blogs/posh/archive/2007/01/21/powershell-gui-scripblock-monitor-script.aspx 292 | #> 293 | [CmdletBinding()] 294 | param ([Parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true)] [PSObject[]]$InputObject) 295 | 296 | Begin 297 | { 298 | function Get-Type 299 | { 300 | param ($type) 301 | 302 | $types = @( 303 | 'System.Boolean', 304 | 'System.Byte[]', 305 | 'System.Byte', 306 | 'System.Char', 307 | 'System.Datetime', 308 | 'System.Decimal', 309 | 'System.Double', 310 | 'System.Guid', 311 | 'System.Int16', 312 | 'System.Int32', 313 | 'System.Int64', 314 | 'System.Single', 315 | 'System.UInt16', 316 | 'System.UInt32', 317 | 'System.UInt64') 318 | 319 | if ($types -contains $type) 320 | { 321 | Write-Output "$type" 322 | } 323 | else 324 | { 325 | Write-Output 'System.String' 326 | 327 | } 328 | } #Get-Type 329 | 330 | $dt = new-object Data.datatable 331 | $First = $true 332 | } 333 | Process 334 | { 335 | foreach ($object in $InputObject) 336 | { 337 | $DR = $DT.NewRow() 338 | foreach ($property in $object.PsObject.get_properties()) 339 | { 340 | if ($first) 341 | { 342 | $Col = new-object Data.DataColumn 343 | $Col.ColumnName = $property.Name.ToString() 344 | if ($property.value) 345 | { 346 | if ($property.value -isnot [System.DBNull]) 347 | { 348 | $Col.DataType = [System.Type]::GetType("$(Get-Type $property.TypeNameOfValue)") 349 | } 350 | } 351 | $DT.Columns.Add($Col) 352 | } 353 | if ($property.Gettype().IsArray) 354 | { 355 | $DR.Item($property.Name) = $property.value | ConvertTo-XML -AS String -NoTypeInformation -Depth 1 356 | } 357 | else 358 | { 359 | $DR.Item($property.Name) = $property.value 360 | } 361 | } 362 | $DT.Rows.Add($DR) 363 | $First = $false 364 | } 365 | } 366 | 367 | End 368 | { 369 | Write-Output @(, ($dt)) 370 | } 371 | 372 | } #Out-DataTable 373 | 374 | #endregion 375 | 376 | $datagridview1_ColumnHeaderMouseClick=[System.Windows.Forms.DataGridViewCellMouseEventHandler]{ 377 | #Event Argument: $_ = [System.Windows.Forms.DataGridViewCellMouseEventArgs] 378 | if ($datagridview1.DataSource -is [System.Data.DataTable]) 379 | { 380 | $column = $datagridview1.Columns[$_.ColumnIndex] 381 | $direction = [System.ComponentModel.ListSortDirection]::Ascending 382 | 383 | if ($column.HeaderCell.SortGlyphDirection -eq 'Descending') 384 | { 385 | $direction = [System.ComponentModel.ListSortDirection]::Descending 386 | } 387 | 388 | $datagridview1.Sort($datagridview1.Columns[$_.ColumnIndex], $direction) 389 | } 390 | } 391 | # --End User Generated Script-- 392 | #---------------------------------------------- 393 | #region Generated Events 394 | #---------------------------------------------- 395 | 396 | $Form_StateCorrection_Load= 397 | { 398 | #Correct the initial state of the form to prevent the .Net maximized form issue 399 | $form1.WindowState = $InitialFormWindowState 400 | } 401 | 402 | $Form_Cleanup_FormClosed= 403 | { 404 | #Remove all event handlers from the controls 405 | try 406 | { 407 | $datagridview1.remove_ColumnHeaderMouseClick($datagridview1_ColumnHeaderMouseClick) 408 | $form1.remove_Load($form1_Load) 409 | $form1.remove_Load($Form_StateCorrection_Load) 410 | $form1.remove_FormClosed($Form_Cleanup_FormClosed) 411 | } 412 | catch [Exception] 413 | { } 414 | } 415 | #endregion Generated Events 416 | 417 | #---------------------------------------------- 418 | #region Generated Form Code 419 | #---------------------------------------------- 420 | $form1.SuspendLayout() 421 | # 422 | # form1 423 | # 424 | $form1.Controls.Add($datagridview1) 425 | $form1.ClientSize = '263, 173' 426 | $form1.Name = "form1" 427 | $form1.Text = "Form" 428 | $form1.add_Load($form1_Load) 429 | # 430 | # datagridview1 431 | # 432 | $datagridview1.ColumnHeadersHeightSizeMode = 'AutoSize' 433 | $datagridview1.Dock = 'Fill' 434 | $datagridview1.Location = '0, 0' 435 | $datagridview1.Name = "datagridview1" 436 | $datagridview1.Size = '263, 173' 437 | $datagridview1.TabIndex = 0 438 | $datagridview1.add_ColumnHeaderMouseClick($datagridview1_ColumnHeaderMouseClick) 439 | $form1.ResumeLayout() 440 | #endregion Generated Form Code 441 | 442 | #---------------------------------------------- 443 | 444 | #Save the initial state of the form 445 | $InitialFormWindowState = $form1.WindowState 446 | #Init the OnLoad event to correct the initial state of the form 447 | $form1.add_Load($Form_StateCorrection_Load) 448 | #Clean up the control events 449 | $form1.add_FormClosed($Form_Cleanup_FormClosed) 450 | #Show the Form 451 | return $form1.ShowDialog() 452 | 453 | } #End Function 454 | 455 | #Call OnApplicationLoad to initialize 456 | if((OnApplicationLoad) -eq $true) 457 | { 458 | #Call the form 459 | Call-DataGridView_ColumnHeader_Sorting_psf | Out-Null 460 | #Perform cleanup 461 | OnApplicationExit 462 | } 463 | -------------------------------------------------------------------------------- /_Examples/DataGridView/DataGridView_ColumnHeader_Sorting/DataGridView_ColumnHeader_Sorting.Export.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lazywinadmin/PowerShellGUI/6a8a87ab41915fe5c5462025cf46dc97d26a27dc/_Examples/DataGridView/DataGridView_ColumnHeader_Sorting/DataGridView_ColumnHeader_Sorting.Export.zip -------------------------------------------------------------------------------- /_Examples/DataGridView/DataGridView_RowHeader/DataGridView_RowHeader.Export.ps1: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------ 2 | # Source File Information (DO NOT MODIFY) 3 | # Source ID: 093d49ab-31c3-46dd-ae0a-10eb7543f37a 4 | # Source File: DataGridView_AddColumn.psf 5 | #------------------------------------------------------------------------ 6 | #region File Recovery Data (DO NOT MODIFY) 7 | <#RecoveryData: 8 | eQkAAB+LCAAAAAAABAC9Vl1v2jAUfZ+0/2D5OQpJ+KwUIlE61mlsqwZje0NOcqEejo0cB5r++jkJ 9 | ICjZkk4UISFM7rnn+J5jK+53CMQGZHpHFEH6R0wF72PHtLH3/h1C7jdJl5QTNqIMvpIIvKzwo6Th 10 | jMJ2PgjDoWBJxM11vHAbZ8VFC/83BAqpdA19PEljBZH5k/JQbGNzJGRUfBuo7JGBZjtNLdPKPgYa 11 | JkwlEvocEiUJM9BD4jMafIZ0KlbA+363S9pBu2PfNFtg9W4w4lpKHy90vzF5TnX/QRhRHogIo+CR 12 | slBqFB4KrqRgcbFvLftBijVIle7gg0SJSUAY3NEIeCZJl3YMZDfdxr60CvpFhIC9kWaqxAwZBa4m 13 | 9FkDnF7LQE7HrgRlM8deyUYrkVN4Utg7RpmlsA8brWqHGQsSlrLNsyduI6/dA6tDcJsoJfibx8DP 14 | aex/WX8+nrEIiNL02LMdbYXTOZvM38zY0dWoL7zutnX/80iVOEb8TzyEJy2pTnXub30xP2KY0Tgh 15 | bKJSBrckWOlzLiT2pjKBMvxxMHR2g9WBbZ4vX8ShUeShfjqOr503z0ioyZaabKPJXpmU4jq8BxJq 16 | MfdAl4/5IS5Ofn4R6FUNA04TZzu1A3eivXbsnJYel2P1XhU86/x+OPb1dDGIY4j09CHe1+7+Sb0o 17 | DoRk1L+Ag27j0PUlS5GZa3BcPJfVjNnxuA6RJFvKl//DZTUX7UV3Ydth2yJNUs31K2JX2dNQSLg8 18 | 0WFZRN5tHL9qeX8AvHvgpXkJAAA=#> 19 | #endregion 20 | 21 | <# 22 | .NOTES 23 | -------------------------------------------------------------------------------- 24 | Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2016 v5.2.127 25 | Generated on: 2016-07-28 11:38 PM 26 | Generated by: Francois-Xavier Cat 27 | Organization: LazyWinAdmin.com 28 | -------------------------------------------------------------------------------- 29 | .DESCRIPTION 30 | GUI script generated by PowerShell Studio 2016 31 | #> 32 | #---------------------------------------------- 33 | #region Application Functions 34 | #---------------------------------------------- 35 | 36 | #endregion Application Functions 37 | 38 | #---------------------------------------------- 39 | # Generated Form Function 40 | #---------------------------------------------- 41 | function Call-DataGridView_AddColumn_psf { 42 | 43 | #---------------------------------------------- 44 | #region Import the Assemblies 45 | #---------------------------------------------- 46 | [void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 47 | [void][reflection.assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 48 | [void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 49 | #endregion Import Assemblies 50 | 51 | #---------------------------------------------- 52 | #region Generated Form Objects 53 | #---------------------------------------------- 54 | [System.Windows.Forms.Application]::EnableVisualStyles() 55 | $formLazyWinAdmincom = New-Object 'System.Windows.Forms.Form' 56 | $button1 = New-Object 'System.Windows.Forms.Button' 57 | $datagridview1 = New-Object 'System.Windows.Forms.DataGridView' 58 | $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' 59 | #endregion Generated Form Objects 60 | 61 | #---------------------------------------------- 62 | # User Generated Script 63 | #---------------------------------------------- 64 | 65 | $formLazyWinAdmincom_Load={ 66 | #TODO: Initialize Form Controls here 67 | 68 | } 69 | 70 | #region Control Helper Functions 71 | function Load-DataGridView 72 | { 73 | <# 74 | .SYNOPSIS 75 | This functions helps you load items into a DataGridView. 76 | 77 | .DESCRIPTION 78 | Use this function to dynamically load items into the DataGridView control. 79 | 80 | .PARAMETER DataGridView 81 | The DataGridView control you want to add items to. 82 | 83 | .PARAMETER Item 84 | The object or objects you wish to load into the DataGridView's items collection. 85 | 86 | .PARAMETER DataMember 87 | Sets the name of the list or table in the data source for which the DataGridView is displaying data. 88 | 89 | .PARAMETER AutoSizeColumns 90 | Resizes DataGridView control's columns after loading the items. 91 | #> 92 | Param ( 93 | [ValidateNotNull()] 94 | [Parameter(Mandatory=$true)] 95 | [System.Windows.Forms.DataGridView]$DataGridView, 96 | [ValidateNotNull()] 97 | [Parameter(Mandatory=$true)] 98 | $Item, 99 | [Parameter(Mandatory=$false)] 100 | [string]$DataMember, 101 | [System.Windows.Forms.DataGridViewAutoSizeColumnMode]$AutoSizeColumns = 'None' 102 | ) 103 | $DataGridView.SuspendLayout() 104 | $DataGridView.DataMember = $DataMember 105 | 106 | if ($Item -is [System.Data.DataSet] -and $Item.Tables.Count -gt 0) 107 | { 108 | $DataGridView.DataSource = $Item.Tables[0] 109 | } 110 | elseif ($Item -is [System.ComponentModel.IListSource]` 111 | -or $Item -is [System.ComponentModel.IBindingList] -or $Item -is [System.ComponentModel.IBindingListView] ) 112 | { 113 | $DataGridView.DataSource = $Item 114 | } 115 | else 116 | { 117 | $array = New-Object System.Collections.ArrayList 118 | 119 | if ($Item -is [System.Collections.IList]) 120 | { 121 | $array.AddRange($Item) 122 | } 123 | else 124 | { 125 | $array.Add($Item) 126 | } 127 | $DataGridView.DataSource = $array 128 | } 129 | 130 | if ($AutoSizeColumns -ne 'None') 131 | { 132 | $DataGridView.AutoResizeColumns($AutoSizeColumns) 133 | } 134 | 135 | $DataGridView.ResumeLayout() 136 | } 137 | 138 | function ConvertTo-DataTable 139 | { 140 | <# 141 | .SYNOPSIS 142 | Converts objects into a DataTable. 143 | 144 | .DESCRIPTION 145 | Converts objects into a DataTable, which are used for DataBinding. 146 | 147 | .PARAMETER InputObject 148 | The input to convert into a DataTable. 149 | 150 | .PARAMETER Table 151 | The DataTable you wish to load the input into. 152 | 153 | .PARAMETER RetainColumns 154 | This switch tells the function to keep the DataTable's existing columns. 155 | 156 | .PARAMETER FilterWMIProperties 157 | This switch removes WMI properties that start with an underline. 158 | 159 | .EXAMPLE 160 | $DataTable = ConvertTo-DataTable -InputObject (Get-Process) 161 | #> 162 | [OutputType([System.Data.DataTable])] 163 | param( 164 | [ValidateNotNull()] 165 | $InputObject, 166 | [ValidateNotNull()] 167 | [System.Data.DataTable]$Table, 168 | [switch]$RetainColumns, 169 | [switch]$FilterWMIProperties) 170 | 171 | if($null -eq $Table) 172 | { 173 | $Table = New-Object System.Data.DataTable 174 | } 175 | 176 | if ($InputObject -is [System.Data.DataTable]) 177 | { 178 | $Table = $InputObject 179 | } 180 | elseif ($InputObject -is [System.Data.DataSet] -and $InputObject.Tables.Count -gt 0) 181 | { 182 | $Table = $InputObject.Tables[0] 183 | } 184 | else 185 | { 186 | if (-not $RetainColumns -or $Table.Columns.Count -eq 0) 187 | { 188 | #Clear out the Table Contents 189 | $Table.Clear() 190 | 191 | if ($null -eq $InputObject) { return } #Empty Data 192 | 193 | $object = $null 194 | #find the first non null value 195 | foreach ($item in $InputObject) 196 | { 197 | if ($null -ne $item) 198 | { 199 | $object = $item 200 | break 201 | } 202 | } 203 | 204 | if ($null -eq $object) { return } #All null then empty 205 | 206 | #Get all the properties in order to create the columns 207 | foreach ($prop in $object.PSObject.Get_Properties()) 208 | { 209 | if (-not $FilterWMIProperties -or -not $prop.Name.StartsWith('__')) #filter out WMI properties 210 | { 211 | #Get the type from the Definition string 212 | $type = $null 213 | 214 | if ($null -ne $prop.Value) 215 | { 216 | try { $type = $prop.Value.GetType() } 217 | catch { } 218 | } 219 | 220 | if ($null -ne $type) # -and [System.Type]::GetTypeCode($type) -ne 'Object') 221 | { 222 | [void]$table.Columns.Add($prop.Name, $type) 223 | } 224 | else #Type info not found 225 | { 226 | [void]$table.Columns.Add($prop.Name) 227 | } 228 | } 229 | } 230 | 231 | if ($object -is [System.Data.DataRow]) 232 | { 233 | foreach ($item in $InputObject) 234 | { 235 | $Table.Rows.Add($item) 236 | } 237 | return @( ,$Table) 238 | } 239 | } 240 | else 241 | { 242 | $Table.Rows.Clear() 243 | } 244 | 245 | foreach ($item in $InputObject) 246 | { 247 | $row = $table.NewRow() 248 | 249 | if ($item) 250 | { 251 | foreach ($prop in $item.PSObject.Get_Properties()) 252 | { 253 | if ($table.Columns.Contains($prop.Name)) 254 | { 255 | $row.Item($prop.Name) = $prop.Value 256 | } 257 | } 258 | } 259 | [void]$table.Rows.Add($row) 260 | } 261 | } 262 | 263 | return @(,$Table) 264 | } 265 | 266 | function Add-WFDataGridViewColumn 267 | { 268 | <# 269 | .SYNOPSIS 270 | This function add a column to a DataGridView 271 | .DESCRIPTION 272 | This function add a column to a DataGridView 273 | .EXAMPLE 274 | Add-WFDataGridViewColumn -DataGridView $datagridview1 -ColumnName $($textbox1.Text -split "," -replace '^\s+', '' -replace '\s+$', '') 275 | .EXAMPLE 276 | Add-WFDataGridViewColumn -DataGridView $datagridview1 -ColumnName "First Name","Last Name","SamAccountName","Description" 277 | .NOTES 278 | Francois-Xavier Cat 279 | www.lazywinadmin.com 280 | @lazywinadm 281 | github.com/lazywinadmin 282 | #> 283 | [CmdletBinding()] 284 | PARAM ( 285 | [ValidateNotNull()] 286 | [Parameter(Mandatory = $true)] 287 | [System.Windows.Forms.DataGridView]$DataGridView, 288 | [String[]]$ColumnName 289 | ) 290 | BEGIN 291 | { 292 | Add-Type -AssemblyName System.Windows.Forms 293 | } 294 | PROCESS 295 | { 296 | foreach ($Column in $ColumnName) 297 | { 298 | 299 | # Create Column object 300 | $NewColumn = New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn 301 | $NewColumn.Name = $Column 302 | $NewColumn.HeaderText = $Column 303 | 304 | # Add the Column to the Datagridview 305 | $DataGridView.Columns.Add($NewColumn) 306 | } 307 | } 308 | } 309 | 310 | function Add-WFDataGridViewRow 311 | { 312 | <# 313 | .SYNOPSIS 314 | This function add a row to a DataGridView 315 | 316 | .DESCRIPTION 317 | This function add a row to a DataGridView 318 | 319 | .PARAMETER DataGridView 320 | Specifies the DataGridView Control to use 321 | 322 | .PARAMETER Title 323 | Specifies the Title to set on the new row 324 | 325 | .PARAMETER Values 326 | Specities the values to add 327 | 328 | .PARAMETER Collection 329 | Specifies the number of column to add 330 | 331 | .EXAMPLE 332 | Add-WFDataGridViewRow -DataGridView $datagridview1 -Title "Name1" -Values ($textbox1.Text -split ",") 333 | 334 | Add a new row with the Title 'Name1' and the values from $textbox1 335 | 336 | .EXAMPLE 337 | Add-WFDataGridViewRow -DataGridView $datagridview1 338 | 339 | Add an empty row 340 | 341 | .EXAMPLE 342 | Add-WFDataGridViewRow -DataGridView $datagridview1 -Collection 3 343 | 344 | Add 3 empty rows 345 | 346 | .EXAMPLE 347 | Add-WFDataGridViewRow -DataGridView $datagridview1 -Values "Francois-Xavier","Cat","fxcat" 348 | 349 | Add a row with the values specified. 350 | 351 | .NOTES 352 | Francois-Xavier Cat 353 | www.lazywinadmin.com 354 | @lazywinadm 355 | github.com/lazywinadmin 356 | #> 357 | 358 | [CmdletBinding(DefaultParameterSetName = 'EmptyRow')] 359 | param 360 | ( 361 | [Parameter(Mandatory = $true)] 362 | [ValidateNotNull()] 363 | [System.Windows.Forms.DataGridView]$DataGridView, 364 | [Parameter(ParameterSetName = 'Row', 365 | Mandatory = $true)] 366 | [String]$Title, 367 | [Parameter(ParameterSetName = 'Row')] 368 | [Array]$Values, 369 | [Parameter(ParameterSetName = 'Collection', 370 | Mandatory = $true)] 371 | [int32]$Collection 372 | ) 373 | 374 | BEGIN 375 | { 376 | Add-Type -AssemblyName System.Windows.Forms 377 | } 378 | PROCESS 379 | { 380 | IF ($PSCmdlet.ParameterSetName -eq 'EmptyRow') 381 | { 382 | $DataGridView.Rows.Add() 383 | } 384 | ELSEIF ($PSCmdlet.ParameterSetName -eq 'Row') 385 | { 386 | $Row = New-Object -TypeName System.Windows.Forms.DataGridViewRow 387 | $Row.HeaderCell.Value = $Title 388 | $Row.CreateCells($DataGridView, $Values) 389 | 390 | # Add the row 391 | $DataGridView.Rows.Add($Row) 392 | 393 | } 394 | ELSEIF ($PSCmdlet.ParameterSetName -eq 'Collection') 395 | { 396 | $DataGridView.Rows.Add($Collection) 397 | } 398 | } 399 | } 400 | 401 | function Set-WFDataGridView 402 | { 403 | <# 404 | .SYNOPSIS 405 | This function helps you edit the datagridview control 406 | 407 | .DESCRIPTION 408 | This function helps you edit the datagridview control 409 | 410 | .PARAMETER DataGridView 411 | Specifies the DataGridView Control 412 | 413 | .PARAMETER AlternativeRowColor 414 | Specifies the color of the alternative row color 415 | 416 | .PARAMETER DefaultRowColor 417 | Specifies the color of the default row color 418 | 419 | .PARAMETER ForeColor 420 | Specifies the color of the text 421 | 422 | .PARAMETER BackColor 423 | Specifies the background color 424 | 425 | .PARAMETER ProperFormat 426 | Set the datagirdview to the proper format 427 | 428 | .PARAMETER FontFamily 429 | Specifies the the Font family to use 430 | 431 | .PARAMETER FontSize 432 | Specifies the Font size 433 | 434 | .PARAMETER HideRowHeader 435 | Hide the Row Header 436 | 437 | .PARAMETER ShowRowHeader 438 | Show the Row Header 439 | 440 | .PARAMETER HideColumnHeader 441 | Hide the Column Header 442 | 443 | .PARAMETER ShowColumnHeader 444 | Show the Column Header 445 | 446 | .EXAMPLE 447 | Set-WFDataGridView -DataGridView $datagridview1 -ProperFormat -FontFamily $listboxFontFamily.Text -FontSize $listboxFontSize.Text 448 | 449 | .EXAMPLE 450 | Set-WFDataGridView -DataGridView $datagridview1 -AlternativeRowColor -BackColor 'AliceBlue' -ForeColor 'Black' 451 | 452 | .EXAMPLE 453 | Set-WFDataGridView -DataGridView $datagridviewOutput -DefaultRowColor -BackColor 'Beige' -ForeColor 'Brown' 454 | 455 | .EXAMPLE 456 | Set-DataGridViewRowHeader -DataGridView $datagridview1 -HideRowHeader 457 | 458 | This will hide the Row Header 459 | 460 | .EXAMPLE 461 | Set-DataGridViewRowHeader -DataGridView $datagridview1 -ShowRowHeader 462 | 463 | This will show the Row Header 464 | 465 | .EXAMPLE 466 | Set-DataGridViewRowHeader -DataGridView $datagridview1 -HideColumnHeader 467 | 468 | This will hide the Column Header 469 | 470 | .EXAMPLE 471 | Set-DataGridViewRowHeader -DataGridView $datagridview1 -ShowColumnHeader 472 | 473 | This will show the Column Header 474 | 475 | .NOTES 476 | Author: Francois-Xavier Cat 477 | Twitter:@LazyWinAdm 478 | www.lazywinadmin.com 479 | github.com/lazywinadmin 480 | #> 481 | 482 | [CmdletBinding(DefaultParameterSetName = 'ShowRowHeader', 483 | SupportsShouldProcess = $true)] 484 | param 485 | ( 486 | [Parameter(Mandatory = $true)] 487 | [ValidateNotNull()] 488 | [System.Windows.Forms.DataGridView]$DataGridView, 489 | [Parameter(ParameterSetName = 'AlternativeRowColor', 490 | Mandatory = $true)] 491 | [Switch]$AlternativeRowColor, 492 | [Parameter(ParameterSetName = 'DefaultRowColor')] 493 | [Switch]$DefaultRowColor, 494 | [Parameter(ParameterSetName = 'AlternativeRowColor', 495 | Mandatory = $true)] 496 | [Parameter(ParameterSetName = 'DefaultRowColor')] 497 | [System.Drawing.Color]$ForeColor, 498 | [Parameter(ParameterSetName = 'AlternativeRowColor', 499 | Mandatory = $true)] 500 | [Parameter(ParameterSetName = 'DefaultRowColor')] 501 | [System.Drawing.Color]$BackColor, 502 | [Parameter(ParameterSetName = 'Proper', 503 | Mandatory = $true)] 504 | [Switch]$ProperFormat, 505 | [Parameter(ParameterSetName = 'Proper')] 506 | [String]$FontFamily = "Consolas", 507 | [Parameter(ParameterSetName = 'Proper')] 508 | [Int]$FontSize = 10, 509 | [Parameter(ParameterSetName = 'HideRowHeader')] 510 | [Switch]$HideRowHeader, 511 | [Parameter(ParameterSetName = 'ShowRowHeader')] 512 | [Switch]$ShowRowHeader, 513 | [Parameter(ParameterSetName = 'HideColumnHeader')] 514 | [Switch]$HideColumnHeader, 515 | [Parameter(ParameterSetName = 'ShowColumnHeader')] 516 | [Switch]$ShowColumnHeader 517 | 518 | ) 519 | 520 | BEGIN 521 | { 522 | Add-Type -AssemblyName System.Windows.Forms 523 | } 524 | PROCESS 525 | { 526 | if ($psboundparameters['AlternativeRowColor']) 527 | { 528 | IF ($PSCmdlet.ShouldProcess($DataGridView, "Set the Alternative row color. ForeColor: $ForeColor, BackColor: $BackColor")) 529 | { 530 | $DataGridView.AlternatingRowsDefaultCellStyle.ForeColor = $ForeColor 531 | $DataGridView.AlternatingRowsDefaultCellStyle.BackColor = $BackColor 532 | } 533 | } 534 | 535 | if ($psboundparameters['DefaultRowColor']) 536 | { 537 | IF ($PSCmdlet.ShouldProcess($DataGridView, "Set the Default row color. ForeColor: $ForeColor, BackColor: $BackColor")) 538 | { 539 | $DataGridView.RowsDefaultCellStyle.ForeColor = $ForeColor 540 | $DataGridView.RowsDefaultCellStyle.BackColor = $BackColor 541 | } 542 | } 543 | 544 | if ($psboundparameters['ProperFormat']) 545 | { 546 | IF ($PSCmdlet.ShouldProcess($DataGridView, "Set the Border Header Style to 'Raised', Border Style to 'Fixed3D', Selection Mode to 'FullRowSelected', Disable resizable row, Set the font to $FontFamily with a the size $FontSize")) 547 | { 548 | #$Font = New-Object -TypeName System.Drawing.Font -ArgumentList "Segoi UI", 10 549 | $Font = New-Object -TypeName System.Drawing.Font -ArgumentList $FontFamily, $FontSize 550 | 551 | #[System.Drawing.FontStyle]::Bold 552 | 553 | $DataGridView.ColumnHeadersBorderStyle = 'Raised' 554 | $DataGridView.BorderStyle = 'Fixed3D' 555 | $DataGridView.SelectionMode = 'FullRowSelect' 556 | $DataGridView.AllowUserToResizeRows = $false 557 | $datagridview.DefaultCellStyle.font = $Font 558 | } 559 | } 560 | 561 | if ($psboundparameters['HideRowHeader']) 562 | { 563 | IF ($PSCmdlet.ShouldProcess($DataGridView, "Hide the Row Header")) 564 | { 565 | $DataGridView.RowHeadersVisible = $false 566 | } 567 | } 568 | if ($psboundparameters['ShowRowHeader']) 569 | { 570 | IF ($PSCmdlet.ShouldProcess($DataGridView, "Show the Row Header")) 571 | { 572 | $DataGridView.RowHeadersVisible = $true 573 | } 574 | } 575 | if ($psboundparameters['HideColumnHeader']) 576 | { 577 | IF ($PSCmdlet.ShouldProcess($DataGridView, "Hide the Column Header")) 578 | { 579 | $DataGridView.ColumnHeadersVisible = $false 580 | } 581 | } 582 | if ($psboundparameters['ShowColumnHeader']) 583 | { 584 | IF ($PSCmdlet.ShouldProcess($DataGridView, "Show the Column Header")) 585 | { 586 | $DataGridView.ColumnHeadersVisible = $true 587 | } 588 | } 589 | } 590 | } 591 | #endregion 592 | 593 | 594 | $button1_Click = { 595 | 596 | # Add Column 597 | Add-WFDataGridViewColumn -DataGridView $datagridview1 -ColumnName "First Column" 598 | 599 | # Add Row and Row Header 600 | Add-WFDataGridViewRow -DataGridView $datagridview1 -Title "Header1" -Values "Value1" 601 | Add-WFDataGridViewRow -DataGridView $datagridview1 -Title "Header2" -Values "Value2" 602 | Add-WFDataGridViewRow -DataGridView $datagridview1 -Title "Header3" -Values "Value3" 603 | 604 | # Set the Row Header to Visible 605 | Set-WFDataGridView -DataGridView $datagridview1 -ShowRowHeader 606 | 607 | # Set the Column Header to Invisible 608 | Set-WFDataGridView -DataGridView $datagridview1 -HideColumnHeader 609 | } 610 | # --End User Generated Script-- 611 | #---------------------------------------------- 612 | #region Generated Events 613 | #---------------------------------------------- 614 | 615 | $Form_StateCorrection_Load= 616 | { 617 | #Correct the initial state of the form to prevent the .Net maximized form issue 618 | $formLazyWinAdmincom.WindowState = $InitialFormWindowState 619 | } 620 | 621 | $Form_Cleanup_FormClosed= 622 | { 623 | #Remove all event handlers from the controls 624 | try 625 | { 626 | $button1.remove_Click($button1_Click) 627 | $formLazyWinAdmincom.remove_Load($formLazyWinAdmincom_Load) 628 | $formLazyWinAdmincom.remove_Load($Form_StateCorrection_Load) 629 | $formLazyWinAdmincom.remove_FormClosed($Form_Cleanup_FormClosed) 630 | } 631 | catch [Exception] 632 | { } 633 | } 634 | #endregion Generated Events 635 | 636 | #---------------------------------------------- 637 | #region Generated Form Code 638 | #---------------------------------------------- 639 | $formLazyWinAdmincom.SuspendLayout() 640 | # 641 | # formLazyWinAdmincom 642 | # 643 | $formLazyWinAdmincom.Controls.Add($button1) 644 | $formLazyWinAdmincom.Controls.Add($datagridview1) 645 | $formLazyWinAdmincom.AutoScaleDimensions = '6, 13' 646 | $formLazyWinAdmincom.AutoScaleMode = 'Font' 647 | $formLazyWinAdmincom.ClientSize = '284, 261' 648 | $formLazyWinAdmincom.Name = 'formLazyWinAdmincom' 649 | $formLazyWinAdmincom.Text = 'LazyWinAdmin.com' 650 | $formLazyWinAdmincom.add_Load($formLazyWinAdmincom_Load) 651 | # 652 | # button1 653 | # 654 | $button1.Location = '12, 226' 655 | $button1.Name = 'button1' 656 | $button1.Size = '75, 23' 657 | $button1.TabIndex = 1 658 | $button1.Text = 'button1' 659 | $button1.UseVisualStyleBackColor = $True 660 | $button1.add_Click($button1_Click) 661 | # 662 | # datagridview1 663 | # 664 | $datagridview1.ColumnHeadersHeightSizeMode = 'AutoSize' 665 | $datagridview1.Location = '12, 12' 666 | $datagridview1.Name = 'datagridview1' 667 | $datagridview1.Size = '240, 208' 668 | $datagridview1.TabIndex = 0 669 | $formLazyWinAdmincom.ResumeLayout() 670 | #endregion Generated Form Code 671 | 672 | #---------------------------------------------- 673 | 674 | #Save the initial state of the form 675 | $InitialFormWindowState = $formLazyWinAdmincom.WindowState 676 | #Init the OnLoad event to correct the initial state of the form 677 | $formLazyWinAdmincom.add_Load($Form_StateCorrection_Load) 678 | #Clean up the control events 679 | $formLazyWinAdmincom.add_FormClosed($Form_Cleanup_FormClosed) 680 | #Show the Form 681 | return $formLazyWinAdmincom.ShowDialog() 682 | 683 | } #End Function 684 | 685 | #Call the form 686 | Call-DataGridView_AddColumn_psf | Out-Null 687 | -------------------------------------------------------------------------------- /_Examples/ErrorProvider.Export.ps1: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------ 2 | # Source File Information (DO NOT MODIFY) 3 | # Source ID: af67838a-3e6c-4b74-9b43-682d65243ced 4 | # Source File: ErrorProvider.psf 5 | #------------------------------------------------------------------------ 6 | #region File Recovery Data (DO NOT MODIFY) 7 | <#RecoveryData: 8 | +gsAAB+LCAAAAAAABAC9Vmtv2jAU/T5p/yHK5yghPEorhUg8ijSNrVVh3b5VTnJhHo6NbKcl/fVz 9 | HtDQUJIiQEiIJD4+955zuI7zAD57Bh6PkESa+iEwoz29adq6+/WLpjl3HC8wRWSMCfxEIbi3nDN+ 10 | z9kzDoCbKzF3rNKaDOn9A19qMl5BT5/GQkJo/sY0YC/CHDMeZt+Gtu+RoT3mpbTNRvIxtGFEZMSh 11 | RyGSHBFDu488gv3vEM/YEmjP63ZRx+9c2TetNjSub3SNqlJ6+lztN0Gvsdq/H4SY+izUNf8vJgFX 12 | KH3IqOSMiKxdVbZqbQVcxjm8H0k29RGBEQ6BJiWppVeGZrcca7O0CvqDBaC7Y8VUiRkSDFRO8asC 13 | NK/bhtZtV2ISxQaMKzumMiYJE15DMMKIsEUlOPFLd/eIVImcwVrqbhFl7oXdPquOcsyEoWAv21Py 14 | xLHStRtgdYCmEslIDBA/e4pEyuQhbh8KT1mkCfORVBXoriLvNEvqfGTIG18NSCEuzToUM+R9owGs 15 | FaZsl5XJXt+EJAcDtj67BVLxeGx9tAF2U/1r6zuwoautv91QzTUbn9K/vPvn9R9EUjJ6dvm9lGYG 16 | Qh5tQCuZm3UEyhx4Y6ztQbejLChP5kMW1DIsHXU1K/kl4BGLCJF0Gg+QvxwywrjC8wj24YsDUs1/ 17 | f1ls/Sm9824yFjOye1Edl53z++ypgYRtlbPZHx2ySYoQpsDzOBXS9ABzUEnz4dBxbm2F2VF3V5q+ 18 | EBCqokFsVud3YjcUPuMEeydo3LG2u75nyaS+BMfJ7axmTN4fL0PE0Qumi2O4Gq15Z96d23bQaaAW 19 | qub6E5KL9DRkHE5PtL3MIu9YxXd99z9KomvB+gsAAA==#> 20 | #endregion 21 | 22 | <# 23 | .NOTES 24 | -------------------------------------------------------------------------------- 25 | Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2016 v5.2.127 26 | Generated on: 2016-08-20 12:13 AM 27 | Generated by: Francois-Xavier Cat 28 | Organization: LazyWinAdmin.com 29 | -------------------------------------------------------------------------------- 30 | .DESCRIPTION 31 | GUI script generated by PowerShell Studio 2016 32 | #> 33 | #---------------------------------------------- 34 | #region Application Functions 35 | #---------------------------------------------- 36 | 37 | #endregion Application Functions 38 | 39 | #---------------------------------------------- 40 | # Generated Form Function 41 | #---------------------------------------------- 42 | function Call-ErrorProvider_psf { 43 | 44 | #---------------------------------------------- 45 | #region Import the Assemblies 46 | #---------------------------------------------- 47 | [void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 48 | [void][reflection.assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 49 | [void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 50 | #endregion Import Assemblies 51 | 52 | #---------------------------------------------- 53 | #region Generated Form Objects 54 | #---------------------------------------------- 55 | [System.Windows.Forms.Application]::EnableVisualStyles() 56 | $formLazyWinAdmincom = New-Object 'System.Windows.Forms.Form' 57 | $statusbar1 = New-Object 'System.Windows.Forms.StatusBar' 58 | $textbox1 = New-Object 'System.Windows.Forms.TextBox' 59 | $buttonTest = New-Object 'System.Windows.Forms.Button' 60 | $errorprovider1 = New-Object 'System.Windows.Forms.ErrorProvider' 61 | $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' 62 | #endregion Generated Form Objects 63 | 64 | #---------------------------------------------- 65 | # User Generated Script 66 | #---------------------------------------------- 67 | 68 | $formLazyWinAdmincom_Load={ 69 | #TODO: Initialize Form Controls here 70 | 71 | } 72 | 73 | $buttonTest_Click={ 74 | 75 | # If textbox is empty 76 | if (-not $textbox1.Text) 77 | { 78 | $errorprovider1.SetError($textbox1, 'Please enter something') 79 | } 80 | else 81 | { 82 | # Else Clear the error 83 | $errorprovider1.SetError($textbox1,'') 84 | #Clear-WFErrorProvider -ErrorProvider $errorprovider1 -Control $textbox1 85 | 86 | # SHow the text in Status message 87 | $statusbar1.Text = $textbox1.Text 88 | } 89 | } 90 | 91 | function Clear-WFErrorProvider 92 | { 93 | <# 94 | .SYNOPSIS 95 | The Clear-WFErrorProvider function will clear the error message on the Winforms control specified 96 | 97 | .DESCRIPTION 98 | The Clear-WFErrorProvider function will clear the error message on the Winforms control specified 99 | 100 | .PARAMETER ErrorProvider 101 | Specifies the ErrorProvider Control 102 | 103 | .PARAMETER Control 104 | Specifies the Control on which the error message will be cleared 105 | 106 | .EXAMPLE 107 | PS C:\> Clear-WFErrorProvider -$ErrorProvider $ErrorProvider1 -Control $TextBox1 108 | 109 | Clear the error message on the $TextBox1 control 110 | 111 | .NOTES 112 | Francois-Xavier Cat 113 | @lazywinadm 114 | www.lazywinadmin.com 115 | github.com/lazywinadmin 116 | #> 117 | 118 | PARAM ( 119 | [parameter(Mandatory = $true)] 120 | [System.Windows.Forms.ErrorProvider]$ErrorProvider, 121 | [parameter(Mandatory = $true)] 122 | $Control 123 | ) 124 | BEGIN 125 | { 126 | Add-Type -AssemblyName System.Windows.Forms 127 | } 128 | PROCESS 129 | { 130 | $ErrorProvider.SetError($Control, '') 131 | } 132 | } 133 | # --End User Generated Script-- 134 | #---------------------------------------------- 135 | #region Generated Events 136 | #---------------------------------------------- 137 | 138 | $Form_StateCorrection_Load= 139 | { 140 | #Correct the initial state of the form to prevent the .Net maximized form issue 141 | $formLazyWinAdmincom.WindowState = $InitialFormWindowState 142 | } 143 | 144 | $Form_Cleanup_FormClosed= 145 | { 146 | #Remove all event handlers from the controls 147 | try 148 | { 149 | $buttonTest.remove_Click($buttonTest_Click) 150 | $formLazyWinAdmincom.remove_Load($formLazyWinAdmincom_Load) 151 | $formLazyWinAdmincom.remove_Load($Form_StateCorrection_Load) 152 | $formLazyWinAdmincom.remove_FormClosed($Form_Cleanup_FormClosed) 153 | } 154 | catch [Exception] 155 | { } 156 | } 157 | #endregion Generated Events 158 | 159 | #---------------------------------------------- 160 | #region Generated Form Code 161 | #---------------------------------------------- 162 | $formLazyWinAdmincom.SuspendLayout() 163 | # 164 | # formLazyWinAdmincom 165 | # 166 | $formLazyWinAdmincom.Controls.Add($statusbar1) 167 | $formLazyWinAdmincom.Controls.Add($textbox1) 168 | $formLazyWinAdmincom.Controls.Add($buttonTest) 169 | $formLazyWinAdmincom.AutoScaleDimensions = '6, 13' 170 | $formLazyWinAdmincom.AutoScaleMode = 'Font' 171 | $formLazyWinAdmincom.ClientSize = '284, 74' 172 | $formLazyWinAdmincom.FormBorderStyle = 'FixedDialog' 173 | $formLazyWinAdmincom.Name = 'formLazyWinAdmincom' 174 | $formLazyWinAdmincom.Text = 'LazyWinAdmin.com' 175 | $formLazyWinAdmincom.add_Load($formLazyWinAdmincom_Load) 176 | # 177 | # statusbar1 178 | # 179 | $statusbar1.Location = '0, 52' 180 | $statusbar1.Name = 'statusbar1' 181 | $statusbar1.Size = '284, 22' 182 | $statusbar1.TabIndex = 2 183 | # 184 | # textbox1 185 | # 186 | $textbox1.Location = '12, 12' 187 | $textbox1.Name = 'textbox1' 188 | $textbox1.Size = '100, 20' 189 | $textbox1.TabIndex = 1 190 | # 191 | # buttonTest 192 | # 193 | $buttonTest.Location = '136, 10' 194 | $buttonTest.Name = 'buttonTest' 195 | $buttonTest.Size = '75, 23' 196 | $buttonTest.TabIndex = 0 197 | $buttonTest.Text = 'Test' 198 | $buttonTest.UseVisualStyleBackColor = $True 199 | $buttonTest.add_Click($buttonTest_Click) 200 | # 201 | # errorprovider1 202 | # 203 | $errorprovider1.ContainerControl = $formLazyWinAdmincom 204 | $formLazyWinAdmincom.ResumeLayout() 205 | #endregion Generated Form Code 206 | 207 | #---------------------------------------------- 208 | 209 | #Save the initial state of the form 210 | $InitialFormWindowState = $formLazyWinAdmincom.WindowState 211 | #Init the OnLoad event to correct the initial state of the form 212 | $formLazyWinAdmincom.add_Load($Form_StateCorrection_Load) 213 | #Clean up the control events 214 | $formLazyWinAdmincom.add_FormClosed($Form_Cleanup_FormClosed) 215 | #Show the Form 216 | return $formLazyWinAdmincom.ShowDialog() 217 | 218 | } #End Function 219 | 220 | #Call the form 221 | Call-ErrorProvider_psf | Out-Null 222 | -------------------------------------------------------------------------------- /_Examples/MultiThreading.Export.ps1: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------ 2 | # Source File Information (DO NOT MODIFY) 3 | # Source ID: 6ca0c3d3-c223-4047-bf67-578fa0ae79a1 4 | # Source File: MultiThreading.psf 5 | #------------------------------------------------------------------------ 6 | #region File Recovery Data (DO NOT MODIFY) 7 | <#RecoveryData: 8 | jQ0AAB+LCAAAAAAABADNl11v2jAUhu8n7T9Yvo6AEAJFCpFatq7bylaNrNsdcpID9erYle1As18/ 9 | 56MtXy1pBWhCQnE4J+95fZ7kBO8HRGIOMvtANEHmQFHBB7iN/ffvEPK+SzqjnLBzyuAbScAfpUzT 10 | 4EYCiSmfNe7U1GtuBJWp4R+INNLZHQzwOFMaksYvymOxUI1zIZPy20LbfrLQdVVJp9HKPxYaGuFU 11 | woBDqiVhFrpKQ0ajr5AF4hb4IOz1iBu5XbvvdKB10seIm1IGeGquZ2MU3VAWSxOHh4JrKZgqHZpC 12 | r6S4A6mzKmHIKHA9pn8B+91e30Idt+81H4KeScptY7/Q2hkbwL3Gfu5zM/Tj3GhXcXnEkAkFcXnl 13 | EaF88nTSaxbB2zIvBaly7El+vBa6uzNnqdaCH7w3YSEzBjmnEaiXmrS5i5ciItpUgf1+x0LOSXtj 14 | M5/r0qpqjbSShZ5robZTIzwg4Wcewz3269RU0vCKan4quKYqJWysMwZnJLodCiYk9gOZwrb8ZTIM 15 | 3NHt+hZMirNrkDRLSv5TZoxLU/ibkbGdtyBTiR6SmM2nx3PE1C9mf8BUmvvhJR84nySNryksDk5N 16 | bMRmRmxuxF6cBlvmgWBpwi/MwDPFXACd3RTDYSRi0+LTVIt8VaMNS/S1LWTXh2+l9trwdV1Dn9N9 17 | HX6tzYm03NfVxe4WBzQBefDe6lzliwgDadAGibdNxKCgeC1yEqxhvOrvVClITAWgHq5Yncn8ytGI 18 | cDKDxKQ3chCSor9Pzpy6zhw7nDonbpfETrcDjus1H5XWlRMVCclouIf9e0Gl9HcMjb1TsVsxf/Ac 19 | R0iShXlJfotWy5m6097UtmO3RRyyW+t3wo7jiUpzgwiZPbw8HMXdUEg4ir3KVTXo9u/tcVk+Vbzm 20 | 8t8v/x9+vLM4jQ0AAA==#> 21 | #endregion 22 | 23 | <# 24 | .NOTES 25 | -------------------------------------------------------------------------------- 26 | Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2014 v4.1.75 27 | Generated on: 2015-01-26 12:47 PM 28 | Generated by: Francois-xavier.cat 29 | Organization: LazyWinAdmin.com 30 | -------------------------------------------------------------------------------- 31 | .DESCRIPTION 32 | GUI script generated by PowerShell Studio 2014 33 | #> 34 | #---------------------------------------------- 35 | #region Application Functions 36 | #---------------------------------------------- 37 | 38 | function OnApplicationLoad { 39 | #Note: This function is not called in Projects 40 | #Note: This function runs before the form is created 41 | #Note: To get the script directory in the Packager use: Split-Path $hostinvocation.MyCommand.path 42 | #Note: To get the console output in the Packager (Windows Mode) use: $ConsoleOutput (Type: System.Collections.ArrayList) 43 | #Important: Form controls cannot be accessed in this function 44 | #TODO: Add modules and custom code to validate the application load 45 | 46 | return $true #return true for success or false for failure 47 | } 48 | 49 | function OnApplicationExit { 50 | #Note: This function is not called in Projects 51 | #Note: This function runs after the form is closed 52 | #TODO: Add custom code to clean up and unload modules when the application exits 53 | 54 | $script:ExitCode = 0 #Set the exit code for the Packager 55 | } 56 | 57 | #endregion Application Functions 58 | 59 | #---------------------------------------------- 60 | # Generated Form Function 61 | #---------------------------------------------- 62 | function Call-MultiThreading_psf { 63 | 64 | #---------------------------------------------- 65 | #region Import the Assemblies 66 | #---------------------------------------------- 67 | [void][reflection.assembly]::Load('mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 68 | [void][reflection.assembly]::Load('System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 69 | [void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 70 | [void][reflection.assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 71 | [void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 72 | [void][reflection.assembly]::Load('System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 73 | [void][reflection.assembly]::Load('System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 74 | [void][reflection.assembly]::Load('System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 75 | [void][reflection.assembly]::Load('System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 76 | #endregion Import Assemblies 77 | 78 | #---------------------------------------------- 79 | #region Generated Form Objects 80 | #---------------------------------------------- 81 | [System.Windows.Forms.Application]::EnableVisualStyles() 82 | $form1 = New-Object 'System.Windows.Forms.Form' 83 | $buttonServices = New-Object 'System.Windows.Forms.Button' 84 | $buttonProcess = New-Object 'System.Windows.Forms.Button' 85 | $datagridview1 = New-Object 'System.Windows.Forms.DataGridView' 86 | $timerJobTracker = New-Object 'System.Windows.Forms.Timer' 87 | $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' 88 | #endregion Generated Form Objects 89 | 90 | #---------------------------------------------- 91 | # User Generated Script 92 | #---------------------------------------------- 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | $form1_Load={ 101 | #TODO: Initialize Form Controls here 102 | 103 | } 104 | 105 | $formMain_FormClosed=[System.Windows.Forms.FormClosedEventHandler]{ 106 | #Event Argument: $_ = [System.Windows.Forms.FormClosedEventArgs] 107 | #Stop any pending jobs 108 | Stop-JobTracker 109 | } 110 | 111 | $timerJobTracker_Tick={ 112 | Update-JobTracker 113 | } 114 | 115 | #region Job Tracker 116 | $JobTrackerList = New-Object System.Collections.ArrayList 117 | function Add-JobTracker 118 | { 119 | <# 120 | .SYNOPSIS 121 | Add a new job to the JobTracker and starts the timer. 122 | 123 | .DESCRIPTION 124 | Add a new job to the JobTracker and starts the timer. 125 | 126 | .PARAMETER Name 127 | The name to assign to the Job 128 | 129 | .PARAMETER JobScript 130 | The script block that the Job will be performing. 131 | Important: Do not access form controls from this script block. 132 | 133 | .PARAMETER ArgumentList 134 | The arguments to pass to the job 135 | 136 | .PARAMETER CompleteScript 137 | The script block that will be called when the job is complete. 138 | The job is passed as an argument. The Job argument is null when the job fails. 139 | 140 | .PARAMETER UpdateScript 141 | The script block that will be called each time the timer ticks. 142 | The job is passed as an argument. Use this to get the Job's progress. 143 | 144 | .EXAMPLE 145 | Job-Begin -Name "JobName" ` 146 | -JobScript { 147 | Param($Argument1)#Pass any arguments using the ArgumentList parameter 148 | #Important: Do not access form controls from this script block. 149 | Get-WmiObject Win32_Process -Namespace "root\CIMV2" 150 | }` 151 | -CompletedScript { 152 | Param($Job) 153 | $results = Receive-Job -Job $Job 154 | }` 155 | -UpdateScript { 156 | Param($Job) 157 | #$results = Receive-Job -Job $Job -Keep 158 | } 159 | 160 | .LINK 161 | 162 | #> 163 | 164 | Param( 165 | [ValidateNotNull()] 166 | [Parameter(Mandatory=$true)] 167 | [string]$Name, 168 | [ValidateNotNull()] 169 | [Parameter(Mandatory=$true)] 170 | [ScriptBlock]$JobScript, 171 | $ArgumentList = $null, 172 | [ScriptBlock]$CompletedScript, 173 | [ScriptBlock]$UpdateScript) 174 | 175 | #Start the Job 176 | $job = Start-Job -Name $Name -ScriptBlock $JobScript -ArgumentList $ArgumentList 177 | 178 | if($job -ne $null) 179 | { 180 | #Create a Custom Object to keep track of the Job & Script Blocks 181 | $members = @{ 'Job' = $Job; 182 | 'CompleteScript' = $CompletedScript; 183 | 'UpdateScript' = $UpdateScript} 184 | 185 | $psObject = New-Object System.Management.Automation.PSObject -Property $members 186 | 187 | [void]$JobTrackerList.Add($psObject) 188 | 189 | #Start the Timer 190 | if(-not $timerJobTracker.Enabled) 191 | { 192 | $timerJobTracker.Start() 193 | } 194 | } 195 | elseif($CompletedScript -ne $null) 196 | { 197 | #Failed 198 | Invoke-Command -ScriptBlock $CompletedScript -ArgumentList $null 199 | } 200 | 201 | } 202 | 203 | function Update-JobTracker 204 | { 205 | <# 206 | .SYNOPSIS 207 | Checks the status of each job on the list. 208 | #> 209 | 210 | #Poll the jobs for status updates 211 | $timerJobTracker.Stop() #Freeze the Timer 212 | 213 | for($index = 0; $index -lt $JobTrackerList.Count; $index++) 214 | { 215 | $psObject = $JobTrackerList[$index] 216 | 217 | if($psObject -ne $null) 218 | { 219 | if($psObject.Job -ne $null) 220 | { 221 | if($psObject.Job.State -ne "Running") 222 | { 223 | #Call the Complete Script Block 224 | if($psObject.CompleteScript -ne $null) 225 | { 226 | #$results = Receive-Job -Job $psObject.Job 227 | Invoke-Command -ScriptBlock $psObject.CompleteScript -ArgumentList $psObject.Job 228 | } 229 | 230 | $JobTrackerList.RemoveAt($index) 231 | Remove-Job -Job $psObject.Job 232 | $index-- #Step back so we don't skip a job 233 | } 234 | elseif($psObject.UpdateScript -ne $null) 235 | { 236 | #Call the Update Script Block 237 | Invoke-Command -ScriptBlock $psObject.UpdateScript -ArgumentList $psObject.Job 238 | } 239 | } 240 | } 241 | else 242 | { 243 | $JobTrackerList.RemoveAt($index) 244 | $index-- #Step back so we don't skip a job 245 | } 246 | } 247 | 248 | if($JobTrackerList.Count -gt 0) 249 | { 250 | $timerJobTracker.Start()#Resume the timer 251 | } 252 | } 253 | 254 | function Stop-JobTracker 255 | { 256 | <# 257 | .SYNOPSIS 258 | Stops and removes all Jobs from the list. 259 | #> 260 | #Stop the timer 261 | $timerJobTracker.Stop() 262 | 263 | #Remove all the jobs 264 | while($JobTrackerList.Count -gt 0) 265 | { 266 | $job = $JobTrackerList[0].Job 267 | $JobTrackerList.RemoveAt(0) 268 | Stop-Job $job 269 | Remove-Job $job 270 | } 271 | } 272 | #endregion 273 | 274 | #region Control Helper Functions 275 | function Load-DataGridView 276 | { 277 | <# 278 | .SYNOPSIS 279 | This functions helps you load items into a DataGridView. 280 | 281 | .DESCRIPTION 282 | Use this function to dynamically load items into the DataGridView control. 283 | 284 | .PARAMETER DataGridView 285 | The ComboBox control you want to add items to. 286 | 287 | .PARAMETER Item 288 | The object or objects you wish to load into the ComboBox's items collection. 289 | 290 | .PARAMETER DataMember 291 | Sets the name of the list or table in the data source for which the DataGridView is displaying data. 292 | 293 | #> 294 | Param ( 295 | [ValidateNotNull()] 296 | [Parameter(Mandatory=$true)] 297 | [System.Windows.Forms.DataGridView]$DataGridView, 298 | [ValidateNotNull()] 299 | [Parameter(Mandatory=$true)] 300 | $Item, 301 | [Parameter(Mandatory=$false)] 302 | [string]$DataMember 303 | ) 304 | $DataGridView.SuspendLayout() 305 | $DataGridView.DataMember = $DataMember 306 | 307 | if ($Item -is [System.ComponentModel.IListSource]` 308 | -or $Item -is [System.ComponentModel.IBindingList] -or $Item -is [System.ComponentModel.IBindingListView] ) 309 | { 310 | $DataGridView.DataSource = $Item 311 | } 312 | else 313 | { 314 | $array = New-Object System.Collections.ArrayList 315 | 316 | if ($Item -is [System.Collections.IList]) 317 | { 318 | $array.AddRange($Item) 319 | } 320 | else 321 | { 322 | $array.Add($Item) 323 | } 324 | $DataGridView.DataSource = $array 325 | } 326 | 327 | $DataGridView.ResumeLayout() 328 | } 329 | #endregion 330 | 331 | $buttonProcess_Click={ 332 | #TODO: Place custom script here 333 | Add-JobTracker ` 334 | -Name "Processes" ` 335 | -JobScript { 336 | Get-Process 337 | Start-Sleep -Seconds 5 338 | } ` 339 | -ArgumentList "win32_process" ` 340 | -CompletedScript { 341 | #PARAM($job) 342 | $results = Receive-Job -Name "Processes" 343 | Load-DataGridView -DataGridView $datagridview1 -Item $results 344 | 345 | } 346 | } 347 | 348 | $buttonServices_Click={ 349 | #TODO: Place custom script here 350 | Add-JobTracker ` 351 | -Name "Services" ` 352 | -JobScript { 353 | Get-Service 354 | } ` 355 | -ArgumentList "win32_process" ` 356 | -CompletedScript { 357 | #PARAM($job) 358 | $results = Receive-Job -Name "Services" 359 | Load-DataGridView -DataGridView $datagridview1 -Item $results 360 | } 361 | } 362 | 363 | # --End User Generated Script-- 364 | #---------------------------------------------- 365 | #region Generated Events 366 | #---------------------------------------------- 367 | 368 | $Form_StateCorrection_Load= 369 | { 370 | #Correct the initial state of the form to prevent the .Net maximized form issue 371 | $form1.WindowState = $InitialFormWindowState 372 | } 373 | 374 | $Form_Cleanup_FormClosed= 375 | { 376 | #Remove all event handlers from the controls 377 | try 378 | { 379 | $buttonServices.remove_Click($buttonServices_Click) 380 | $buttonProcess.remove_Click($buttonProcess_Click) 381 | $form1.remove_FormClosed($formMain_FormClosed) 382 | $form1.remove_Load($form1_Load) 383 | $timerJobTracker.remove_Tick($timerJobTracker_Tick) 384 | $form1.remove_Load($Form_StateCorrection_Load) 385 | $form1.remove_FormClosed($Form_Cleanup_FormClosed) 386 | } 387 | catch [Exception] 388 | { } 389 | } 390 | #endregion Generated Events 391 | 392 | #---------------------------------------------- 393 | #region Generated Form Code 394 | #---------------------------------------------- 395 | $form1.SuspendLayout() 396 | # 397 | # form1 398 | # 399 | $form1.Controls.Add($buttonServices) 400 | $form1.Controls.Add($buttonProcess) 401 | $form1.Controls.Add($datagridview1) 402 | $form1.ClientSize = '679, 459' 403 | $form1.Name = "form1" 404 | $form1.Text = "Form" 405 | $form1.add_FormClosed($formMain_FormClosed) 406 | $form1.add_Load($form1_Load) 407 | # 408 | # buttonServices 409 | # 410 | $buttonServices.Location = '94, 382' 411 | $buttonServices.Name = "buttonServices" 412 | $buttonServices.Size = '75, 23' 413 | $buttonServices.TabIndex = 2 414 | $buttonServices.Text = "Services" 415 | $buttonServices.UseVisualStyleBackColor = $True 416 | $buttonServices.add_Click($buttonServices_Click) 417 | # 418 | # buttonProcess 419 | # 420 | $buttonProcess.Location = '13, 382' 421 | $buttonProcess.Name = "buttonProcess" 422 | $buttonProcess.Size = '75, 23' 423 | $buttonProcess.TabIndex = 1 424 | $buttonProcess.Text = "Process" 425 | $buttonProcess.UseVisualStyleBackColor = $True 426 | $buttonProcess.add_Click($buttonProcess_Click) 427 | # 428 | # datagridview1 429 | # 430 | $datagridview1.ColumnHeadersHeightSizeMode = 'AutoSize' 431 | $datagridview1.Location = '12, 12' 432 | $datagridview1.Name = "datagridview1" 433 | $datagridview1.Size = '655, 363' 434 | $datagridview1.TabIndex = 0 435 | # 436 | # timerJobTracker 437 | # 438 | $timerJobTracker.add_Tick($timerJobTracker_Tick) 439 | $form1.ResumeLayout() 440 | #endregion Generated Form Code 441 | 442 | #---------------------------------------------- 443 | 444 | #Save the initial state of the form 445 | $InitialFormWindowState = $form1.WindowState 446 | #Init the OnLoad event to correct the initial state of the form 447 | $form1.add_Load($Form_StateCorrection_Load) 448 | #Clean up the control events 449 | $form1.add_FormClosed($Form_Cleanup_FormClosed) 450 | #Show the Form 451 | return $form1.ShowDialog() 452 | 453 | } #End Function 454 | 455 | #Call OnApplicationLoad to initialize 456 | if((OnApplicationLoad) -eq $true) 457 | { 458 | #Call the form 459 | Call-MultiThreading_psf | Out-Null 460 | #Perform cleanup 461 | OnApplicationExit 462 | } 463 | -------------------------------------------------------------------------------- /_Examples/MultiThreading.psf: -------------------------------------------------------------------------------- 1 |  2 | 6ca0c3d3-c223-4047-bf67-578fa0ae79a1 3 | 130667680687421288 4 | iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAAARnQU1BAACx 5 | jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAACXZSURBVHhe7d1pcNVloufx7uquqep+OTVvuqd6 6 | XkzVrbrzwq65datmuu7tabvt222rjYiiCAKCoriwubWKLAqioOyCtIDsSNgJCSSBJJB93/d9I8vJ 7 | yb6x6m+e5x8CSTwK2rlC8ny/VZ8Cwjkn58Qiz++cBPwRERERERERERERERERERERERERERERERER 8 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 9 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 10 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 11 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 12 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERjdZO/vjHPy74+c9/ 13 | XjDhkUcK5s2ZVzBv3nzzIwAAGBXMuf3iC88X/PKXvyj4yU9+UmDOduvb++lPf1r163vu0RtvvKnj 14 | p6KUX9GkkpoWFVf7AQDAXa/FO7fTcku1YeNm/eHee2We1Ov6Mf/N/exnPyuwh39KXqUSC+sVnVmu 15 | 6AwAADCanM+uVm6lXzt27tX/+NWvbj0Axo8bX3AkOELJRQ06Zw7/8wAAYFSKzalWWn6VFix45dYD 16 | wH7doLi6WTHZlUbF9R8BAMBoE5VRroqmXm3avOXWA2DBggUFVY2d3hVjAQDAqHUus0LlDd1av+GT 17 | Ww+A+fPnF1TWtys2p0pxAADcJeJzq5VUUKukwjrz4wgxt5VobtPetn0fCXk1N97+tct+H9dvJzG/ 18 | 5sZjSMw3j2HQ7/3Drt+Ove+DP17W+axKlTeaAbD+dgdAQ4fizJ20d/RrzDuIzzMfrFsJdF0AAL4H 19 | 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 94 | iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgB 95 | AACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAA 96 | gIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICD 97 | GAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgA 98 | AAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAA 99 | OIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiI 100 | AQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEA 101 | AICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACA 102 | gxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMY 103 | AAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAA 104 | ADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4 105 | iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgB 106 | AACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAA 107 | gIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICD 108 | GAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgA 109 | 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 154 | X1OdigsKVVp5QW3tfhWnx+pkSKgyS+q9B+arK1N0SLBOhkWpvMkcxp0+ZZ0LM89+Tyu32qfujmbl 155 | JEYo1DzzL7hg7ltDsSJPhSgsPkv1za1qbgpwP76BPRhvNQDsqwSBrnuDuW6TGTr+qjxFhgbrREik 156 | iqoaze11qrYoQ6HBwYpKKTDP4utVmFfsfRx8zU2qLS9RQUGFeXuTyosLVVJZr5bmGsWZ2wgOjTD/ 157 | fdrM/WhRfnykgoNDlFFmPz5tKkyLMo/9tHKqmtRqbqch0H0axn7cGQAAMPrd0QFg/015+x3l9tC8 158 | LY0++VuavYPS/rreHIDN5lD1mYO6vr5R/tb+v4/fYg4ze7uNvma12fdpv/muyV6+yTyrb++/jK/R 159 | 3EajWtrsfTLPfs3vN/r8/fe9zTxTbxz2vm/BHowDgybQALD/RoB9lWD49b7Gu98t1z+G/c/K6+sb 160 | 5PO3eLfX3uo3983+08P9Hwf7e03NfvPxNLdtL2d+3mwfm/lYeY/duw17OfPxabv+2O1hbx67/auB 161 | Ax+L+uH34xvYEVBdXc0AAIBRbtR8D8DdbiS+B2A0sCOGbwIEgNHvjg0AexiGh4crKytL2dnZo15O 162 | To7CwsK8Z8iBBoB9rHl5eQGvO5rYx2n/T4CRkZFDHicAYHS5IwNgQH5+vtLT05WRkTHq2cdhD0g7 163 | bAY/M7Y/t8+aMzMzx8xjTUtLU1FREQMAAEaxOzoAent7vf9Dnv1xtBt4HIFeFrdvGyuP07KPxf7f 164 | D4c/TgDA6HFHBwAAALgzGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAA 165 | gIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICD 166 | GAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgA 167 | AAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICD/lMGQKe5UXvDAADg7tTT 168 | 1aGakRoAVrFRZW7QrgoAAHD3sk/a7ZP3ERkAll0TAADg7jZw+I/YAAAAAKPL9xoAhRd6vCsCAIDR 169 | qaC2S77bHQDz5s0v6rsm+fvkrQYAADA6+bolc6Rr0+Yttx4AkydPLtywcZPWrd/oLQYAADB62cN/ 170 | 9uwXbz0AiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI 171 | iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI 172 | iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI 173 | iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI 174 | iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI 175 | iIiIiIiIiIiIiIiIiIiIiIiIiIiIiOgu6Ec/+v+1ZwpH/IHYNwAAAABJRU5ErkJggg== 176 | 177 | 679, 459 178 | form1 179 | Form 180 | formMain_FormClosed 181 | form1_Load 182 | 183 | 94, 382 184 | buttonServices 185 | 75, 23 186 | 2 187 | Services 188 | True 189 | buttonServices_Click 190 | 191 | 192 | 13, 382 193 | buttonProcess 194 | 75, 23 195 | 1 196 | Process 197 | True 198 | buttonProcess_Click 199 | 200 | 201 | AutoSize 202 | 12, 12 203 | datagridview1 204 | 655, 363 205 | 0 206 | 207 | 208 | 209 | timerJobTracker_Tick 210 | 211 | 295 | 296 | Param( 297 | [ValidateNotNull()] 298 | [Parameter(Mandatory=$true)] 299 | [string]$Name, 300 | [ValidateNotNull()] 301 | [Parameter(Mandatory=$true)] 302 | [ScriptBlock]$JobScript, 303 | $ArgumentList = $null, 304 | [ScriptBlock]$CompletedScript, 305 | [ScriptBlock]$UpdateScript) 306 | 307 | #Start the Job 308 | $job = Start-Job -Name $Name -ScriptBlock $JobScript -ArgumentList $ArgumentList 309 | 310 | if($job -ne $null) 311 | { 312 | #Create a Custom Object to keep track of the Job & Script Blocks 313 | $members = @{ 'Job' = $Job; 314 | 'CompleteScript' = $CompletedScript; 315 | 'UpdateScript' = $UpdateScript} 316 | 317 | $psObject = New-Object System.Management.Automation.PSObject -Property $members 318 | 319 | [void]$JobTrackerList.Add($psObject) 320 | 321 | #Start the Timer 322 | if(-not $timerJobTracker.Enabled) 323 | { 324 | $timerJobTracker.Start() 325 | } 326 | } 327 | elseif($CompletedScript -ne $null) 328 | { 329 | #Failed 330 | Invoke-Command -ScriptBlock $CompletedScript -ArgumentList $null 331 | } 332 | 333 | } 334 | 335 | function Update-JobTracker 336 | { 337 | <# 338 | .SYNOPSIS 339 | Checks the status of each job on the list. 340 | #> 341 | 342 | #Poll the jobs for status updates 343 | $timerJobTracker.Stop() #Freeze the Timer 344 | 345 | for($index = 0; $index -lt $JobTrackerList.Count; $index++) 346 | { 347 | $psObject = $JobTrackerList[$index] 348 | 349 | if($psObject -ne $null) 350 | { 351 | if($psObject.Job -ne $null) 352 | { 353 | if($psObject.Job.State -ne "Running") 354 | { 355 | #Call the Complete Script Block 356 | if($psObject.CompleteScript -ne $null) 357 | { 358 | #$results = Receive-Job -Job $psObject.Job 359 | Invoke-Command -ScriptBlock $psObject.CompleteScript -ArgumentList $psObject.Job 360 | } 361 | 362 | $JobTrackerList.RemoveAt($index) 363 | Remove-Job -Job $psObject.Job 364 | $index-- #Step back so we don't skip a job 365 | } 366 | elseif($psObject.UpdateScript -ne $null) 367 | { 368 | #Call the Update Script Block 369 | Invoke-Command -ScriptBlock $psObject.UpdateScript -ArgumentList $psObject.Job 370 | } 371 | } 372 | } 373 | else 374 | { 375 | $JobTrackerList.RemoveAt($index) 376 | $index-- #Step back so we don't skip a job 377 | } 378 | } 379 | 380 | if($JobTrackerList.Count -gt 0) 381 | { 382 | $timerJobTracker.Start()#Resume the timer 383 | } 384 | } 385 | 386 | function Stop-JobTracker 387 | { 388 | <# 389 | .SYNOPSIS 390 | Stops and removes all Jobs from the list. 391 | #> 392 | #Stop the timer 393 | $timerJobTracker.Stop() 394 | 395 | #Remove all the jobs 396 | while($JobTrackerList.Count -gt 0) 397 | { 398 | $job = $JobTrackerList[0].Job 399 | $JobTrackerList.RemoveAt(0) 400 | Stop-Job $job 401 | Remove-Job $job 402 | } 403 | } 404 | #endregion 405 | 406 | #region Control Helper Functions 407 | function Load-DataGridView 408 | { 409 | <# 410 | .SYNOPSIS 411 | This functions helps you load items into a DataGridView. 412 | 413 | .DESCRIPTION 414 | Use this function to dynamically load items into the DataGridView control. 415 | 416 | .PARAMETER DataGridView 417 | The ComboBox control you want to add items to. 418 | 419 | .PARAMETER Item 420 | The object or objects you wish to load into the ComboBox's items collection. 421 | 422 | .PARAMETER DataMember 423 | Sets the name of the list or table in the data source for which the DataGridView is displaying data. 424 | 425 | #> 426 | Param ( 427 | [ValidateNotNull()] 428 | [Parameter(Mandatory=$true)] 429 | [System.Windows.Forms.DataGridView]$DataGridView, 430 | [ValidateNotNull()] 431 | [Parameter(Mandatory=$true)] 432 | $Item, 433 | [Parameter(Mandatory=$false)] 434 | [string]$DataMember 435 | ) 436 | $DataGridView.SuspendLayout() 437 | $DataGridView.DataMember = $DataMember 438 | 439 | if ($Item -is [System.ComponentModel.IListSource]` 440 | -or $Item -is [System.ComponentModel.IBindingList] -or $Item -is [System.ComponentModel.IBindingListView] ) 441 | { 442 | $DataGridView.DataSource = $Item 443 | } 444 | else 445 | { 446 | $array = New-Object System.Collections.ArrayList 447 | 448 | if ($Item -is [System.Collections.IList]) 449 | { 450 | $array.AddRange($Item) 451 | } 452 | else 453 | { 454 | $array.Add($Item) 455 | } 456 | $DataGridView.DataSource = $array 457 | } 458 | 459 | $DataGridView.ResumeLayout() 460 | } 461 | #endregion 462 | 463 | $buttonProcess_Click={ 464 | #TODO: Place custom script here 465 | Add-JobTracker ` 466 | -Name "Processes" ` 467 | -JobScript { 468 | Get-Process 469 | Start-Sleep -Seconds 5 470 | } ` 471 | -CompletedScript { 472 | #PARAM($job) 473 | $results = Receive-Job -Name "Processes" 474 | Load-DataGridView -DataGridView $datagridview1 -Item $results 475 | 476 | }` 477 | #-ArgumentList "win32_process" ` 478 | } 479 | 480 | $buttonServices_Click={ 481 | #TODO: Place custom script here 482 | Add-JobTracker ` 483 | -Name "Services" ` 484 | -JobScript { 485 | Get-Service 486 | } ` 487 | -ArgumentList "win32_process" ` 488 | -CompletedScript { 489 | #PARAM($job) 490 | $results = Receive-Job -Name "Services" 491 | Load-DataGridView -DataGridView $datagridview1 -Item $results 492 | } 493 | } 494 | ]]> 495 | 1 496 | 497 | System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 498 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 499 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 500 | System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 501 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 502 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 503 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 504 | System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 505 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 506 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 507 | 508 | -------------------------------------------------------------------------------- /_Examples/MultiThreading_Arguments.Export.ps1: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------ 2 | # Source File Information (DO NOT MODIFY) 3 | # Source ID: 6ca0c3d3-c223-4047-bf67-578fa0ae79a1 4 | # Source File: MultiThreading_Arguments.psf 5 | #------------------------------------------------------------------------ 6 | #region File Recovery Data (DO NOT MODIFY) 7 | <#RecoveryData: 8 | lw0AAB+LCAAAAAAABADNV11v2jAUfZ+0/2D5OQJCCBQpRGrZum4rWzWybm/ISS7Uq2NXtgPNfv2c 9 | j7Z8taQVoAkJxeZen3N8T3yN9wMiMQeZfSCaIPOgqOAD3Mb++3cIed8lnVFO2Dll8I0k4I9Spmlw 10 | I4HElM8mp3KWJsC1atypqdfcCC8XCf9ApJHO7mCAx5nSkDR+UR6LhWqcC5mU3xba9pOFritOnUYr 11 | /1hoaCikEgYcUi0Js9BVGjIafYUsELfAB2GvR9zI7dp9pwOtkz5G3FAZ4KlZz8YouqEsliYODwXX 12 | UjBVajVEr6S4A6mzKmHIqJE2pn8B+91e30Idt+81H4KeScplY7/A2hkbwL3Gfq5zM/Tj3GBXcXnE 13 | kAkFcbnyiFA+eZr0mkXwtsxLQaoce5I/r4XursxZqrXgB69NWMCMQc5pBOqlIm3u4qWIiDYssN/v 14 | WMg5aW9s5nNVWkWtkVZ6oedaqO3UCA9I+JnHcI/9OpxKN7yCzU8F11SlhI11xuCMRLdDwYTEfiBT 15 | 2Ja/7Axj7uh2fQsmxeyaSZqlS/5TzxiVhvibLWM7b7FMBXpIx2yeHs85pj6Z/RmmwtyPX/LW80nS 16 | +JrC4uCuiQ3YzIDNDdiL3WBLPxAsTfiFaX2GzAXQ2U3RHEYiNiU+TbXIRzXKsOS+toXs+uZb4V7b 17 | fF3XuM/pvs5+rc2OtFzX1cHuEgc0AXnw2uoc5YsIA2msDRJv64hB4eK1yEmwZuNVfadKQWIYgHpY 18 | sZrJ/ErRiHAyg/wm1MiNkBT1fVLm1FXm2OHUOXG7JHa6HXBcr/mItI6cqEhIRsM97N8LKKW+Y2Ds 19 | 3RW7EfOD5zhAkizMdfktWC1n6k57U9uO3RZxyG6s3wk7jiYqzQsiZPZweTiKuqGQcBR5laqq0e1f 20 | 2+OwPFW85vIfMf8fwA6DepcNAAA=#> 21 | #endregion 22 | 23 | <# 24 | .NOTES 25 | -------------------------------------------------------------------------------- 26 | Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2014 v4.1.75 27 | Generated on: 2015-01-26 1:11 PM 28 | Generated by: Francois-xavier.cat 29 | Organization: LazyWinAdmin.com 30 | -------------------------------------------------------------------------------- 31 | .DESCRIPTION 32 | GUI script generated by PowerShell Studio 2014 33 | #> 34 | #---------------------------------------------- 35 | #region Application Functions 36 | #---------------------------------------------- 37 | 38 | function OnApplicationLoad { 39 | #Note: This function is not called in Projects 40 | #Note: This function runs before the form is created 41 | #Note: To get the script directory in the Packager use: Split-Path $hostinvocation.MyCommand.path 42 | #Note: To get the console output in the Packager (Windows Mode) use: $ConsoleOutput (Type: System.Collections.ArrayList) 43 | #Important: Form controls cannot be accessed in this function 44 | #TODO: Add modules and custom code to validate the application load 45 | 46 | return $true #return true for success or false for failure 47 | } 48 | 49 | function OnApplicationExit { 50 | #Note: This function is not called in Projects 51 | #Note: This function runs after the form is closed 52 | #TODO: Add custom code to clean up and unload modules when the application exits 53 | 54 | $script:ExitCode = 0 #Set the exit code for the Packager 55 | } 56 | 57 | #endregion Application Functions 58 | 59 | #---------------------------------------------- 60 | # Generated Form Function 61 | #---------------------------------------------- 62 | function Call-MultiThreading_Arguments_psf { 63 | 64 | #---------------------------------------------- 65 | #region Import the Assemblies 66 | #---------------------------------------------- 67 | [void][reflection.assembly]::Load('mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 68 | [void][reflection.assembly]::Load('System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 69 | [void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 70 | [void][reflection.assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 71 | [void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 72 | [void][reflection.assembly]::Load('System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 73 | [void][reflection.assembly]::Load('System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 74 | [void][reflection.assembly]::Load('System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 75 | [void][reflection.assembly]::Load('System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 76 | #endregion Import Assemblies 77 | 78 | #---------------------------------------------- 79 | #region Generated Form Objects 80 | #---------------------------------------------- 81 | [System.Windows.Forms.Application]::EnableVisualStyles() 82 | $form1 = New-Object 'System.Windows.Forms.Form' 83 | $buttonServices = New-Object 'System.Windows.Forms.Button' 84 | $buttonProcess = New-Object 'System.Windows.Forms.Button' 85 | $datagridview1 = New-Object 'System.Windows.Forms.DataGridView' 86 | $timerJobTracker = New-Object 'System.Windows.Forms.Timer' 87 | $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' 88 | #endregion Generated Form Objects 89 | 90 | #---------------------------------------------- 91 | # User Generated Script 92 | #---------------------------------------------- 93 | 94 | # Define some argument to pass to the Add-JobTracker function 95 | [string]$ProcessName = "Chrome" 96 | [array]$Property = "Name","Handles" 97 | 98 | 99 | 100 | 101 | 102 | 103 | $form1_Load={ 104 | #TODO: Initialize Form Controls here 105 | 106 | } 107 | 108 | $formMain_FormClosed=[System.Windows.Forms.FormClosedEventHandler]{ 109 | #Event Argument: $_ = [System.Windows.Forms.FormClosedEventArgs] 110 | #Stop any pending jobs 111 | Stop-JobTracker 112 | } 113 | 114 | $timerJobTracker_Tick={ 115 | Update-JobTracker 116 | } 117 | 118 | #region Job Tracker 119 | $JobTrackerList = New-Object System.Collections.ArrayList 120 | function Add-JobTracker 121 | { 122 | <# 123 | .SYNOPSIS 124 | Add a new job to the JobTracker and starts the timer. 125 | 126 | .DESCRIPTION 127 | Add a new job to the JobTracker and starts the timer. 128 | 129 | .PARAMETER Name 130 | The name to assign to the Job 131 | 132 | .PARAMETER JobScript 133 | The script block that the Job will be performing. 134 | Important: Do not access form controls from this script block. 135 | 136 | .PARAMETER ArgumentList 137 | The arguments to pass to the job 138 | 139 | .PARAMETER CompleteScript 140 | The script block that will be called when the job is complete. 141 | The job is passed as an argument. The Job argument is null when the job fails. 142 | 143 | .PARAMETER UpdateScript 144 | The script block that will be called each time the timer ticks. 145 | The job is passed as an argument. Use this to get the Job's progress. 146 | 147 | .EXAMPLE 148 | Job-Begin -Name "JobName" ` 149 | -JobScript { 150 | Param($Argument1)#Pass any arguments using the ArgumentList parameter 151 | #Important: Do not access form controls from this script block. 152 | Get-WmiObject Win32_Process -Namespace "root\CIMV2" 153 | }` 154 | -CompletedScript { 155 | Param($Job) 156 | $results = Receive-Job -Job $Job 157 | }` 158 | -UpdateScript { 159 | Param($Job) 160 | #$results = Receive-Job -Job $Job -Keep 161 | } 162 | 163 | .LINK 164 | 165 | #> 166 | 167 | Param( 168 | [ValidateNotNull()] 169 | [Parameter(Mandatory=$true)] 170 | [string]$Name, 171 | [ValidateNotNull()] 172 | [Parameter(Mandatory=$true)] 173 | [ScriptBlock]$JobScript, 174 | $ArgumentList = $null, 175 | [ScriptBlock]$CompletedScript, 176 | [ScriptBlock]$UpdateScript) 177 | 178 | #Start the Job 179 | $job = Start-Job -Name $Name -ScriptBlock $JobScript -ArgumentList $ArgumentList 180 | 181 | if($job -ne $null) 182 | { 183 | #Create a Custom Object to keep track of the Job & Script Blocks 184 | $members = @{ 'Job' = $Job; 185 | 'CompleteScript' = $CompletedScript; 186 | 'UpdateScript' = $UpdateScript} 187 | 188 | $psObject = New-Object System.Management.Automation.PSObject -Property $members 189 | 190 | [void]$JobTrackerList.Add($psObject) 191 | 192 | #Start the Timer 193 | if(-not $timerJobTracker.Enabled) 194 | { 195 | $timerJobTracker.Start() 196 | } 197 | } 198 | elseif($CompletedScript -ne $null) 199 | { 200 | #Failed 201 | Invoke-Command -ScriptBlock $CompletedScript -ArgumentList $null 202 | } 203 | 204 | } 205 | 206 | function Update-JobTracker 207 | { 208 | <# 209 | .SYNOPSIS 210 | Checks the status of each job on the list. 211 | #> 212 | 213 | #Poll the jobs for status updates 214 | $timerJobTracker.Stop() #Freeze the Timer 215 | 216 | for($index = 0; $index -lt $JobTrackerList.Count; $index++) 217 | { 218 | $psObject = $JobTrackerList[$index] 219 | 220 | if($psObject -ne $null) 221 | { 222 | if($psObject.Job -ne $null) 223 | { 224 | if($psObject.Job.State -ne "Running") 225 | { 226 | #Call the Complete Script Block 227 | if($psObject.CompleteScript -ne $null) 228 | { 229 | #$results = Receive-Job -Job $psObject.Job 230 | Invoke-Command -ScriptBlock $psObject.CompleteScript -ArgumentList $psObject.Job 231 | } 232 | 233 | $JobTrackerList.RemoveAt($index) 234 | Remove-Job -Job $psObject.Job 235 | $index-- #Step back so we don't skip a job 236 | } 237 | elseif($psObject.UpdateScript -ne $null) 238 | { 239 | #Call the Update Script Block 240 | Invoke-Command -ScriptBlock $psObject.UpdateScript -ArgumentList $psObject.Job 241 | } 242 | } 243 | } 244 | else 245 | { 246 | $JobTrackerList.RemoveAt($index) 247 | $index-- #Step back so we don't skip a job 248 | } 249 | } 250 | 251 | if($JobTrackerList.Count -gt 0) 252 | { 253 | $timerJobTracker.Start()#Resume the timer 254 | } 255 | } 256 | 257 | function Stop-JobTracker 258 | { 259 | <# 260 | .SYNOPSIS 261 | Stops and removes all Jobs from the list. 262 | #> 263 | #Stop the timer 264 | $timerJobTracker.Stop() 265 | 266 | #Remove all the jobs 267 | while($JobTrackerList.Count -gt 0) 268 | { 269 | $job = $JobTrackerList[0].Job 270 | $JobTrackerList.RemoveAt(0) 271 | Stop-Job $job 272 | Remove-Job $job 273 | } 274 | } 275 | #endregion 276 | 277 | #region Control Helper Functions 278 | function Load-DataGridView 279 | { 280 | <# 281 | .SYNOPSIS 282 | This functions helps you load items into a DataGridView. 283 | 284 | .DESCRIPTION 285 | Use this function to dynamically load items into the DataGridView control. 286 | 287 | .PARAMETER DataGridView 288 | The ComboBox control you want to add items to. 289 | 290 | .PARAMETER Item 291 | The object or objects you wish to load into the ComboBox's items collection. 292 | 293 | .PARAMETER DataMember 294 | Sets the name of the list or table in the data source for which the DataGridView is displaying data. 295 | 296 | #> 297 | Param ( 298 | [ValidateNotNull()] 299 | [Parameter(Mandatory=$true)] 300 | [System.Windows.Forms.DataGridView]$DataGridView, 301 | [ValidateNotNull()] 302 | [Parameter(Mandatory=$true)] 303 | $Item, 304 | [Parameter(Mandatory=$false)] 305 | [string]$DataMember 306 | ) 307 | $DataGridView.SuspendLayout() 308 | $DataGridView.DataMember = $DataMember 309 | 310 | if ($Item -is [System.ComponentModel.IListSource]` 311 | -or $Item -is [System.ComponentModel.IBindingList] -or $Item -is [System.ComponentModel.IBindingListView] ) 312 | { 313 | $DataGridView.DataSource = $Item 314 | } 315 | else 316 | { 317 | $array = New-Object System.Collections.ArrayList 318 | 319 | if ($Item -is [System.Collections.IList]) 320 | { 321 | $array.AddRange($Item) 322 | } 323 | else 324 | { 325 | $array.Add($Item) 326 | } 327 | $DataGridView.DataSource = $array 328 | } 329 | 330 | $DataGridView.ResumeLayout() 331 | } 332 | #endregion 333 | 334 | $buttonProcess_Click={ 335 | #TODO: Place custom script here 336 | Add-JobTracker ` 337 | -Name "Processes" ` 338 | -JobScript { 339 | PARAM ($Process, $Property) 340 | Get-Process $Process | Select-Object -Property $Property 341 | Start-Sleep -Seconds 5 342 | } ` 343 | -CompletedScript { 344 | #PARAM($job) 345 | PARAM ($Property) 346 | $results = Receive-Job -Name "Processes" 347 | Load-DataGridView -DataGridView $datagridview1 -Item $results 348 | 349 | }` 350 | -ArgumentList $ProcessName,$Property 351 | 352 | #-ArgumentList "win32_process" ` 353 | } 354 | 355 | $buttonServices_Click={ 356 | #TODO: Place custom script here 357 | Add-JobTracker ` 358 | -Name "Services" ` 359 | -JobScript { 360 | Get-Service 361 | } ` 362 | -CompletedScript { 363 | #PARAM($job) 364 | $results = Receive-Job -Name "Services" 365 | Load-DataGridView -DataGridView $datagridview1 -Item $results 366 | } 367 | #-ArgumentList "win32_process" ` 368 | } 369 | 370 | # --End User Generated Script-- 371 | #---------------------------------------------- 372 | #region Generated Events 373 | #---------------------------------------------- 374 | 375 | $Form_StateCorrection_Load= 376 | { 377 | #Correct the initial state of the form to prevent the .Net maximized form issue 378 | $form1.WindowState = $InitialFormWindowState 379 | } 380 | 381 | $Form_Cleanup_FormClosed= 382 | { 383 | #Remove all event handlers from the controls 384 | try 385 | { 386 | $buttonServices.remove_Click($buttonServices_Click) 387 | $buttonProcess.remove_Click($buttonProcess_Click) 388 | $form1.remove_FormClosed($formMain_FormClosed) 389 | $form1.remove_Load($form1_Load) 390 | $timerJobTracker.remove_Tick($timerJobTracker_Tick) 391 | $form1.remove_Load($Form_StateCorrection_Load) 392 | $form1.remove_FormClosed($Form_Cleanup_FormClosed) 393 | } 394 | catch [Exception] 395 | { } 396 | } 397 | #endregion Generated Events 398 | 399 | #---------------------------------------------- 400 | #region Generated Form Code 401 | #---------------------------------------------- 402 | $form1.SuspendLayout() 403 | # 404 | # form1 405 | # 406 | $form1.Controls.Add($buttonServices) 407 | $form1.Controls.Add($buttonProcess) 408 | $form1.Controls.Add($datagridview1) 409 | $form1.ClientSize = '679, 459' 410 | $form1.Name = "form1" 411 | $form1.Text = "Form" 412 | $form1.add_FormClosed($formMain_FormClosed) 413 | $form1.add_Load($form1_Load) 414 | # 415 | # buttonServices 416 | # 417 | $buttonServices.Location = '94, 382' 418 | $buttonServices.Name = "buttonServices" 419 | $buttonServices.Size = '75, 23' 420 | $buttonServices.TabIndex = 2 421 | $buttonServices.Text = "Services" 422 | $buttonServices.UseVisualStyleBackColor = $True 423 | $buttonServices.add_Click($buttonServices_Click) 424 | # 425 | # buttonProcess 426 | # 427 | $buttonProcess.Location = '13, 382' 428 | $buttonProcess.Name = "buttonProcess" 429 | $buttonProcess.Size = '75, 23' 430 | $buttonProcess.TabIndex = 1 431 | $buttonProcess.Text = "Process" 432 | $buttonProcess.UseVisualStyleBackColor = $True 433 | $buttonProcess.add_Click($buttonProcess_Click) 434 | # 435 | # datagridview1 436 | # 437 | $datagridview1.ColumnHeadersHeightSizeMode = 'AutoSize' 438 | $datagridview1.Location = '12, 12' 439 | $datagridview1.Name = "datagridview1" 440 | $datagridview1.Size = '655, 363' 441 | $datagridview1.TabIndex = 0 442 | # 443 | # timerJobTracker 444 | # 445 | $timerJobTracker.add_Tick($timerJobTracker_Tick) 446 | $form1.ResumeLayout() 447 | #endregion Generated Form Code 448 | 449 | #---------------------------------------------- 450 | 451 | #Save the initial state of the form 452 | $InitialFormWindowState = $form1.WindowState 453 | #Init the OnLoad event to correct the initial state of the form 454 | $form1.add_Load($Form_StateCorrection_Load) 455 | #Clean up the control events 456 | $form1.add_FormClosed($Form_Cleanup_FormClosed) 457 | #Show the Form 458 | return $form1.ShowDialog() 459 | 460 | } #End Function 461 | 462 | #Call OnApplicationLoad to initialize 463 | if((OnApplicationLoad) -eq $true) 464 | { 465 | #Call the form 466 | Call-MultiThreading_Arguments_psf | Out-Null 467 | #Perform cleanup 468 | OnApplicationExit 469 | } 470 | -------------------------------------------------------------------------------- /_Examples/MultiThreading_Arguments.psf: -------------------------------------------------------------------------------- 1 |  2 | 6ca0c3d3-c223-4047-bf67-578fa0ae79a1 3 | 130667694752722681 4 | iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAAARnQU1BAACx 5 | jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAACXZSURBVHhe7d1pcNVloufx7uquqep+OTVvuqd6 6 | XkzVrbrzwq65datmuu7tabvt222rjYiiCAKCoriwubWKLAqioOyCtIDsSNgJCSSBJJB93/d9I8vJ 7 | yb6x6m+e5x8CSTwK2rlC8ny/VZ8Cwjkn58Qiz++cBPwRERERERERERERERERERERERERERERERER 8 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 9 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 10 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 11 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 12 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERjdZO/vjHPy74+c9/ 13 | XjDhkUcK5s2ZVzBv3nzzIwAAGBXMuf3iC88X/PKXvyj4yU9+UmDOduvb++lPf1r163vu0RtvvKnj 14 | p6KUX9GkkpoWFVf7AQDAXa/FO7fTcku1YeNm/eHee2We1Ov6Mf/N/exnPyuwh39KXqUSC+sVnVmu 15 | 6AwAADCanM+uVm6lXzt27tX/+NWvbj0Axo8bX3AkOELJRQ06Zw7/8wAAYFSKzalWWn6VFix45dYD 16 | wH7doLi6WTHZlUbF9R8BAMBoE5VRroqmXm3avOXWA2DBggUFVY2d3hVjAQDAqHUus0LlDd1av+GT 17 | Ww+A+fPnF1TWtys2p0pxAADcJeJzq5VUUKukwjrz4wgxt5VobtPetn0fCXk1N97+tct+H9dvJzG/ 18 | 5sZjSMw3j2HQ7/3Drt+Ove+DP17W+axKlTeaAbD+dgdAQ4fizJ20d/RrzDuIzzMfrFsJdF0AAL4H 19 | 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 94 | iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgB 95 | AACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAA 96 | gIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICD 97 | GAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgA 98 | AAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAA 99 | OIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiI 100 | AQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEA 101 | AICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACA 102 | gxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMY 103 | AAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAA 104 | ADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4 105 | iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgB 106 | AACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAA 107 | gIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICD 108 | GAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgA 109 | 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 154 | X1OdigsKVVp5QW3tfhWnx+pkSKgyS+q9B+arK1N0SLBOhkWpvMkcxp0+ZZ0LM89+Tyu32qfujmbl 155 | JEYo1DzzL7hg7ltDsSJPhSgsPkv1za1qbgpwP76BPRhvNQDsqwSBrnuDuW6TGTr+qjxFhgbrREik 156 | iqoaze11qrYoQ6HBwYpKKTDP4utVmFfsfRx8zU2qLS9RQUGFeXuTyosLVVJZr5bmGsWZ2wgOjTD/ 157 | fdrM/WhRfnykgoNDlFFmPz5tKkyLMo/9tHKqmtRqbqch0H0axn7cGQAAMPrd0QFg/015+x3l9tC8 158 | LY0++VuavYPS/rreHIDN5lD1mYO6vr5R/tb+v4/fYg4ze7uNvma12fdpv/muyV6+yTyrb++/jK/R 159 | 3EajWtrsfTLPfs3vN/r8/fe9zTxTbxz2vm/BHowDgybQALD/RoB9lWD49b7Gu98t1z+G/c/K6+sb 160 | 5PO3eLfX3uo3983+08P9Hwf7e03NfvPxNLdtL2d+3mwfm/lYeY/duw17OfPxabv+2O1hbx67/auB 161 | Ax+L+uH34xvYEVBdXc0AAIBRbtR8D8DdbiS+B2A0sCOGbwIEgNHvjg0AexiGh4crKytL2dnZo15O 162 | To7CwsK8Z8iBBoB9rHl5eQGvO5rYx2n/T4CRkZFDHicAYHS5IwNgQH5+vtLT05WRkTHq2cdhD0g7 163 | bAY/M7Y/t8+aMzMzx8xjTUtLU1FREQMAAEaxOzoAent7vf9Dnv1xtBt4HIFeFrdvGyuP07KPxf7f 164 | D4c/TgDA6HFHBwAAALgzGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAA 165 | gIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICD 166 | GAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgA 167 | AAA4iAEAAICDGAAAADiIAQAAgIMYAAAAOIgBAACAgxgAAAA4iAEAAICD/lMGQKe5UXvDAADg7tTT 168 | 1aGakRoAVrFRZW7QrgoAAHD3sk/a7ZP3ERkAll0TAADg7jZw+I/YAAAAAKPL9xoAhRd6vCsCAIDR 169 | qaC2S77bHQDz5s0v6rsm+fvkrQYAADA6+bolc6Rr0+Yttx4AkydPLtywcZPWrd/oLQYAADB62cN/ 170 | 9uwXbz0AiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI 171 | iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI 172 | iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI 173 | iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI 174 | iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI 175 | iIiIiIiIiIiIiIiIiIiIiIiIiIiIiOgu6Ec/+v+1ZwpH/IHYNwAAAABJRU5ErkJggg== 176 | 177 | 679, 459 178 | form1 179 | Form 180 | formMain_FormClosed 181 | form1_Load 182 | 183 | 94, 382 184 | buttonServices 185 | 75, 23 186 | 2 187 | Services 188 | True 189 | buttonServices_Click 190 | 191 | 192 | 13, 382 193 | buttonProcess 194 | 75, 23 195 | 1 196 | Process 197 | True 198 | buttonProcess_Click 199 | 200 | 201 | AutoSize 202 | 12, 12 203 | datagridview1 204 | 655, 363 205 | 0 206 | 207 | 208 | 209 | timerJobTracker_Tick 210 | 211 | 299 | 300 | Param( 301 | [ValidateNotNull()] 302 | [Parameter(Mandatory=$true)] 303 | [string]$Name, 304 | [ValidateNotNull()] 305 | [Parameter(Mandatory=$true)] 306 | [ScriptBlock]$JobScript, 307 | $ArgumentList = $null, 308 | [ScriptBlock]$CompletedScript, 309 | [ScriptBlock]$UpdateScript) 310 | 311 | #Start the Job 312 | $job = Start-Job -Name $Name -ScriptBlock $JobScript -ArgumentList $ArgumentList 313 | 314 | if($job -ne $null) 315 | { 316 | #Create a Custom Object to keep track of the Job & Script Blocks 317 | $members = @{ 'Job' = $Job; 318 | 'CompleteScript' = $CompletedScript; 319 | 'UpdateScript' = $UpdateScript} 320 | 321 | $psObject = New-Object System.Management.Automation.PSObject -Property $members 322 | 323 | [void]$JobTrackerList.Add($psObject) 324 | 325 | #Start the Timer 326 | if(-not $timerJobTracker.Enabled) 327 | { 328 | $timerJobTracker.Start() 329 | } 330 | } 331 | elseif($CompletedScript -ne $null) 332 | { 333 | #Failed 334 | Invoke-Command -ScriptBlock $CompletedScript -ArgumentList $null 335 | } 336 | 337 | } 338 | 339 | function Update-JobTracker 340 | { 341 | <# 342 | .SYNOPSIS 343 | Checks the status of each job on the list. 344 | #> 345 | 346 | #Poll the jobs for status updates 347 | $timerJobTracker.Stop() #Freeze the Timer 348 | 349 | for($index = 0; $index -lt $JobTrackerList.Count; $index++) 350 | { 351 | $psObject = $JobTrackerList[$index] 352 | 353 | if($psObject -ne $null) 354 | { 355 | if($psObject.Job -ne $null) 356 | { 357 | if($psObject.Job.State -ne "Running") 358 | { 359 | #Call the Complete Script Block 360 | if($psObject.CompleteScript -ne $null) 361 | { 362 | #$results = Receive-Job -Job $psObject.Job 363 | Invoke-Command -ScriptBlock $psObject.CompleteScript -ArgumentList $psObject.Job 364 | } 365 | 366 | $JobTrackerList.RemoveAt($index) 367 | Remove-Job -Job $psObject.Job 368 | $index-- #Step back so we don't skip a job 369 | } 370 | elseif($psObject.UpdateScript -ne $null) 371 | { 372 | #Call the Update Script Block 373 | Invoke-Command -ScriptBlock $psObject.UpdateScript -ArgumentList $psObject.Job 374 | } 375 | } 376 | } 377 | else 378 | { 379 | $JobTrackerList.RemoveAt($index) 380 | $index-- #Step back so we don't skip a job 381 | } 382 | } 383 | 384 | if($JobTrackerList.Count -gt 0) 385 | { 386 | $timerJobTracker.Start()#Resume the timer 387 | } 388 | } 389 | 390 | function Stop-JobTracker 391 | { 392 | <# 393 | .SYNOPSIS 394 | Stops and removes all Jobs from the list. 395 | #> 396 | #Stop the timer 397 | $timerJobTracker.Stop() 398 | 399 | #Remove all the jobs 400 | while($JobTrackerList.Count -gt 0) 401 | { 402 | $job = $JobTrackerList[0].Job 403 | $JobTrackerList.RemoveAt(0) 404 | Stop-Job $job 405 | Remove-Job $job 406 | } 407 | } 408 | #endregion 409 | 410 | #region Control Helper Functions 411 | function Load-DataGridView 412 | { 413 | <# 414 | .SYNOPSIS 415 | This functions helps you load items into a DataGridView. 416 | 417 | .DESCRIPTION 418 | Use this function to dynamically load items into the DataGridView control. 419 | 420 | .PARAMETER DataGridView 421 | The ComboBox control you want to add items to. 422 | 423 | .PARAMETER Item 424 | The object or objects you wish to load into the ComboBox's items collection. 425 | 426 | .PARAMETER DataMember 427 | Sets the name of the list or table in the data source for which the DataGridView is displaying data. 428 | 429 | #> 430 | Param ( 431 | [ValidateNotNull()] 432 | [Parameter(Mandatory=$true)] 433 | [System.Windows.Forms.DataGridView]$DataGridView, 434 | [ValidateNotNull()] 435 | [Parameter(Mandatory=$true)] 436 | $Item, 437 | [Parameter(Mandatory=$false)] 438 | [string]$DataMember 439 | ) 440 | $DataGridView.SuspendLayout() 441 | $DataGridView.DataMember = $DataMember 442 | 443 | if ($Item -is [System.ComponentModel.IListSource]` 444 | -or $Item -is [System.ComponentModel.IBindingList] -or $Item -is [System.ComponentModel.IBindingListView] ) 445 | { 446 | $DataGridView.DataSource = $Item 447 | } 448 | else 449 | { 450 | $array = New-Object System.Collections.ArrayList 451 | 452 | if ($Item -is [System.Collections.IList]) 453 | { 454 | $array.AddRange($Item) 455 | } 456 | else 457 | { 458 | $array.Add($Item) 459 | } 460 | $DataGridView.DataSource = $array 461 | } 462 | 463 | $DataGridView.ResumeLayout() 464 | } 465 | #endregion 466 | 467 | $buttonProcess_Click={ 468 | #TODO: Place custom script here 469 | Add-JobTracker ` 470 | -Name "Processes" ` 471 | -JobScript { 472 | PARAM ($Process, $Property) 473 | Get-Process $Process | Select-Object -Property $Property 474 | Start-Sleep -Seconds 5 475 | } ` 476 | -CompletedScript { 477 | #PARAM($job) 478 | PARAM ($Property) 479 | $results = Receive-Job -Name "Processes" 480 | Load-DataGridView -DataGridView $datagridview1 -Item $results 481 | 482 | }` 483 | -ArgumentList $ProcessName,$Property 484 | 485 | #-ArgumentList "win32_process" ` 486 | } 487 | 488 | $buttonServices_Click={ 489 | #TODO: Place custom script here 490 | Add-JobTracker ` 491 | -Name "Services" ` 492 | -JobScript { 493 | Get-Service 494 | } ` 495 | -CompletedScript { 496 | #PARAM($job) 497 | $results = Receive-Job -Name "Services" 498 | Load-DataGridView -DataGridView $datagridview1 -Item $results 499 | } 500 | #-ArgumentList "win32_process" ` 501 | } 502 | ]]> 503 | 1 504 | 505 | System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 506 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 507 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 508 | System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 509 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 510 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 511 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 512 | System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 513 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 514 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 515 | 516 | -------------------------------------------------------------------------------- /_Examples/WinFormPS/DataGridView/Add-DataGridViewColumn.TempPoint.psf: -------------------------------------------------------------------------------- 1 |  2 | f7c89b20-6eb8-46f5-8bd8-2bdd4e97df8f 3 | iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAAARnQU1BAACx 4 | jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAACrKSURBVHhe7d13lJX1ve/xJCdZ6/5xT9aK5iYn 5 | 55x7U09OvBqNYkxQo0YTFeuJ2AuIYC/YEBsgKkUQBBSR3qQNKEWGAaYP03vvve7pfYbq5/5+zzA6 6 | wkbgCF7g936v9VoDe/bzPHvvcfn7PrsM3yEiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi 7 | IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi 8 | IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi 9 | IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi 10 | IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi 11 | IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi 12 | IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi 13 | IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIi 14 | IiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIqJvoyzD94Mf/MD347PP9t15552++++/3/fAA8OMBwAA 15 | wCmrb6226/bPfvYz3/e//32fXdONErvAf23f/e53W3/0ox/pumuv1aOPPqZVaz9RRm6ZCsvqVVBa 16 | BwAATlGFZT7ll9QoIjpOY8a8pOuvu04//vGP9b3vfW/vwWX+yJkBwGcX/0mTpio+rVCRaSWKSi/T 17 | rgwAAHA6iEwvVWZhtWbNnqMhQ4bo+9//p86Dy/yRO/vss32jRj2iuLQC7cosV4QZAMJTiwEAwGkk 18 | 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 183 | K2pX/Ok7AJSUlGjTpk0KCgrCMdq4caOysrL8DgBNTc3eALDNsM8EAADOXJs2B6m4pOz0GwCs/l8B 184 | 3P+LbnB09vGyvzjJ3+Np2SHAPhMAADiz2fXArqP+1oJDnXIDgGX/iVscH/uPAvl7LC37PftsAADg 185 | TNfhdx3w55QcAAAAwMnFAAAAgIMYAAAAcNBJHwDszrs6+g4EAABODXZtrjlZA0Cu2WlpXbtqG9tV 186 | AwAAThl2bbZrtF2rB67dJ2QAsHINO10AAIBTi12jD123T9gAAAAATh8MAAAAOIgBAAAABx33AFDt 187 | a1VJwx5vQwAAcHoq8u1WXVPXsQ0A9913X3NVXbPqm3u8qQEAAJye6pq65Wvs0IgRD+0+uMwfuVtu 188 | uaVk5MhRnZadGAAAwOlp5Ehj1MOdt956q+/gMk9ERERERERERERERERERERERERERERERERERERE 189 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 190 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 191 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 192 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 193 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 194 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 195 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 196 | REREREREREREREREREREREREREREREREREREREREREREJ6zvfOf/ARdJc/V/Fvr9AAAAAElFTkSu 197 | QmCC 198 | 199 | 522, 261 200 | form1 201 | Form 202 | form1_Load 203 | 204 | 103, 234 205 | textbox1 206 | 407, 20 207 | 2 208 | 209 | 210 | 12, 232 211 | buttonAddColumn 212 | 85, 23 213 | 1 214 | Add Column 215 | True 216 | buttonAddColumn_Click 217 | 218 | 219 | AutoSize 220 | 12, 12 221 | datagridview1 222 | 498, 214 223 | 0 224 | 225 | 226 | 252 | Param ( 253 | [ValidateNotNull()] 254 | [Parameter(Mandatory=$true)] 255 | [System.Windows.Forms.DataGridView]$DataGridView, 256 | [ValidateNotNull()] 257 | [Parameter(Mandatory=$true)] 258 | $Item, 259 | [Parameter(Mandatory=$false)] 260 | [string]$DataMember 261 | ) 262 | $DataGridView.SuspendLayout() 263 | $DataGridView.DataMember = $DataMember 264 | 265 | if ($Item -is [System.ComponentModel.IListSource]` 266 | -or $Item -is [System.ComponentModel.IBindingList] -or $Item -is [System.ComponentModel.IBindingListView] ) 267 | { 268 | $DataGridView.DataSource = $Item 269 | } 270 | else 271 | { 272 | $array = New-Object System.Collections.ArrayList 273 | 274 | if ($Item -is [System.Collections.IList]) 275 | { 276 | $array.AddRange($Item) 277 | } 278 | else 279 | { 280 | $array.Add($Item) 281 | } 282 | $DataGridView.DataSource = $array 283 | } 284 | 285 | $DataGridView.ResumeLayout() 286 | } 287 | #endregion 288 | 289 | function Add-DataGridViewColumn 290 | { 291 | <# 292 | .SYNOPSIS 293 | This function add a column to a DataGridView 294 | #> 295 | PARAM ( 296 | [ValidateNotNull()] 297 | [Parameter(Mandatory = $true)] 298 | [System.Windows.Forms.DataGridView]$DataGridView, 299 | [String[]]$ColumnName 300 | ) 301 | 302 | foreach ($Column in $ColumnName) 303 | { 304 | # Add the Column to the Datagridview 305 | $DataGridView.Columns.Add($Column, $Column) #ColumnName and ColumnHeader are specified 306 | } 307 | } 308 | 309 | 310 | $buttonAddColumn_Click={ 311 | #TODO: Place custom script here 312 | Add-DataGridViewColumn -DataGridView $datagridview1 -ColumnName $textbox1.Text 313 | } 314 | ]]> 315 | 0 316 | 317 | System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 318 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 319 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 320 | System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 321 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 322 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 323 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 324 | System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 325 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 326 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 327 | 328 | -------------------------------------------------------------------------------- /_Examples/WinFormPS/DataGridView/Add-DataGridViewColumn.psf: -------------------------------------------------------------------------------- 1 |  2 | f7c89b20-6eb8-46f5-8bd8-2bdd4e97df8f 3 | iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAAARnQU1BAACx 4 | jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAACj3SURBVHhe7d13lJz1fe9xx3HOuf/E5wR8Q5xb 5 | EseOEy4uwRDb2CRx7Bw78o3tFHdTbANumOYgwGCZZtHBINNUUQFUFiGttL3O9tkys7Nttsz2nZ2y 6 | vUpClM/9/Z7VipV2BNogcVf83u9zXmelmXmeZ2aWw+/7zM6s3kVERERERERERERERERERERERERE 7 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 8 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 9 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 10 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 11 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 12 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 13 | RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERE 14 | RERERERERERERERERERERERERERERERERERERERERERERERERERvR01G4g/+4A8S7zv77MQ3v/nN 15 | xCWXXJK49NLLjEsBAMCyNbdW23X7/e9/f+I973lPwq7pRpdd4N+w3/u93xv/oz/6I33pi1/Uj3/8 16 | Ez23Y7cawj3q6EmqvTsOAACWqY6ehNq6BuUrr9LKlTfpn7/0Jb3vfe/Tu9/97sNHlvkTZwaAhF38 17 | V6++T/76DpXUd6k01KOyBgAAcCYoCXWrsSOqRx9boxUrVug97/n96SPL/Ik7++yzE1de+SNV1ber 18 | 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 48 | ySnvWMW+Ct3/4JN6+eWXvb8/v32Pfnb9HWZ/5kTbHMNuW2qZ/c1/vt8+1zXmec8rb9LTz+Z7A8iJ 49 | vi9LHgDqO4fMgmsW6RTqOpLmgbSq/BsXy//JP1XxZz+kvX/7l8pL26SyTf9HCn9PalohBS6QQn+h 50 | urXv1saHLlVNc9Tbdm4/ZpHuTKgquEn/8aHP6YY9UbWNvqqu5IyauhLm+Oa6QFA79+Zq255C7ano 51 | VE1kTPWRHhWWhpRTVK6dGdXKC7Upv7RBRXUh7dyTr50FjeYJi6m4qNDbLs3XooqwGRLaFz8OAMCp 52 | ETBnoHaRsgNAsNUsjGaxPX7RtOzlJWYR3FtQp11ZlUrLqlrEXm6vt4vlifZj2cW8NmwGAHNM+4qx 53 | /QigHQAazRpSZraz2y5kb1/ZNOAtrp2d3Tpw4KB+evUv9bPrbtcNN9+jy69cqQceespbhHftSteq 54 | 1U+ak+HhRfux7P7tMcsDET1uBgB7srmnYG4AaDIDgF2svVccjvAGIrON/QSdPXtf/cgzuumX92pg 55 | YNAs/IfNfTngDSObt+zSz264y1v87RBktzl2H3PsAFJn1rX5AaDeDCAn+r4sbQAYHFHInjmbM+lU 56 | AmY4KA+FlfvPn1Dsnl9q6LGHtePCc5X5/Frte+gcDe7/c8X2/ndFX/hv5uvvK3f1u7ThgW+bb5S5 57 | M2bbuf0kzJm7mVgaNuvfP/AJfe22Z/TU9nRt2JWnzCZz5t6QpVXf/7z+1wcv0MfO+3P99Rdv0ANZ 58 | Y2odKtDVF31aF3z0Ap3/uWv0m/0P6V8/fKFW/OD7+tS5f62/PP9zuuS2jfr5f3xaH/+rP9PZH/2m 59 | bt4VUTg24r0ycPxjAQC8dUFzBmoXJrsY1nfYN6RFzWJnP5p2rNr2pFmk9+nGm1frP1fepZt/ec8i 60 | N5rL7fVPbUlXTVsy5X6sqpZBBVqj3hl4Tdug94a6p7flmQXYrFEpbm/vk93majMABIMh9ff369If 61 | XK/1z+dqV7Zfdz64SStvuluvvvqyNm/ertvvfdqc2Y8u2o9l9++9Wb6+S49vzlZj74j2FtZrc5pP 62 | zT1zQ4Nd7O37BLyP1Dce+dpsnoO2hDJLG3XNf96t+x54XBMTY3r58CHl5BbpB1et1FNbzeM2z6l9 63 | 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 168 | Etn1wJlXAOxv9RsZ6ldHc0SDI3MP3vvo3+Swol1d6u7pNftpVbC6WrUNTeYJ6VFiaEyT4zG1NwRU 169 | W1enQFOrIp1RjSz8vQFTM5oejamzOaDqmlrV1tSptX9EE/bysajazLY1NQE1dthPAYwpPtCjzp6E 170 | xscS6m2rV011jWpDDWps6VJssF+dnX2KDY1obHhAkUi/hsZGNBTrM5f3mkW7V53dMe+TA1Nm+77u 171 | HvVGkxo3z9fR+/MmGAAAAHY9cOo9AN4v45mZ1uQxv+LXDAH2n781+5oyi/bs7Kxm7Wf2zVm1dzu7 172 | jb3syOXT3i8GWrj9kduYs3LvNsbMlLl/3uVTmpm/zGw3N3DYf4LR/NlsMzW/jf1q75e9bvrIrxK2 173 | +/R+WZDZ1/zl89uafY+Zy6fs7wRYwuJvMQAAAOx64NYAAAYAAIC3HrxjBgD75+MXOyxmn6eTGQBe 174 | eumw99sG7W0AAO8s9mTwHfGvAXZ3d3uL2+joKN6EfZ7sP1r0RgNAdk6hWfxn5/45YADAO8/BQ3rp 175 | 8GGVlvnP3AEgmUwqEomoq6sLJ6mjo0OxWCzlADAyMuoNAJZ9JQAA8A6VV6y96dnq7Oo58waAefbf 176 | NcbS2FcCUj2Xlh0C7CsBAIB3tuHh4TdcDxZalgOA/VkGlibV8zjPXm9fDQAAvNOd/Ju9l+UAAAAA 177 | Ti8GAAAAHMQAAACAg077AGB3bn+Tnj0QAABYHuzaPHi6BoCw2Wl3fFKx4UkNAgCAZcOuzXaNtmv1 178 | wrX7lAwAVtiw0wUAAFhe7Bp9/Lp9ygYAAABw5mAAAADAQQwAAAA4aMkDQDQxrq6hl7wNAQDAmSmS 179 | OKT4yMzJDQDf+973Rgfio0qOHvCmBgAAcGaKj8wqMTylH/zgh4eOLPMn7qtf/WrXFVdcOW3ZiQEA 180 | AJyZrrjCuPKq6a997WuJI8s8ERERERERERERERERERERERERERERERERERERERERERERERERERER 181 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 182 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 183 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 184 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 185 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 186 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 187 | ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER 188 | EREREREREREREREREREREREREREREZ2y3vWu/wfbqUKkAaW4aQAAAABJRU5ErkJggg== 189 | 190 | 522, 261 191 | form1 192 | Form 193 | form1_Load 194 | 195 | 103, 234 196 | textbox1 197 | 407, 20 198 | 2 199 | 200 | 201 | 12, 232 202 | buttonAddColumn 203 | 85, 23 204 | 1 205 | Add Column 206 | True 207 | buttonAddColumn_Click 208 | 209 | 210 | AutoSize 211 | 12, 12 212 | datagridview1 213 | 498, 214 214 | 0 215 | 216 | 217 | 243 | Param ( 244 | [ValidateNotNull()] 245 | [Parameter(Mandatory = $true)] 246 | [System.Windows.Forms.DataGridView]$DataGridView, 247 | [ValidateNotNull()] 248 | [Parameter(Mandatory = $true)] 249 | $Item, 250 | [Parameter(Mandatory = $false)] 251 | [string]$DataMember 252 | ) 253 | $DataGridView.SuspendLayout() 254 | $DataGridView.DataMember = $DataMember 255 | 256 | if ($Item -is [System.ComponentModel.IListSource]` 257 | -or $Item -is [System.ComponentModel.IBindingList] -or $Item -is [System.ComponentModel.IBindingListView]) 258 | { 259 | $DataGridView.DataSource = $Item 260 | } 261 | else 262 | { 263 | $array = New-Object System.Collections.ArrayList 264 | 265 | if ($Item -is [System.Collections.IList]) 266 | { 267 | $array.AddRange($Item) 268 | } 269 | else 270 | { 271 | $array.Add($Item) 272 | } 273 | $DataGridView.DataSource = $array 274 | } 275 | 276 | $DataGridView.ResumeLayout() 277 | } 278 | #endregion 279 | 280 | function Add-DataGridViewColumn 281 | { 282 | <# 283 | .SYNOPSIS 284 | This function add a column to a DataGridView 285 | .DESCRIPTION 286 | This function add a column to a DataGridView 287 | .EXAMPLE 288 | Add-DataGridViewColumn -DataGridView $datagridview1 -ColumnName $($textbox1.Text -split "," -replace '^\s+', '' -replace '\s+$', '') 289 | .EXAMPLE 290 | Add-DataGridViewColumn -DataGridView $datagridview1 -ColumnName "First Name","Last Name","SamAccountName","Description" 291 | .NOTES 292 | Francois-Xavier Cat 293 | www.lazywinadmin.com 294 | @lazywinadm 295 | #> 296 | PARAM ( 297 | [ValidateNotNull()] 298 | [Parameter(Mandatory = $true)] 299 | [System.Windows.Forms.DataGridView]$DataGridView, 300 | [String[]]$ColumnName 301 | ) 302 | 303 | foreach ($Column in $ColumnName) 304 | { 305 | 306 | # Create Column object 307 | $NewColumn = New-Object -TypeName System.Windows.Forms.DataGridViewTextBoxColumn 308 | $NewColumn.Name = $Column 309 | $NewColumn.HeaderText = $Column 310 | 311 | # Add the Column to the Datagridview 312 | $DataGridView.Columns.Add($NewColumn) 313 | } 314 | } 315 | 316 | 317 | $buttonAddColumn_Click = { 318 | if ($textbox1.Text) 319 | { 320 | # Add the a new column (separated by a comma), additionally it will remove white spaces at the beginning and end 321 | Add-DataGridViewColumn -DataGridView $datagridview1 -ColumnName $($textbox1.Text -split "," -replace '^\s+', '' -replace '\s+$', '') 322 | } 323 | } 324 | ]]> 325 | 1 326 | 327 | System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 328 | mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 329 | System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 330 | System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 331 | System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 332 | System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 333 | System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 334 | System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 335 | System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 336 | System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 337 | 338 | -------------------------------------------------------------------------------- /_Examples/WinFormPS/ErrorProvider/ErrorProvider.Export.ps1: -------------------------------------------------------------------------------- 1 | #------------------------------------------------------------------------ 2 | # Source File Information (DO NOT MODIFY) 3 | # Source ID: af67838a-3e6c-4b74-9b43-682d65243ced 4 | # Source File: ErrorProvider.psf 5 | #------------------------------------------------------------------------ 6 | #region File Recovery Data (DO NOT MODIFY) 7 | <#RecoveryData: 8 | +gsAAB+LCAAAAAAABAC9Vmtv2jAU/T5p/yHK5yghPEorhUg8ijSNrVVh3b5VTnJhHo6NbKcl/fVz 9 | HtDQUJIiQEiIJD4+955zuI7zAD57Bh6PkESa+iEwoz29adq6+/WLpjl3HC8wRWSMCfxEIbi3nDN+ 10 | z9kzDoCbKzF3rNKaDOn9A19qMl5BT5/GQkJo/sY0YC/CHDMeZt+Gtu+RoT3mpbTNRvIxtGFEZMSh 11 | RyGSHBFDu488gv3vEM/YEmjP63ZRx+9c2TetNjSub3SNqlJ6+lztN0Gvsdq/H4SY+izUNf8vJgFX 12 | KH3IqOSMiKxdVbZqbQVcxjm8H0k29RGBEQ6BJiWppVeGZrcca7O0CvqDBaC7Y8VUiRkSDFRO8asC 13 | NK/bhtZtV2ISxQaMKzumMiYJE15DMMKIsEUlOPFLd/eIVImcwVrqbhFl7oXdPquOcsyEoWAv21Py 14 | xLHStRtgdYCmEslIDBA/e4pEyuQhbh8KT1mkCfORVBXoriLvNEvqfGTIG18NSCEuzToUM+R9owGs 15 | FaZsl5XJXt+EJAcDtj67BVLxeGx9tAF2U/1r6zuwoautv91QzTUbn9K/vPvn9R9EUjJ6dvm9lGYG 16 | Qh5tQCuZm3UEyhx4Y6ztQbejLChP5kMW1DIsHXU1K/kl4BGLCJF0Gg+QvxwywrjC8wj24YsDUs1/ 17 | f1ls/Sm9824yFjOye1Edl53z++ypgYRtlbPZHx2ySYoQpsDzOBXS9ABzUEnz4dBxbm2F2VF3V5q+ 18 | EBCqokFsVud3YjcUPuMEeydo3LG2u75nyaS+BMfJ7axmTN4fL0PE0Qumi2O4Gq15Z96d23bQaaAW 19 | qub6E5KL9DRkHE5PtL3MIu9YxXd99z9KomvB+gsAAA==#> 20 | #endregion 21 | 22 | <# 23 | .NOTES 24 | -------------------------------------------------------------------------------- 25 | Code generated by: SAPIEN Technologies, Inc., PowerShell Studio 2016 v5.2.127 26 | Generated on: 2016-08-20 12:12 AM 27 | Generated by: Francois-Xavier Cat 28 | Organization: LazyWinAdmin.com 29 | -------------------------------------------------------------------------------- 30 | .DESCRIPTION 31 | GUI script generated by PowerShell Studio 2016 32 | #> 33 | #---------------------------------------------- 34 | #region Application Functions 35 | #---------------------------------------------- 36 | 37 | #endregion Application Functions 38 | 39 | #---------------------------------------------- 40 | # Generated Form Function 41 | #---------------------------------------------- 42 | function Call-ErrorProvider_psf { 43 | 44 | #---------------------------------------------- 45 | #region Import the Assemblies 46 | #---------------------------------------------- 47 | [void][reflection.assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 48 | [void][reflection.assembly]::Load('System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089') 49 | [void][reflection.assembly]::Load('System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a') 50 | #endregion Import Assemblies 51 | 52 | #---------------------------------------------- 53 | #region Generated Form Objects 54 | #---------------------------------------------- 55 | [System.Windows.Forms.Application]::EnableVisualStyles() 56 | $formLazyWinAdmincom = New-Object 'System.Windows.Forms.Form' 57 | $statusbar1 = New-Object 'System.Windows.Forms.StatusBar' 58 | $textbox1 = New-Object 'System.Windows.Forms.TextBox' 59 | $buttonTest = New-Object 'System.Windows.Forms.Button' 60 | $errorprovider1 = New-Object 'System.Windows.Forms.ErrorProvider' 61 | $InitialFormWindowState = New-Object 'System.Windows.Forms.FormWindowState' 62 | #endregion Generated Form Objects 63 | 64 | #---------------------------------------------- 65 | # User Generated Script 66 | #---------------------------------------------- 67 | 68 | $formLazyWinAdmincom_Load={ 69 | #TODO: Initialize Form Controls here 70 | 71 | } 72 | 73 | $buttonTest_Click={ 74 | 75 | # If textbox is empty 76 | if (-not $textbox1.Text) 77 | { 78 | $errorprovider1.SetError($textbox1, 'Please enter something') 79 | } 80 | else 81 | { 82 | # Else Clear the error 83 | #$errorprovider1.SetError($textbox1,'') 84 | Clear-WFErrorProvider -ErrorProvider $errorprovider1 -Control $textbox1 85 | 86 | # SHow the text in Status message 87 | $statusbar1.Text = $textbox1.Text 88 | } 89 | } 90 | 91 | function Clear-WFErrorProvider 92 | { 93 | <# 94 | .SYNOPSIS 95 | The Clear-WFErrorProvider function will clear the error message on the Winforms control specified 96 | 97 | .DESCRIPTION 98 | The Clear-WFErrorProvider function will clear the error message on the Winforms control specified 99 | 100 | .PARAMETER ErrorProvider 101 | Specifies the ErrorProvider Control 102 | 103 | .PARAMETER Control 104 | Specifies the Control on which the error message will be cleared 105 | 106 | .EXAMPLE 107 | PS C:\> Clear-WFErrorProvider -$ErrorProvider $ErrorProvider1 -Control $TextBox1 108 | 109 | Clear the error message on the $TextBox1 control 110 | 111 | .NOTES 112 | Francois-Xavier Cat 113 | @lazywinadm 114 | www.lazywinadmin.com 115 | github.com/lazywinadmin 116 | #> 117 | 118 | PARAM ( 119 | [parameter(Mandatory = $true)] 120 | [System.Windows.Forms.ErrorProvider]$ErrorProvider, 121 | [parameter(Mandatory = $true)] 122 | $Control 123 | ) 124 | BEGIN 125 | { 126 | Add-Type -AssemblyName System.Windows.Forms 127 | } 128 | PROCESS 129 | { 130 | $ErrorProvider.SetError($Control, '') 131 | } 132 | } 133 | # --End User Generated Script-- 134 | #---------------------------------------------- 135 | #region Generated Events 136 | #---------------------------------------------- 137 | 138 | $Form_StateCorrection_Load= 139 | { 140 | #Correct the initial state of the form to prevent the .Net maximized form issue 141 | $formLazyWinAdmincom.WindowState = $InitialFormWindowState 142 | } 143 | 144 | $Form_Cleanup_FormClosed= 145 | { 146 | #Remove all event handlers from the controls 147 | try 148 | { 149 | $buttonTest.remove_Click($buttonTest_Click) 150 | $formLazyWinAdmincom.remove_Load($formLazyWinAdmincom_Load) 151 | $formLazyWinAdmincom.remove_Load($Form_StateCorrection_Load) 152 | $formLazyWinAdmincom.remove_FormClosed($Form_Cleanup_FormClosed) 153 | } 154 | catch [Exception] 155 | { } 156 | } 157 | #endregion Generated Events 158 | 159 | #---------------------------------------------- 160 | #region Generated Form Code 161 | #---------------------------------------------- 162 | $formLazyWinAdmincom.SuspendLayout() 163 | # 164 | # formLazyWinAdmincom 165 | # 166 | $formLazyWinAdmincom.Controls.Add($statusbar1) 167 | $formLazyWinAdmincom.Controls.Add($textbox1) 168 | $formLazyWinAdmincom.Controls.Add($buttonTest) 169 | $formLazyWinAdmincom.AutoScaleDimensions = '6, 13' 170 | $formLazyWinAdmincom.AutoScaleMode = 'Font' 171 | $formLazyWinAdmincom.ClientSize = '284, 74' 172 | $formLazyWinAdmincom.FormBorderStyle = 'FixedDialog' 173 | $formLazyWinAdmincom.Name = 'formLazyWinAdmincom' 174 | $formLazyWinAdmincom.Text = 'LazyWinAdmin.com' 175 | $formLazyWinAdmincom.add_Load($formLazyWinAdmincom_Load) 176 | # 177 | # statusbar1 178 | # 179 | $statusbar1.Location = '0, 52' 180 | $statusbar1.Name = 'statusbar1' 181 | $statusbar1.Size = '284, 22' 182 | $statusbar1.TabIndex = 2 183 | # 184 | # textbox1 185 | # 186 | $textbox1.Location = '12, 12' 187 | $textbox1.Name = 'textbox1' 188 | $textbox1.Size = '100, 20' 189 | $textbox1.TabIndex = 1 190 | # 191 | # buttonTest 192 | # 193 | $buttonTest.Location = '136, 10' 194 | $buttonTest.Name = 'buttonTest' 195 | $buttonTest.Size = '75, 23' 196 | $buttonTest.TabIndex = 0 197 | $buttonTest.Text = 'Test' 198 | $buttonTest.UseVisualStyleBackColor = $True 199 | $buttonTest.add_Click($buttonTest_Click) 200 | # 201 | # errorprovider1 202 | # 203 | $errorprovider1.ContainerControl = $formLazyWinAdmincom 204 | $formLazyWinAdmincom.ResumeLayout() 205 | #endregion Generated Form Code 206 | 207 | #---------------------------------------------- 208 | 209 | #Save the initial state of the form 210 | $InitialFormWindowState = $formLazyWinAdmincom.WindowState 211 | #Init the OnLoad event to correct the initial state of the form 212 | $formLazyWinAdmincom.add_Load($Form_StateCorrection_Load) 213 | #Clean up the control events 214 | $formLazyWinAdmincom.add_FormClosed($Form_Cleanup_FormClosed) 215 | #Show the Form 216 | return $formLazyWinAdmincom.ShowDialog() 217 | 218 | } #End Function 219 | 220 | #Call the form 221 | Call-ErrorProvider_psf | Out-Null 222 | --------------------------------------------------------------------------------