Joolz
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Drunken_Master Вобщем, забил я на аргумент, написал в хэлпе, чтоб юзали dd Скрипт получился таков: Код: #****************************************** Параметры запуска (переменные по-умолчанию)*******************************************# param ( [switch]$help, [string]$printer='*', [string]$user='*', [string]$pc=$Env:ComputerName, [string]$int='1h', [string]$date, [switch]$lastmonth ) #****************************************** Справка ****************************************************************************# function helpme { write-host -fore White -back DarkGray "`n Просмотр статистики ипользвания принтеров " write-host "`n Скрипт позволяет просматривать статистику использования принтеров на хосте." write-host " Пример использования: " -no write-host -fore Green "PrintStat.ps1 -printer 2420tech -int 7d -pc PrintServer -user VPupkin"`n write-host "`n Для запуска скрипта в качестве параметра нужно указать: "`n write-host -fore Yellow " Ключи диапазона времени: " -no write-host -fore Green " -int (XXm, XXh, XXd); -lastmonth" write-host " где XX - число, а m,h и d - указатель продолжительности минуты, часы, дни." write-host " Например, для того чтобы посмотреть статистику за последние 3 часа вводим: " -no write-host -fore Green " PrintStat.ps1 -int 3h" write-host " А, для того чтобы посмотреть статистику за последние 2 дня вводим: " -no write-host -fore Green " PrintStat.ps1 -int 2d" write-host " Для посмотра статистики за препыдущий месяц вводим:" -no write-host -fore Green " PrintStat.ps1 -lastmonth" write-host -fore Gray " Значение по умолчанию: 1h"`n write-host -fore Yellow " Ключи выборки: " -no write-host -fore Green "-user" -no write-host " и " -no write-host -fore Green "-printer" write-host " Для посмотра статистики для определенного пользователя вводим:" -no write-host -fore Green " PrintStat.ps1 -user VPupkin" write-host -fore Gray " Значение по умолчанию: *" write-host " Для посмотра статистики по определенному ппринтеру вводим:" -no write-host -fore Green " PrintStat.ps1 -printer HP2200" write-host -fore Gray " Значение по умолчанию: *"`n write-host " Ключи выборки позволяют использовать символ * (звездочка) вместо произвольного количества символов." write-host " Например:" -no write-host -fore Green " PrintStat.ps1 -user VPu*n -printer *2200*"`n write-host -fore Yellow " Ключ принтер-хоста: " -no write-host -fore Green "-pc" write-host " Например:" -no write-host -fore Green " PrintStat.ps1 -pc PrintServer" write-host -fore Gray " Значение по умолчанию: LocalHost (*)"`n exit } ########################################### Тело скрипта ############################################################################# #****************************************** Вспомогательные переменные и обработка параметров запуска***********************************# if ($help) {Helpme} $t1=((get-date).addhours(-1)) $t2=((get-date)) $maxmd=00,31,28,31,30,31,30,31,31,30,31,30,31 [int]$ecode=10 If ($int -match '^(\d{1,2})d') { If ([int](($int).trimend('d')) -gt 31) {Echo "Врядли стоит смотреть такую древность. "; exit} $t1=((get-date).adddays(-($int).trimend('d'))) } If ($int -match '^(\d{1,2})h') { If ([int](($int).trimend('h')) -gt 24) {Echo "Может лучше использовать параметр 'd'?"; exit} $t1=((get-date).addhours(-($int).trimend('h'))) } If ($int -match '^(\d{1,2})m') { If ([int](($int).trimend('m')) -gt 59) {Echo "Может лучше использовать параметр 'h'?"; exit} $t1=((get-date).addminutes(-($int).trimend('m'))) } If ($LastMonth) { $t1=((get-date((get-date).tostring("01.MM.yyyy"))).addmonths(-1)) $t2=((get-date((get-date).tostring("01.MM.yyyy")))) } If ($date -match '(\d{1,2})[.](\d{1,2})') { if ($matches[2] -gt 12) {Write-host -fore Red "`n Неверная дата `n"; exit} elseif ($matches[1] -gt $maxmd[$matches[2]] ) {Write-host -fore Red "`n Неверная дата `n"; exit} else { $t1=((get-date((get-date).tostring([string]$matches[1]+'.'+[string]$matches[2]+'.yyyy')))) $t2=((get-date((get-date).tostring([string]$matches[1]+'.'+[string]$matches[2]+'.yyyy 23:59:59')))) } } "Принтер:`t $printer" "Пользователь:`t $user" "ПринтХост:`t $pc" "Начало диапазона времени:`t " ($t1).tostring() "Конец диапазона времени:`t " ($t2).tostring() #****************************************** Здесь идет обработка входных данных ***********************************************************# $Time=[System.Management.ManagementDateTimeConverter]::ToDmtfDateTime($t1) $Time2=[System.Management.ManagementDateTimeConverter]::ToDmtfDateTime($t2) $user=($user) -replace('\$') -replace("\*","%") $printer=($printer) -replace('\$') -replace("\*","%") #****************************************** Смотрим в EventLog ***************************************************************************# $events=GWmi -computername $pc -query "select user, timegenerated, insertionstrings, message from win32_ntlogevent where LogFile='System' AND EventCode='$ecode' AND TimeWritten>'$Time' AND TimeWritten<'$Time2' AND Message like '%owned by $user was printed on $printer via port%'" #****************************************** Формируем таблицу для вывода *****************************************************************# $tab1=$events` | select @{Name='User'; Expression={$_.InsertionStrings[2]}},` @{Name="Time"; Expression={([System.Management.ManagementDateTimeConverter]::ToDateTime($_.TimeGenerated))}},` @{Name="Printer"; Expression={$_.InsertionStrings[3]}},` @{Name="Pages"; Expression={(($_.message) -replace "`n\s*" -replace ".*(; pages printed: )","" -replace '[\s]+$')}},` @{Name="Document"; Expression={(($_.message) -replace "`n\s*" -replace '^.*,(.*)owned.*','$1' -replace "[\s]+$")}} #****************************************** Функция для вывода полного количества распечаттаных листов ***************************************# function totall {[int]$totalpages=0 for($j=0;$j -lt $tab1.Count;$j++){$totalpages=$totalpages+$tab1[$j].pages} Write-Host -fore DarkCyan -back White " Total Pages: " -no;Write-Host -back White -fore Black $totalpages" "; rv totalpages} #****************************************** Вывод результатов ****************************************************************************# $tab1 | sort -property Time | ft -autosize totall | Чё умеет: извлекает из лога инфу по распечатанным документам. У нас руководство заинтересовалось кто "жрет" картриджи. Специально для них и выводится Total Pages. Все параметры описаны в helpe. Вопщем, та еще поделка, но моим требованиям удовлетворяет. ЗЫ Кстати, интересный момент: если печатать с локального принтера, у которого идет перенаправление на порт любого другого, то информация о напечатанных документах в лог не пишется. Добавлено: Добавлен ключ -date для просмотра статистики за определенную дату. | Всего записей: 100 | Зарегистр. 24-01-2008 | Отправлено: 10:00 11-09-2008 | Исправлено: Joolz, 12:15 16-09-2008 |
|