首页 > 解决方案 > 如何使用 Powershell 处理 if 语句的某些功能?

问题描述

我想用 if 语句处理我的函数。我尝试了这段代码,但它总是返回我的值,$End_F甚至"BB"我的文件包含"@AB@CD". 任何人都可以帮忙,拜托。

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

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

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


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

Function END_Proc
{
$End_F = "BB"
$End_F
}
$FE_UB = "4"
if($ML = "1" -and $FE_UB -eq $true)
{ 
    G_BEGIN
}

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

else
{
    END_Proc

    }

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

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

标签: functionpowershell

解决方案


有些事情需要更正以使您的代码按预期工作。

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). 如果is not ,此更改将导致$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
        

推荐阅读