【发布时间】:2020-10-06 13:17:59
【问题描述】:
我在 foreach 块外部定义了一个 int 变量,试图在块内设置它并在外部访问它。但是,当我运行此脚本时,出现以下错误。这似乎是一个基本的东西,但我是 PowerShell 的新手。
错误:“++”运算符仅适用于变量或属性。
脚本:
[int]$ErrorCount = 0
1..3 | ForEach-Object -ThrottleLimit 40 -Parallel {
$using:ErrorCount++
}
$FinishMessage = "Errors: {0}" -f $ErrorCount
echo $FinishMessage
【问题讨论】:
-
你真的需要
using吗?我认为这是导致问题的原因...... -
我认为,为了避免范围问题
using关键字应该在Parallel语句中使用来访问语句之外的变量。但是,如果没有using,每个线程的计数器都会增加到 1(保持为 1 - 这是另一个问题)并且仍然显示为 0, -
似乎是一个更严重的多线程问题,因为
$errorCount不是线程安全地共享写入。您能否在 Foreach ScriptBlock 结束时返回错误计数?1..3| % -parallel {sleep 5;return $_}| % {$ErrorCount += $_ }
标签: powershell powershell-7.0 foreach-object