我正在编写一些代码来弄清楚如何将值列表分割成更易于管理的块。我想这样做的原因是因为我将有大约 100,000 个实时值,并且我想将失败风险降至最低。
$wholeList = 1..100
$nextStartingPoint
$workingList
function Get-NextTenItems()
{
$workingList = (1+$nextStartingPoint)..(10+$nextStartingPoint)
$nextStartingPoint += 10
Write-Host "inside Get-NextTenItems"
write-host "Next StartingPoint: $nextStartingPoint"
$workingList
Write-Host "exiting Get-NextTenItems"
}
function Write-ListItems()
{
foreach ($li in $workingList)
{
Write-Host $li
}
}
Get-NextTenItems
Write-ListItems
Get-NextTenItems
Write-ListItems
我在 PowerGUI 调试器中运行了代码,我注意到当我退出 Get-NextTenItems 函数时,我的 $nextStartingPoint 正在重置为 0。
为什么会发生这种情况,我该如何预防?
我是否也应该假设 $workingList 也发生了同样的事情?
最佳答案
在您的示例中 Get-NextTenItems
更改其局部变量。有多种方法可以解决此问题,以下是其中两种:
1) 明确指定变量范围(使用前缀 script
或 global
)。即,在函数内部将该变量用作 $script:nextStartingPoint
、 $script:workingList
。
2) 在调用时更改函数的作用域。即,使用点运算符(“点源”函数)调用函数,即在当前范围内执行它。此代码按预期工作(无需其他更改):
. Get-NextTenItems
Write-ListItems
. Get-NextTenItems
Write-ListItems
也可以看看
help about_scopes
关于powershell - 分割值列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5454134/