直接,我是编码世界的新手,所以请原谅我的无知。我已经剪切/粘贴了一些代码来尝试自己模拟一些东西,但我有点卡住了。
我有一个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文件,如上所述,我使用这些来填补空白,以确定是否找到规则。
非常感谢任何帮助。
答案 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 }