IF语句powershell中的错误

时间:2014-04-02 01:41:58

标签: powershell

我认为此if声明存在问题。

Function Get-IsFirewallProfileEnabled([string]$profile)
{
    Return [bool](Get-NetFirewallProfile -name "Domain" | Where Enabled -eq "False")
}


# If the firewall for some of the 3 profiles is not enabled
if ( ((Get-IsFirewallProfileEnabled("Domain")) -or (Get-IsFirewallProfileEnabled("Private")) -or (Get-IsFirewallProfileEnabled("Public"))) -eq "False")
{
    Write-Output "Enabling..."
    # Enable Windows firewall for for all (the 3 profiles)
    Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled True
}

无论我是否激活了防火墙,此脚本始终无效。发生了什么事?


# Now this function is dynamic
Function Get-IsFirewallProfileEnabled([string]$profile)
{
    Return [bool](Get-NetFirewallProfile -name $profile | Where Enabled -eq "True")
}


# If the firewall for some of the 3 profiles is not enabled
if ( -not(Get-IsFirewallProfileEnabled("Domain")) -or -not(Get-IsFirewallProfileEnabled("Private")) -or -not(Get-IsFirewallProfileEnabled("Public")) )
{
    Write-Output "Enabling..."
    # Enable Windows firewall for for all (the 3 profiles)
    Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled True
}

2 个答案:

答案 0 :(得分:2)

正如罗伯特所说,您使用的是字符False,而不是$false语句中的布尔if

但是if声明中的逻辑并没有按预期运行:

if(((Boolean) -or (Boolean) -or (Boolean)) -eq $false)

不会在Powershell中产生所需的结果(只有在所有值都为$false时才会执行)。由于if总是在$true上执行,因此只需-not Get-IsFirewallProfileEnabledif((-not(Get-IsFirewallProfileEnabled("Domain")) -or (-not(Get-IsFirewallProfileEnabled("Private")) -or (-not(Get-IsFirewallProfileEnabled("Public"))) 就可以达到预期效果:

if

当任何值为$false时,这将执行{{1}}块。

答案 1 :(得分:1)

您想使用$false而不是"False"

"假"是字符串文字,如果条件((Get-IsFirewallProfileEnabled("Domain")) -or (Get-IsFirewallProfileEnabled("Private")) -or (Get-IsFirewallProfileEnabled("Public")))返回的布尔值为false,则永远不会匹配。

例如:

if ("False") { write-host "true" }

上面的行总是会写出" true"给主人。这是因为非空字符串文字等于$ true。

下面这一行永远不会写出#34; true"对主持人。

if ($false) { write-host "yes" }