none
Логи времени входа в систему на ПК пользователей? RRS feed

  • Вопрос

  • Добрый день коллеги!

    Подскажите пожалуйста, может у кого есть или как правильно составить скриптик, что бы вытаскивать логи событий с компьютеров пользователей. Задача в том, что бы по списку имен компьютеров смотреть в какое время и под какой учётной записью был выполнен вход. Можно в принципе по OU где учётки компов. Главное собития типа 4648, 4624 и т.д. вытащить!) ?

    28 августа 2018 г. 3:28

Ответы

  • Param($ComputerName = $env:ComputerName) 
    
    # События с 00:00:00 текущего дня
    $time = (Get-Date).Date.ToString("s") + "Z"
    # запрос
    $query = "*[System[(EventID=4624 or EventID=4648) and TimeCreated[@SystemTime>='$time']]]"
    
    # по событиям
    $4624 = @()
    $4648 = @()
    
    # 4624
    
    Function Parse4624 {
    	param($id)
    	$LogonType = @{
    		"0" = "System"
    		"2" = "Interactive"
    		"3" = "Network"
    		"4" = "Batch"
    		"5" = "Service"
    		"6" = "Proxy"
    		"7" = "Unlock"
    		"8" = "NetworkCleartext"
    		"9" = "NewCredentials"
    		"10" = "RemoteInteractive"
    		"11" = "CachedInteractive"
    		"12" = "CachedRemoteInteractive"
    		"13" = "CachedUnlock"
    	}
    	
    	$id | select @{Name='Time';e={$_.TimeCreated.ToString('g')}},
    		@{l="Logon Type";e={$LogonType["$($_.Properties[8].Value)"]}},
    		@{l='Authentication';e={$_.Properties[10].Value}},
    		@{l='User Name';e={$_.Properties[5].Value}},
    		@{l='Client Name';e={$_.Properties[11].Value}},
    		@{l='Client Address';e={$_.Properties[18].Value}},
    		@{l='Server Name';e={$_.MachineName}} 
    }
    
    # 4648
    Function Parse4648 {
    	param($id)
    
    	$id | select @{Name='Time';e={$_.TimeCreated.ToString('g')}},
    		@{l="SubjectUserSid";e={$_.Properties[0].Value}},
    		@{l='SubjectUserName';e={$_.Properties[1].Value}},
    		@{l='SubjectDomainName';e={$_.Properties[2].Value}},
    		@{l='TargetUserName';e={$_.Properties[5].Value}},
    		@{l='TargetDomainName';e={$_.Properties[6].Value}},
    		@{l='TargetServerName';e={$_.Properties[8].Value}},
    		@{l='TargetInfo';e={$_.Properties[9].Value}},
    		@{l='Server Name';e={$_.MachineName}} 
    }
    
    # все события
    $ComputerName | Foreach {
    	Get-WinEvent -LogName Security -FilterXPath $query -ComputerName $_ | Foreach {
    		if($_.id -eq 4624) {
    			$4624 += Parse4624 $_
    		} else {
    			$4648 += Parse4648 $_
    		}
    	}
    }
    
    $4624 | Out-GridView
    $4648 | Out-GridView
    

    • Предложено в качестве ответа Vector BCOModerator 28 августа 2018 г. 13:06
    • Помечено в качестве ответа TheCho3enOne 29 августа 2018 г. 4:32
    28 августа 2018 г. 7:13
    Отвечающий
  • Сохранить скрипт, скажем, getid.ps1:

    C:\Scripts\getid.ps1 -ComputerName Comp1,Comp2,Comp3

    • Помечено в качестве ответа TheCho3enOne 29 августа 2018 г. 4:32
    28 августа 2018 г. 8:59
    Отвечающий
  • Тогда замените на вывод в файл:

    $4624 | Export-Csv 4624.csv -NoTypeInformation -UseCulture -Encoding UTF8 
    $4648 | Export-Csv 4648.csv -NoTypeInformation -UseCulture -Encoding UTF8 

    • Предложено в качестве ответа Vector BCOModerator 28 августа 2018 г. 13:06
    • Помечено в качестве ответа TheCho3enOne 29 августа 2018 г. 4:32
    28 августа 2018 г. 9:26
    Отвечающий

Все ответы

  • Посмотрите, пожалуйста, следующие скрипты и статьи:

    https://gallery.technet.microsoft.com/scriptcenter/Get-All-AD-Users-Logon-9e721a89

    https://support.microsoft.com/en-us/help/556015

    28 августа 2018 г. 6:20
  • Param($ComputerName = $env:ComputerName) 
    
    # События с 00:00:00 текущего дня
    $time = (Get-Date).Date.ToString("s") + "Z"
    # запрос
    $query = "*[System[(EventID=4624 or EventID=4648) and TimeCreated[@SystemTime>='$time']]]"
    
    # по событиям
    $4624 = @()
    $4648 = @()
    
    # 4624
    
    Function Parse4624 {
    	param($id)
    	$LogonType = @{
    		"0" = "System"
    		"2" = "Interactive"
    		"3" = "Network"
    		"4" = "Batch"
    		"5" = "Service"
    		"6" = "Proxy"
    		"7" = "Unlock"
    		"8" = "NetworkCleartext"
    		"9" = "NewCredentials"
    		"10" = "RemoteInteractive"
    		"11" = "CachedInteractive"
    		"12" = "CachedRemoteInteractive"
    		"13" = "CachedUnlock"
    	}
    	
    	$id | select @{Name='Time';e={$_.TimeCreated.ToString('g')}},
    		@{l="Logon Type";e={$LogonType["$($_.Properties[8].Value)"]}},
    		@{l='Authentication';e={$_.Properties[10].Value}},
    		@{l='User Name';e={$_.Properties[5].Value}},
    		@{l='Client Name';e={$_.Properties[11].Value}},
    		@{l='Client Address';e={$_.Properties[18].Value}},
    		@{l='Server Name';e={$_.MachineName}} 
    }
    
    # 4648
    Function Parse4648 {
    	param($id)
    
    	$id | select @{Name='Time';e={$_.TimeCreated.ToString('g')}},
    		@{l="SubjectUserSid";e={$_.Properties[0].Value}},
    		@{l='SubjectUserName';e={$_.Properties[1].Value}},
    		@{l='SubjectDomainName';e={$_.Properties[2].Value}},
    		@{l='TargetUserName';e={$_.Properties[5].Value}},
    		@{l='TargetDomainName';e={$_.Properties[6].Value}},
    		@{l='TargetServerName';e={$_.Properties[8].Value}},
    		@{l='TargetInfo';e={$_.Properties[9].Value}},
    		@{l='Server Name';e={$_.MachineName}} 
    }
    
    # все события
    $ComputerName | Foreach {
    	Get-WinEvent -LogName Security -FilterXPath $query -ComputerName $_ | Foreach {
    		if($_.id -eq 4624) {
    			$4624 += Parse4624 $_
    		} else {
    			$4648 += Parse4648 $_
    		}
    	}
    }
    
    $4624 | Out-GridView
    $4648 | Out-GridView
    

    • Предложено в качестве ответа Vector BCOModerator 28 августа 2018 г. 13:06
    • Помечено в качестве ответа TheCho3enOne 29 августа 2018 г. 4:32
    28 августа 2018 г. 7:13
    Отвечающий
  • Param($ComputerName = $env:ComputerName) 
    
    # События с 00:00:00 текущего дня
    $time = (Get-Date).Date.ToString("s") + "Z"
    # запрос
    $query = "*[System[(EventID=4624 or EventID=4648) and TimeCreated[@SystemTime>='$time']]]"
    
    # по событиям
    $4624 = @()
    $4648 = @()
    
    # 4624
    
    Function Parse4624 {
    	param($id)
    	$LogonType = @{
    		"0" = "System"
    		"2" = "Interactive"
    		"3" = "Network"
    		"4" = "Batch"
    		"5" = "Service"
    		"6" = "Proxy"
    		"7" = "Unlock"
    		"8" = "NetworkCleartext"
    		"9" = "NewCredentials"
    		"10" = "RemoteInteractive"
    		"11" = "CachedInteractive"
    		"12" = "CachedRemoteInteractive"
    		"13" = "CachedUnlock"
    	}
    	
    	$id | select @{Name='Time';e={$_.TimeCreated.ToString('g')}},
    		@{l="Logon Type";e={$LogonType["$($_.Properties[8].Value)"]}},
    		@{l='Authentication';e={$_.Properties[10].Value}},
    		@{l='User Name';e={$_.Properties[5].Value}},
    		@{l='Client Name';e={$_.Properties[11].Value}},
    		@{l='Client Address';e={$_.Properties[18].Value}},
    		@{l='Server Name';e={$_.MachineName}} 
    }
    
    # 4648
    Function Parse4648 {
    	param($id)
    
    	$id | select @{Name='Time';e={$_.TimeCreated.ToString('g')}},
    		@{l="SubjectUserSid";e={$_.Properties[0].Value}},
    		@{l='SubjectUserName';e={$_.Properties[1].Value}},
    		@{l='SubjectDomainName';e={$_.Properties[2].Value}},
    		@{l='TargetUserName';e={$_.Properties[5].Value}},
    		@{l='TargetDomainName';e={$_.Properties[6].Value}},
    		@{l='TargetServerName';e={$_.Properties[8].Value}},
    		@{l='TargetInfo';e={$_.Properties[9].Value}},
    		@{l='Server Name';e={$_.MachineName}} 
    }
    
    # все события
    $ComputerName | Foreach {
    	Get-WinEvent -LogName Security -FilterXPath $query -ComputerName $_ | Foreach {
    		if($_.id -eq 4624) {
    			$4624 += Parse4624 $_
    		} else {
    			$4648 += Parse4648 $_
    		}
    	}
    }
    
    $4624 | Out-GridView
    $4648 | Out-GridView

    Спасибо за ответ.

    Я правильно понимаю, что это скрип будет опрашивать все ПК в сети? 

    Мне нужно только по определенным ПК искать... Как это сделать?

    28 августа 2018 г. 8:33
  • Сохранить скрипт, скажем, getid.ps1:

    C:\Scripts\getid.ps1 -ComputerName Comp1,Comp2,Comp3

    • Помечено в качестве ответа TheCho3enOne 29 августа 2018 г. 4:32
    28 августа 2018 г. 8:59
    Отвечающий
  • Сохранить скрипт, скажем, getid.ps1:

    C:\Scripts\getid.ps1 -ComputerName Comp1,Comp2,Comp3

    Выдал вот такую ошибку:

    Out-GridView : To use the Out-GridView cmdlet, install the Windows PowerShell Integrated Scripting Environment feature
    from Server Manager. (Could not load file or assembly 'Microsoft.PowerShell.GraphicalHost, Version=1.0.0.0, Culture=neu
    tral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.)
    At C:\GetLogonInfo.ps1:67 char:21
    + $4624 | Out-GridView <<<<
        + CategoryInfo          : ObjectNotFound: (Microsoft.Power...1bf3856ad364e35:AssemblyName) [Out-GridView], NotSupp
       ortedException
        + FullyQualifiedErrorId : ErrorLoadingAssembly,Microsoft.PowerShell.Commands.OutGridViewCommand

    Out-GridView : To use the Out-GridView cmdlet, install the Windows PowerShell Integrated Scripting Environment feature
    from Server Manager. (Could not load file or assembly 'Microsoft.PowerShell.GraphicalHost, Version=1.0.0.0, Culture=neu
    tral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.)
    At C:\GetLogonInfo.ps1:68 char:21
    + $4648 | Out-GridView <<<<
        + CategoryInfo          : ObjectNotFound: (Microsoft.Power...1bf3856ad364e35:AssemblyName) [Out-GridView], NotSupp
       ortedException
        + FullyQualifiedErrorId : ErrorLoadingAssembly,Microsoft.PowerShell.Commands.OutGridViewCommand

    Как я понимаю на 2008 Windows не запустится? Нужно обновлять PowerShell?

    28 августа 2018 г. 9:22
  • Тогда замените на вывод в файл:

    $4624 | Export-Csv 4624.csv -NoTypeInformation -UseCulture -Encoding UTF8 
    $4648 | Export-Csv 4648.csv -NoTypeInformation -UseCulture -Encoding UTF8 

    • Предложено в качестве ответа Vector BCOModerator 28 августа 2018 г. 13:06
    • Помечено в качестве ответа TheCho3enOne 29 августа 2018 г. 4:32
    28 августа 2018 г. 9:26
    Отвечающий
  • Спасибо! Так всё работает! В принципе то что нужно! Спасибо!
    29 августа 2018 г. 4:32