我需要执行一些定期的控制台应用程序,这些应用程序会给我一些结果(在控制台上)...我如何执行它并将其返回数据发送到我的电子邮件? 我试图使用[Diagnostics.Process] :: Start()并启动我的应用程序,但我不知道如何获得返回...我不想要exitCode,我想要应用程序在屏幕上打印的文本。 使用PS V2 CTP3。
***更新
提出的解决方案工作正常但我有一个问题...我需要执行的这个应用程序是来自firebird数据库的gfix,现在我发现了一个东西,我无法将gfix的输出重定向到文件,如果我在命令提示符下执行以下行:
gfix.exe -v -f dabatase.gdb> C:\ test.txt的
它在屏幕上打印输出,文件为空。 同样的事情,如果我尝试将它分配给变量...我不知道gfix与我使用的其他控制台应用程序有什么区别,但看起来它的输出无法重定向。
有人看到这个吗?
***更新2
即使我使用Start-transcript / Stop-Transcript,虽然在屏幕上我看到了gfix输出,但在文件中只有命令:/
***更新3
答案 0 :(得分: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 = "user@yourdomain.com"
$emailTo = "user@yourdomain.com"
$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
几乎完全相同。
答案 1 :(得分:3)
PowerShell v2现已推出,因此您可以考虑升级。
然后,您可以尝试: PS> [字符串] $ IPCONFIG = IPCONFIG PS> send-mailmessage -to some_email -from from_email -subject PowerShell -body $ ipconfig -bodyashtml -smtp my_smtp_server
现在,这取决于命令行输出的复杂程度,因为上述方法会将多行折叠为单行。