Powershell - скрипт застревает в цикле foreach - PullRequest
0 голосов
/ 17 января 2020

С некоторой помощью (также благодаря SO) я придумал скрипт Powershell, который анализирует некоторые правила брандмауэра.

Сценарий составлен так:

$filepath = 'C:\test.txt'
$getfile = Get-Content $filepath -Raw
$zones = $getfile -split ("From .* To .*)"

$zones_groups = foreach ($zone in $zones) {

$groups = $zones -split "^Rule .*" 
foreach ($group in $groups) {
$group = [pscustomobject]@{
Rule_Number = ([regex]"^Rule .*").Match($section).Groups[1].Value
Action = @(([regex]"Rule \d+ Allow|Deny").Matches($section) | ForEach-Object {
$_.Groups.Value[1]
})
Source = @(([regex]"^     IP: .* -> .* Iface").Matches($section) | ForEach-Object {
$_.Groups.Value[1]
})
Destination = @(([regex]"-> .*  ").Matches($section) | ForEach-Object {
$_.Groups.Value[1]
})
Bytes_Packets = @(([regex]"Bytes, Packets:     ").Matches($section) | ForEach-Object {
$_.Groups.Value[1]
})
Usage = @(([regex]"Usage    :").Matches($section) | ForEach-Object {
$_.Groups.Value[1]
})
}
if ($group.Name){
$group
}
}
}

Входной файл делится на «зоны безопасности» (например, LAN или WAN) и разделяет правила вывода для каждой зоны. Например:

From LAN to LAN

Current Size: 9
Save count: 9
Maximum Size: 1100
Policy Elem connCount: 1

Rule 1 Allow Service Any -> Any (Enabled)
IP: Any -> All Management IP Addresses Iface: Any (ffffffff) -> Any (ffffffff)
Logging:    Enabled    Management:    Enabled
Allow Fragmented Packets:    Enabled    Packet Monitor:    Disabled
Flow Reporting:    Disabled
Auto Rule:     Disabled
Users    Included:All, Excluded: None
Schedule:   Always on (on)
Comment: Auto-added management Rule
[...]
Bytes,Packets:    Rx: 1234567890, 1234567890    Tx: 1234567890, 1234567890
Usage:    1234567890
[...]

Rule 2
[...]

From LAN to WAN

Rule 1
[...]

Rule 2
[...]

Проблема, с которой я сталкиваюсь, заключается в том, что при попытке напечатать, например, группы, они работают нормально только для первой группы, но затем сценарий идет бесконечно l oop , но я не могу понять, почему. Я предполагаю, что это может быть что-то, связанное с обоими циклами foreach.

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

Zone name: "From LAN to LAN", Rule 1, Action: Allow, Source: "Any", Destination: "Any", Bytes,Packets:    "Rx: 1234567890, 1234567890    Tx: 1234567890, 1234567890", Usage:    1234567890

Заранее спасибо за вашу помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...