J'ai un léger problème avec les chaînes Powershell. Il existe un programme Java que j'utilise, appelé SymmetricDS, qui accepte les arguments d'un fichier de commandes Windows pour certaines fonctions administratives. L'un d'entre eux est d'ouvrir l'enregistrement d'un noeud, en passant une chaîne contenant le groupe du nœud et id:Arguments de ligne de commande d'un exe
& .\bin\sym.bat -p symmetric.properties --open-registration 'store,01'
Dans le fichier batch, java est appelé, avec des propriétés je suis passé au-dessus d'être passé dans comme ceci:
java -Dthis -Dthat -Dfoo -Dbar %1 %2 %3 %4 %5 %6 %7 %8 %9
la fonction dans la java s'échoue après cette partie:
int index = argument.trim().indexOf(",");
if (index < 0) {
throw new SymmetricException("LauncherMissingFilenameTriggerSQL", OPTION_OPEN_REGISTRATION);
}
index
est apparemment -1. Pourquoi il ne trouve pas le caractère virgule, je ne sais pas. Je sais juste que quand je lance le même dans un fichier .cmd ou .bat, il fonctionne très bien:
.\bin\sym.bat -p symmetric.properties --open-registration "store,01"
Je soupçonne qu'il a quelque chose à voir avec la chaîne de Powershell étant Unicode, et quelque chose d'inconvenant qui se passe dans leur voyage de là dans un fichier batch, puis dans Java.
Quelqu'un sait comment je peux appeler cela directement dans Powershell?
Résolue: zdan's answer œuvres, tout comme trompant Powershell un peu comme ceci:
.\bin\sym.bat -p symmetric.properties --open-registration '"store,01"'
Intéressant. Même sans l'opérateur d'appel (comme dans votre premier exemple), '' store, 01'' est encore élargi en 2 éléments au lieu de rester 1. J'ai réussi à le tromper avec ''" store, 01 "'' de sorte qu'il ne dépouille que les apostrophes externes. Je suppose que j'ai besoin d'en savoir plus sur l'analyseur pour éviter d'autres bizarreries, car l'écriture de scripts pour m'aider à contrôler d'autres applications est mon utilisation principale de PowerShell. –
@Joel Vous avez raison, il suffit de supprimer l'opérateur d'appel n'aide pas, j'ai enlevé cela. – zdan