Как обработать некоторую функцию с оператором if, используя Powershell? - PullRequest
0 голосов
/ 12 июня 2019

Я хочу обработать свою функцию с помощью оператора 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
}

1 Ответ

2 голосов
/ 12 июня 2019

Некоторые вещи необходимо исправить, чтобы ваш код работал должным образом.

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
        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...