Показать полную графическую версию : [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней
alexander_stepanov1
17-01-2016, 19:30
Доброго времени суток!
У меня есть список доменных имен компьютеров(около тысячи), и мне необходимо узнать список имен доменных учетных записей, авторизовавшихся на каждом из этих компьютерах последним, а так же адреса электронной почты этих учетных записей.
я могу просмотреть это всё просто списком, но необходимо написать скрипт, для выполнения этой задачи. С powerShell'ом практически не знаком, но от меня требуют в таком виде.
Спасибо заранее.
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
}
}
и почему у нас именно такое условие поиска?
здесь мы выводим список, исходя из нашего фильтра:
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.