【问题标题】:Is it possible to increment a PowerShell pipe variable? [duplicate]是否可以增加 PowerShell 管道变量? [复制]
【发布时间】:2018-12-29 23:01:30
【问题描述】:

我试图在一条记录通过管道时对其进行计数。我的表情是这样的:

$x=28 
gci | Select-Object basename, fullname, @{name='x'; Expression={($x--)}}

我明白了:

BaseName FullName                x
-------- --------                -
aaoeu    C:\Users\m\x\aaoeu.txt 28
aue      C:\Users\m\x\aue.txt   28
xx       C:\Users\m\x\xx.txt    28

我已经尝试过 Add-Member 而不是上面的 @ 表达式,并且做了同样的事情 - x 不会改变每个对象的值。

我的最终目标是生成一个 CSV 文件,以便在 gci 发出记录时无法让我的变量更改值时,我可以使用 Write-Host 遍历 Get-ChildItem (gci) 输出。

我是否错过了在 Select-Object 或 Add-Member 中增加变量的正确语法,还是无法做到这一点?

【问题讨论】:

  • Expression={ (([ref]$x).Value--) }
  • @PetSerAl 谢谢!尽管我不清楚发生了什么,但这很有效。当我希望子例程中的操作影响子例程的全局变量时,我会想到“按引用”调用。在这种情况下,我没有看到“子程序”边界在哪里。
  • Select-Object 在单独的范围内调用 Expression。

标签: powershell


【解决方案1】:

解决方案 2(使用全局变量):

$global:x=28 
Get-ChildItem | select-object basename,fullname,@{name='x'; Expression={($global:x--)}}

短版:

$global:x=28 
gci | select basename,fullname,@{N='x'; E={($global:x--)}}

【讨论】:

    【解决方案2】:

    解决方案 1(foreach 可以找到变量):

    $x=28 
    gci | %{ $x++; [pscustomobject]@{BaseName=$_.BaseName; FullName=$_.FullName; x=$x}}
    

    【讨论】:

      【解决方案3】:

      解决方案3(声明进入循环):

      gci | foreach -Begin {$x=28 } -process { $x++; [pscustomobject]@{BaseName=$_.BaseName; FullName=$_.FullName; x=$x}}
      

      【讨论】:

        猜你喜欢
        • 2015-06-21
        • 1970-01-01
        • 2022-11-24
        • 2017-08-01
        • 2016-09-03
        • 1970-01-01
        • 2013-08-29
        • 2023-01-27
        相关资源
        最近更新 更多