2017-07-26 24 views
0

私はpowershellからSQLPLUSを実行したいと考えています。ですから、私はSQLPLUS.exeを実行してから、SQLファイルを実行します。これが実行されると、成功した場合、ログファイル 'This is a success'または 'This was a failure'に書き出します。powershellで.exeファイルを実行し、結果をログファイルに書き込む方法

私は

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

として.EXEを実行しようとしているが、それは成功である場合、ログファイルに書き込むように私は次の部分が難しい見つけています。私はそれが成功かどうかを調べるつもりはない、成功した場合はログファイルに書き込む方法を知る必要がある。

+1

可能な重複/ questions/8693675 ​​/ check-if-a-command-has-successfully-ran);私は受け入れられたものではなく、最もアップアップされた答えに焦点を当てることをお勧めします(前のコマンドの成功値を含む '$?'を使用してください) – Aaron

+1

また、ログファイル '' logPath'足ります。私はpowershellをほとんど使用していないので、慣れ親しんだ構造ではないかもしれませんが、それをうまくテストしました。 – Aaron

+0

@Aaron:それは慣用ですが、 '>'はUTF-16LEファイルを作成しますデフォルトではPSv5.1 +(アドホックではなく設定でエンコーディングを変更することができます)。 pinkhighlighter:本当に '' message "> logPath'を探していますか? – mklement0

答えて

0

Start-Transcriptコマンドを見てみる。それは非常に単純な構文を持っています。引数としてファイルパスを渡して呼び出すだけで、Write-Hostを使用してファイルを埋めます。このように:

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

また、$?変数を使用してコマンドが成功したかどうかを判断し、$ LASTEXITCODEを呼び出して呼び出したプロセスから終了コードを取得します(終了コードが0の場合は$?がtrueを返します)。

注起動し、トランスクリプトは、あなただけの「それは成功した」書き込みたい場合は、リダイレクトは十分です...より詳細な情報については有用です:「それは成功しました」>「SomeFilePathHere」

0

より簡単にトランスクリプト、あなたはリダイレクトすることができます。私の理解では、実際に何が起こっただけ実行されたかの状況を記録したい、とされていない

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

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

あなただけの成功を書きたい場合は、? sqlplus.exeを提供

は、あなたがそれを実行した後、あなただけの行にこれを行うことができます終了コードを返します([コマンドが正常に実行されたかどうかをチェックしている] https://stackoverflow.comの

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