如何通过Powershell检查防火墙规则是否存在,如果没有,请暂停脚本直到它出现?

时间:2017-10-10 11:43:28

标签: powershell azure rule

直接,我是编码世界的新手,所以请原谅我的无知。我已经剪切/粘贴了一些代码来尝试自己模拟一些东西,但我有点卡住了。

我有一个Powershell脚本,通过自定义脚本扩展运行Azure ARM模板来安装防火墙规则,我还有另一个.ps1脚本,我希望只有在启用/安装防火墙规则时才能运行。

我发现您可以通过自定义脚本扩展来部署2x ps1脚本,但它们都同时运行,因此我希望第二个只在检测到防火墙规则后继续/启动。

以下是我到目前为止测试规则是否存在的原因:

$text = 'Hello World'
$r = Get-NetFirewallRule -DisplayName 'MY FIREWALL RULE NAME' -ErrorAction SilentlyContinue ; if ($r) {$text | Set-Content 'c:/temp/found.txt'} else {$text | Set-Content 'c:/temp/not-found.txt'}

#This sections is the continuation of the script when the rule has been found
$text | Set-Content 'c:/temp/helloword1.txt'

所以我在想的是,如果它没有找到规则,那么暂停/重复直到它完成,一旦找到规则,然后继续/启动脚本。

忽略我的helloworld / found / not-found.txt文件,如上所述,我使用这些来填补空白,以确定是否找到规则。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

为什么不是这样的(EDITED):

while (!($r = Get-NetFirewallRule -DisplayName 'MY FIREWALL RULE NAME' -ErrorAction Ignore))
{ Start-Sleep -s 1 }

答案 1 :(得分:1)

如果您只是想要睡觉,直到找到特定规则,您可以使用:

while (-not (Get-NetFirewallRule -DisplayName $RuleName -EA Silent)) { sleep 1 }