簡體   English   中英

使用 powershell 添加本地 windows 防火牆規則的最干凈方法是什么

[英]what's cleanest way in adding local windows firewall rules with powershell

我編寫了以下簡單腳本,該腳本讀取 csv 文件,然后遍歷每個文件並將一些防火牆規則添加到本地計算機。

我想知道這是否是實現這一目標的“最干凈”的方式。 (我知道有 gpo 等)但我正在嘗試更多的 powershell。 我還將嘗試添加規則名稱是否已存在的檢查。

$rulenames = Import-Csv -Path "C:\temp\newrulenames.csv"

ForEach ($name in $rulenames) {
    New-NetFirewallRule -DisplayName $name.DisplayName -Name $name.Name -Enabled $name.Enabled -Profile $name.Profile -Direction $name.Direction -Action $name.Action -Protocol $name.Protocol -Program $name.Program -EdgeTraversalPolicy $name.EdgeTraversalPolicy
}

GPO 似乎確實是通往 go 的方式,但既然您已經意識到這一點並正在嘗試 PowerShell...

在這種情況下,我個人喜歡使用一種叫做 splatting 的東西(參見 about_Splatting),因為在我看來它可以提高腳本的可讀性。 對於您的特定代碼,它可能看起來像這樣;

$rulenames = Import-Csv -Path "C:\temp\newrulenames.csv"
foreach($name in $rulenames)
{
    $ruleProps=@{
        DisplayName = $name.DisplayName
        Name = $name.Name
        Enabled = $name.Enabled
        Profile = $name.Profile
        Direction = $name.Direction
        Action = $name.Action
        Protocol = $name.Protocol
        Program = $name.Program
        EdgeTraversalPolicy = $name.EdgeTraversalPolicy
    }
    New-NetFirewallRule @ruleProps
}

而且,為了運行一些檢查(例如您提到的規則名稱),這可以立即在哈希表中完成。 例如你可以做這樣的事情;

$ruleProps=@{
    DisplayName = $name.DisplayName
    Name = if(Get-NetFireWallRule -Name $name.Name -ErrorAction SilentlyContinue) { "$($name.Name)-2" } else { $name.name }
    Enabled = $name.Enabled
    Profile = $name.Profile
    Direction = $name.Direction
    Action = $name.Action
    Protocol = $name.Protocol
    Program = $name.Program
    EdgeTraversalPolicy = $name.EdgeTraversalPolicy
}

在這個哈希表示例中,如果我們在該特定規則名稱上得到命中,我們會立即運行檢查。 如果它是一個命中,我們在名稱的末尾添加-2 ,否則我們按照最初的意圖命名它。

好的,那是我的午休時間——如果你有任何后續問題,我會回來查看,並仔細檢查我是否有任何拼寫錯誤、草率錯誤或其他任何錯誤,只是想我會給你一個關於你能做什么的想法。

編輯:嗯,我回來得比我想象的要早。 在第二個哈希表示例中,我在示例 1 中提到的很多改進的可讀性實際上都丟失了。 也許不僅僅是一個名稱檢查,但如果您運行多項檢查,肯定會如此。 它很可能仍然有效,但正如我所說的那樣,可讀性可能會受到影響。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM