2014-04-12 2 views
4

Не могли бы вы рассказать мне, как избежать этой ошибки в приведенном ниже обстоятельстве?Powershell - «Выражения разрешены только в качестве первого элемента конвейера»

$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 - это первый элемент в трубопроводе (и все еще быть в состоянии передавать данные на него по трубопроводу).

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

в идеале было бы неплохо, чтобы сделать это, используя наименьшее количество кода, как это возможно.

ответ

5

Дайте после выстрела (только разница составляет &):

$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 по-разному.

Смежные вопросы