Как стать автором
Обновить

Комментарии 13

А где финальный скрипт запакованный в архив и выложенный для всеобщего обозрения?
А где финальный скрипт запакованный в архив и выложенный для всеобщего обозрения?
Поддерживаю. Где??
Спасибо за статью! Спасли, просто.
день добрый всё делаю как написано что то не работает не подскажите в чем дело
вот что ввожу
param ($key1,$val1,$val2,$val3,$val4,$val5,$val6)
if ($val1 -eq $null) {$val1=0};
$mydate = Get-date -hour 0 -minute 0 -second 0;
if ($key1 -eq «year») { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1 -month 1); $mydate = $mydate.addyears(-$val1); };
if ($key1 -eq «month») { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1); $mydate = $mydate.addmonths(-$val1); };
if ($key1 -eq «day») { $mydate = $mydate.adddays(-$val1) };
if ($key1 -eq «date») { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day $val1 -month $val2 -year $val3); };
# здесь реализуем возможность задания интервала
if ($val4 -eq $null) {$Events = Get-EventLog security -message «*Тип входа:?10*» -after ($mydate) | ?{$_.eventid -eq 528 }}
if ($val4 -ne $null) {$Events = Get-EventLog security -message «*Тип входа:?10*» -after ($mydate) -before (get-date -hour 0 -minute 0 -second 0 -day $val4 -month $val5 -year $val6) | ?{$_.eventid -eq 528 }}
$Data = New-Object System.Management.Automation.PSObject
$Data | Add-Member NoteProperty Time ($null)
$Data | Add-Member NoteProperty UserName ($null)
$Data | Add-Member NoteProperty Address ($null)
$Events | %{
$Data.time = $_.TimeGenerated
$message = $_.message.split(«`n») | %{$_.trimstart()} | %{$_.trimend()}
$Data.UserName = ($message | ?{$_ -like «Пользователь:*»} | %{$_ -replace «^.+:.»} )
$Data.Address = ($message | ?{$_ -like «Адрес сети источника:*»} | %{$_ -replace «^.+:.»})
$textcolor = $host.ui.rawui.foregroundcolor
$host.ui.rawui.foregroundcolor = «red»
if ($data.address -like «192.168.1*») {$host.ui.rawui.foregroundcolor = «DarkGreen»}
if ($data.address -like «10.*») {$host.ui.rawui.foregroundcolor = «yellow»}
$data
$host.ui.rawui.foregroundcolor = $textcolor
}
вот что выдает:
C:\Users\Администратор\ttest.ps1:4 знак:14
+ if ($key1 -eq В) { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1 …
+ ~
Необходимо предоставить выражение для значения справа от оператора «-eq».
C:\Users\Администратор\ttest.ps1:4 знак:15
+ if ($key1 -eq В) { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1 …
+ ~~~~~~~~
Непредвиденная лексема «В» в выражении или операторе.
C:\Users\Администратор\ttest.ps1:4 знак:15
+ if ($key1 -eq В) { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1 …
+ ~~~~~~~~
Отсутствует закрывающий знак «)» после выражения в операторе «if».
C:\Users\Администратор\ttest.ps1:4 знак:23
+ if ($key1 -eq В) { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1 …
+ ~
Непредвиденная лексема «)» в выражении или операторе.
C:\Users\Администратор\ttest.ps1:5 знак:14
+ if ($key1 -eq В) { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day …
+ ~
Необходимо предоставить выражение для значения справа от оператора «-eq».
C:\Users\Администратор\ttest.ps1:5 знак:15
+ if ($key1 -eq В) { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day …
+ ~~~~~~~~~
Непредвиденная лексема «В» в выражении или операторе.
C:\Users\Администратор\ttest.ps1:5 знак:15
+ if ($key1 -eq В) { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day …
+ ~~~~~~~~~
Отсутствует закрывающий знак «)» после выражения в операторе «if».
C:\Users\Администратор\ttest.ps1:5 знак:24
+ if ($key1 -eq В) { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day …
+ ~
Непредвиденная лексема «)» в выражении или операторе.
C:\Users\Администратор\ttest.ps1:6 знак:14
+ if ($key1 -eq В) { $mydate = $mydate.adddays(-$val1) };
+ ~
Необходимо предоставить выражение для значения справа от оператора «-eq».
C:\Users\Администратор\ttest.ps1:6 знак:15
+ if ($key1 -eq В) { $mydate = $mydate.adddays(-$val1) };
+ ~~~~~~~
Непредвиденная лексема «В» в выражении или операторе.
Выданы сообщения не обо всех ошибках синтаксического анализа. Исправьте перечисленные в сообщениях ошибки и повторите
попытку.
+ CategoryInfo: ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId: ExpectedValueExpression
Хм… статье 4 года и все еще актуальна. Вы меня конечно порадовали) Пришлось вспоминать… На первый взгляд у вас проблема в кавычках, вы код в MS Word набирали что ли? ))

Вместо ($key1 -eq «year») должно быть ($key1 -eq «year») и так по всему коду.

ПыСы: Длинные куски кода и консольного лога убирайте под спойлер. Эстетичнее выглядит.
рад что порадовал)

нет не ворде) все проще копи паст.

только вот хоть убей не понимаю «Вместо ($key1 -eq «year») должно быть ($key1 -eq «year») и так по всему коду» написаны одни и теже символы? или меня глючит?
Видимо хабрапарсер…

Вот такая строка должна быть
($key1 -eq "year")


смысл в кавычках ) Проверьте что именно такие в коде стоят
истина где то рядом) теперь ошибки нет но и ничего не выводит…

вот скрипт
param ($key1,$val1,$val2,$val3,$val4,$val5,$val6)
if ($val1 -eq $null) {$val1=0};
$mydate = Get-date -hour 0 -minute 0 -second 0;
if ($key1 -eq «year») { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1 -month 1); $mydate = $mydate.addyears(-$val1); };
if ($key1 -eq «month») { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day 1); $mydate = $mydate.addmonths(-$val1); };

if ($key1 -eq «day») { $mydate = $mydate.adddays(-$val1) };

if ($key1 -eq «date») { $mydate = (Get-date -hour 0 -minute 0 -second 0 -day $val1 -month $val2 -year $val3); }; # здесь реализуем возможность задания интервала

if ($val4 -eq $null) {$Events = Get-EventLog security -message "*Тип входа:?10*" -after ($mydate) | ?{$_.eventid -eq 528 }}
if ($val4 -ne $null) {$Events = Get-EventLog security -message "*Тип входа:?10*" -after ($mydate) -before (get-date -hour 0 -minute 0 -second 0 -day $val4 -month $val5 -year $val6) | ?{$_.eventid -eq 528 }}
$Data = New-Object System.Management.Automation.PSObject
$Data | Add-Member NoteProperty Time ($null)
$Data | Add-Member NoteProperty UserName ($null)
$Data | Add-Member NoteProperty Address ($null)

$Events | %{

$Data.time = $_.TimeGenerated

$message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}

$Data.UserName = ($message | ?{$_ -like «Пользователь:*»} | %{$_ -replace "^.+:."} )
$Data.Address = ($message | ?{$_ -like «Адрес сети источника:*»} | %{$_ -replace "^.+:."})

$textcolor = $host.ui.rawui.foregroundcolor

$host.ui.rawui.foregroundcolor = «red»

if ($data.address -like «192.168.222*») {$host.ui.rawui.foregroundcolor = «DarkGreen»}

$data

$host.ui.rawui.foregroundcolor = $textcolor

}


странно но вот этот скрипт даёт вывод…
в инете нашел
$time = [int](New-TimeSpan ([datetime]::Today) (get-date)).TotalMilliseconds
$filter = "*[System[TimeCreated[timediff(@SystemTime) < $time] and EventID=4624] and EventData[Data[Name='LogonType']=10]]"
Get-WinEvent -FilterXPath $filter -LogName Security | Select TimeCreated,Message,
@{n=«UserName»;e={([xml]$_.ToXml()).Event.EventData.Data |? {$_.Name -eq «TargetUserName»} | %{$_.'#text'}}},
@{n=«Address»;e={([xml]$_.ToXml()).Event.EventData.Data |? {$_.Name -eq «IpAddress»} | %{$_.'#text'}}}


вот его вывод
Скрытый текст
TimeCreated Message UserName Address
— — — —
21.01.2015 15:58:35 Вход с учетной записью вып… ocean 192.168.222.113
21.01.2015 15:14:04 Вход с учетной записью вып… potate 192.168.222.123
21.01.2015 15:13:07 Вход с учетной записью вып… ocean 192.168.222.113
21.01.2015 14:54:08 Вход с учетной записью вып… potate 192.168.222.13
21.01.2015 13:01:45 Вход с учетной записью вып… ocean 192.168.222.113
21.01.2015 12:44:07 Вход с учетной записью вып… ocean 192.168.222.183
21.01.2015 11:58:25 Вход с учетной записью вып… ola_s 192.168.222.176
21.01.2015 11:32:17 Вход с учетной записью вып… potate 192.168.222.13
21.01.2015 11:31:01 Вход с учетной записью вып… andreeva 192.168.222.13
21.01.2015 11:04:49 Вход с учетной записью вып… andreeva 192.168.222.13
21.01.2015 11:04:07 Вход с учетной записью вып… ola_s 192.168.222.176
21.01.2015 10:57:39 Вход с учетной записью вып… ocean 192.168.222.113


А какой строкой вы скрипт запускаете? Какие параметры прописываете? И на какой системе запускаете?) Есть у меня подозрение что PoSh несколько изменился за последние 4 года)
команда запуска вот .\test.ps1

система server 2012 r2 64x

пробовал на 2008 r2 запустить там вот что выдаёт
нельзя вызывать выражение со значением NULL и ссылается на 26 строку

$message = $_.message.split("`n") | %{$_.trimstart()} | %{$_.trimend()}
Скорее всего что то поменялось в PowerShell с 2011 года, к сожалению под рукой нет ни 2008 ни 2012 сервера, по этому проверить и поправить не могу. возможно изменился порядок вывода команды, по этому парсер и ругается.
ок, постараюсь сам как то разобраться.

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

немного изучил вопрос да там много чего изменилось… теперь что то без скобок что то без знаков вопросов

вообщем как получится сделать сразу напишу сюда
вот помогли на форуме microsoft решение выглядит так:

код
$time = [int](New-TimeSpan ([datetime]::Today) (get-date)).TotalMilliseconds
$filter = "*[System[TimeCreated[timediff(@SystemTime) < $time] and EventID=4624] and EventData[Data[Name='LogonType']=10]]"
Get-WinEvent -FilterXPath $filter -LogName Security | Foreach {
$evt = $_
$addr = $evt.Properties[18].Value
$textcolor = $host.ui.rawui.foregroundcolor
$host.ui.rawui.foregroundcolor = «red»

if ($addr -like «192.168.0*») {$host.ui.rawui.foregroundcolor = «DarkGreen»}
if ($addr -like «10.*») {$host.ui.rawui.foregroundcolor = «yellow»}
"" | Select-Object @{n=«Time»;e={$evt.TimeCreated}},@{n=«UserName»;e={$evt.Properties[5].Value}},@{n=«Address»;e={$addr}}
$host.ui.rawui.foregroundcolor = $textcolor
}


всем спасибо!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации