2017-07-26 1 views
0

Je cherche à exécuter SQLPLUS à partir de powershell. Je veux donc exécuter un SQLPLUS.exe et ensuite exécuter un fichier SQL. Une fois que cela fonctionne, si elle réussit, je veux écrire dans un fichier journal 'Ce fut un succès' ou 'C'était un échec'.Comment exécuter un fichier .exe dans powershell et écrire le résultat dans le fichier journal

J'ai essayé d'exécuter le fichier .exe comme

&'path\sqlplus.exe' 'system/[email protected] as sysdba' '@themainscript.sql' 

mais je trouve la prochaine partie difficile à écrire dans le fichier journal si elle est un succès. Je ne cherche pas à vérifier si c'était un succès, j'ai besoin de savoir comment écrire dans le fichier journal si c'était un succès

+1

double possible de [Vérifiez si une commande a couru avec succès] (https://stackoverflow.com/questions/8693675/check-if-a-command-has-successful-ran); Je suggère de mettre l'accent sur la réponse la plus mise à jour plutôt que sur la réponse acceptée (en fait, utilisez $ $ qui contiendra la valeur de succès de la commande précédente) – Aaron

+1

Aussi, pour écrire dans un fichier journal '' message "> logPath' semble être assez. Je n'utilise quasiment jamais PowerShell donc ce n'est peut-être pas la construction la plus idiomatique, mais je l'ai testé avec succès – Aaron

+0

@Aaron: Il est idiomatique, mais un getcha potentiel est que '>' crée des fichiers UTF-16LE - invariablement en v5.0-, et par défaut dans PSv5.1 + (où vous pouvez changer l'encodage avec la configuration, pas ad-hoc). pinkhighlighter: Cherchez-vous vraiment '' "message"> logPath'? – mklement0

Répondre

0

Essayez de regarder la commande Start-Transcript. Il a une syntaxe très simple. Vous l'appelez simplement en passant un chemin de fichier comme argument, puis utilisez Write-Host pour remplir le fichier. Comme ceci:

mkdir C:\Temp 
Start-Transcript C:\Temp\logfile.txt 
#do something 
Write-Host "Success!" 
Stop-Transcript 

De plus, vous pouvez utiliser le $? variable pour déterminer si la commande a réussi ou $ LASTEXITCODE pour obtenir le code de sortie du processus que vous avez appelé (Le $ retourne true si le code de sortie était 0).

Remarque Start-Transcript est utile pour plus de détails ... Si vous voulez juste écrire « Il était succesful », la redirection suffit: « Il était succesful »> « SomeFilePathHere »

0

plus facile que transcription, vous pouvez simplement rediriger.

& 'command.exe' 'arg' 'arg2' > Logfile.txt 

Si vous voulez seulement écrire sur le succès,

$outputofcommand = & 'command.exe' 'arg' 'arg2' 
<# logic to check output #> 
$outputofcommand > Logfile.txt 
0

Ma compréhension est que vous ne voulez enregistrer l'état de ce qui a été exécuté, et non ce qui est arrivé?

sqlplus.exe fourni retourne un exitcode vous pouvez simplement le faire sur la ligne après que vous l'exécutez:

if ($?) {add-content "c:\temp\logfile.txt" "This was a success"} else {add-content "c:\temp\logfile.txt" "This was a failure"}