Como faço para escapar corretamente das aspas no -param
valor na linha de comando a seguir?
$cmd="\\server\toto.exe -batch=B -param="sort1;parmtxt='Security ID=1234'""
Invoke-Expression $cmd
Isso, claro, falha. Tentei escapar das aspas (simples e duplas) usando o caractere de escape `e fiz várias combinações, mas nada está funcionando.
powershell-2.0
Eetawil
fonte
fonte
$someCommandStringWithDoubleQuotes | cmd
. Na verdade, isso funciona a partir de scripts do PowerShell (por exemplo, invocar CMake (que requer aspas duplas (caso contrário, falhará silenciosamente)). Uma alternativa ao CMD é bash.exe ( MinGW ) - mas pode ser muito, muito lento para iniciar em algumas circunstâncias.Respostas:
Escapar de parâmetros como esse geralmente é fonte de frustração e parece uma perda de tempo. Vejo que você está na v2, então sugiro usar uma técnica que Joel "Jaykul" Bennet postou no blog há algum tempo .
Resumindo: você acabou de enrolar sua corda com @ '...' @:
(Lembre-se de que presumi quais aspas são necessárias e de quais coisas você estava tentando escapar.) Se quiser trabalhar com a saída, você pode adicionar a
-NoNewWindow
opção.BTW: esta era uma questão tão importante que desde a v3 você pode usar
--%
para impedir o analisador PowerShell de fazer qualquer coisa com seus parâmetros:... deve funcionar bem lá (com a mesma suposição).
fonte
@"
e em seu"@
lugar.Usar o crase (`) funciona bem para mim se eu colocá-los nos seguintes lugares:
$cmd
retorna como:É isso que você estava procurando?
O erro que o PowerShell me deu se refere a um token inesperado 'sort1', e é assim que eu determinei onde colocar os crases.
A sintaxe @ '...' @ é chamada de "string here" e retornará exatamente o que foi inserido. Você também pode usá-los para preencher variáveis da seguinte maneira:
Os símbolos de abertura e fechamento devem estar em suas próprias linhas, conforme mostrado acima.
fonte
Invoke-Expression
remove as aspas duplas de$cmd
quando é invocado? Ou como você usou$cmd
sem usarInvoke-Expression
?Eu me encontrei em uma situação semelhante hoje ao tentar executar um comando por meio de um módulo Node.js.
Eu estava usando o PowerShell e tentando executar:
Mas com os símbolos extras, o PowerShell estava destruindo os argumentos. Para corrigir, marquei aspas duplas com escape:
fonte
"['`"][^'`"]['`"]"
funciona… mas'[`'"][^`'"][`'"]'
não funciona! estava me deixando louco