Existe alguma maneira de ver quando uma regra de firewall do Windows foi criada / habilitada usando o PowerShell v2 ou CMD?

2

Eu tenho procurado as interwebs, mas não consigo encontrar uma resposta definitiva para essa pergunta. Eu sou forçado a trabalhar com o PowerShell v2. Eu sei que usando o seguinte comando vai me dar uma lista de todas as regras de firewall:

netsh advfirewall firewall show rule name=all

No entanto, isso me gera uma saída assim:

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

O que preciso descobrir é a hora exata em que a regra foi criada / ativada. Isso é possível? Ou, como alternativa, existe uma maneira de configurar regras de firewall temporárias (temporizadas) do Windows?

* EDIT : Parece que não há uma maneira de fazer isso com o netsh ou um cmdlet powerhshell v2 específico do firewall, mas acredito que minha solução possa estar nos / Applications and Services Logs / Microsoft / Windows / Firewall do Windows Com o log de Segurança / Firewall avançado em 2004/2006 da ID de Evento.

**** Editar: ** O seguinte comando pode ser usado para visualizar o ID de Instância 2004 (Uma regra foi adicionada ao firewall ...):

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

***** Editar: ** O comando a seguir é o modo mais rápido de coletar essas informações até Measure-Command -Expression . Você pode modificar o horário de início / fim ou removê-lo completamente, se quiser:

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

E obtém sua saída assim (você pode obter o texto completo da mensagem canalizando-o para algo como 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....

A pergunta atualizada seria a seguinte: Existe uma maneira de obter essas informações e, em vez da coluna Message , obter o Rule Name (canal da Lista de Formatos abaixo)

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:    ...

A saída esperada seria algo assim:

TimeCreated                     Rule Name
-----------                     ---------
4/28/2014 2:42:26 PM            Dummy rule
4/28/2014 11:56:43 AM           Dummy rule
    
por beardedeagle 28.04.2014 / 19:10

1 resposta

2

Já faz pelo menos um dia, então eu suponho que está tudo bem responder a minha própria pergunta (acho que fiz esta pergunta no lugar errado, provavelmente mais adequado para o Stack Overflow):

$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

O resultado parece exatamente o que eu queria:

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

Espero que isso ajude alguém no futuro. Obrigado.

    
por 30.04.2014 / 19:17