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