0f108260-d3b3-4fa7-b8c4-bef26d7f1442 132106286467697655 iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAAARnQU1BAACx jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAADr0SURBVHhe7d33d1z3fef/5GR/2PwB3/0pu7/E +bacs5s4ZXfjbOL0rBXJjmVLdCzJVLEkkiIl9gYQBAmCJCqJRoBgBdFBgugdRG9EL4NB75UgKgE2 SX59P/cCFCULkkXJ+YbMfT7PeRyB4MydO3cG83nfAQj9BhERERERERERERERERERERERERERERER ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER ERERERERERER/f9a9m/+5m+6f/s//kf3888/596yZat7q2H9FwAAPP22bt3mfuutN93/6T/9H+7f +q3fcpu13fLl/dZ/+A9Dv//7/6+279iplPRctfdOqHv4trqGZgAAwDOge3hGtc2d8g8I0p9/5zv6 7d/+ba0t81+cuZB75849qmnpVU3nhEqa+nWjsU83mgAAwK9bacuAylsHbWXf0KPtWNssax1WW/+0 os5e0O/8zu/86gHgpz/9qbuutVfVrlGVNverDAAA/KuoMIt1fk2nrhU2/lrlV3eaQWDAHgT6xhfl 5eX9qweA7R9sdw9NLa1ODwAA4F9FZduQcio6FHO1VHHXyxWXVmGLX/vvL3/8RT53GbOty2ab2eXt 9u0MTK8oJCTsVw8A1g8ODIzP228hWJNJhZkgqlzjqu+eeqxrQtVtq28zrF7mCbWNqO6T7U2qpn3o U9saVq17UvU91t+Nq7p9WDXm9qvbze2ZO1LeZv7eNaoqc/uf2+56rMu7zfU/ffmWIdV0jtu3+5nL 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 AByIAQAAAAdiAAAAwIEYAAAAcCAGAAAAHIgBAAAAB2IAAADAgRgAAABwIAYAAAAciAEAAAAHYgAA AMCBGAAAAHAgBgAAAByIAQAAAAdiAAAAwIEYAAAAcCAGAAAAHIgBAAAAB2IAAADAgRgAAABwIAYA AAAciAEAAAAHYgAAAMCBGAAAAHAgBgAAAByIAQAAAAdiAAAAwIEYAAAAcCAGAAAAHIgBAAAAB2IA AADAgRgAAABwIAYAAAAciAEAAAAHYgAAAMCBGAAAAHAgBgAAAByIAQAAAAdiAAAAwIEYAAAAcCAG AAAAHIgBAAAAB2IAAADAgRgAAABwIAYAAAAciAEAAAAHYgAAAMCBGAAAAHAgBgAAAByIAQAAAAdi AAAAwIEYAAAAcCAGAAAAHIgBAAAAB2IAAADAgRgAAABwIAYAAAAciAEAAAAHYgAAAMCBGAAAAHAg BgAAAByIAQAAAAdiAAAAwIEYAAAAcCAGAAAAHIgBAAAAB2IAAADAgRgAAABwIAYAAAAciAEAAAAH YgAAAMCBGAAAAHAgBgAAAByIAQAAAAdiAAAAwIEYAAAAcCAGAAAAHIgBAAAAB2IAAADAgRgAAABw IAYAAAAciAEAAAAHYgAAAMCBGAAAAHAgBgAAAByIAQAAAAdiAAAAwIEYAAAAcCAGAAAAHIgBAAAA B2IAAADAgRgAAABwIAYAAAAciAEAAAAHYgAAAMCBGAAAAHAgBgAAAByIAQAAAAdiAAAAwIEYAAAA cCAGAAAAHIgBAAAAB2IAAADAgRgAAABwIAYAAAAciAEAAAAHYgAAAMCBGAAAAHAgBgAAAByIAQAA AAdiAAAAwIEYAAAAcCAGAAAAHIgBAAAAB2IAAADAgRgAAABwIAYAAAAciAEAAAAHYgAAAMCBGAAA AHAgBgAAAByIAQAAAAdiAAAAwIEYAAAAcCAGAAAAHIgBAAAAB2IAAADAgRgAAABwIAYAAAAciAEA AAAHYgAAAMCBGAAAAHAgBgAAAByIAQAAAAdiAAAAwIEYAAAAcCAGAAAAHIgBAAAAB2IAAADAgRgA AABwIAYAAAAciAEAAAAHYgAAAMCBGAAAAHAgBgAAAByIAQAAAAdiAAAAwIEYAAAAcCAGAAAAHIgB AAAAB2IAAADAgRgAAABwIAYAAAAciAEAAAAHYgAAAMCBGAAAAHAgBgAAAByIAQAAAAdiAAAAwIEY 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 aPG3viWAz3s0BFjvBlj/K2Dr2K13TAEAn2f9P1as/2fM8Pi0cmq6dLXMZf8O/WeVtf/5dd2amJ7R ymf+Hzmf91QOABZrIbPeCbB+FTB+NevMn8UfAJ6ctUiu3FnSR/eX9YsHK/b3zZ9V1v5/dG/ZPvP/ ssXf8tQOAAAA4F8PAwAAAA7EAAAAgAMxAAAA4EAMAAAAOBADAAAADvS1B4BpMwDcMQOAtQEAAPBs WTJmv84AMD5zR3Pzq9MDAAB4tliL/9TtBd36qgPAli3v9dz9UDIzgD01AACAZ5O1+H8k6dTpsF89 ALz88svuoOAQBQQG2xMDAAB4dp0OCdPPf/72rx4AiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiI iIiIiIiIiIiI6Ov2G7/x/wEwYm1zvGAejAAAAABJRU5ErkJggg==
7fVZ1KKAlwwAACODCAAAAAAABAC9Vltv2jAUfp+0/2DlYU9Q7lC0glRgvajtqICxx8okp+DVsZHtFOiv33EM Gx1kGG2tkCIc+zvX7/PJWX/yA0Kj2x8/EHLmFsSs5tAKhittID75zkQkF/rkQqrYPXNk31aOjEFp JkWrelK0vxzpJtwkCloCEqMoz5H7ZMJZeAOrkXwC0Zo0GrQW1uqlZqUKxdNmQASN0fMj2huBNr3L cY8aOqITDnYdkHDGeKQQGnSlMEpyHaSRY+z3Ss5BmdXaxnkYwtx0EmOk2JzBUwN4BMSHsD42SQ/0 bwJS2BgqbCxlWU6MHIaUQ4/FIGzGGEQ9R0oVf+idjCBoX2AOBzFdzkCYIXtBQL1xmiPVavMgyHak I1UEamhW3LpiS4h6jHI5PQi+o0sWo7+OXCKQcg2HIUwcC/mKz6Cd1eqD8KGhytxLzQyzDe5ijTDZ UAGIg9gRLE3Qtm7y6De/YGaW/+U9fy3yPZgk07xtktscgFGrvCPTrvUvz+h8bfpW0ig7qwe7fVZI ARv0Yc05v2+uOieFNFUbJhNTG/vfNLeH4CKcSRW0OxJt4UVxC4+7rczQRcrwkUp2qbNHFDTRoMeU s4g6Auwn3S7yVoZrRKWMWtoj2iyq7q+PB9xlViriHVGuepxHulyLCFBJJZ/TKZnTsAh3cZHIL7Bv GroynmM9Un4uzQDQr0IL3o1AE2OmE8rTe6ZDw6eu5JYBWfhtseDVFj5lFfYh3f1DLAWnFn/tWEuX ikVjBos3V5At+xSdPaOz0pHC4VwusJhqJM+jaIDR+VN6C9sDDgaOg2PDklhcAcXW6ytg01k6bdyI 2ijzaGWVGx6QOyw0G2LMofGP16nxVa09UAPMry/4ypvZLizMZz2rE86xru6tt+jrlWqOVE6L/1/1 dDI0cp45bI8WyrsOGfu99S9jZWBJ6lEl98EzAI3RBu3+zVEsrjVLdkD43NjbA8LLi2NHo4Y68RlA v7lR9p4In2g8/+wVzLuPgVfs3Fps/ur2Tw1JulyXDAAA
[OutputType([string])] param () if ($hostinvocation -ne $null) { $hostinvocation.MyCommand.path } else { $script:MyInvocation.MyCommand.Path } } # # function Get-ScriptDirectory { <# .SYNOPSIS Get-ScriptDirectory returns the proper location of the script. .OUTPUTS System.String .NOTES Returns the correct path within a packaged executable. #> [OutputType([string])] param () if ($hostinvocation -ne $null) { Split-Path $hostinvocation.MyCommand.path } else { Split-Path $script:MyInvocation.MyCommand.Path } } # # [string]$scriptNameAndPath = Get-ScriptPathAndName [string]$scriptPath = Get-ScriptDirectory # [boolean]$global:sapienExportedScriptFile = $false # $global:scriptNameOnly = Split-Path -Path $scriptNameAndPath -Leaf # If ($global:scriptNameOnly.EndsWith(".Export.ps1")) { $global:sapienExportedScriptFile = $true } # $scriptFilenameExtensionONLY = $global:scriptNameOnly.ToUpper().Substring($($global:scriptNameOnly.LastIndexOf(".")) + 1) # # If (-not $global:languageMode.Equals("FULLLANGUAGE") -and $global:PowerShellHostName.ToUpper().Equals("CONSOLEHOST")) { # This will ONLY kick in if the *.Export.ps1 file is being run in a PowerShell console # It will be the LAST error message that is thrown Write-Error -Message "You are NOT running in `"FullLanguage`" mode and this script-Form will NOT work!" Pause Exit } # [boolean]$global:isStandaloneExecutable = $false # If ($global:PowerShellHostName.ToUpper().Equals("PRIMALSCRIPTHOSTIMPLEMENTATION") -and -not $scriptFilenameExtensionONLY.Equals("EXE")) { # This is the indicator that this is running in Debug Mode either in PrimalScript or PowerShell Studio $global:isStandaloneExecutable = $true } # $formTestDGVDataTableTest_Load = { [int]$global:timesThrough = 0 [int]$global:timesThroughWithoutErrors = 0 [int]$global:timesThroughWithErrors = 0 # [boolean]$global:isConversionToDataTableBroken = $false # [int]$global:conversionFirstBrokeAtTimeThrough = -1 # $buttonRetryLoadingData.Focus() # $formTestDGVDataTableTest.Show() # loadDataIntoDataGridView } # # function loadDataIntoDataGridView() { $buttonRetryLoadingData.Enabled = $false $datagridview1.DataSource = $null # $global:timesThrough++ # # This Start-Sleep call is here so that an End-User can see that this function IS running... Start-Sleep -Seconds 1 # [string]$message = "" # [collections.arraylist]$dataToDisplay = @(Get-ChildItem c:\Windows | Select-Object name, fullname, length, mode) # $message += toTheNthDegreeText -value $global:timesThrough $message += " time through" $message += "`n`n" $message += "`$dataToDisplay.GetType(): `"{0}`"" -f $dataToDisplay.GetType() $message += "`n`n" $message += "`$dataToDisplay.Count: `"{0:N0}`"" -f $dataToDisplay.Count $message += "`n`n" $message += "This is BEFORE the call to the ConvertTo-DataTable()" # # Place a Breakpoint at the next possible line of execution in PowerShell Studio after this line # The breakpoint MUST be AT or BEFORE the ConvertTo-DataTable() call # Write-Host "" Write-Host $message -ForegroundColor 'Green' # [void][System.Windows.Forms.MessageBox]::Show($message, "Original object info for: `"`$dataToDisplay`"") $message = "" # $dataToDisplayAsDataTable = ConvertTo-DataTable -InputObject $dataToDisplay # # When I put the value: "$dataToDisplayAsDataTable.Count" into the Watch panel for evaluation I got unexpected results # I NOW KNOW that the property .Count does NOT exist for a DataTable nor does .Length but I did not expect it to cause any errors in a script when added to the Watch panel # BUT the following method DOES exist and should NOT cause this. # You can also put this: "$dataToDisplayAsDataTable.GetType()" in the Watch panel and then set a breakpoint AT of BEFORE the ConvertTo-DataTable call # $message += toTheNthDegreeText -value $global:timesThrough $message += " time through" $message += "`n`n" $message += "`$dataToDisplayAsDataTable.GetType(): `"{0}`"" -f $dataToDisplayAsDataTable.GetType() $message += "`n`n" $message += "`$dataToDisplayAsDataTable.Rows.Count: `"{0:N0}`"" -f $dataToDisplayAsDataTable.Rows.Count $message += "`n`n" $message += "`$dataToDisplayAsDataTable.Columns.Count: `"{0:N0}`"" -f $dataToDisplayAsDataTable.Columns.Count # $message += "`n`n" $message += "This is AFTER the call to the ConvertTo-DataTable()" # $message += "`n`n" If ($dataToDisplayAsDataTable -is [System.Data.DataTable]) { $global:timesThroughWithoutErrors++ $global:isConversionToDataTableBroken = $false # $message += "The above object IS the expected type: `"System.Data.DataTable`"" $message += "`n`n" $message += "The `$datagridview1 will be FILE and WORK AS EXPECTED and desired. :-)" $neededForegroundColor = 'Green' } Else { $global:timesThroughWithErrors++ $global:isConversionToDataTableBroken = $true If ($global:conversionFirstBrokeAtTimeThrough -eq -1) { $global:conversionFirstBrokeAtTimeThrough = $global:timesThrough } # $message += "The above object is NOT the expected type! It is: `"{0}`" expected was `"System.Data.DataTable`"" -f $dataToDisplayAsDataTable.GetType() $message += "`n`n" $message += "The `$datagridview1 will be MESSED UP and WILL NOT work as expected and desired. :-(" $neededForegroundColor = 'Red' } # If ($global:timesThrough -gt 1) { $message += "`n`n" If ($global:timesThroughWithErrors -eq 0) { $message += "`nHave you tried setting a breakpoint AT or BEFORE the ConvertTo-DataTable() call?" $message += "`nYou also have to have something in the Watch panel where the `$datagridview1 has to be evaluated." $message += "`n(Putting either or both of these values `$dataToDisplayAsDataTable.Rows.Count and `$dataToDisplayAsDataTable.Columns.Count in the Watch panel will NOT cause this problem!)" $message += "`n(BUT `$dataToDisplayAsDataTable.Count THIS WILL! so does `$dataToDisplayAsDataTable.GetType())" } Else { If ($global:timesThroughWithoutErrors -eq 0) { If ($global:scriptNameOnly.EndsWith(".Export.ps1")) { $message += "Well I have NEVER SEEN this work with this script as an EXPORTed version of this file." } ElseIf ($global:scriptNameOnly.EndsWith(".Run.ps1")) { $message += "I have NEVER SEEN this happen in the RUN mode!" } Else { $message += "If you have a variable for the `$datagridview1 in the Watch panel that would explain that this a never worked not evem once!" } } Else { If (-not $global:isConversionToDataTableBroken -and $global:conversionFirstBrokeAtTimeThrough -ne -1) { $message += "Hey the conversion to DataTable IS WORKING again! GREAT!" } Else { $message += "I don't think that you will ever see this work again until this underlying problem is fixed" } } } } # [void][System.Windows.Forms.MessageBox]::Show($message, "Results of ConvertTo-DataTable") # Write-Host "" Write-Host $message -ForegroundColor $neededForegroundColor $message = "" # Update-DataGridView -DataGridView $datagridview1 -Item $dataToDisplayAsDataTable # $buttonRetryLoadingData.Enabled = $true $buttonRetryLoadingData.Focus() } # # function toTheNthDegreeText() { param ( [parameter(Mandatory = $true)] [int]$value ) [string]$suffix = "" [string]$result = "{0:N0}" -f $value # If ($result.EndsWith("11") -or $result.EndsWith("12") -or $result.EndsWith("13")) { $suffix = "th" } Else { If ($result.EndsWith("1")) { $suffix = "st" } elseif ($result.EndsWith("2")) { $suffix = "nd" } elseif ($result.EndsWith("3")) { $suffix = "rd" } else { $suffix = "th" } } # $result += $suffix # return $result } # # #region Control Helper Functions function Update-DataGridView { <# .SYNOPSIS This functions helps you load items into a DataGridView. .DESCRIPTION Use this function to dynamically load items into the DataGridView control. .PARAMETER DataGridView The DataGridView control you want to add items to. .PARAMETER Item The object or objects you wish to load into the DataGridView's items collection. .PARAMETER DataMember Sets the name of the list or table in the data source for which the DataGridView is displaying data. .PARAMETER AutoSizeColumns Resizes DataGridView control's columns after loading the items. #> Param ( [ValidateNotNull()] [Parameter(Mandatory = $true)] [System.Windows.Forms.DataGridView] $DataGridView, [ValidateNotNull()] [Parameter(Mandatory = $true)] $Item, [Parameter(Mandatory = $false)] [string] $DataMember, [System.Windows.Forms.DataGridViewAutoSizeColumnsMode] $AutoSizeColumns = 'None' ) $DataGridView.SuspendLayout() $DataGridView.DataMember = $DataMember # if ($null -eq $Item) { $DataGridView.DataSource = $null } elseif ($Item -is [System.Data.DataSet] -and $Item.Tables.Count -gt 0) { $DataGridView.DataSource = $Item.Tables[0] } elseif ($Item -is [System.ComponentModel.IListSource]` -or $Item -is [System.ComponentModel.IBindingList] -or $Item -is [System.ComponentModel.IBindingListView]) { $DataGridView.DataSource = $Item } else { $array = New-Object System.Collections.ArrayList # if ($Item -is [System.Collections.IList]) { $array.AddRange($Item) } else { $array.Add($Item) } $DataGridView.DataSource = $array } # if ($AutoSizeColumns -ne 'None') { $DataGridView.AutoResizeColumns($AutoSizeColumns) } # #$DataGridView.AutoSizeRowsMode = 'AllCellsExceptHeaders' # # foreach ($Column in $DataGridView.Columns) { If ($Column.Name.ToUpper().Equals("LENGTH")) { # This sets the alignment to the right side $Column.DefaultCellStyle.Alignment = 'MiddleRight' # This formats to Currency $Column.DefaultCellStyle.Format = "d" # This will AutoSize these columns and they CANNOT be changed by the End-User #$Column.AutoSizeMode = 'DisplayedCells' } } # $DataGridView.ResumeLayout() } # function ConvertTo-DataTable { <# .SYNOPSIS Converts objects into a DataTable. .DESCRIPTION Converts objects into a DataTable, which are used for DataBinding. .PARAMETER InputObject The input to convert into a DataTable. .PARAMETER Table The DataTable you wish to load the input into. .PARAMETER RetainColumns This switch tells the function to keep the DataTable's existing columns. .PARAMETER FilterWMIProperties This switch removes WMI properties that start with an underline. .EXAMPLE $DataTable = ConvertTo-DataTable -InputObject (Get-Process) #> [OutputType([System.Data.DataTable])] param ( $InputObject, [ValidateNotNull()] [System.Data.DataTable] $Table, [switch] $RetainColumns, [switch] $FilterWMIProperties ) # if ($null -eq $Table) { $Table = New-Object System.Data.DataTable } # if ($null -eq $InputObject) { $Table.Clear() return @( ,$Table) } # if ($InputObject -is [System.Data.DataTable]) { $Table = $InputObject } elseif ($InputObject -is [System.Data.DataSet] -and $InputObject.Tables.Count -gt 0) { $Table = $InputObject.Tables[0] } else { if (-not $RetainColumns -or $Table.Columns.Count -eq 0) { #Clear out the Table Contents $Table.Clear() # #Empty Data if ($null -eq $InputObject) { return } # $object = $null #find the first non null value foreach ($item in $InputObject) { if ($null -ne $item) { $object = $item break } } # # All null then empty if ($null -eq $object) { return } # #Get all the properties in order to create the columns foreach ($prop in $object.PSObject.Get_Properties()) { #filter out WMI properties if (-not $FilterWMIProperties -or -not $prop.Name.StartsWith('__')) { #Get the type from the Definition string $type = $null # if ($null -ne $prop.Value) { try { $type = $prop.Value.GetType() } catch { Out-Null } } # # -and [System.Type]::GetTypeCode($type) -ne 'Object') if ($null -ne $type) { [void]$table.Columns.Add($prop.Name, $type) } else { #Type info not found [void]$table.Columns.Add($prop.Name) } } } # if ($object -is [System.Data.DataRow]) { foreach ($item in $InputObject) { $Table.Rows.Add($item) } return @( ,$Table) } } else { $Table.Rows.Clear() } # foreach ($item in $InputObject) { $row = $table.NewRow() # if ($item) { foreach ($prop in $item.PSObject.Get_Properties()) { if ($table.Columns.Contains($prop.Name)) { if (-not [string]::IsNullOrEmpty($prop.Value)) { $row.Item($prop.Name) = $prop.Value If ($error[0]) { "`$item: `"$item`"" "`$prop.Name: `"$($prop.Name)`"" "`$prop.Value: `"$($prop.Value)`"" } } } } } [void]$table.Rows.Add($row) } } # return @( ,$Table) } #endregion $buttonRetryLoadingData_Click={ loadDataIntoDataGridView } ]]> 144 168 1 System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089