Автор: num1984
Дата сообщения: 31.05.2015 13:55
[more] [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. Действий пользователя не требуется.
[/more] [/more]