$Server = '.\SQLEXPRESS'
$DatabaseName = 'managementDB'
Connect-DB -Server $Server -DatabaseName $DatabaseName
$sqlSelect = "SELECT ip, computername, os, OSArchitecture, username, domain FROM computers;"
$processes = Invoke-DB -sqlSelect $sqlSelect | Select-Object -Property ip, computername, os, OSArchitecture, username, domain
Write-Host $processes
Set-DGV -DGV $datagridviewResults `
-Data $processes `
-ColumnOrder ip, computername, os, OSArchitecture, username, domain `
-ColumnWidth 100, 100, 150, 200, 50, 50, 50 `
-EnableWordWrap ip, computername, os, OSArchitecture, username, domain `
-EnableRowAutoSize
function Set-DGV
{
Param (
[Parameter(Mandatory = $true)]
$DGV,
[Parameter(Mandatory = $true)]
$Data,
[String[]]$ColumnOrder,
[Int[]]$ColumnWidth,
[String[]]$EnableWordWrap,
[Switch]$EnableRowAutoSize
)
# Очистите DGV. Когда DGV обновляется, данные в противном случае были бы добавлены
#, что приводит к повторению значений. Это предотвратит это.
For ($X = 0; $X -lt $DGV.Rows.Count; $X++)
{
$DGV.Rows.RemoveAt($X)
$DGV.Rows.Clear()
$DGV.Columns.Clear()
}
# Создайте ArrayList для хранения отсортированных имен столбцов.
$ColumnNameList = New-Object System.Collections.ArrayList
# Получите список всех названий свойств.
$Names = $Data | Get-Member -MemberType Properties | Select-Object -ExpandProperty Name
ForEach ($C in $Names)
{
$ColumnNameList.Add($C)
}
# Измените порядок в списке, если существует предпочтительный порядок отображения свойств.
For ($X = $ColumnOrder.count; $X -ge 0; $X--)
{
For ($Y = 0; $Y -lt $ColumnNameList.Count; $Y++)
{
If ($ColumnOrder[$X] -eq $ColumnNameList[$Y])
{
# Стандартный алгоритм подкачки.
$Temp = $ColumnNameList[$X]
$ColumnNameList[$X] = $ColumnOrder[$X]
$ColumnNameList[$Y] = $Temp
}
}
}
# Отобразить имена столбцов в DGV
ForEach ($C in $ColumnNameList)
{
$ColumnCount = $DGV.ColumnCount + 1
$DGV.ColumnCount = $ColumnCount
$DGV.Columns[$ColumnCount - 1].HeaderText = "$C"
}
# Установите ширину столбцов
# Чтобы гарантировать, что объем информации, отправляемой в этот параметр, не превышает
# количество свойств, максимальное количество столбцов, ширина которых может быть изменена
#, устанавливается равным количеству свойств в отображаемом объекте
#. Затем вычисляется количество отправленных значений ширины столбцов. Меньшее из
# 2 используется для определения того, сколько значений ширины столбцов необходимо изменить.
If ($ColumnWidth -ne $null)
{
$MaxWidth = $ColumnNameList.Count
If ($ColumnWidth.Count -lt $MaxWidth) { $MaxWidth = $ColumnWidth.count }
For ($X = 0; $X -lt $MaxWidth; $X++)
{
$DGV.Columns[$X].Width = $ColumnWidth[$X]
}
}
# Включить перенос слов
#$DGV.DefaultCellStyle.WrapMode = 'True'
If ($EnableWordWrap -ne $null)
{
For ($X = 0; $X -lt $EnableWordWrap.Count; $X++)
{
If ($EnableWordWrap[$X] -eq $ColumnNameList[$X])
{
$DGV.DefaultCellStyle.WrapMode = 'True'
}
}
}
# Добавьте первую строку.
$DGV.Rows.Add()
# Получить количество отображаемых строк
$RowTotal = $Data.count
# Установите текущую строку.
$Row = 0
# Работайте с одним экземпляром по очереди.
foreach ($Item in $Data)
{
# Определите номер строки
For ($X = 0; $X -lt $ColumnNameList.Count; $X++)
{
$DGV.Rows[$Row].Cells[$X].Value = $Item | Select-Object -ExpandProperty $ColumnNameList[$X]
# Разрешить автоматическое изменение размера строки.
If ($EnableRowAutoSize)
{
$DGV.AutoResizeRow($Row)
}
}
# Добавьте следующую строку.
If ($Row -lt $Data.Count - 1)
{
$Row++
$DGV.Rows.Add()
}
}
}