powershell - 将错误写入.txt文件并在一行中

时间:2012-02-17 10:27:49

标签: powershell powershell-v2.0

我需要在文本文件中记录进程,并且存在两个问题: 1.如何在文本文件中写入错误?现在,当没有发送电子邮件时,不会记录任何内容。 我需要在一行中写下时间,日期和事件

现在我在log.txt中有这个:

17. feb. 2012 10:47:34
Chyba: .gpg neexistuje
17. feb. 2012 10:57:28
Test.gpg existuje.

这是我的代码:

function write-log{
param(
[string]$mytext,
[string]$fgc
)
if(!$fgc){$fgc="Black"}
write-host $mytext -foregroundcolor $fgc
$myfile = "c:\gnupg\subor\log.txt"
Get-Date | Out-File $myfile -append
$mytext | Out-File $myfile -append
}

if(test-path "d:\vm\shared pre ws08R2+SQL05\SFRB\*.chk") {
echo "Subor .chk existuje a jeho nazov je " 
get-childitem "d:\vm\shared pre ws08R2+SQL05\SFRB\*.chk" -Name
$a = get-childitem "d:\vm\shared pre ws08R2+SQL05\SFRB\*" -include *.chk -name | Foreach-Object {$a -replace ".chk", ""}

if(test-path d:\vm\"shared pre ws08R2+SQL05"\SFRB\$a.gpg) {
    Write-Log $a".gpg existuje." Green

    Write-Log "Presuvam do banky subor $a.gpg.." Green

    Move-Item "d:\vm\shared pre ws08R2+SQL05\SFRB\$a.gpg" c:\gnupg\subor\$a.gpg
    Write-Log "Presun ukonceny." Green

    Write-Log "Presuvam do banky subor $a.chk.." Green
    Move-Item "d:\vm\shared pre ws08R2+SQL05\SFRB\$a.chk" c:\gnupg\subor\$a.chk
    Write-Log "Presun ukonceny. Subor je pripraveny na spracovanie." Green

    Write-Log "Posielam notifikacne maily.." Green
    $emailFrom = "sfrbControlMsg@primabanka.sk"
    $emailTo = "msic@primabanka.sk"
    $subject = "subject"
    $body = "subor presunuty"
    $smtpServer = "87.244.217.54"
    $smtp = new-object Net.Mail.SmtpClient($smtpServer)
    $smtp.Send($emailFrom, $emailTo, $subject, $body)
    # Write-Log "Maily odoslane." Green

        }
        else {
                Write-Log " Chyba: $a.gpg neexistuje" Magenta
        }
} else {
Write-log "V cielovom adresari neexistuje ziadny subor .chk."
}

谢谢。

1 个答案:

答案 0 :(得分:1)

  1. 使用带有参数Send-MailMessage的内置-ErrorAction Stop cmdlet。

  2. 在此处使用try-catch(请参阅 about_try_catch_finally 以获取并处理任何错误。

    catch$_中将出现错误消息(如控制台上所示),并且具有Exception属性,即(.NET){{1 (或子类)实例(我使用下面的Exception专门报告此类型,因为它是任何诊断的重要部分):

  3. EG。在我的脚本中:

    $_.Exception.GetType()