我正在编写一些代码来弄清楚如何将值列表分割成更易于管理的块。我想这样做的原因是因为我将有大约 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) 明确指定变量范围(使用前缀 scriptglobal )。即,在函数内部将该变量用作 $script:nextStartingPoint$script:workingList

2) 在调用时更改函数的作用域。即,使用点运算符(“点源”函数)调用函数,即在当前范围内执行它。此代码按预期工作(无需其他更改):

. Get-NextTenItems
Write-ListItems
. Get-NextTenItems
Write-ListItems

也可以看看
help about_scopes

关于powershell - 分割值列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5454134/

10-11 09:05