greg zakharov |
07-03-2016 19:07 2613692 |
Глянул в WMIExplorer, который писал пару лет назад...
Скрытый текст
Код:
#requires -version 2.0
{
Add-Type -AssemblyName System.Windows.Forms
if (!(New-Object Security.Principal.WindowsPrincipal (
[Security.Principal.WindowsIdentity]::GetCurrent()
)).IsInRole(
[Security.Principal.WindowsBuiltInRole]::Administrator
)) {
[void][Windows.Forms.MessageBox]::Show(
"WMIExplorer requires administrator privileges.",
"WMIExplorer",
[Windows.Forms.MessageBoxButtons]::OK,
[Windows.Forms.MessageBoxIcon]::Information
)
return
}
[Windows.Forms.Application]::EnableVisualStyles()
#region resources
$ico = [Drawing.Icon]::ExtractAssociatedIcon(($PSHome + '\powershell.exe'))
$f_1 = New-Object Drawing.Font("Tahoma", 9, [Drawing.FontStyle]::Bold)
$f_2 = New-Object Drawing.Font("Tahoma", 8, [Drawing.FontStyle]::Bold)
$i_1 = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAA" + `
"AgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAEJJREFUOE9j/P//PwNJAKiBJMCArBpuE0QQjQsVhGuASGPahiaOUDG0NWANDVyhN1w8jRbZ8PgmkD" + `
"SITIJYEg9+nQBeQy7v217GjAAAAABJRU5ErkJggg=="
$i_2 = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAA" + `
"AgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRF////9u7YW5vY4+74rbfE4aoU/ez99u/a0mXT9+/bb4CXADOZgWIMjC2NnngO/fD9mc3//e" + `
"39+q3623DcyJgX89Zs+pj79eGF8ctQ8stQ78A04t73fLTpNWO17fT67bUc2GzZ9Ndr7rUd8MA17bUdsjyz9eCF9OGG5/D56vL68ctP7rYc9NZrQ" + `
"3PJ9eGG774v8MA06fH5////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrgGBQAAAJJJREFUKFNVjtcSgzAMBM/ggh1KGqGl917+/" + `
"+ciGwJEL5pdnWYOoNGC2dWOFtm0b7Q43XNnEpfR4pgW5T5kSAJrmHimxW5FLINxIAGRbfL3tubZJBqBxdfyFRpj1jUDKr7FChzyULM1CiQgo6pp" + `
"QmwFKu/SlSPhe8PHuTXc8twb+D/DzT+TXy56d5f7dPnmz/1/Ab2bB7l4ZZdYAAAAAElFTkSuQmCC"
$i_3 = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAA" + `
"AgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAwBQTFRF475Q7NKHZ3qVrpuB69GF5cNZ69Fz58hk8uGPeoym6tFy4sRx5cVc7dZ89OaZ4r1P58x8hm" + `
"xH9+2m3Lxk7th/8d6J6s9v4LdE9OeZ8uORy8Cz9eug69J19uufnYhu6ctpb4Gc9+3P5cNa4tGp6cpn79yFtKSKpZF39OaYzKIxeouneFw6boGb7" + `
"9uDgWZD8eCOn4he2b9plX5kmYRqel48d1o569CEfWJA7NR5vKyS37hJoo5079uFnolw////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + `
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK4belAAAAHtJREFUKFNjsEMDDEQLKDIwsghwC2sqw7QwC" + `
"ElLSIqKyAjCBWT5tBSY2OT1YAKMGhyqvFwqPOYMdjDdhpw6TEoMJgx2cN1i7Kz84qYMdoxQ3dZqzOpy2lJAAahuW4gTGezM9G3Auo1hAla6FmDd" + `
"RjABZQNLiG6YACHfAgASrCzzMRTKjwAAAABJRU5ErkJggg=="
#endregion resources
#region functions
function Get-Resource([String]$s) {
[Drawing.Image]::FromStream(
(New-Object IO.MemoryStream(($$ = [Convert]::FromBase64String($s)), 0, $$.Length))
)
}
function Get-NameSpaces([String]$root) {
(New-Object Management.ManagementClass(
$root, [Management.ManagementPath]'__NAMESPACE', $null
)
).PSBase.GetInstances() | % {
return (New-Object Windows.Forms.TreeNode).Nodes.Add($_.Name)
}
}
function Get-SubNameSpace([Windows.Forms.TreeNode[]]$nodes) {
foreach ($nod in $nodes) {
$nod.Nodes.Clear()
Get-NameSpaces ('root\' + $nod.FullPath) | % { $nod.Nodes.Add($_) }
}
}
function Get-ClassesNumber {
$sbLbl_1.Text = "Classes: " + $lvList1.Items.Count.ToString()
}
function Reset-AllMessages {
$lvList2.Items.Clear()
$rtbDesc, $sbLbl_2, $sbLbl_3 | % { $_.Text = [String]::Empty }
}
function Get-Description([Object]$o, [Boolean]$b) {
try {
$$ = switch ($b) { $true { [Management.MethodData]$o } $false { [Management.PropertyData]$o } }
$$ = $$.PSBase.Qualifiers['Description'].Value
$$ = $(if (![String]::IsNullOrEmpty($$)) { $$ } else { "n\a" }) + "`n`n"
}
catch {}
return $$
}
#endregion functions
$frmMain = New-Object Windows.Forms.Form
$mnuMain = New-Object Windows.Forms.MenuStrip
$mnuFile = New-Object Windows.Forms.ToolStripMenuItem
$mnuExit = New-Object Windows.Forms.ToolStripMenuItem
$mnuView = New-Object Windows.Forms.ToolStripMenuItem
$mnuSStr = New-Object Windows.Forms.ToolStripMenuItem
$mnuHelp = New-Object Windows.Forms.ToolStripMenuItem
$mnuInfo = New-Object Windows.Forms.ToolStripMenuItem
$scSplt1 = New-Object Windows.Forms.SplitContainer
$scSplt2 = New-Object Windows.Forms.SplitContainer
$tvRoots = New-Object Windows.Forms.TreeView
$lvList1 = New-Object Windows.Forms.ListView
$lvList2 = New-Object Windows.Forms.ListView
$chCol_1 = New-Object Windows.Forms.ColumnHeader
$chCol_2 = New-Object Windows.Forms.ColumnHeader
$chCol_3 = New-Object Windows.Forms.ColumnHeader
$chCol_4 = New-Object Windows.Forms.ColumnHeader
$chCol_5 = New-Object Windows.Forms.ColumnHeader
$chCol_6 = New-Object Windows.Forms.ColumnHeader
$chCol_7 = New-Object Windows.Forms.ColumnHeader
$tabCtrl = New-Object Windows.Forms.TabControl
$tpPage1 = New-Object Windows.Forms.TabPage
$tpPage2 = New-Object Windows.Forms.TabPage
$rtbDesc = New-Object Windows.Forms.RichTextBox
$imgList = New-Object Windows.Forms.ImageList
$sbStrip = New-Object Windows.Forms.StatusStrip
$sbLbl_1 = New-Object Windows.Forms.ToolStripStatusLabel
$sbLbl_2 = New-Object Windows.Forms.ToolStripStatusLabel
$sbLbl_3 = New-Object Windows.Forms.ToolStripStatusLabel
#
#common
#
$mnuMain.Items.AddRange(@($mnuFile, $mnuView, $mnuHelp))
$scSplt1, $scSplt2, $tvRoots, $lvList1, $lvList2, $tabCtrl, $rtbDesc | % {
$_.Dock = [Windows.Forms.DockStyle]::Fill
}
$scSplt1, $scSplt2 | % { $_.SplitterWidth = 1 }
$lvList1, $lvList2 | % {
$_.FullRowSelect = $true
$_.MultiSelect = $false
$_.ShowItemToolTips = $true
$_.Sorting = [Windows.Forms.SortOrder]::Ascending
}
$chCol_1.Text = "Name"
$chCol_2.Text = "Desciption"
$chCol_3.Text = "Amended"
$chCol_4.Text = "Local"
$chCol_5.Text = "Overridable"
$chCol_6.Text = "PropagatesToInstance"
$chCol_7.Text = "PropagatesToSubclass"
$chCol_1, $chCol_2, $chCol_6, $chCol_7 | % { $_.Width = 130 }
$chCol_3, $chCol_4, $chCol_5 | % { $_.Width = 70 }
$tabCtrl.Controls.AddRange(@($tpPage1, $tpPage2))
$tpPage1, $tpPage2 | % { $_.UseVisualStyleBackColor = $true }
$rtbDesc.ReadOnly = $true
$i_1, $i_2, $i_3 | % { $imgList.Images.Add((Get-Resource $_)) }
$sbStrip.Items.AddRange(@($sbLbl_1, $sbLbl_2, $sbLbl_3))
$sbLbl_1, $sbLbl_2, $sbLbl_3 | % { $_.AutoSize = $true }
$sbLbl_2.ForeColor = [Drawing.Color]::DarkMagenta
$sbLbl_3.ForeColor = [Drawing.Color]::DarkGreen
#
#mnuFile
#
$mnuFile.DropDownItems.AddRange(@($mnuExit))
$mnuFile.Text = "&File"
#
#mnuExit
#
$mnuExit.ShortcutKeys = [Windows.Forms.Keys]::Control, [Windows.Forms.Keys]::X
$mnuExit.Text = "E&xit"
$mnuExit.Add_Click({$frmMain.Close()})
#
#mnuView
#
$mnuView.DropDownItems.AddRange(@($mnuSStr))
$mnuView.Text = "&View"
#
#mnuSStr
#
$mnuSStr.Checked = $true
$mnuSStr.Text = "&Status Bar"
$mnuSStr.Add_Click({
$toggle =! $mnuSStr.Checked
$mnuSStr.Checked = $toggle
$sbStrip.Visible = $toggle
})
#
#mnuHelp
#
$mnuHelp.DropDownItems.AddRange(@($mnuInfo))
$mnuHelp.Text = "&Help"
#
#mnuInfo
#
$mnuInfo.Text = "About..."
$mnuInfo.Add_Click({
$frmInfo = New-Object Windows.Forms.Form
$pbImage = New-Object Windows.Forms.PictureBox
$lblName = New-Object Windows.Forms.Label
$lblCopy = New-Object Windows.Forms.Label
$btnExit = New-Object Windows.Forms.Button
#
#pbImage
#
$pbImage.Image = $ico.ToBitmap()
$pbImage.Location = New-Object Drawing.Point(16, 16)
$pbImage.Size = New-Object Drawing.Size(32, 32)
$pbImage.SizeMode = [Windows.Forms.PictureBoxSizeMode]::StretchImage
#
#lblName
#
$lblName.Font = $f_2
$lblName.Location = New-Object Drawing.Point(53, 19)
$lblName.Size = New-Object Drawing.Size(360, 18)
$lblName.Text = "WMIExplorer v1.01"
#
#lblCopy
#
$lblCopy.Location = New-Object Drawing.Point(67, 37)
$lblCopy.Size = New-Object Drawing.Size(360, 23)
$lblCopy.Text = "Copyright (C) 2011-2014 greg zakharov"
#
#btnExit
#
$btnExit.Location = New-Object Drawing.Point(135, 67)
$btnExit.Text = "OK"
#
#frmInfo
#
$frmInfo.AcceptButton = $btnExit
$frmInfo.CancelButton = $btnExit
$frmInfo.ClientSize = New-Object Drawing.Size(350, 110)
$frmInfo.ControlBox = $false
$frmInfo.Controls.AddRange(@($pbImage, $lblName, $lblCopy, $btnExit))
$frmInfo.FormBorderStyle = [Windows.Forms.FormBorderStyle]::FixedSingle
$frmInfo.ShowInTaskbar = $false
$frmInfo.StartPosition = [Windows.Forms.FormStartPosition]::CenterParent
$frmInfo.Text = "About..."
[void]$frmInfo.ShowDialog()
})
#
#scSplt1
#
$scSplt1.Orientation = [Windows.Forms.Orientation]::Horizontal
$scSplt1.Panel1.Controls.Add($scSplt2)
$scSplt1.Panel2.Controls.Add($tabCtrl)
$scSplt1.SplitterDistance = 60
#
#scSplt2
#
$scSplt2.Panel1.Controls.Add($tvRoots)
$scSplt2.Panel2.Controls.Add($lvList1)
$scSplt2.Panel1MinSize = 17
$scSplt2.SplitterDistance = 30
#
#tvRoots
#
$tvRoots.ImageList = $imgList
$tvRoots.Select()
$tvRoots.Sorted = $true
$tvRoots.Add_AfterExpand({Get-SubNameSpace $_.Node.Nodes})
$tvRoots.Add_AfterSelect({
$lvList1.Items.Clear()
Reset-AllMessages
if ($tvRoots.SelectedNode) {
$cur = 'root\' + $tvRoots.SelectedNode.FullPath
(New-Object Management.ManagementClass($cur, $obj)
).PSBase.GetSubclasses($enm) | % {
$lvList1.Items.Add($_.Name, 1)
}
$frmMain.Text = $cur + ' - WMIExplorer'
Get-ClassesNumber
} #if
})
#
#lvList1
#
$lvList1.LargeImageList = $imgList
$lvList1.TileSize = New-Object Drawing.Size(270, 19)
$lvList1.View = [Windows.Forms.View]::Tile
$lvList1.Add_Click({
Reset-AllMessages
for ($i = 0; $i -lt $lvList1.Items.Count; $i++) {
if ($lvList1.Items[$i].Selected) {
$path = $cur + ':' + $lvList1.Items[$i].Text
$frmMain.Text = $path + ' - WMIExplorer'
#caption
$rtbDesc.SelectionFont = $f_1
$rtbDesc.AppendText("$($lvList1.Items[$i].Text)`n$(('-' * 100))`n")
#getting class data
$wmi = (New-Object Management.ManagementClass($path, $obj)).PSBase
#extract class description and fill qualifiers table
$wmi.Qualifiers | % {
$itm = $lvList2.Items.Add($_.Name, 2)
if ($_.Name -match 'Description') {
$rtbDesc.AppendText("$($_.Value)`n`n")
$itm.SubItems.Add("See specification")
}
else { $itm.SubItems.Add($_.Value.ToString()) }
$itm.SubItems.Add($_.IsAmended.ToString())
$itm.SubItems.Add($_.IsLocal.ToString())
$itm.SubItems.Add($_.IsOverridable.ToString())
$itm.SubItems.Add($_.PropagatesToInstance.ToString())
$itm.SubItems.Add($_.PropagatesToSubclass.ToString())
}
#extract method(s) data
$wmi.Methods | % {
$rtbDesc.SelectionColor = [Drawing.Color]::DarkMagenta
$rtbDesc.SelectionFont = $f_2
$rtbDesc.AppendText("$($_.Name)`n")
$rtbDesc.AppendText((Get-Description $_ $true))
}
#extract property(ies) data
$wmi.Properties | % {
$rtbDesc.SelectionColor = [Drawing.Color]::DarkGreen
$rtbDesc.SelectionFont = $f_2
$rtbDesc.AppendText("$($_.Name + '(Type: ' + $_.Type + ', Local: ' + $_.IsLocal + ', Array: ' + $_.IsArray + ')')`n")
$rtbDesc.AppendText((Get-Description $_ $false))
}
#derivation
if ($wmi.Derivation.Count -ne 0) {
$rtbDesc.SelectionColor = [Drawing.Color]::DarkBlue
$rtbDesc.SelectionFont = $f_2
$rtbDesc.AppendText("Derivation`n")
$wmi.Derivation | % { $rtbDesc.AppendText("$($_)`n") }
}
#count methods and properties
$sbLbl_2.Text = "Methods: " + $wmi.Methods.Count.ToString()
$sbLbl_3.Text = "Properties: " + $wmi.Properties.Count.ToString()
} #if
} #for
})
#
#lvList2
#
$lvList2.Columns.AddRange(@($chCol_1, $chCol_2, $chCol_3, $chCol_4, $chCol_5, $chCol_6, $chCol_7))
$lvList2.SmallImageList = $imgList
$lvList2.View = [Windows.Forms.View]::Details
#
#tpPage1
#
$tpPage1.Controls.AddRange(@($rtbDesc))
$tpPage1.Text = "Specification"
#
#tpPage2
#
$tpPage2.Controls.AddRange(@($lvList2))
$tpPage2.Text = "Qualifiers"
#
#frmMain
#
$frmMain.ClientSize = New-Object Drawing.Size(800, 557)
$frmMain.Controls.AddRange(@($scSplt1, $sbStrip, $mnuMain))
$frmMain.Icon = $ico
$frmMain.MainMenuStrip = $mnuMain
$frmMain.StartPosition = [Windows.Forms.FormStartPosition]::CenterScreen
$frmMain.Text = "WMIExplorer"
$frmMain.Add_Load({
Get-NameSpaces 'root' | % { $tvRoots.Nodes.Add($_) }
Get-SubNameSpace $tvRoots.Nodes
$obj = New-Object Management.ObjectGetOptions
$enm = New-Object Management.EnumerationOptions
$obj.UseAmendedQualifiers = $enm.EnumerateDeep = $true
$sbLbl_1.Text = "Ready"
})
[void]$frmMain.ShowDialog()
}.Invoke()
..скорее всего цель задачи сводится к использованию Win32_LogonSession или Win32_LoggedOnUser.
|