2

Я копался в паутинах, но не могу найти однозначного ответа на этот вопрос. Я вынужден работать с PowerShell v2. Я знаю, что использование следующей команды даст мне список всех правил брандмауэра:

netsh advfirewall firewall show rule name=all

Однако, это дает мне вывод, как это:

Rule Name:                            Core Networking - Teredo (ICMPv6-In)
----------                            ------------------------------------
Enabled:                              Yes
Direction:                            In
Profiles:                             Domain,Private,Public
Grouping:                             Core Networking
LocalIP:                              Any
RemoteIP:                             Any
Protocol:                             ICMPv6
                                      Type    Code
                                      128     Any 
Edge traversal:                       No
Action:                               Allow

Однако мне нужно найти точное время, когда правило было создано / включено. Это возможно? Или, альтернативно, есть ли способ установить временные (синхронизированные) правила брандмауэра Windows?

* РЕДАКТИРОВАТЬ: кажется, что на самом деле нет способа сделать это с помощью netsh или командлета powerhshell v2, специфичного для брандмауэра, однако я полагаю, что мое решение может быть в / Журналы приложений и служб / Microsoft / Windows / Брандмауэр Windows в режиме повышенной безопасности / Журнал брандмауэра под идентификатором события 2004/2006.

**** Edit:** Следующая команда может быть использована для просмотра Instance ID 2004 (правило было добавлено в брандмауэр ...):

Get-WinEvent -LogName "Microsoft-Windows-Windows Firewall With Advanced Security/Firewall" | Where-Object {$_.ID -eq "2004"}

***** Edit:** Следующая команда является самым быстрым способом сбора этой информации в отношении Measure-Command -Expression . Вы можете изменить время начала / окончания или полностью удалить его, если хотите:

Get-WinEvent -ErrorAction SilentlyContinue -FilterHashtable @{logname="Microsoft-Windows-Windows Firewall With Advanced Security/Firewall"; id=2004; StartTime=(Get-Date).AddMinutes(-5); EndTime=Get-Date}

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 166
Ticks             : 1662222
TotalDays         : 1.92386805555556E-06
TotalHours        : 4.61728333333333E-05
TotalMinutes      : 0.00277037
TotalSeconds      : 0.1662222
TotalMilliseconds : 166.2222

И получим, что вы выводите вот так (вы можете получить полный текст сообщения, отправив его в нечто вроде Format-List:

     ProviderName: Microsoft-Windows-Windows Firewall With Advanced Security

TimeCreated                     Id LevelDisplayName Message
-----------                     -- ---------------- -------
4/28/2014 2:42:26 PM          2004 Information      A rule has been added to the Windows Firewall exception list....
4/28/2014 11:56:43 AM         2004 Information      A rule has been added to the Windows Firewall exception list....

Обновленный вопрос будет таким: есть ли способ получить эту информацию и вместо столбца « Message получить имя Rule Name (труба Format-List ниже)

TimeCreated  : 4/28/2014 10:50:54 AM
ProviderName : Microsoft-Windows-Windows Firewall With Advanced Security
Id           : 2004
Message      : A rule has been added to the Windows Firewall exception list.

           Added Rule:
               Rule ID:    ...
               Rule Name:    Dummy rule
               Origin:    Local
               Active:    Yes
               Direction:    Inbound
               Profiles:    Private,Domain, Public
               Action:    Block
               Application Path:
               Service Name:
               Protocol:    Any
               Security Options:    None
               Edge Traversal:    None
               Modifying User:    ...
               Modifying Application:    ...

Ожидаемый результат будет примерно таким:

TimeCreated                     Rule Name
-----------                     ---------
4/28/2014 2:42:26 PM            Dummy rule
4/28/2014 11:56:43 AM           Dummy rule

1 ответ1

2

Прошел хотя бы один день, поэтому я полагаю, что можно ответить на мой собственный вопрос (кажется, я задал этот вопрос не в том месте, возможно, более подходящем для переполнения стека):

$Events = Get-WinEvent -ErrorAction SilentlyContinue -FilterHashtable @{logname="Microsoft-Windows-Windows Firewall With Advanced Security/Firewall"; id=2004}

ForEach ($Event in $Events) {
    $eventXML = [xml]$Event.ToXml()
    For ($i=0; $i -lt $eventXML.Event.EventData.Data.Count; $i++) {
        Add-Member -InputObject $Event -MemberType NoteProperty -Force `
            -Name  $eventXML.Event.EventData.Data[$i].name `
            -Value $eventXML.Event.EventData.Data[$i].'#text'
    }
}

$Events | Format-Table -Property TimeCreated,RuleName -AutoSize

Вывод выглядит точно так, как я хотел:

TimeCreated           RuleName
-----------           --------
4/28/2014 2:42:26 PM  Dummy Rule
4/28/2014 11:56:43 AM Dummy Rule

Надеюсь, это поможет кому-то в будущем. Благодарю.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .