¿Hay alguna forma de ver cuándo se creó / habilitó una regla de firewall de Windows usando PowerShell v2 o CMD?

2

He estado hurgando en las redes, pero parece que no puedo encontrar una respuesta definitiva a esta pregunta. Me veo obligado a trabajar con PowerShell v2. Sé que usar el siguiente comando me dará una lista de todas las reglas del firewall:

netsh advfirewall firewall show rule name=all

Sin embargo, me da una salida como esta:

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

Sin embargo, lo que necesito encontrar es la hora exacta en que se creó / habilitó la regla. es posible? O, alternativamente, ¿hay alguna manera de configurar reglas temporales (programadas) de firewall de Windows?

* EDITAR : Parece que realmente no hay una manera de hacer esto con netsh o con un cmdlet powerhshell v2 específico de firewall, sin embargo, creo que mi solución podría estar en / Registros de aplicaciones y servicios / Microsoft / Windows / Firewall de Windows con seguridad avanzada / Registro de cortafuegos bajo ID de evento 2004/2006.

**** Editar: ** El siguiente comando se puede usar para ver la ID de instancia 2004 (se ha agregado una regla al firewall ...):

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

***** Editar: ** El siguiente comando es la forma más rápida de recopilar esta información en lo que Measure-Command -Expressionrespecta. Puede modificar la hora de inicio / finalización o eliminarla por completo si desea:

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

Y obtiene su salida de esta manera (puede obtener el texto completo del mensaje canalizándolo a 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....

La pregunta actualizada sería esta: ¿hay alguna manera de obtener esta información y, en lugar de la Messagecolumna, obtener la Rule Name(lista de formatos a continuación)

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

El resultado esperado sería algo como esto:

TimeCreated                     Rule Name
-----------                     ---------
4/28/2014 2:42:26 PM            Dummy rule
4/28/2014 11:56:43 AM           Dummy rule
Beardedeagle
fuente
Erm, tu segunda edición es la respuesta, ¿verdad? En caso de que esté buscando una manera de ver el tiempo de creación:Get-WinEvent -LogName "Microsoft-Windows-Windows Firewall With Advanced Security/Firewall" | Where-Object {$_.ID -eq "2004"} | Foreach-Object {$_.TimeCreated}
nixda

Respuestas:

2

Ha pasado al menos un día, así que supongo que está bien responder mi propia pregunta (creo que hice esta pregunta en el lugar equivocado, probablemente más adecuado para el desbordamiento de pila):

$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

La salida se ve exactamente como lo que quería:

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

Espero que esto ayude a alguien en el futuro. Gracias.

Beardedeagle
fuente