Cuando PowerShell ve un comando a partir de una cadena que sólo evalúa la cadena, es decir, que por lo general hace eco a la pantalla, por ejemplo:
PS> "Hello World"
Hello World
Si desea PowerShell para interpretar la cadena como un nombre de comando a continuación, utilizar el operador de llamada (&) de esta manera:
PS> & 'C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe'
Después de que es probable que sólo necesita cotizar pares parámetro/argumento de que conta en espacios y/o caracteres de comillas. Cuando invoca un archivo EXE como este con argumentos complejos de línea de comandos, generalmente es muy útil tener una herramienta que le muestre cómo PowerShell envía los argumentos al archivo EXE. El PowerShell Community Extensions tiene una herramienta de este tipo. Se llama ecoargs. Usted acaba de cambiar el archivo EXE con echoargs - dejando todos los argumentos en su lugar, y le mostrará cómo el archivo EXE recibirá los argumentos, por ejemplo:
PS> echoargs -verb:sync -source:dbfullsql="Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;" -dest:dbfullsql="Data Source=.\mydestsource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;",computername=10.10.10.10,username=administrator,password=adminpass
Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data>
Arg 2 is <Source=mysource;Integrated>
Arg 3 is <Security=false;User>
Arg 4 is <ID=sa;Pwd=sapass!;Database=mydb;>
Arg 5 is <-dest:dbfullsql=Data>
Arg 6 is <Source=.\mydestsource;Integrated>
Arg 7 is <Security=false;User>
Arg 8 is <ID=sa;Pwd=sapass!;Database=mydb; computername=10.10.10.10 username=administrator password=adminpass>
Usando echoargs se puede experimentar hasta que salga bien , por ejemplo:
PS> echoargs -verb:sync "-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;"
Arg 0 is <-verb:sync>
Arg 1 is <-source:dbfullsql=Data Source=mysource;Integrated Security=false;User ID=sa;Pwd=sapass!;Database=mydb;>
Resulta que estaba intentando demasiado antes para mantener las comillas dobles alrededor de la cadena de conexión. Aparentemente eso no es necesario porque incluso cmd.exe los eliminará.
Por cierto, felicitaciones al equipo de PowerShell. Fueron bastante útiles al mostrarme el encantamiento específico de las comillas dobles & para obtener el resultado deseado, si era necesario mantener las comillas dobles internas en su lugar. :-) También se dan cuenta de que esta es un área de dolor, pero se deben a la cantidad de personas afectadas por un problema en particular. Si esto es un área de dolor para usted, vote por favor este PowerShell bug submission.
Para obtener más información sobre cómo analiza PowerShell, echa un vistazo a mi Effective PowerShell blog series - específicamente item 10 - "Understanding PowerShell Parsing Modes"
ACTUALIZACIÓN 4/4/2012: Esta situación se vuelve mucho más fácil de manejar en PowerShell V3. Vea esto blog post for details.
Véase también http://stackoverflow.com/questions/6224638/powershell-call-msbuild-with-nested-quotation-marks/8468690#8468690 –
Si se refiere a litteraly " en PowerShell "(que interpreto que significa" dentro de un indicador de PowerShell existente), entonces el siguiente ejemplo se puede adaptar fácilmente a sus necesidades. Tenga en cuenta que no hay necesidad de separar el comando de sus parámetros: '# Mostrar cualquier disponible actualizaciones para paquetes npm instalados globalmente utilizando la herramienta npm-check-updates [cadena] $ cmd = 'ncu -g' Write-Verbose -Message $ cmd Invoke-Command -ScriptBlock ([ScriptBlock] :: Create ($ cmd)) ' – user3785010
No tengo idea de cómo usar" mini-markdown "para editar el comentario anterior para hacer que cada línea del código aparecen en una línea separada y el límite de tiempo de 5 minutos para editar el comentario original ha expirado. Si alguien sabe ahora usar "mini-Markdown" para solucionar el problema, volveré a publicar en una forma más legible. La primera línea debe ser la siguiente: herramienta # Mostrar las actualizaciones disponibles de los paquetes de la NGP instalados a nivel mundial utilizando el NPM-Registro de cambios – user3785010