如何使用Powershell使用if语句处理某些功能?

时间:2019-06-12 11:40:04

标签: function powershell

我想用if语句处理我的函数。我尝试了这段代码,但是即使我的文件包含git diff,它也总是返回$End_F的值"BB"。任何人都可以帮忙。

我寻找的“ @ AB @ CD”文件就是这样。

"@AB@CD"

Config
;     Date="2019/06/12" Time="10:25:02" UTC="0"
;
Number
    123456@AB@CD

1 个答案:

答案 0 :(得分:2)

一些事情需要纠正,以使您的代码按预期工作。

Function AUTO_SELECT
{
    $AT = "AA"
    $AT
}

Function END_Proc
{
    $End_F = "BB"
    $End_F
}

Function G_BEGIN
{
    $begin = "Ready"
    $begin
}

Function G_END
{
    $ending = "Stop"
    $ending
}

$Get_SKU = Get-Content '.\Number.txt' | Where-Object {$_.Contains("@AB@CD")}
$Get_SKU
if($Get_SKU)
{   
    $ML = "1"
    AUTO_SELECT
}
else
{   
    END_Proc
}

$FE_UB = "4"
if($ML -eq "1" -and $FE_UB)
{ 
    G_BEGIN
}

if($ML -eq "1" -and !$FE_UB)
{ 
    G_END
}

else
{
    END_Proc

}

更改说明:

  • $Get_SKU将存储$null或字符串,具体取决于Where-Object条件是否找到匹配项。结果,我换了if ($Get_SKU -eq $true)到了if ($Get_SKU)。如果$true不是$Get_SKU,则此更改将导致$null评估。
  • 我将这些功能移到了脚本的顶部,因为PowerShell会从上至下执行代码。它不是首先编译的。因此,您不能进行函数调用 之前 。该函数已被读入内存并已定义。
  • if ($ML = "1" -and $FE_UB -eq $true)已更新为if ($ML -eq "1" -and $FE_UB),因为变量分配variable = value不应在if语句条件下发生。如果要比较值,则此处的正确运算符为-eq。关于$FE_UB,与$Get_SKU更改中的解释相同。
  • $FE_UB -eq $false已更改为!$FE_UB-eq $false运算符的删除基于对$Get_SKU的解释。 !字符用于有效地-not结果。这会将值转换为布尔值,然后输出相反的布尔响应。例如,!"string data"将输出$False!$null将输出$True。我希望这部分很清楚。

进一步的洞察力:

  • $True$False评估

    • 您几乎可以使任何返回布尔值的值。三种方式包括使用强制转换,-as运算符和!。还有许多其他方法和技巧可以做到这一点。

      • 铸造:

        $get_sku = "data"
        [boolean]$get_sku
        True
        
      • -as运算符:

        $get_sku = $null
        $get_sku -as [boolean]
        False
        
      • !一起玩:

        $get_sku = 4
        !$get_sku
        False
        !!$get_sku
        True