是否可以在Powershell管道命令中将属性别名为变量?

时间:2016-12-17 02:09:34

标签: powershell

我正在尝试创建以下内容:

Get-ChildItem -path *.txt* -recurse | $a = $_.Name.Length | Format-Table Name, $a

这是一个人为的例子,但我假设我想多次使用$_Name.Length,但在其位置替换$1$a

我如何做到这一点?

1 个答案:

答案 0 :(得分:2)

使用中间计算属性:

Get-ChildItem -Path *.txt* -Recurse | Select-Object *, @{ n='a'; e={ $_.Name.Length } } |  
  Format-Table Name, a

注意:

  • 这使用输出对象上的属性而不是变量来携带感兴趣的值。

  • 这样做会将通过管道传递的对象类型更改为[pscustomobject]类型 - 具有添加的a属性的自定义类型。这可能是也可能不是问题(管道问题Format-Table)。

相比之下,如果你的计划是简单地处理ForEach-Object进程块中的输入对象,你可以简单地在该块中定义一个变量:

Get-ChildItem -Path *.txt* -Recurse | ForEach-Object { 
  $a=$_.Name; $a.Substring(0, $a.IndexOf('.txt')) 
}

(顺便说一下:这个示例命令并不严格需要辅助变量,因为它可以更简洁地表达为:
Get-ChildItem -Path *.txt* -Recurse | ForEach-Object { $_.Name -replace '\.txt.*$' })。