向PowerShell数组添加项目,并批量处理数组

问题描述 投票:0回答:2

我有一个带字符串的数组:

$Names = @("Name1","Name2","Name3","Name4","Name5","Name6","Name7","Name8","Name9","Name10")

我想做以下事情:

我想要一个 Skip 变量,我可以在其中将数组切成块,并希望在中间间隔 5 秒打印我的名字。

我已经通过执行以下操作进行了尝试:

$BatchSkip = 5 


for($i = 0; $i -lt $names.Count; $i += $BatchSkip){
    $tempArray = $names |Select-Object -First $BatchSkip
    foreach ($name in $tempArray)
    {
        write-host $name 
    } Start-Sleep -Seconds 5
}

但这会不断打印相同的名称。我的代码中缺少什么因素来实现它在我的数组上“循环”?

arrays algorithm powershell
2个回答
0
投票

如果我正确理解你想要实现的目标,那么这应该有效:

$Names = @("Name1","Name2","Name3","Name4","Name5","Name6","Name7","Name8","Name9","Name10")

$BatchSkip = 5

for($i = 0; $i -lt $names.Count; $i += $BatchSkip){
    $tempArray = $names[$i..($i+$BatchSkip-1)]
    foreach ($name in $tempArray)
    {
        write-host $name 
    } Start-Sleep -Seconds 5
}

您的

tempArray
不包含正确的
names
值。


0
投票

您永远不会在循环中增加

-Skip
的值。因此它总是返回相同的值。

另外:您需要使用

-Index
,而不是
-Skip

仅使用
-Skip
cmdlet...好吧,跳过前 N 项。但如果您有 3000 个项目,并且您
-Skip
5 个,那么它仍然会处理其他 2995 个。

使用

-Index
,否则您可以告诉
Select-Object
您想要的值的确切范围

有一些脏代码

$Names = 'Name1', 'Name2', 'Name3', 'Name4', 'Name5', 'Name6', 'Name7', 'Name8', 'Name9', 'Name10'
$BatchSkip = 5 

for ($Index = 0; $Index -lt $Names.Count; $Index += $BatchSkip) { 
        
    $Names | Select-Object -Index ($Index..($Index + $BatchSkip - 1)) 
        
    Start-Sleep -Seconds 1

}
© www.soinside.com 2019 - 2024. All rights reserved.