2017-08-10 2 views
1

J'essaye d'écrire des wrappers keytool dans Powershell pour gérer les keystores. La question que je suis confronté, est que Powershell, lors de l'exécution d'une commande semblable à:Java keytool.exe wrapper powershell ne supprime pas les erreurs standard

$cmd = "& " + $keytoolexe + " -import " + $CAswitch + 
" -alias " + $alias + 
" -keystore " + $keystore + " -storepass " + $storepass + 
" -file "  + $file + 
" -noprompt *>&1" 
$result = Invoke-Expression -Command $cmd 

Comme vous pouvez le voir, je suis redirigeant tout à ouptut standard, comme je veux stocker que dans une variable pour évaluer la résultat de la commande.

Le problème est que lorsque keytool.exe renvoie un message réussi, powershell le lit en quelque sorte comme une erreur.

J'ai essayé d'exécuter le code de bloc, lui-même, et je n'ai pas eu, erreur. Cependant, après avoir mis ce code dans une fonction et que j'ai appelé la fonction avec le paramètre -ErrorAction stop, j'ai eu cette erreur. Donc, d'une certaine manière, ErrorAction Stop semble faire disparaître la redirection standard de ouptut.

Répondre

0

Je ne suis pas sûr que je comprends parfaitement, comment cela fonctionne, mais après beaucoup de « tests de singe » J'ai maintenant ce que je cherche:

$cmd = "& " + $keytoolexe + " -import " + $CAswitch + 
" -alias " + $alias + 
" -keystore " + $keystore + " -storepass " + $storepass + 
" -file "  + $file + 
" -noprompt *>&1" 
$dummy = Invoke-Expression -Command $cmd -ErrorVariable KeyToolStdOut -OutVariable KeyToolStdErr -ErrorAction Continue 

D'une certaine manière, il semble que cette combinaison de rediriger tout à standard ouptut (*> & 1), puis en utilisant des variables pour capturer la sortie standard et les erreurs standard.

Et oui, je mets standard ouptut comme errorvariable exprès, le code ci-dessus, fait juste cela, envoie ce que je crois devrait être sortie standard à l'erreur, et l'erreur à la sortie standard. Puis j'utilise la logique dans les scripts pour déterminer le succès ou l'échec. J'espère que cela aidera quelqu'un, et j'espère que quelqu'un m'explique pourquoi ce que je viens de découvrir fonctionne.