Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Глянул в 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.

Отправлено: 19:07, 07-03-2016 | #2