Comment faire pour supprimer les guillemets dans les commandes PowerShell pour les exécutables
Est-il un moyen de supprimer le bloc à l'intérieur des guillemets autour de chaque argument de ligne de commande que PowerShell aime à générer et puis passer à l'externe des fichiers exécutables pour les arguments de ligne de commande qui ont des espaces à l'?
Voici la situation:
Une façon de décompresser de nombreux installateurs est une commande de la forme:
msiexec /a <packagename> /qn TARGETDIR="<path to folder with spaces>"
Essayer de l'exécuter à partir de PowerShell s'est avéré très difficile. PowerShell aime à joindre les paramètres avec des espaces entre double-quotes. Les lignes suivantes:
msiexec /a somepackage.msi /qn 'TARGETDIR="c:\some path"'
msiexec /a somepackage.msi /qn $('TARGETDIR="c:\some path"')
$td = '"c:\some path"'
msiexec /a somepackage.msi /qn TARGETDIR=$td
Tous les résultats dans la ligne de commande suivante (tel que rapporté par le Win32 GetCommandLine() de l'API):
"msiexec" /a somepackage.msi /qn "TARGETDIR="c:\some path""
Cette ligne de commande:
msiexec /a somepackage.msi TARGETDIR="c:\some path" /qn
résultats dans
"msiexec" /a fooinstaller.msi "TARGETDIR=c:\some path" /qn
Il semble que PowerShell aime à joindre les résultats des expressions vocation à représenter un argument entre guillemets lors du passage à des fichiers exécutables. Cela fonctionne bien pour la plupart des fichiers exécutables. Cependant, MsiExec est très spécifique au sujet de citer des règles qu'il veut et de ne pas accepter aucune des lignes de commande PowerShell génère pour les chemins ont des espaces.
Est-il un moyen de supprimer ce problème?
Non, rien n'a fonctionné. Powershell ne peuvent tout simplement pas faire cela. J'ai eu recours à la présence de l'appel du script un fichier de commandes qui permettrait de le citer correctement.
Résolu dans la réponse ci-dessous (utilisez arrière-tique cite:"").
OriginalL'auteur David Gladfelter | 2010-04-12
Vous devez vous connecter pour publier un commentaire.
Échapper à l'intérieur des guillemets comme ceci:
$target_dir='c:\some path'
?ensuite, vous aurez besoin de faire
Targetdir =
"$target_dir"
OriginalL'auteur stej
Voici une fonction que j'utilise pour mieux gérer les multiples arguments et ceux avec des espaces et des citations. Notez que pour les blocs de code ci-dessous ne sont pas de couleur, où les chaînes de début et de fin correctement et vous devez les utiliser " pour échapper les guillemets que vous voulez dans le paramètre.
Il y a un exemple plus complet sur mon blog. [http://www.christowles.com]
Oui, cela a été extrêmement utile. J'ai eu un paramètre avec de multiples imbriquées les guillemets qui PS voudrais juste analyser correctement.
OriginalL'auteur Chris Towles
Je n'ai pas la réponse, mais ce gars semble être sur quelque chose.
http://www.eggheadcafe.com/software/aspnet/33777311/problem-escaping-command.aspx
Je ne pouvais pas le faire fonctionner pour moi.
Ici quelqu'un d'autre d'avoir signalé le problème:
_http://powershell.com/cs/forums/p/2809/3751.aspx
Voici une autre idée par quelqu'un:
_http://www.roelvanlisdonk.nl/?p=1135
Qui ne fonctionne pas pour moi non plus...
OriginalL'auteur Elijah W. Gagne
Ouais, on dirait qu'ils ont trouvé une solution à la fin:
Je vous conseille d'utiliser une chaîne ici, mais pour éviter d'avoir à faire tous échapper.
OriginalL'auteur Yanagi
Mettre l'ensemble de l'argument de citations et d'échapper à l'intérieur des guillemets. Sinon PowerShell vais essayer de l'analyser:
OriginalL'auteur zdan
J'ai juste touché le problème. Le suivant a fonctionné pour moi:
La clé était en cours d'exécution cmd plutôt que msiexec directement. Ceci a deux avantages:
OriginalL'auteur DGreen