Powershell转换防火墙策略
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,需求昨天在群里 有人提供了一些防火墙的策略文本,询问如何能够在PowerShell里面转换为对象。文本样例如下所示rule id 39 action permit src-zone "Any"
千家信息网最后更新 2025年12月02日Powershell转换防火墙策略
需求
昨天在群里 有人提供了一些防火墙的策略文本,询问如何能够在PowerShell里面转换为对象。
文本样例如下所示
rule id 39 action permit src-zone "Any" dst-zone "Any" src-addr "Any" dst-addr "Any" service "Any"exitrule id 46 action permit src-zone "Any" dst-zone "Any" src-addr "Any" dst-addr "Any" service "PING"exitrule id 11 action permit src-zone "untrust" dst-zone "trust" src-addr "nqtwgroup" dst-addr "zj-wtqzgroup" service "wtqz_group" name "zj-nqtw-wtqz"exit方案1
因为这个文本看起来很有规律,所以第一个方案是使用 convertfrom-string这个命令,配合自己定义的模板,可以把这些字符串转换为PS对象。
$t=@'rule id {ID*:39} action {action:permit} src-zone {srz_zone:"Any"} dst-zone {dst_zone:"Any"} src-addr {src_addr:"Any"} dst-addr {dst_addr:"Any"} service {service_addr:"Any"} {name:""}exitrule id {ID*:46} action permit src-zone "Any" dst-zone "Any" src-addr "Any" dst-addr "Any" service "PING"exitrule id 11 action permit src-zone "untrust" dst-zone "trust" src-addr "nqtwgroup" dst-addr "zj-wtqzgroup" service "wtqz_group" name "zj-nqtw-wtqz"exit'@ConvertFrom-String -TemplateContent $t -InputObject $st | ft -AutoSize简单的解释一下这个模板是怎么设计的,把整个文本copy过来,在上面开始修改,比如我所需要的模板的每一行的开始需要用*进行标明,大括号{}里面的键值对,键是自己取的名字,后面的值是文本的原先的内容;PS会自动根据规律来生成对应的对象。
具体的命令解释可以参见 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertfrom-string?view=powershell-5.1
结果如下所示:
ID action srz_zone dst_zone src_addr dst_addr service_addr-- ------ -------- -------- -------- -------- ------------39 permit "Any" "Any" "Any" "Any" "Any" 46 permit "Any" "Any" "Any" "Any" "PING" 11 permit "untrust" "trust" "nqtwgroup" "zj-wtqzgroup" "wtqz_group"咋一看好像需要的结果都有了,不过仔细观察 发现文本每一块策略的内容略微有些不太一样,比如说有些rule还多了个name的属性,这样的话如果不统一,一个单一的模板就对不上所以的内容了。
方案2
传统的正则+字符串拼接处理
#原始文本 $st=@"rule id 39 action permit src-zone "Any" dst-zone "Any" src-addr "Any" dst-addr "Any" service "Any"exitrule id 46 action permit src-zone "Any" dst-zone "Any" src-addr "Any" dst-addr "Any" service "PING"exitrule id 11 action permit src-zone "untrust" dst-zone "trust" src-addr "nqtwgroup" dst-addr "zj-wtqzgroup" service "wtqz_group" name "zj-nqtw-wtqz"exit"@$r=@()#正则进行多行匹配,获取每一个rule的块$st | Select-String '(?smi)rule id [1-9]{2}.*?exit' -AllMatches | Foreach {$_.Matches} | Foreach { #替代一下空格和换行符,这样更规整,方便处理 $temp=$_.value -replace 'rule id','rule-id' $temp=$temp -replace 'exit', '' $temp=$temp -replace '\r\n',',' $list=$temp.split(',') $object = New-Object -TypeName PSObject try{ foreach($item in $list){ $c=$item.trim().split() $name=$c[0] $value=$c[1] $object | Add-Member -NotePropertyName $name -NotePropertyValue $value -ErrorAction SilentlyContinue }}catch{} $r+=$object}$r | select rule-id,action,src-zone,dst-zone,src-addr,dst-addr,service,name | ft最后结果如下所示,成功获取了所以的信息
rule-id action src-zone dst-zone src-addr dst-addr service name ------- ------ -------- -------- -------- -------- ------- ---- 39 permit "Any" "Any" "Any" "Any" "Any" 46 permit "Any" "Any" "Any" "Any" "PING" 11 permit "untrust" "trust" "nqtwgroup" "zj-wtqzgroup" "wtqz_group" "zj-nqtw-wtqz"
文本
模板
内容
对象
方案
结果
策略
命令
字符
字符串
正则
规律
处理
解释
防火墙
防火
原始
规整
成功
这样的话
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
赛灏互联网科技有限公司
网络安全杯总决赛
镇江市网络安全宣传周
服务器管理工具有
网络安全工作室布置
学校网络安全方面的建议
网络安全监测预警应用研究
app和软件开发
镇江公司网络安全准入控制哪家好
天择网络技术有限公司预授权
滴滴打车网络安全管理制度
天鸿网络安全儿童画
软件开发过程中缺陷
英国网络安全中心
服务器搭建https代理
数据库 模糊匹配%
数据库时区是哪的
计算机网络技术科单词
国外网络安全和战略利益
建立研究数据库意义
数据库的数据项是单元格
创建oracle数据库实例
福建网络安全备案
mysql禁止修改数据库
激活电信卡 服务器异常
数据库推销员
数据库在什么环境下部署
网络安全面临的威胁分哪些等级
手机方舟服务器退出找不到了
华为云怎么访问宝塔服务器