select drive from comboBox, dataGridView shows drive info
services
processes
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Application]::EnableVisualStyles()
$Form = New-Object system.Windows.Forms.Form
$Form.ClientSize = New-Object System.Drawing.Point(1026,725)
$Form.text = "Form"
$Form.TopMost = $false
$DataGridView1 = New-Object system.Windows.Forms.DataGridView
$DataGridView1.width = 1013
$DataGridView1.height = 657
$DataGridView1.location = New-Object System.Drawing.Point(5,60)
$ComboBox1 = New-Object system.Windows.Forms.ComboBox
$ComboBox1.text = "comboBox"
$ComboBox1.width = 356
$ComboBox1.height = 20
@('Service','Process','Drive') | ForEach-Object {[void] $ComboBox1.Items.Add($_)}
$ComboBox1.location = New-Object System.Drawing.Point(10,20)
$ComboBox1.Font = New-Object System.Drawing.Font('Microsoft Sans Serif',10)
$ComboBox1.BackColor = [System.Drawing.ColorTranslator]::FromHtml("#f8e71c")
$Form.controls.AddRange(@($DataGridView1, $ComboBox1))
$ComboBox1.Add_SelectedIndexChanged( { comboBox_IndexChange })
function comboBox_IndexChange {
$selection = $ComboBox1.SelectedItem.ToString()
switch ($selection) {
'Service'{ $DataGridView1.dataSource = Get-Service | ConvertTo-Datatable}
'Process'{ $DataGridView1.dataSource = Get-Process | ConvertTo-Datatable}
'Drive'{ $DataGridView1.dataSource = Get-PSDrive | ConvertTo-Datatable}
Default {}
}
}
function ConvertTo-DataTable {
[CmdletBinding()]
Param(
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline = $true)]
[PSObject[]]$InputObject
)
Begin {
$dataTable = New-Object System.Data.DataTable
$first = $true
function _GetSafeTypeName($type) {
# internal helper function to return the correct typename for a datatable
$types = @('System.Boolean', 'System.Byte', 'System.SByte', 'System.Char', 'System.Datetime',
'System.TimeSpan', 'System.Decimal', 'System.Double', 'System.Guid', 'System.Single')
$ints = @('System.Int16', 'System.Int32', 'System.Int64')
$uints = @('System.UInt16', 'System.UInt32', 'System.UInt64')
if ($types -contains $type) { return "$type" }
# if the type is Int or UInt, always return the largest variety
if ($ints -contains $type) { return 'System.Int64' }
if ($uints -contains $type) { return 'System.UInt64' }
return 'System.String'
}
}
Process {
foreach ($object in $InputObject) {
$dataRow = $dataTable.NewRow()
foreach($property in $object.PSObject.Properties) {
# read the data type for this property and make sure it is a valid type for a DataTable
$dataType = _GetSafeTypeName $property.TypeNameOfValue
# ensure the property name does not contain invalid characters
$propertyName = $property.Name -replace '[\W\p{Pc}-[,]]', '_' -replace '_+', '_'
if ($first) {
$dataColumn = New-Object System.Data.DataColumn $propertyName, $dataType
$dataTable.Columns.Add($dataColumn)
}
if ($property.Gettype().IsArray -or ($property.TypeNameOfValue -like '*collection*')) {
$dataRow.Item($propertyName) = $property.Value | ConvertTo-XML -As String -NoTypeInformation -Depth 1
}
else {
$value = if ($null -ne $property.Value) { $property.Value } else { [System.DBNull]::Value }
$dataRow.Item($propertyName) = $value -as $dataType
}
}
$dataTable.Rows.Add($dataRow)
$first = $false
}
}
End {
Write-Output @(,($dataTable))
}
}
#Write your logic code here
[void]$Form.ShowDialog()
reference:
PSCustomObject
convertTo-DataTable
dataGridView
No comments:
Post a Comment