Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Имя залогиненного пользователя на ПК (http://forum.oszone.net/showthread.php?t=312418)

lox-ness 07-03-2016 15:56 2613649

Имя залогиненного пользователя на ПК
 
Добрый день!
Требуется узнать имя пользователя, залогиненного на ПК (домен), пробовала узнать через запрос к WMI например так:
Get-WmiObject Win32_ComputerSystem –Computer $computer -Credential $creds ....
Имя получаю, но не со всех ПК, предполагаю, что wmi не везде корректно работает или другие причины.
Ни как не могу сообразить альтернативный способ как можно узнать имя пользователя который вошел на ПК, предположение есть, что можно через реестр. но как?
Еще было хорошо все реализовать через Powershell.

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.

DJ Mogarych 07-03-2016 19:52 2613703

https://www.google.ru/search?q=how+t...+who+logged+on

nokogerra 09-03-2016 14:06 2614198

Про пош не скажу, но вот удобный метод http://sysrtfm.ru/windows-sever-2008...jn-vbs-skript/.
Потом уже можно вытащить пошем (get-aduser/get-adcomputer) кто где сидит, чтобы не искать в dsa.msc.

Iska 09-03-2016 16:05 2614234

Цитата:

Цитата nokogerra
но вот удобный метод »

Неудобный. Совсем. И не гарантирует корректность результатов.

nokogerra 09-03-2016 17:05 2614262

И чем он неудобный? И почему же не гарантирует корректность результатов? У меня все корректно показывает и на удобство не жалуюсь - можно увидеть общую картину в dsa или быстро получить залогиненного пользователя на определенной машине или наоборот - машину, на которую выполнил вход пользователь просто запросив значение атрибута description (или какой там есть желание использовать).

Iska 09-03-2016 17:50 2614280

Цитата:

Цитата nokogerra
И чем он неудобный? И почему же не гарантирует корректность результатов? »

1. По какой-либо причине при входе не произошла запись в Description — до очередного входа пользователя в систему он будет «невидим».
2. По какой-либо причине при выходе не произошла запись в Description — до очередного выхода пользователя из системы он останется «в сети», вплоть до вечности.

nokogerra, главная беда этого подхода, что подобные случаи в нём совершенно не учитываются, нет никаких дополнительных периодических «проходов»-опросов, как, например, это сделано хотя бы в том же механизме «Сетевого окружения» (Browsing), где рано или поздно, но картина начинает соответствовать реальности.

Насчёт возможных претензий «такого не может быть»/«это бывает раз в сто лет» — не принимается: не просто «бывает», но и бывает стабильно и регулярно.

nokogerra 09-03-2016 20:22 2614372

Хм, такое, конечно, может случиться, но когда групповые политики не отрабатывают "стабильно и регулярно", то не ладно что-то в датском королевстве.

Iska 09-03-2016 21:45 2614397

Цитата:

Цитата nokogerra
…то не ладно что-то в датском королевстве. »

nokogerra, не могу с Вами спорить. Но я вовсе не про групповые политики. В стране эльфов никогда нет перебоев с электричеством, связь никогда не пропадает, и машины никогда не зависают.

Вы не поняли суть моих претензий к данному подходу: подобные ошибки в его рамках не обрабатываются в принципе. Никак. Совсем. И это очень плохо.

WindowsNT 11-03-2016 11:31 2614899

Если вдруг это как-то поможет, я для себя делаю так:

1. Создана структура вида \\FileServer\Data\Computer_Reports\OS_Versions, Everyone: Modify
2. Скриптом на файл-сервере создаётся файл \\FileServer\Data\Computer_Reports\Empty.txt
Скрипт зашедулен на запуск от лица SYSTEM раз в пять минут. Это нужно для свежих атрибутов файла (время создания)

Цитата:

cmd.exe /c echo 2> D:\Data\Computer_Reports\Empty.txt
3. GPO Compliance Reports подключена к корню домена
Цитата:

User Configuration > Preferences > Windows Settings > Files > New > File > Replace
\\FileServer\Data\Computer_Reports\Empty.txt
\\FileServer\Data\Computer_Reports\OS_Versions\%OsVersion%_%ComputerName%_%LogonUser%.txt
Мы знаем, что GPO на рабочих станциях отрабатывает при логоне и ещё примерно каждые полтора часа.
Папка OS_Versions наполняется пустыми файлами вида "Windows 8.1_COMPUTERNAME_USERNAME.txt" с более-менее корректными метками времени.
Ссылка на папку ставится сотрудникам IT на рабочий стол. Поиск в ней осуществляется прямо в Windows Explorer. Знаешь имя пользователя - получи компьютер, и наоборот.

Чтобы эти файлы не копились бесконечно, на файл-сервере зашедулен ещё один скрипт:
(Можете их объединить, для меня они разные, так как иногда играют разные роли.)

Цитата:

$RetentionDepth = 60
$DataFolder = "D:\Data\Computer_Reports"
$EventHorizon = (Get-Date).AddDays(-$RetentionDepth)
Get-ChildItem $DataFolder -recurse | ?{$_.CreationTime -lt $EventHorizon} | del

Опиум 12-03-2016 19:17 2615305

lox-ness,
это 100500 раз нужная и решенная задачка.
у меня тупо logon скрипт шлет в журнал ip, username и computername.
Ведь для каждого залогиненого всегда он исполняется. В итоге я имею в журнале не только кто залогинен, но и когда (с историей)
дешево и сердито.


Время: 18:02.

Время: 18:02.
© OSzone.net 2001-