You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell循环中$i的值为何被意外输出?

PowerShell循环中$i值意外输出到控制台的解决方法

执行这段PowerShell代码时,循环里的$i值会意外连续输出0、1、2、3...到控制台,尝试用Out-Null或者改成$i = $i + 1的写法都没解决问题。涉及的代码如下:

$i = 0
foreach ($key in $variationjson.PSObject.Properties.Name) {
    $value = $variationjson.$key * 100
    $series.Points.AddXY("", $value)
    $series.Points[$i].Label = $key
    if ($value -lt 0) {
        $series.Points[$i].Color = [System.Drawing.Color]::Red
    } else {
        $series.Points[$i].Color = [System.Drawing.Color]::Green
    }
    $i++  # 递增索引
}

注:$series来自Windows.Forms.DataVisualization.Charting.Series,$variationjson是类似{title_name:value...}结构的JSON对象。

问题原因

PowerShell默认会输出所有表达式的返回值,$i++属于后置递增操作,它会返回递增前的$i值,每次执行这个语句,返回值就会被输出到控制台。

解决办法

有两种简单有效的方式可以压制这个输出:

  1. 用[void]前缀丢弃返回值
    把$i++改成[void]$i++,直接强制丢弃递增操作的返回值,不会产生控制台输出:
[void]$i++  # 递增索引,压制输出
  1. 通过管道输出到Out-Null
    确保正确使用管道语法,把递增操作的结果导向空:
$i++ | Out-Null  # 递增索引,丢弃输出

如果要改用$i = $i + 1的写法,同样需要压制返回值,比如:

[void]($i = $i + 1)

内容的提问来源于stack exchange,提问作者LegsNotHand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:39:59