繁体   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