2010-01-28 53 views
1

嘿,對不起我的英語不好......我需要執行一些定期的控制檯應用程序,給我一些結果(在控制檯上)...我如何執行它,並將其返回數據發送到我的電子郵件?我嘗試使用[Diagnostics.Process] :: Start(),它啓動我的應用程序,但我不知道如何得到返回...我不想exitCode,我想要應用程序打印的文本屏幕。 使用PS V2 CTP3。如何使用PoweShell執行外部控制檯應用程序並將結果發送至電子郵件?

*** UPDATE

提出的解決方案,工作得很好,但我有一個問題...這個應用程序,我需要執行是從Firebird數據庫gfix,現在我發現了一件事,我不能重定向gfix的輸出到文件中,如果我執行上命令提示行:

gfix.exe -v -f dabatase.gdb> C:\ test.txt的

它在屏幕上打印輸出,並該文件是空的。 同樣的事情,如果我嘗試將它分配給一個變量...我不知道gfix從我使用的其他控制檯應用程序有什麼區別,但看起來像它的輸出不能重定向...

有人看到這個?

***更新2

即使我使用啓動轉錄/停止成績單,雖然在屏幕上,我看到gfix輸出,該文件只存在命令:/

* **更新3

發現這裏的解決方案 http://edn.embarcadero.com/br/article/25605

+0

是否有任何理由堅持V2 CTP3? – stej 2010-01-28 12:40:44

+0

沒有,我發現CTP3下載MS站點第一:(:(將盡量找到V2最終:) – Leo 2010-01-28 13:41:23

+0

這是正確的鏈接:http://support.microsoft.com/kb/968929 – stej 2010-01-28 13:55:16

回答

3

像這樣的東西可以工作:

# temporary file 
$f = [io.path]::GetTempFileName() 
# start process and redirect its output to the temp file 
ping localhost > $f 

# create and send email 
$emailFrom = "[email protected]" 
$emailTo = "[email protected]" 
$subject = "results" 
$body = (Get-Content $f) -join "`r`n" 
$smtpServer = "your smtp server" 
$smtp = new-object Net.Mail.SmtpClient($smtpServer) 
$smtp.Send($emailFrom, $emailTo, $subject, $body) 

# delete the file 
remove-item $f 

我認爲在這種情況下[Diagnostics.Process]::Start()是不需要的。除此之外,還有一個幾乎相同的cmdlet Start-Process

3

PowerShell v2現在不在了,所以你可以考慮升級。

然後,您可以簡單地嘗試: PS> [字符串] $ IPCONFIG = IPCONFIG PS>發送 - -to MAILMESSAGE - 從some_email FROM_EMAIL -subject PowerShell的體區$ IPCONFIG -bodyashtml -smtp my_smtp_server

現在,這取決於你的命令行輸出有多複雜,因爲上面的方法會將多行代碼摺疊成一個單獨的代碼。

+0

你說得對,作業也是如此。所以如果有更多的行,這有助於:'$ ipconfig =(ipconfig)-join「'r'n」' – stej 2010-01-28 12:57:23

相關問題