PowerShell - [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней

Ответить
Аватара пользователя
alexander_stepanov1

PowerShell - [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней

Сообщение alexander_stepanov1 »

Доброго времени суток!



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



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



Спасибо заранее.
Аватара пользователя
Kazun

Re: PowerShell - [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней

Сообщение Kazun »

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

Re: PowerShell - [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней

Сообщение alexander_stepanov1 »

я не совсем понял скрипт



тут мы задаем условие для поиска:

$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

Re: PowerShell - [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней

Сообщение Iska »

Цитата alexander_stepanov1:



здесь мы выводим список, исходя из нашего фильтра:

Get-ADComputer -Filter "Enabled -eq '$true' -and DnsHostName -like '*'" | Foreach {
PowerShell - [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней




Нет. «Здесь» мы получаем из AD перечень разрешённых машин. К «нашему фильтру» сие отношения пока не имеет.




Цитата alexander_stepanov1:



а вот тут я понял не до конца, вы не могли бы пояснить

$event = $mail = $user = $null
PowerShell - [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней




Аналогично:



Код:

Код: Выделить всё

$event = $null
$mail = $null
$user = $null

А вот тут:


Цитата alexander_stepanov1:



$event = Get-WinEvent -FilterXPath $filter -LogName Security -MaxEvent 1 -ComputerName $_.DnsHostName
PowerShell - [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней




уже «наш фильтр» задействуется. Для каждой машины получаем из журнала безопасности последнее событие успешной[/i] регистрации пользователя, локально или посредством RDS.




Цитата alexander_stepanov1:



if($event) {

$user = $event.Properties[5].Value

if($user) {

$mail = (Get-ADUser $user -Properties mail).mail

}

}
PowerShell - [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней




Если таковое событие найдено, попытаться получить из его свойств имя пользователя. Если таковое получено, попытаться получить из AD его почту.




Цитата Kazun:



[pscustomobject]@{ ComputerName = $_.Name

UserName = $user

MailAddress = $mail

}
PowerShell - [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней




Оформить потребные свойства в пользовательский объект.



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




Цитата alexander_stepanov1:



и почему у нас именно такое условие поиска?
PowerShell - [решено] PowerShell узнать по доменному имени имя учетной записи, авторизовавшейся последней




Потому, что это именно то условие, которое потребно. Базовые начала:
10 критически важных event ID для мониторинга / Блог компании Netwrix / Хабрахабр
.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»