Como obter nomes de regras de firewall por InstanceID endereçamento de porta específica

2

Estou tentando identificar todas as regras de firewall, que estão endereçando uma porta específica. Aqui está como eu posso fazer isso manualmente:

Get-NetFirewallPortFilter | Where { $_.LocalPort -Eq "RPC" } '
| Format-Table -Property InstanceID

Agora preciso saber o nome de uma regra:

Show-NetFirewallRule | Where { $_.InstanceID –Eq “Netlogon-TCP-RPC-In”} '
| Format-Table -Property DisplayName

Então eu recebo:

DisplayName
-----------
Netlogon Service Authz (RPC)

Eu não quero fazer isso manualmente | Eu tentei seguir o script para obter a lista de nomes:

$InstanceIDs = Get-NetFirewallPortFilter | Where { $_.LocalPort -Eq "RPC" } '
| Format-Table -Property InstanceID
foreach ($InstanceID in $InstanceIDs)
{
    Show-NetFirewallRule | Where { $_.InstanceID –Eq $InstanceID} '
    | Format-Table -Property DisplayName
}

Não tenho nada neste momento.
Descobriu que InstanceID dentro de $InstanceIDs não é uma string, mas não conseguiu convertê-la.

Alguma idéia de como isso funciona?
Obrigado.

    
por Slava Murygin 06.09.2016 / 17:10

1 resposta

2

Seu problema tem algo a ver com $InstanceID tipo (tente $InstanceID.Gettype() em seu script). O próximo snippet de código pode ajudar:

$InstanceIDs =  -split $( 
    Get-NetFirewallPortFilter | 
        Where { $_.LocalPort -Eq "RPC" } | 
            Format-Table -Property InstanceID -HideTableHeaders | 
                Out-String
    )

Show-NetFirewallRule | 
    Where { $_.InstanceID –In $InstanceIDs} |
        ForEach-Object { 
            if ($_.Name) {
                "{0} {1} {2}" -f $_.Name, '==', $_.DisplayName
            }
        }

Observe que $InstanceIDs é uma matriz de strings no snippet de código acima; Além disso, a propriedade $_.Name em Show-NetFirewallRule corresponde a InstanceID one em Get-NetFirewallPortFilter .

    
por 06.09.2016 / 20:18

Tags