num1984
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору [more] Приветствую Вас господа! На форуме новенький, однако зыркаю что имеются знающие люди...может кто поможет? Суть вот в чем...написал я как то скрипт на powershell, который цепляет эвенты принт сервера с id 307 и id 805 соответственно. Все бы и ничего, но начальству понадобилось вдруг что б вместе с samaccountname, которое вытаскивается из 307 эвента прит сервера, так же из самой active directory бралось значение office...и, в тот же лог, соответственно, записывалось. Вопрос...можно ли сие сделать и, если не трудно, никто не подскажет - как?? --------------------------------------------------------------------------------------------------------- Сам скрипт: $a3 = Measure-Command -Expression { $workpath = "C:\parslog\logs\work" $logname = "306EV%" $logname3 = "805EV%" $logname5 = "printlog%" $logname1 = [System.Web.HttpUtility]::UrlEncode($logname) $logname2 = [System.Web.HttpUtility]::UrlEncode($logname3) $logname4 = [System.Web.HttpUtility]::UrlEncode($logname5) $Now = [System.DateTime]::Now $filedate = $Now.ToString("yyyy.MM.dd_HH mm") $out_evt_file = "$workpath\$logname1-$filedate.evtx" $out_evt_file1 = "$workpath\$logname2-$filedate.evtx" $out_csv_file = "$workpath\$logname1-$filedate.csv" $out_csv_file1 = "$workpath\$logname2-$filedate.csv" $out_csv_filetogether = "$workpath\$logname5-$filedate.csv" #wevtutil.exe cl $logname /BU:$out_evt_file /uni:true #wevtutil.exe cl Microsoft-Windows-PrintService/Operational /BU:c:\install\printaudit\work\filedate.evtx /uni:true wevtutil.exe Export-Log Microsoft-Windows-PrintService/Operational C:\parslog\logs\work\filedate.evtx /ow:true wevtutil.exe Export-Log Microsoft-Windows-PrintService/Operational C:\parslog\logs\work\filedate1.evtx /ow:true $query = "*[System[(Level=4 or Level=0) and (EventID=307)]]" $query1 = "*[System[(Level=4 or Level=0) and (EventID=805)]]" #$Events = wevtutil.exe query-events $out_evt_file /lf:true /q:$query /f:XML /locale:ru /uni:true $Events = wevtutil.exe query-events C:\parslog\logs\work\filedate.evtx /c:50/rd:true /lf:true /q:$query /f:XML /locale:ru /uni:true $Events2 = wevtutil.exe query-events C:\parslog\logs\work\filedate1.evtx /c:50 /rd:true /lf:true /q:$query1 /f:XML /locale:ru /uni:true $Events1=$Events | % { [xml]$_ } | % { if ($_.Event.UserData.DocumentPrinted.Param7 -is [array] ) { New-Object PSObject -Property @{ JobID = $_.Event.UserData.DocumentPrinted.Param1; user = $_.Event.UserData.DocumentPrinted.Param3; comp = $_.Event.UserData.DocumentPrinted.Param4; printer = $_.Event.UserData.DocumentPrinted.Param5; port = $_.Event.UserData.DocumentPrinted.Param6; kolvo_str = [int]$_.Event.UserData.DocumentPrinted.Param7[0]; size = [int]$_.Event.UserData.DocumentPrinted.Param7[1]; Date = $filedate; } } else { New-Object PSObject -Property @{ JobID = $_.Event.UserData.DocumentPrinted.Param1; user = $_.Event.UserData.DocumentPrinted.Param3; comp = $_.Event.UserData.DocumentPrinted.Param4; printer = $_.Event.UserData.DocumentPrinted.Param5; port = $_.Event.UserData.DocumentPrinted.Param6; kolvo_str = [int]$_.Event.UserData.DocumentPrinted.Param7; size = [int]$_.Event.UserData.DocumentPrinted.Param8; Date = $filedate; } } } $Events1 | export-csv -Path $out_csv_file -NoTypeInformation -Encoding Unicode $a3 } $Events3=$Events2| % { [xml]$_ } | % { New-Object PSObject -Property @{ date = $_.Event.System.TimeCreated.SystemTime; # time = $_.Event.System.TimeCreated.SystemTime; JobID = $_.Event.UserData.RenderJobDiag.Jobid; copies = $_.Event.UserData.RenderJobDiag.Copies; } } $Events3 | export-csv -Path $out_csv_file1 -NoTypeInformation -Encoding Unicode $a3 $hash = @{} #Import-CSV $out_csv_file | Foreach {$hash[$_.JobID] = $_.user, $_.comp, $_.printer, $_.size, $_.kolvo_str} Import-CSV $out_csv_file | Foreach {$hash[$_.JobID] = $_.user, $_.comp, $_.printer, $_.kolvo_str, $_.size} $f2 = Import-CSV $out_csv_file1 #$f2 | Foreach {if($hash[$_.JobID]) { $obj = "" | Select date, time, user, comp, printer, kolvo_str, size, copies $f2 | Foreach {if($hash[$_.JobID]) { $obj = "" | Select date, time, user, comp, printer, size, kolvo_str, copies $obj.date = Get-Date $_.date -uformat "%d.%m.%Y" $obj.time = Get-Date $_.date -uformat "%H:%M:%S" $obj.user = $hash[$_.JobID][0] $obj.comp = $hash[$_.JobID][1] $obj.printer = $hash[$_.JobID][2] #$obj.port = $hash[$_.JobID][3] $obj.size = $hash[$_.JobID][3] $obj.kolvo_str = $hash[$_.JobID][4] $obj.copies= $_.copies $obj } }|Export-CSV -NoType $out_csv_filetogether -Delimiter ";" Remove-Item C:\parslog\logs\work\*.evtx -Recurse Remove-Item $out_csv_file -Recurse ; Write-Host -f 'green' 'green' Remove-Item $out_csv_file1 -Recurse ; Write-Host -f 'blue' 'blue' ------------------------------------------------------------------------------------------------------ Тут значение user = $_.Event.UserData.DocumentPrinted.Param3 (из 307 эвента принт сервер лога) и есть по сути samaccountname. Как в сий лог сунуть еще и параметр office не совсем представляю. Есть некое общее представление, что нужно сделать что то типо этого - Задать переменную .. примерно так чтоли - Import-Module ActiveDirectory $z = Get-ADUser -Filter * -SearchBase ` 'OU=rzkoren,OU=Users,OU=rzkoren,OU=Oren,OU=Regions,DC=rzk,DC=local' -SearchScope` Subtree -Properties samaccountname, office | select samaccountname, office Затем ее как то привязать к переменной user = $_.Event.UserData.DocumentPrinted.Param3... ...не пойму как сделать что б вместе с user, которая есть по сути samaccountname выгрузить в этот общий принт лог еще и значение office, непосредственно, из AD.. Запись в самом эвенте выглядит так: Документ 169, Печать документа, которым владеет Yasaulov.VI на Oren-YASAUL, был распечатан на Oren-M525 через порт oren2-hp5. Размер в байтах: 101494. Страниц напечатано: 1. Действий пользователя не требуется. | Всего записей: 1 | Зарегистр. 31-05-2015 | Отправлено: 13:55 31-05-2015 | Исправлено: num1984, 14:00 31-05-2015 |
|