powershell - записывать ошибки в файл .txt и в одну строку - PullRequest
0 голосов
/ 17 февраля 2012

Мне нужно зарегистрировать процесс в текстовом файле, и есть две проблемы: 1. Как записать ошибки в текстовый файл?Теперь, когда электронные письма не отправляются, ничего не регистрируется.2. Мне нужно записать время, дату и событие в одну строку

Теперь у меня есть это в 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 Ответ

1 голос
/ 17 февраля 2012
  1. Воспользуйтесь встроенным командлетом Send-MailMessage с параметром -ErrorAction Stop.

  2. Используйте попытку этого решения (см. about_try_catch_finally для обнаружения и обработки любых ошибок.

    В блоке catch $_ будет сообщение об ошибке (как показано на консоли), и имеет Exception свойство, которое является экземпляром (.NET) Exception (или подклассом) (я использую $_.Exception.GetType() ниже, чтобы специально сообщать об этом типе, поскольку он является важной частью любой диагностики):

Например, в скрипте у меня есть:

    try {
        $trans = (MakeSummaryMessage) + "`r`n`r`n" + $trans
        Send-MailMessage -From $emailFrom `
                        -To $emailTo `
                        -SmtpServer $emailServer `
                        -Subject $subject" `
                        -Body $trans `
                        -Encoding ([System.Text.Encoding]::UTF8) `
                        -ErrorAction Stop
        $emailSent = $true
    } catch {

        Write-EventLog -LogName $eventLog -Source $eventSource -EntryType "Error" `
            -EventId 100 -Message "Failed to send email: $($_.Exception.GetType()): $_"
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...