Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell-在函数中设置变量而不是全局设置?_Powershell - Fatal编程技术网

Powershell-在函数中设置变量而不是全局设置?

Powershell-在函数中设置变量而不是全局设置?,powershell,Powershell,我有以下代码: $firstRun = 'True' $file | ForEach-Object { Function Do-Stuff { if ($firstRun = 'True') { write-host "null" $firstRun = 'False' } } Do-Stuff } 当我调用函数“Do Stuff”时,它将第一次运行,无论我将$firstRun='False'

我有以下代码:

$firstRun = 'True'

$file | ForEach-Object {

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

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

当我调用函数“Do Stuff”时,它将第一次运行,无论我将$firstRun='False'放在哪里,它都会返回true并再次初始化if块。我做错了什么?

$firstRun='True'
正在将
$firstRun
设置为字符串
'True'
。如果要查看它是否等于该值,比较运算符为
-eq
,因此
$firstRun-eq'True'

有关比较运算符的详细信息,请运行
获取有关\u比较\u运算符的帮助


感谢您让我们了解输入错误,我将继续使用您的示例,展示如何使用
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 }

有关作用域的更多信息,请查看
获取有关作用域的帮助
$firstRun='True'
正在将
$firstRun
设置为字符串
'True'
。如果要查看它是否等于该值,比较运算符为
-eq
,因此
$firstRun-eq'True'

有关比较运算符的详细信息,请运行
获取有关\u比较\u运算符的帮助


感谢您让我们了解输入错误,我将继续使用您的示例,展示如何使用
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 }

有关作用域的详细信息,请检查
获取有关作用域的帮助
使用
$global:firstRun
而不是函数中的
$firstRun
,以引用全局作用域中的变量。

使用函数中的
$global:firstRun
而不是函数中的
$firstRun
,以引用函数中的变量全局范围。

您的函数不返回任何内容

下面是一个返回值的示例

$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

您的函数不返回任何内容

下面是一个返回值的示例

$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

哎呀,这实际上是我示例代码中的一个输入错误。在我的实际代码中不是这样的……添加$global:修复了我的示例代码中的一个打字错误。这与我实际的代码不同……添加$global:修复了我在
变量范围
上查看文档时遇到的问题。我怀疑这就是你的小毛病发生的地方…酷![grin]看来您的问题与范围有关。//纯粹作为旁白。。。我将用布尔值
$true
的测试替换字符串
true
的所有测试。它对您的代码没有影响,但更适合PoSh处理False/True的方式。请查看
variable scope
上的文档。我怀疑这就是你的小毛病发生的地方…酷![grin]看来您的问题与范围有关。//纯粹作为旁白。。。我将用布尔值
$true
的测试替换字符串
true
的所有测试。它对代码没有影响,但更适合PoSh处理假/真的方式。