中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Powershell轉換防火墻策略

發布時間:2020-07-27 03:31:17 來源:網絡 閱讀:1521 作者:beanxyz 欄目:系統運維

需求

昨天在群里 有人提供了一些防火墻的策略文本,詢問如何能夠在PowerShell里面轉換為對象。

文本樣例如下所示

rule id 39
  action permit
  src-zone "Any"
  dst-zone "Any"
  src-addr "Any"
  dst-addr "Any"
  service "Any"
exit
rule id 46
  action permit
  src-zone "Any"
  dst-zone "Any"
  src-addr "Any"
  dst-addr "Any"
  service "PING"
exit
rule 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:""}
exit
rule id {ID*:46}
  action permit
  src-zone "Any"
  dst-zone "Any"
  src-addr "Any"
  dst-addr "Any"
  service "PING"

exit
rule 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"
exit
rule id 46
  action permit
  src-zone "Any"
  dst-zone "Any"
  src-addr "Any"
  dst-addr "Any"
  service "PING"
exit
rule 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"
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平远县| 白朗县| 榆林市| 孟连| 岐山县| 鹿邑县| 英德市| 潜江市| 抚顺市| 富源县| 石狮市| 瑞安市| 静宁县| 赣榆县| 武宣县| 遵化市| 荆州市| 广南县| 白银市| 寻乌县| 安阳县| 临高县| 昂仁县| 印江| 永修县| 南充市| 新龙县| 和田县| 广水市| 安顺市| 高清| 武川县| 三江| 新闻| 临高县| 澄迈县| 龙川县| 锡林郭勒盟| 祁门县| 冀州市| 长武县|