Как я могу войти все запросы DNS по PowerShell и планировщик задач?
Я хочу войти в историю запросов DNS. Итак, я составил скрипт powershell ниже.
$PROC_ID = Get-WinEvent microsoft-windows-dns-client/operational -MaxEvents 1 -FilterXPath "*[System/EventID=3006]" | Select-Object -ExpandProperty processid
$TIMESTAMP = Get-WinEvent microsoft-windows-dns-client/operational -MaxEvents 1 -FilterXPath "*[System/EventID=3006]" | Select-Object -ExpandProperty timecreated
$LOG_MSG = Get-WinEvent microsoft-windows-dns-client/operational -MaxEvents 1 -FilterXPath "*[System/EventID=3006]" | Select-Object -ExpandProperty message
$PROC_NAME = Get-Process -id $PROC_ID | Select-Object -ExpandProperty processname
$TIMESTAMP_SPLIT = $TIMESTAMP -split " "
$LOG_DATE = $TIMESTAMP_SPLIT[0]
$LOG_TIME = $TIMESTAMP_SPLIT[1]
$LOG_URL = $LOG_MSG -replace '^\S{2}\s([^,]+).+','$1'
$LOG = "$LOG_DATE`t$LOG_TIME`t$PROC_ID`t$PROC_NAME`t$LOG_URL"
$LOG >> C:\dns.csv
И я составил график задач, которые запускают скрипт, когда происходит событие 3006.
C:\>schtasks /query /tn dns_history /fo list /v
Folder: \
HostName: LG
TaskName: \dns_history
Next Run Time: N/A
Status: Ready
Logon Mode: Interactive/Background
Last Run Time: 2017-05-14 오후 4:39:07
Last Result: 0
Author: lg\Administrator
Task To Run: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -file C:\Test\Powershell\dns.ps1
Start In: N/A
Comment: N/A
Scheduled Task State: Enabled
Idle Time: Disabled
Power Management: Stop On Battery Mode, No Start On Batteries
Run As User: LG\administrator
Delete Task If Not Rescheduled: Disabled
Stop Task If Runs X Hours and X Mins: 72:00:00
Schedule: Scheduling data is not available in this format.
Schedule Type: When an event occurs
Start Time: N/A
Start Date: N/A
End Date: N/A
Days: N/A
Months: N/A
Repeat: Every: N/A
Repeat: Until: Time: N/A
Repeat: Until: Duration: N/A
Repeat: Stop If Still Running: N/A
Это результат.
Но там не логи все днс запроса.
Мой скрипт журнала последний DNS-запрос только среди DNS-запросов, которые произошли в то же время. Это предел планировщика задач? Как я могу войти все DNS-запрос?
А при запуске кода restless1987, это происходит ошибка ниже.
Register-WMIEvent : Wrong Class.
Location D:\test.ps1:9 Character:1
+ Register-WMIEvent -query "Select * From __InstanceCreationEvent within 3 $filter ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Register-WmiEvent], ManagementException
+ FullyQualifiedErrorId : System.Management.ManagementException,Microsoft.PowerShell.Commands.RegisterWmiEventCommand
1 ответ
Taskscheduler может быть довольно ненадежным в определенных обстоятельствах.
Если это происходит в вашем случае, может быть, вы можете пойти вместе с регистрацией наблюдателя событий powershell wmi, чтобы регистрировать каждый экземпляр, который там создается.
Еще есть чем заняться, но это должно быть место для начала. Вы должны адаптировать фильтр, чтобы он получал события из правильного файла журнала.
$class = 'Win32_NtEventLog'
$EventCode = 3006
$filter = "Where TargetInstance ISA '$class' and eventcode = '$EventCode'"
$codeblock = {
$eventargs.newevent.targetinstance #<- should have all info you need
}
Register-WMIEvent -query "Select * From __InstanceCreationEvent within 3 $filter" `
-messageData "DNS event " -sourceIdentifier "New DNS query" -Action $codeblock
While ($true){
Start-Sleep 5
}