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处理假/真的方式。