小编Wha*_*m I的帖子

Powershell Foreach-Object -Parallel 如何更改循环外变量的值(跟踪进度)

此代码打印一个简单的进程,一次只做一件事:

$files = 1..100
$i = 0
$files | Foreach-Object {
    $progress = ("#" * $i)
    Write-Host  "`r$progress" -NoNewLine
    $i ++
    Start-Sleep -s 0.1
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我想同时并行执行两件事,我无法输出进度,因为我无法更改并行循环之外的变量。这并没有完成所需的操作:

$files = 1..100
$i = 0
$files | Foreach-Object -ThrottleLimit 2 -Parallel {
    $progress = ("#" * $i)
    Write-Host  "`r$progress" -NoNewLine
    $i ++
    Start-Sleep -s 0.1
}
Run Code Online (Sandbox Code Playgroud)

我找不到一个好的解决方案来访问外部变量,不仅可以使用 $Using 读取它,还可以更改它。这在 Powershell 7 中可能吗?

powershell foreach-object

5
推荐指数
3
解决办法
8541
查看次数

标签 统计

foreach-object ×1

powershell ×1