Powershell - “Expressões só são permitidas como primeiro elemento de um pipeline”
-
21-12-2019 - |
Pergunta
Alguém poderia me dizer como evitar esse erro nas circunstâncias abaixo?
$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
O que me intriga completamente é que se simplesmente omitir $codegenDir (veja abaixo), o código funciona corretamente.Eu "acho" que entendo o conceito de colocar a expressão em primeiro lugar (à frente de outros itens no pipeline.Mas não tenho certeza de como reorganizar/dividir esse código para que a expressão em questão a linha de comando externa Codegen.exe é o primeiro item no pipeline (e ainda será capaz de passar dados para ele via pipeline).
$PowerShellRepresentation = dir -path $MyMusicFolder -recurse -include *.mp3,*.m4a,*.wma,*.flac,*.ape | select -ExpandProperty FullName | .\codegen.exe -s 10 20 | Out-String | ConvertFrom-Json
Idealmente, seria bom fazer isso usando a menor quantidade de código possível.
Solução
Experimente o seguinte (a única diferença é o &):
$PowerShellRepresentation = dir -path $MyMusicFolder -recurse -include *.mp3,*.m4a,*.wma,*.flac,*.ape | select -ExpandProperty FullName | & $codegenDir\codegen.exe -s 10 20 | Out-String | ConvertFrom-Json
Aqui está um link para um artigo do technet sobre a execução de comandos no PowerShell de diferentes maneiras.