Powershell - установка переменной внутри функции, а не ее глобальная настройка? - PullRequest
1 голос
/ 21 января 2020

У меня есть следующий код:

$firstRun = 'True'

$file | ForEach-Object {

    Function Do-Stuff {
        if ($firstRun = 'True') {

            write-host "null"
            $firstRun = 'False'
        }
    }
Do-Stuff
}

Когда я вызываю функцию 'Do-Stuff', она запускается в первый раз, независимо от того, где я размещаю $ firstRun = 'False' , возвращает true и снова инициирует блок if. Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 21 января 2020

$firstRun = 'True' устанавливает $firstRun в строку 'True'. Если вы хотите узнать, равно ли оно этому значению, оператор сравнения равен -eq, поэтому $firstRun -eq 'True'

Для получения дополнительной информации об операторах сравнения запустите Get-Help about_comparison_operators


Спасибо, что дали мы знаем о опечатке, я буду придерживаться вашего примера, чтобы показать, как вы можете добавить префикс к своим переменным global:, чтобы получить необходимую область видимости переменных.

$firstRun = 'True'
Function Do-Stuff {
    if ($global:firstRun  -eq 'True') {

        Write-Host "True"
        $global:firstRun  = 'False'
    }
    else {
        Write-Host "False"
    }
}

$file | ForEach-Object { Do-Stuff }

Для получения дополнительной информации о областях проверьте Get-Help about_scopes.

2 голосов
/ 21 января 2020

Используйте $global:firstRun вместо $firstRun внутри функции для ссылки на переменную в глобальной области видимости.

0 голосов
/ 21 января 2020

Ваша функция не возвращает что-либо.

Вот пример с возвращаемым значением.

$value1 = 3
$value2 = 5
function Calculate-Something ($number1,$number2)
{
   $result = $number1 + $number2
   return $result
}
$value3 = Calculate-Something -number1 $value1 -number2 $value2
Write-Host $value3

Этот пример кода суммирует value1 и value2 и записывает результат:

8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...