butunin@vk
03-12-2015, 12:34
Помогите создать фильтр в Grid , и вообще можно ли это реализовать.
Собрал из кусков всего чего нашел в интернете + допилил сам, функцию подключения к фермам 2012 R2 в Shadow + создал для этого GUI
Суть проста.
Подключится к BD , где находятся базы RDS , взять от туда таблицу с UserName, PoolName, ServerName, SessionId
В базах создал Viewer
CREATE VIEW [dbo].[Shadowing]
AS
SELECT Session.UserName, Pool.DisplayName AS PoolName, Target.Name AS ServerName, Session.SessionId
FROM rds.Session AS Session
INNER JOIN rds.Target AS Target ON Target.Id = Session.TargetId
INNER JOIN rds.Pool AS Pool ON Target.PoolId = Pool.Id
WHERE (Session.State = 0)
GO
далее через GRID , создал форму и подключение в shadow
$CBSQLServer = "aqua"
$CBDB = "fdrdsdb"
$CBDB2 = "CRMRDSDB"
$CBDB3 = "RDSDB"
$CBDBConnection = New-Object -TypeName System.Data.SqlClient.SqlConnection -ArgumentList "Server=$CBSQLServer;Database=$CBDB;Integrated Security=SSPI"
$CBDBConnection.Open()
$SQLCommand = $CBDBConnection.CreateCommand()
$SQLCommand.CommandText = ("SELECT * FROM Shadowing")
$SQLReader = $SQLCommand.ExecuteReader()
$ShadowingView = New-Object System.Data.DataTable
$ShadowingView.Load($SQLReader)
$SQLReader.Close()
$CBDBConnection1 = New-Object -TypeName System.Data.SqlClient.SqlConnection -ArgumentList "Server=$CBSQLServer;Database=$CBDB2;Integrated Security=SSPI"
$CBDBConnection1.Open()
$SQLCommand1 = $CBDBConnection1.CreateCommand()
$SQLCommand1.CommandText = ("SELECT * FROM Shadowing")
$SQLReader1 = $SQLCommand1.ExecuteReader()
$ShadowingView1 = New-Object System.Data.DataTable
$ShadowingView1.Load($SQLReader1)
$SQLReader1.Close()
$CBDBConnection2 = New-Object -TypeName System.Data.SqlClient.SqlConnection -ArgumentList "Server=$CBSQLServer;Database=$CBDB3;Integrated Security=SSPI"
$CBDBConnection2.Open()
$SQLCommand2 = $CBDBConnection2.CreateCommand()
$SQLCommand2.CommandText = ("SELECT * FROM Shadowing")
$SQLReader2 = $SQLCommand2.ExecuteReader()
$ShadowingView2 = New-Object System.Data.DataTable
$ShadowingView2.Load($SQLReader2)
$SQLReader2.Close()
function Get-ProcessInfo
{
$array = New-Object System.Collections.ArrayList
$Script:procInfo = $ShadowingView1 + $ShadowingView + $ShadowingView2 | Select UserName, PoolName, ServerName, SessionId| sort -Property UserName
$array.AddRange($procInfo)
$dataGrid1.DataSource = $array
$form1.refresh()
}
function GenerateForm
{
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
$form1 = New-Object System.Windows.Forms.Form
$label1 = New-Object System.Windows.Forms.Label
$button3 = New-Object System.Windows.Forms.Button
$button2 = New-Object System.Windows.Forms.Button
$button4 = New-Object System.Windows.Forms.Button
$button1 = New-Object System.Windows.Forms.Button
$dataGrid1 = New-Object System.Windows.Forms.DataGrid
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
$button3_OnClick =
{
$Form1.Close()
}
$button1_OnClick =
{
Get-ProcessInfo
}
$button2_OnClick =
{
$selectedRow = $dataGrid1.CurrentRowIndex
if (($procid = $Script:procInfo[$selectedRow]))
{
mstsc /v:($procid.ServerName) /shadow:($procid.SessionId) /control /NoConsentPrompt
}
}
$button4_OnClick =
{
$selectedRow = $dataGrid1.CurrentRowIndex
if (($procid = $Script:procInfo[$selectedRow]))
{
mstsc /v:($procid.ServerName) /shadow:($procid.SessionId) /NoConsentPrompt
}
}
$OnLoadForm_UpdateGrid =
{
Get-ProcessInfo
}
$form1.Text = "Подключатель"
$form1.Name = "form1"
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 517
$System_Drawing_Size.Height = 414
$form1.ClientSize = $System_Drawing_Size
$label1.TabIndex = 4
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 155
$System_Drawing_Size.Height = 23
$label1.Size = $System_Drawing_Size
$label1.Text = "Подключатель"
$label1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif", 9.75, 2, 3, 0)
$label1.ForeColor = [System.Drawing.Color]::FromArgb(255, 0, 102, 204)
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 13
$System_Drawing_Point.Y = 13
$label1.Location = $System_Drawing_Point
$label1.DataBindings.DefaultDataSourceUpdateMode = 0
$label1.Name = "label1"
$form1.Controls.Add($label1)
$button3.TabIndex = 3
$button3.Name = "button3"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 75
$System_Drawing_Size.Height = 23
$button3.Size = $System_Drawing_Size
$button3.UseVisualStyleBackColor = $True
$button3.Text = "Закрыть"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 380
$System_Drawing_Point.Y = 379
$button3.Location = $System_Drawing_Point
$button3.DataBindings.DefaultDataSourceUpdateMode = 0
$button3.add_Click($button3_OnClick)
$form1.Controls.Add($button3)
$button2.TabIndex = 2
$button2.Name = "button2"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 75
$System_Drawing_Size.Height = 23
$button2.Size = $System_Drawing_Size
$button2.UseVisualStyleBackColor = $True
$button2.Text = "Контроль"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 230
$System_Drawing_Point.Y = 379
$button2.Location = $System_Drawing_Point
$button2.DataBindings.DefaultDataSourceUpdateMode = 0
$button2.add_Click($button2_OnClick)
$form1.Controls.Add($button2)
$button4.Text = "Наблюдение"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 150
$System_Drawing_Point.Y = 379
$button4.Location = $System_Drawing_Point
$button4.DataBindings.DefaultDataSourceUpdateMode = 0
$button4.add_Click($button4_OnClick)
$form1.Controls.Add($button4)
$button1.TabIndex = 1
$button1.Name = "button1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 75
$System_Drawing_Size.Height = 23
$button1.Size = $System_Drawing_Size
$button1.UseVisualStyleBackColor = $True
$button1.Text = "Обновить"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 13
$System_Drawing_Point.Y = 379
$button1.Location = $System_Drawing_Point
$button1.DataBindings.DefaultDataSourceUpdateMode = 0
$button1.add_Click($button1_OnClick)
$form1.Controls.Add($button1)
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 492
$System_Drawing_Size.Height = 308
$dataGrid1.Size = $System_Drawing_Size
$dataGrid1.DataBindings.DefaultDataSourceUpdateMode = 0
$dataGrid1.HeaderForeColor = [System.Drawing.Color]::FromArgb(255, 0, 0, 0)
$dataGrid1.Name = "dataGrid1"
$dataGrid1.DataMember = ""
$dataGrid1.TabIndex = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 13
$System_Drawing_Point.Y = 48
$dataGrid1.Location = $System_Drawing_Point
$form1.Controls.Add($dataGrid1)
$InitialFormWindowState = $form1.WindowState
$form1.add_Load($OnLoadForm_UpdateGrid)
$form1.ShowDialog() | Out-Null
}
GenerateForm
По итогу получилась такая формачка
http://s019.radikal.ru/i605/1512/36/ff952b46c4fd.jpg
Если обратить внимание столбец "UserName" достаточно большой, так вот вопрос... есть ли режим фильтра в GRID который бы можно было в крутить сюда и по буквам уже чтобы шла фильтрация?
Собрал из кусков всего чего нашел в интернете + допилил сам, функцию подключения к фермам 2012 R2 в Shadow + создал для этого GUI
Суть проста.
Подключится к BD , где находятся базы RDS , взять от туда таблицу с UserName, PoolName, ServerName, SessionId
В базах создал Viewer
CREATE VIEW [dbo].[Shadowing]
AS
SELECT Session.UserName, Pool.DisplayName AS PoolName, Target.Name AS ServerName, Session.SessionId
FROM rds.Session AS Session
INNER JOIN rds.Target AS Target ON Target.Id = Session.TargetId
INNER JOIN rds.Pool AS Pool ON Target.PoolId = Pool.Id
WHERE (Session.State = 0)
GO
далее через GRID , создал форму и подключение в shadow
$CBSQLServer = "aqua"
$CBDB = "fdrdsdb"
$CBDB2 = "CRMRDSDB"
$CBDB3 = "RDSDB"
$CBDBConnection = New-Object -TypeName System.Data.SqlClient.SqlConnection -ArgumentList "Server=$CBSQLServer;Database=$CBDB;Integrated Security=SSPI"
$CBDBConnection.Open()
$SQLCommand = $CBDBConnection.CreateCommand()
$SQLCommand.CommandText = ("SELECT * FROM Shadowing")
$SQLReader = $SQLCommand.ExecuteReader()
$ShadowingView = New-Object System.Data.DataTable
$ShadowingView.Load($SQLReader)
$SQLReader.Close()
$CBDBConnection1 = New-Object -TypeName System.Data.SqlClient.SqlConnection -ArgumentList "Server=$CBSQLServer;Database=$CBDB2;Integrated Security=SSPI"
$CBDBConnection1.Open()
$SQLCommand1 = $CBDBConnection1.CreateCommand()
$SQLCommand1.CommandText = ("SELECT * FROM Shadowing")
$SQLReader1 = $SQLCommand1.ExecuteReader()
$ShadowingView1 = New-Object System.Data.DataTable
$ShadowingView1.Load($SQLReader1)
$SQLReader1.Close()
$CBDBConnection2 = New-Object -TypeName System.Data.SqlClient.SqlConnection -ArgumentList "Server=$CBSQLServer;Database=$CBDB3;Integrated Security=SSPI"
$CBDBConnection2.Open()
$SQLCommand2 = $CBDBConnection2.CreateCommand()
$SQLCommand2.CommandText = ("SELECT * FROM Shadowing")
$SQLReader2 = $SQLCommand2.ExecuteReader()
$ShadowingView2 = New-Object System.Data.DataTable
$ShadowingView2.Load($SQLReader2)
$SQLReader2.Close()
function Get-ProcessInfo
{
$array = New-Object System.Collections.ArrayList
$Script:procInfo = $ShadowingView1 + $ShadowingView + $ShadowingView2 | Select UserName, PoolName, ServerName, SessionId| sort -Property UserName
$array.AddRange($procInfo)
$dataGrid1.DataSource = $array
$form1.refresh()
}
function GenerateForm
{
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
$form1 = New-Object System.Windows.Forms.Form
$label1 = New-Object System.Windows.Forms.Label
$button3 = New-Object System.Windows.Forms.Button
$button2 = New-Object System.Windows.Forms.Button
$button4 = New-Object System.Windows.Forms.Button
$button1 = New-Object System.Windows.Forms.Button
$dataGrid1 = New-Object System.Windows.Forms.DataGrid
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
$button3_OnClick =
{
$Form1.Close()
}
$button1_OnClick =
{
Get-ProcessInfo
}
$button2_OnClick =
{
$selectedRow = $dataGrid1.CurrentRowIndex
if (($procid = $Script:procInfo[$selectedRow]))
{
mstsc /v:($procid.ServerName) /shadow:($procid.SessionId) /control /NoConsentPrompt
}
}
$button4_OnClick =
{
$selectedRow = $dataGrid1.CurrentRowIndex
if (($procid = $Script:procInfo[$selectedRow]))
{
mstsc /v:($procid.ServerName) /shadow:($procid.SessionId) /NoConsentPrompt
}
}
$OnLoadForm_UpdateGrid =
{
Get-ProcessInfo
}
$form1.Text = "Подключатель"
$form1.Name = "form1"
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 517
$System_Drawing_Size.Height = 414
$form1.ClientSize = $System_Drawing_Size
$label1.TabIndex = 4
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 155
$System_Drawing_Size.Height = 23
$label1.Size = $System_Drawing_Size
$label1.Text = "Подключатель"
$label1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif", 9.75, 2, 3, 0)
$label1.ForeColor = [System.Drawing.Color]::FromArgb(255, 0, 102, 204)
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 13
$System_Drawing_Point.Y = 13
$label1.Location = $System_Drawing_Point
$label1.DataBindings.DefaultDataSourceUpdateMode = 0
$label1.Name = "label1"
$form1.Controls.Add($label1)
$button3.TabIndex = 3
$button3.Name = "button3"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 75
$System_Drawing_Size.Height = 23
$button3.Size = $System_Drawing_Size
$button3.UseVisualStyleBackColor = $True
$button3.Text = "Закрыть"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 380
$System_Drawing_Point.Y = 379
$button3.Location = $System_Drawing_Point
$button3.DataBindings.DefaultDataSourceUpdateMode = 0
$button3.add_Click($button3_OnClick)
$form1.Controls.Add($button3)
$button2.TabIndex = 2
$button2.Name = "button2"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 75
$System_Drawing_Size.Height = 23
$button2.Size = $System_Drawing_Size
$button2.UseVisualStyleBackColor = $True
$button2.Text = "Контроль"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 230
$System_Drawing_Point.Y = 379
$button2.Location = $System_Drawing_Point
$button2.DataBindings.DefaultDataSourceUpdateMode = 0
$button2.add_Click($button2_OnClick)
$form1.Controls.Add($button2)
$button4.Text = "Наблюдение"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 150
$System_Drawing_Point.Y = 379
$button4.Location = $System_Drawing_Point
$button4.DataBindings.DefaultDataSourceUpdateMode = 0
$button4.add_Click($button4_OnClick)
$form1.Controls.Add($button4)
$button1.TabIndex = 1
$button1.Name = "button1"
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 75
$System_Drawing_Size.Height = 23
$button1.Size = $System_Drawing_Size
$button1.UseVisualStyleBackColor = $True
$button1.Text = "Обновить"
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 13
$System_Drawing_Point.Y = 379
$button1.Location = $System_Drawing_Point
$button1.DataBindings.DefaultDataSourceUpdateMode = 0
$button1.add_Click($button1_OnClick)
$form1.Controls.Add($button1)
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 492
$System_Drawing_Size.Height = 308
$dataGrid1.Size = $System_Drawing_Size
$dataGrid1.DataBindings.DefaultDataSourceUpdateMode = 0
$dataGrid1.HeaderForeColor = [System.Drawing.Color]::FromArgb(255, 0, 0, 0)
$dataGrid1.Name = "dataGrid1"
$dataGrid1.DataMember = ""
$dataGrid1.TabIndex = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 13
$System_Drawing_Point.Y = 48
$dataGrid1.Location = $System_Drawing_Point
$form1.Controls.Add($dataGrid1)
$InitialFormWindowState = $form1.WindowState
$form1.add_Load($OnLoadForm_UpdateGrid)
$form1.ShowDialog() | Out-Null
}
GenerateForm
По итогу получилась такая формачка
http://s019.radikal.ru/i605/1512/36/ff952b46c4fd.jpg
Если обратить внимание столбец "UserName" достаточно большой, так вот вопрос... есть ли режим фильтра в GRID который бы можно было в крутить сюда и по буквам уже чтобы шла фильтрация?