Войти

Показать полную графическую версию : [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней


alexander_stepanov1
17-01-2016, 19:30
Доброго времени суток!

У меня есть список доменных имен компьютеров(около тысячи), и мне необходимо узнать список имен доменных учетных записей, авторизовавшихся на каждом из этих компьютерах последним, а так же адреса электронной почты этих учетных записей.

я могу просмотреть это всё просто списком, но необходимо написать скрипт, для выполнения этой задачи. С powerShell'ом практически не знаком, но от меня требуют в таком виде.

Спасибо заранее.

Kazun
17-01-2016, 20:46
DOMAIN - Заменить на NetBios имя своего домена

$filter = "*[System[EventID=4624] and (EventData[Data[@Name='LogonType']=2] or EventData[Data[@Name='LogonType']=10])
and EventData[Data[@Name='TargetDomainName']='DOMAIN']]"
Get-ADComputer -Filter "Enabled -eq '$true' -and DnsHostName -like '*'" | Foreach {
$event = $mail = $user = $null
$event = Get-WinEvent -FilterXPath $filter -LogName Security -MaxEvent 1 -ComputerName $_.DnsHostName

if($event) {
$user = $event.Properties[5].Value
if($user) {
$mail = (Get-ADUser $user -Properties mail).mail
}
}

[pscustomobject]@{
ComputerName = $_.Name
UserName = $user
MailAddress = $mail
}
}

alexander_stepanov1
17-01-2016, 21:27
я не совсем понял скрипт

тут мы задаем условие для поиска:
$filter = "*[System[EventID=4624] and (EventData[Data[@Name='LogonType']=2] or EventData[Data[@Name='LogonType']=10])
and EventData[Data[@Name='TargetDomainName']='DOMAIN']]"

здесь мы выводим список, исходя из нашего фильтра:
Get-ADComputer -Filter "Enabled -eq '$true' -and DnsHostName -like '*'" | Foreach {


а вот тут я понял не до конца, вы не могли бы пояснить
$event = $mail = $user = $null
$event = Get-WinEvent -FilterXPath $filter -LogName Security -MaxEvent 1 -ComputerName $_.DnsHostName

if($event) {
$user = $event.Properties[5].Value
if($user) {
$mail = (Get-ADUser $user -Properties mail).mail
}
}

и почему у нас именно такое условие поиска?

Iska
18-01-2016, 01:33
здесь мы выводим список, исходя из нашего фильтра:
Get-ADComputer -Filter "Enabled -eq '$true' -and DnsHostName -like '*'" | Foreach { »
Нет. «Здесь» мы получаем из AD перечень разрешённых машин. К «нашему фильтру» сие отношения пока не имеет.

а вот тут я понял не до конца, вы не могли бы пояснить
$event = $mail = $user = $null »
Аналогично:
$event = $null
$mail = $null
$user = $null

А вот тут:
$event = Get-WinEvent -FilterXPath $filter -LogName Security -MaxEvent 1 -ComputerName $_.DnsHostName »
уже «наш фильтр» задействуется. Для каждой машины получаем из журнала безопасности последнее событие успешной регистрации пользователя, локально или посредством RDS.

if($event) {
$user = $event.Properties[5].Value
if($user) {
$mail = (Get-ADUser $user -Properties mail).mail
}
} »
Если таковое событие найдено, попытаться получить из его свойств имя пользователя. Если таковое получено, попытаться получить из AD его почту.

[pscustomobject]@{ ComputerName = $_.Name
UserName = $user
MailAddress = $mail
} »
Оформить потребные свойства в пользовательский объект.

Повторить для каждой из полученного перечня машин.

и почему у нас именно такое условие поиска? »
Потому, что это именно то условие, которое потребно. Базовые начала: 10 критически важных event ID для мониторинга / Блог компании Netwrix / Хабрахабр (http://habrahabr.ru/company/netwrix/blog/148501/).

alexander_stepanov1
18-01-2016, 07:48
Благодарю всех за ответы)




© OSzone.net 2001-2012