windows - 用powershell添加本地Windows防火墙规则的最干净的方法是什么
问题描述
我编写了以下简单的脚本,它读取一个 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 似乎是真正可行的方法,但既然您已经意识到这一点并正在尝试 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 中提到的很多改进的可读性实际上都丢失了。也许不仅仅是一个名称检查,但如果您运行多项检查,肯定会如此。它很可能仍然有效,但正如我所说的那样,可读性可能会受到影响。
推荐阅读
- github - 无法更新 github 页面
- swift - 我需要知道如何使用 AVCaptureManualExposureBrackedStillImageSettings 手动设置曝光时间?
- selenium - 使用 selenium 在 UI 中实际上没有执行拖放操作
- xml - Perl 如何从 XML 文件中删除标签?
- android - Unity需要接入华为HMS SDK,包名必须以.HUAWEI结尾
- bash - 当该字符串是bash命令时,如何替换文件中的字符串
- javascript - 为什么在递归中使用 let replace var 更好?
- css - CSS 样式未按预期应用(Haskell 项目)
- c++ - 调用成员函数时,数据成员会自动更改自身
- flutter - flutter build apk 命令抛出未处理的异常错误