Использование командлета Get-Date в PowerShell

У меня есть следующая строка кода, которая в настоящее время будет получать журналы событий принтера для серверов:

Get-EventLog -ComputerName ********* -LogName System -Source Print|where-object{$_.timeGenerated -gt (get-date "2013-03-11")}|select-object eventid,timegenerated,message |export-CSV -Path "C:\temp\export.csv"

На данный момент Get-Date работает, чтобы получить журналы принтера за конкретный день, который я написал в строке кода. Однако я хотел бы изменить это, чтобы получать журналы принтеров за всю неделю за раз. Я просматривал статью TechNet о Get-Date и ничего не вижу о том, как можно указать, что вы хотите получить результаты за предыдущую неделю, а не за один день. Как мне это сделать?

РЕДАКТИРОВАТЬ: Кроме того, я хотел бы найти способ, где мне не нужно указывать конкретные даты. Например, я хотел бы иметь возможность получать журналы за эту неделю, а затем на следующей неделе получать новые журналы без необходимости изменять даты в коде.


person Valrok    schedule 14.03.2013    source источник


Ответы (3)


Я предполагаю, что это продолжение вашего предыдущего сообщения, Использование WMI для получения журналы принтера

Как я отметил в своем ответе на этот вопрос, вы должны фильтровать источник — Get-EventLog — вместо Where-Object. Get-EventLog предоставляет для этого два параметра — -Before и -After.

Фильтруя в источнике, вы будете отправлять по сети намного меньше данных, что может значительно повысить производительность. Это также сократит время, необходимое удаленной системе для обработки вашего запроса. Зачем запрашивать и извлекать данные, которые вы отбросите, даже не взглянув на них?

Чтобы получить все, что было между неделей ранее и прямо сейчас, сделайте следующее:

get-eventlog -computername ******* -logname system -after $((get-date).adddays(-7).date) -before $(get-date) -source Print | select-object eventid,timegenerated,message |export-CSV -Path "C:\temp\export.csv"

При необходимости измените значения, переданные в -After и -Before.

person alroc    schedule 14.03.2013

Ваш объект Where-Object возвращает только записи, превышающие эту дату.

Where-Object { $_.timeGenerated -gt (get-date "2013-03-11") }

Чтобы получить диапазон дат, попробуйте

Where-Object { $_.timeGenerated -gt [datetime]'2013-03-11' -and $_.timeGenerated -lt [datetime]'2013-03-18' }

Это в основном говорит: (нижняя граница) 2013-03-11 ‹ ​​(дата создания записи в журнале) ‹ 2013-03-18 (верхняя граница)

person Jake H    schedule 14.03.2013

Включите еще один тест в свой оператор where. Так:

Get-EventLog -ComputerName ********* -LogName System -Source Print |
where-object{$_.timeGenerated -gt ([datetime]"2013-03-11") -and $_.timeGenerated -lt ([datetime]"2013-03-18")} |
select-object eventid,timegenerated,message |
export-CSV -Path "C:\temp\export.csv"

Он проверяет, является ли событие новее 2013-03-11, но старше 2013-03-18.

person Frode F.    schedule 14.03.2013