2017-07-26 123 views
0

我正在從powershell運行SQLPLUS。所以我想運行一個SQLPLUS.exe,然後執行一個SQL文件。一旦運行,如果成功,我想寫入日誌文件'這是成功'或'這是一個失敗'。如何在powershell中運行.exe文件並將結果寫入日誌文件

我試圖運行.exe爲

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

,但我發現在接下來的部分困難,因爲寫入日誌文件,如果它是成功的。我不想檢查它是否成功,如果它是成功的,我需要知道如何寫入日誌文件

+1

的[檢查是否命令已成功運行(可能的複製https://stackoverflow.com/questions/8693675 ​​/ check-if-a-command-has-successfully-ran);我建議把重點放在最高位的答案上,而不是接受的答案(基本上使用'$?',它將包含前一個命令的成功值) – Aaron

+1

另外,要寫入日誌文件''message>> logPath'似乎足夠。我幾乎沒有使用PowerShell,所以它可能不是最常用的構造,但我測試成功 – Aaron

+0

@Aaron:它是慣用的,但一個潛在的問題是'>'創建UTF-16LE文件 - 總是在v5.0-中,默認情況下在PSv5.1 +中(您可以通過配置更改編碼,而不是特別設置)。 pinkhighlighter:你真的只是在尋找''message「> logPath'嗎? – mklement0

回答

0

嘗試查看開始 - 轉錄本命令。它有非常簡單的語法。您只需將它作爲參數傳遞給文件路徑,然後使用Write-Host來填充文件即可。像這樣:

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

此外,您可以使用$?變量來確定命令是否成功或$ LASTEXITCODE從您調用的進程中獲取退出代碼(如果退出代碼爲0,$ $返回true)。

注啓動成績單是更詳細的信息非常有用。如果你只想寫「這是成功的」,然後重定向是足夠了:「這是成功的」>「SomeFilePathHere」

0

不是更容易轉錄,你可以重定向。

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

如果你只想成功寫,

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

我的理解是,你只需要登錄的是什麼運行的狀態,而不是究竟發生了什麼?

提供SQLPLUS.EXE返回退出碼你可以做這個上線運行後:

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