Comment exécutez-vous la commande suivante dans PowerShell?
C: \ Program Files \ IIS \ Microsoft Web Deploy \ msdeploy.exe -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 "
# 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))
Réponses:
Lorsque PowerShell voit une commande commençant par une chaîne, il évalue simplement la chaîne, c'est-à-dire qu'il la renvoie généralement à l'écran, par exemple:
Si vous souhaitez que PowerShell interprète la chaîne comme un nom de commande, utilisez l'opérateur d'appel (&) comme suit:
Après cela, vous n'aurez probablement qu'à citer des paires paramètre / argument contenant des espaces et / ou des caractères de citation. Lorsque vous appelez un fichier EXE comme celui-ci avec des arguments de ligne de commande complexes, il est généralement très utile d'avoir un outil qui vous montrera comment PowerShell envoie les arguments au fichier EXE. Les extensions de communauté PowerShell disposent d'un tel outil. Cela s'appelle des échoargs. Vous remplacez simplement le fichier EXE par echoargs - en laissant tous les arguments en place, et cela vous montrera comment le fichier EXE recevra les arguments, par exemple:
En utilisant des échos, vous pouvez expérimenter jusqu'à ce que vous obteniez les bons résultats, par exemple:
Il s'avère que j'essayais trop avant de conserver les guillemets doubles autour de la chaîne de connexion. Apparemment, cela n'est pas nécessaire car même cmd.exe les supprimera.
BTW, chapeau à l'équipe PowerShell. Ils m'ont été très utiles en me montrant l'incantation spécifique des guillemets simples et doubles pour obtenir le résultat souhaité - si vous aviez besoin de garder les guillemets internes en place. :-) Ils réalisent également que c'est un domaine douloureux, mais ils sont motivés par le nombre de personnes affectées par un problème particulier. Si cela vous inquiète, veuillez voter pour cette soumission de bogue PowerShell .
Pour plus d'informations sur la façon dont PowerShell analyse, consultez ma série de blogs PowerShell efficace - en particulier le point 10 - «Comprendre les modes d'analyse PowerShell»
MISE À JOUR 4/4/2012: Cette situation devient beaucoup plus facile à gérer dans PowerShell V3. Voir cet article de blog pour plus de détails .
la source
echoargs
donne une indication de la façon dont PowerShell interprète les arguments avant de les transmettre à l'EXE.& 'C:\Program Files\Sublime Text 3\sublime_text.exe'
directement dans la console et cela fonctionne, mais dans un fichier de commandes, j'obtiens une erreur disant «& était inattendu pour le moment».START C:\"Program Files"\"Sublime Text 3"\sublime_text.exe
Ajoutez simplement l' opérateur & avant le nom .exe. Voici une commande pour installer SQL Server Express en mode silence:
la source
J'avais des espaces dans les commandes et les paramètres, et c'est ce qui a fonctionné pour moi:
C'est fondamentalement la même chose que la réponse d'Akira, mais cela fonctionne si vous créez dynamiquement vos paramètres de commande et les placez dans une variable.
la source
EchoArgs
Cela a fonctionné pour moi:
Placez simplement les chemins ou les chaînes de connexion dans un élément de tableau et divisez les autres éléments en un élément de tableau chacun.
Il existe de nombreuses autres options ici: https://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx
Microsoft devrait rendre cette méthode plus simple et compatible avec la syntaxe d'invite de commande.
la source
Il existe plusieurs méthodes que vous pouvez utiliser pour le faire.
Méthode 1
Un exemple simple
Dans ton cas
Dans cette méthode, vous séparez chaque paramètre de la ArgumentList à l'aide de virgules.
Méthode 2
Exemple simple
Dans ton cas
Cette méthode est plus simple car elle permet de taper vos paramètres en une seule fois.
Références: Powershell / Scripting / Start-Process
la source
Voir cette page: https://slai.github.io/posts/powershell-and-external-commands-done-right/
Résumé utilisant vshadow comme exécutable externe:
la source
Au cas où quelqu'un se demanderait comment exécuter simplement un fichier exécutable:
.....>. \ file.exe
ou
......> full \ path \ to \ file.exe
la source
J'ai pu faire fonctionner ma commande similaire en utilisant l'approche suivante:
Pour votre commande (pas que cela aide beaucoup maintenant), les choses ressembleraient à ceci:
Les points clés sont:
Je n'ai pas essayé d'ajouter la partie "computername" à la fin de la ligne de commande, mais j'espère que ces informations aideront les autres personnes à lire ceci maintenant à se rapprocher du résultat souhaité.
la source
Nouvelle chaîne d'échappement dans PowerShell V3, extraite des nouvelles fonctionnalités du langage V3 :
Le Web est plein de lignes de commande écrites pour Cmd.exe. Ces lignes de commandes fonctionnent assez souvent dans PowerShell, mais lorsqu'elles incluent certains caractères, par exemple un point-virgule (;), un signe dollar ($) ou des accolades, vous devez apporter des modifications, en ajoutant probablement des guillemets. Cela semblait être la source de nombreux maux de tête mineurs.
Pour aider à résoudre ce scénario, nous avons ajouté une nouvelle façon «d'échapper» à l'analyse des lignes de commande. Si vous utilisez un paramètre magique -%, nous arrêtons notre analyse normale de votre ligne de commande et passons à quelque chose de beaucoup plus simple. Nous ne correspondons pas aux citations. Nous ne nous arrêtons pas au point-virgule. Nous ne développons pas les variables PowerShell. Nous développons les variables d'environnement si vous utilisez la syntaxe Cmd.exe (par exemple% TEMP%). En dehors de cela, les arguments jusqu'à la fin de la ligne (ou du tuyau, si vous êtes un tuyau) sont passés tels quels. Voici un exemple:
la source
Vous pouvez utiliser:
L'essentiel à noter ici est que FilePath doit être en position 0, selon le Guide d'aide. Pour appeler le guide d'aide d'une commande, tapez simplement
Get-Help <Commandlet-name> -Detailed
. Dans ce cas, c'est le casGet-Help Start-Process -Detailed
.la source
J'ai essayé toutes les suggestions, mais je n'ai toujours pas pu exécuter les
msiexec.exe
paramètres contenant des espaces. Ma solution a donc fini par utiliserSystem.Diagnostics.ProcessStartInfo
:la source
Cela a fonctionné pour moi:
La clé semble être que toute la commande est entourée de guillemets externes, l'esperluette "&" est utilisée pour spécifier qu'un autre fichier de commande enfant est en cours d'exécution, puis finalement des guillemets échappés (doublés-doubles) autour du chemin / nom de fichier avec des espaces en vous vouliez exécuter en premier lieu.
C'est également l'achèvement de la seule solution de contournement au problème de connexion MS que -File ne renvoie pas de codes retour non nuls et -Commande est la seule alternative. Mais jusqu'à présent, on pensait qu'une limitation de -Command était qu'il ne supportait pas les espaces. J'ai également mis à jour cet élément de rétroaction.
http://connect.microsoft.com/PowerShell/feedback/details/750653/powershell-exe-doesn-t-return-correct-exit-codes-when-using-the-file-option
la source
Une autre solution consiste à utiliser un commutateur de commande codé en Base64 :
Une fois décodé, vous verrez qu'il s'agit de l'extrait d'origine de l'OP avec tous les arguments et guillemets conservés.
La commande d'origine:
Il se transforme en ceci lorsqu'il est codé en Base64:
et voici comment reproduire à la maison:
la source
Vous pouvez exécuter des fichiers exe de différentes manières en PowerShell. Par exemple, si vous souhaitez exécuter unrar.exe et extraire un fichier .rar, vous pouvez simplement écrire en PowerShell ceci:
Mais parfois, cela ne fonctionne pas, vous devez donc utiliser le paramètre & comme indiqué ci-dessus: Par exemple, avec vboxmanage.exe (un outil pour gérer les machines virtuelles virtualbox), vous devez appeler les paramètres en dehors de la chaîne comme ceci, sans guillemets:
Si vous voulez appeler simplement un fichier archivé winrar en tant que fichiers .exe, vous pouvez également le décompresser avec l'applet de commande invoke-command et un paramètre / S silencieux (il va s'extraire dans le même dossier que celui où il a été compressé).
Il existe donc plusieurs façons d'exécuter des fichiers .exe avec des arguments dans PowerShell.
Parfois, il faut trouver une solution de contournement pour le faire fonctionner correctement, ce qui peut nécessiter des efforts et des douleurs supplémentaires :) selon la façon dont le fichier .exe a été compilé ou créé par ses créateurs.
la source
J'utilise cette méthode simple, propre et efficace.
Je place les arguments dans un tableau, 1 par ligne. De cette façon, il est très facile à lire et à modifier. Ensuite, j'utilise une astuce simple pour passer tous les arguments entre guillemets doubles à une fonction avec 1 paramètre unique. Cela les aplatit, y compris les tableaux, en une seule chaîne, que j'exécute ensuite en utilisant «Invoke-Expression» de PS. Cette directive est spécialement conçue pour convertir une chaîne en commande exécutable. Fonctionne bien:
la source
J'ai eu le code suivant fonctionnant parfaitement sur mon ordinateur portable:
Ensuite, quand j'ai essayé de l'exécuter directement sur un serveur, j'ai commencé à obtenir ces erreurs
"Unrecognized argument ...etc.... All arguments must begin with "-". "
Après avoir essayé toutes les solutions de contournement possibles (sans succès), j'ai découvert que Powershell sur le serveur (Windows 2008 R2) était la version 3.0, alors que mon ordinateur portable en avait 5.0. (vous pouvez utiliser "$ PSVersionTable" pour voir la version).
Après avoir mis à niveau Powershell vers la dernière version, il a recommencé à fonctionner.
la source
Cmd peut gérer l'exécution d'un exe cité, mais pas Powershell. Je vais juste m'occuper de gérer l'exe lui-même, car je ne l'ai pas. Si vous devez littéralement envoyer des guillemets doubles à un argument d'une commande externe, c'est un autre problème qui a été abordé ailleurs.
1) ajoutez le dossier exe à votre chemin, peut-être dans votre profil $
2) citez les espaces:
la source
J'ai donc rencontré un problème similaire et j'ai choisi de le résoudre de cette façon:
invoke-expression
sur la nouvelle chaîneExemple de solution:
la source
Pour le nom de l'exécutable, l' applet de commande new-alias peut être utilisée pour éviter de traiter des espaces ou d'avoir besoin d'ajouter l'exécutable à l'environnement $ PATH.
Pour répertorier ou modifier les alias PS, voir également
De Jeffery Hicks Aarticle
D'autres réponses répondent aux arguments.
la source