Powershell - "表达式只允许作为管道的第一个元素"

时间:2014-04-12 18:21:42

标签: powershell powershell-v3.0 powershell-v4.0

有人可以告诉我如何在以下情况下避免这个错误吗?

$codegenDir = "Z:\Desktop\Song-Renamer"
$PowerShellRepresentation = dir -path $MyMusicFolder -recurse -include *.mp3,*.m4a,*.wma,*.flac,*.ape | select -ExpandProperty FullName | $codegenDir\codegen.exe -s 10 20 | Out-String | ConvertFrom-Json

让我感到困惑的是,如果只是省略$ codegenDir(见下文),代码就能正常运行。我“想”我理解将表达式放在第一位的概念(在管道中的其他项目之前。但我不确定如何重新排列/拆分此代码,因此有问题的表达式 Codegen.exe外部命令行< / em>是管道中的第一个项目(并且仍然能够通过管道将数据传递给它)。

$PowerShellRepresentation = dir -path $MyMusicFolder -recurse -include *.mp3,*.m4a,*.wma,*.flac,*.ape | select -ExpandProperty FullName | .\codegen.exe -s 10 20 | Out-String | ConvertFrom-Json

理想情况下,使用尽可能少的代码执行此操作会很好。

1 个答案:

答案 0 :(得分:6)

给出以下内容(唯一的区别是&amp;):

$PowerShellRepresentation = dir -path $MyMusicFolder -recurse -include *.mp3,*.m4a,*.wma,*.flac,*.ape | select -ExpandProperty FullName | & $codegenDir\codegen.exe -s 10 20 | Out-String | ConvertFrom-Json

这里有a link一篇关于以不同方式在powershell中执行命令的technet文章。