¿Cómo ejecuta el siguiente comando en PowerShell?
C: \ Archivos de programa \ IIS \ Microsoft Web Deploy \ msdeploy.exe -verb: sync -source: dbfullsql = "Fuente de datos = mysource; Seguridad integrada = false; ID de usuario = sa; Pwd = sapass!; Base de datos = mydb;" -dest: dbfullsql = "Fuente de datos =. \ mydestsource; Seguridad integrada = falso; ID de usuario = sa; Pwd = sapass!; Base de datos = mydb;", nombre de equipo = 10.10.10.10, nombre de usuario = administrador, contraseña = adminpass "
powershell
parameters
quotes
exe
spaces
Furgonetas
fuente
fuente
# Show any available updates to globally installed npm packages using the npm-check-updates tool [string] $cmd = 'ncu -g' Write-Verbose -Message $cmd Invoke-Command -ScriptBlock ([ScriptBlock]::Create($cmd))
Respuestas:
Cuando PowerShell ve un comando que comienza con una cadena, solo evalúa la cadena, es decir, generalmente la muestra en la pantalla, por ejemplo:
Si desea que PowerShell interprete la cadena como un nombre de comando, use el operador de llamada (&) de la siguiente manera:
Después de eso, probablemente solo necesite citar pares de parámetro / argumento que contengan espacios y / o caracteres de cita. Cuando invocas un archivo EXE como este con argumentos complejos de línea de comandos, generalmente es muy útil tener una herramienta que te muestre cómo PowerShell envía los argumentos al archivo EXE. La Comunidad extensiones de PowerShell tiene una herramienta de este tipo. Se llama echoargs. Simplemente reemplace 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:
Usando echoargs puedes experimentar hasta que lo hagas bien, por ejemplo:
Resulta que estaba intentando demasiado antes 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 muy útiles para mostrarme el encantamiento específico de comillas simples y dobles para obtener el resultado deseado, si necesita mantener las comillas dobles internas en su lugar. :-) También se dan cuenta de que esta es un área de dolor, pero están motivados por la cantidad de personas afectadas por un problema en particular. Si esta es un área de dolor para usted, vote por favor envío de errores de PowerShell .
Para obtener más información sobre cómo se analiza PowerShell, consulte mi serie de blogs Efectivo de PowerShell , específicamente el artículo 10: "Descripción de los modos de análisis de PowerShell"
ACTUALIZACIÓN 4/4/2012: esta situación se vuelve mucho más fácil de manejar en PowerShell V3. Vea esta publicación de blog para más detalles .
fuente
echoargs
da una indicación de cómo PowerShell está interpretando los argumentos antes de pasarlos al EXE.& 'C:\Program Files\Sublime Text 3\sublime_text.exe'
directamente en la consola y está funcionando, pero en un archivo por lotes aparece un error que dice "y fue inesperado en este momento".START C:\"Program Files"\"Sublime Text 3"\sublime_text.exe
Solo agrega el operador & antes del nombre .exe. Aquí hay un comando para instalar SQL Server Express en modo silencio:
fuente
Tenía espacios tanto en el comando como en los parámetros, y esto es lo que funcionó para mí:
Básicamente es lo mismo que la respuesta de Akira, pero esto funciona si construyes dinámicamente tus parámetros de comando y los pones en una variable.
fuente
EchoArgs
Esto funcionó para mí:
Simplemente coloque rutas o cadenas de conexión en un elemento de matriz y divida las otras cosas en un elemento de matriz cada una.
Hay muchas otras opciones aquí: https://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx
Microsoft debería hacerlo de esta manera más simple y compatible con la sintaxis del símbolo del sistema.
fuente
Existen bastantes métodos que puede usar para hacerlo.
Método 1
Un simple ejemplo
En tu caso
En este método, se separan todos y cada uno de los parámetros de ArgumentList mediante comas.
Método 2
Ejemplo simple
En tu caso
Este método es más fácil ya que permite escribir sus parámetros de una vez.
Referencias: Powershell / Scripting / Start-Process
fuente
Ver esta página: https://slai.github.io/posts/powershell-and-external-commands-done-right/
Resumen usando vshadow como el ejecutable externo:
fuente
En caso de que alguien se pregunte cómo ejecutar un archivo ejecutable:
.....>. \ file.exe
o
......> full \ path \ to \ file.exe
fuente
Pude hacer que mi comando similar funcionara usando el siguiente enfoque:
Para su comando (no es que ayude mucho ahora), las cosas se verían así:
Los puntos clave son:
No intenté agregar la parte "nombre del equipo" al final de la línea de comando, pero espero que esta información ayude a otros que la lean ahora a acercarse al resultado deseado.
fuente
Nueva cadena de escape en PowerShell V3, citada en Nuevas características del lenguaje V3 :
La web está llena de líneas de comando escritas para Cmd.exe. Estas líneas de comando funcionan con bastante frecuencia en PowerShell, pero cuando incluyen ciertos caracteres, por ejemplo, un punto y coma (;), un signo de dólar ($) o llaves, debe realizar algunos cambios, probablemente agregando algunas comillas. Esto parecía ser la fuente de muchos dolores de cabeza menores.
Para ayudar a abordar este escenario, agregamos una nueva forma de "escapar" del análisis de las líneas de comando. Si usa un parámetro mágico -%, detenemos nuestro análisis normal de su línea de comando y cambiamos a algo mucho más simple. No coincidimos con las citas. No nos detenemos en punto y coma. No expandimos las variables de PowerShell. Expandimos las variables de entorno si usa la sintaxis Cmd.exe (por ejemplo,% TEMP%). Aparte de eso, los argumentos hasta el final de la línea (o tubería, si está canalizando) se pasan como están. Aquí hay un ejemplo:
fuente
Puedes usar:
La clave a tener en cuenta aquí es que FilePath debe estar en la posición 0, de acuerdo con la Guía de ayuda. Para invocar la guía de ayuda para un comando, simplemente escriba
Get-Help <Commandlet-name> -Detailed
. En este caso, lo esGet-Help Start-Process -Detailed
.fuente
Intenté todas las sugerencias pero aún no pude ejecutar
msiexec.exe
con parámetros que contenían espacios. Entonces mi solución terminó usandoSystem.Diagnostics.ProcessStartInfo
:fuente
Esto funcionó para mí:
La clave parece ser que todo el comando está encerrado entre comillas externas, el signo "&" se utiliza para especificar que se está ejecutando otro archivo de comando secundario, y finalmente se escapan las comillas (doble-doble-) alrededor de la ruta / nombre del archivo con espacios en que quería ejecutar en primer lugar.
Esto también es la finalización de la única solución al problema de conexión de MS que -Archivo no devuelve códigos de retorno distintos de cero y -Command es la única alternativa. Pero hasta ahora se pensaba que una limitación de -Command era que no admitía espacios. También actualicé ese elemento de comentarios.
http://connect.microsoft.com/PowerShell/feedback/details/750653/powershell-exe-doesn-t-return-correct-exit-codes-when-using-the-file-option
fuente
Una respuesta alternativa es usar un interruptor de comando codificado Base64 :
Cuando lo decodifique, verá que es el fragmento original del OP con todos los argumentos y comillas dobles preservados.
El comando original:
Se convierte en esto cuando se codifica como Base64:
y aquí está cómo replicar en casa:
fuente
Puede ejecutar archivos exe en powershell de diferentes maneras. Por ejemplo, si desea ejecutar unrar.exe y extraer un archivo .rar, simplemente puede escribir en powershell esto:
Pero a veces, esto no funciona, por lo que debe usar el parámetro & como se muestra arriba: por ejemplo, con vboxmanage.exe (una herramienta para administrar máquinas virtuales de virtualbox) debe llamar a los parámetros fuera de la cadena de esta manera, sin comillas:
Si desea llamar simplemente un archivo archivado winrar como archivos .exe, también puede descomprimirlo con el cmdlet invoke-command y un parámetro Silent / S (se extraerá en la misma carpeta que donde se ha comprimido).
Por lo tanto, hay varias formas de ejecutar archivos .exe con argumentos en powershell.
A veces, uno debe encontrar una solución alternativa para que funcione correctamente, lo que puede requerir un poco más de esfuerzo y dolor :) dependiendo de la forma en que se compiló el archivo .exe o se hizo bi sus creadores.
fuente
Utilizo este método simple, limpio y efectivo.
Coloco argumentos en una matriz, 1 por línea. De esta manera es muy fácil de leer y editar. Luego uso un simple truco para pasar todos los argumentos dentro de comillas dobles a una función con 1 parámetro único. Eso los aplana, incluidas las matrices, en una sola cadena, que luego ejecuto usando 'Invoke-Expression' de PS. Esta directiva está específicamente diseñada para convertir una cadena en comando ejecutable. Funciona bien:
fuente
Tenía el siguiente código funcionando perfecto en mi computadora portátil:
Luego, cuando intenté ejecutarlo directamente en un servidor, comencé a recibir esos errores
"Unrecognized argument ...etc.... All arguments must begin with "-". "
Después de probar todas las soluciones posibles (sin éxito), descubrí que Powershell en el servidor (Windows 2008 R2) era la versión 3.0, mientras que mi computadora portátil tiene 5.0. (puede usar "$ PSVersionTable" para ver la versión).
Después de actualizar Powershell a la última versión, comenzó a funcionar nuevamente.
fuente
Cmd puede manejar la ejecución de un exe citado, pero Powershell no. Solo voy a tratar de ejecutar el exe en sí, ya que no lo tengo. Si literalmente necesita enviar comillas dobles a un argumento de un comando externo, ese es otro problema que se ha cubierto en otra parte.
1) agregue la carpeta exe a su ruta, tal vez en su $ profile
2) entre comillas los espacios:
fuente
Entonces, me encontré con un problema similar y decidí resolverlo de esta manera:
invoke-expression
en la nueva cadenaSolución de ejemplo:
fuente
Para el nombre del ejecutable, el cmdlet new-alias se puede emplear para evitar tratar con espacios o la necesidad de agregar el ejecutable al entorno $ PATH.
Para enumerar o modificar los alias de PS también vea
Del artículo de Jeffery Hicks
Otras respuestas abordan los argumentos.
fuente