2015-12-23 2 views
0

Я намеренно написал ошибку в следующем:Не захватывая ошибку с транскриптами

Try 
{ 
Start-Transcript -Path $Errorlog 

#$TermRep = Import-Csv $TermReport 
#$Donna = Import-Csv $HRReport 

$TermRep = Import-Csv $Path\TestFileTerm2.csv 
$Donna = Import-Csv $Path\TestFileDonna.csv 

#Job to match users between CSVs 
$Job = ForEach($i in $TermRep){ 
$TID = $($i.'Person ID') 
ForEach($u in $Donna){ 
$DID = $($u.UserID) 
If($TID -eq $DID){ 
"Move-ADObject -Identity $TID -TargetPath 'PATH' `r`n" 
      } 
    } 
} 
Stop-Transcript 
#Send email of results or statement of no results 
$smtpServer = "blah.net" 
$msg = new-object Net.Mail.MailMessage 
$smtp = new-object Net.Mail.SmtpClient($smtpServer) 
$msg.From = $EmailFrom 
$msg.To.Add($EmailTo) 
#$msg.To.Add($EmailTo1) 
#$msg.To.Add($EmailTo2) 
$msg.Priority = "High" 
If($Job -notlike ""){ 
$msg.Subject = "Open a ticket for Terminated Exception Users for Lit-hold changes." 
$msg.Body = "Fix these users" 
} 
Else{ 
$msg.Subject = "Terminated Exception Users Script was run for Lit-holds" 
$msg.Body = "No users need fixing." 
} 
$smtp.Send($msg) 
} 
Catch [system.exception] 
{ 
#If the script errors (e.g. it cannot find one of the lists) send the following email. 
$smtpServer = "blah.net" 
$msg = new-object Net.Mail.MailMessage 
$smtp = new-object Net.Mail.SmtpClient($smtpServer) 
$msg.From = $EmailFrom 
$msg.To.Add($EmailTo) 
#$msg.To.Add($EmailTo1) 
#$msg.To.Add($EmailTo2) 
$msg.Priority = "High" 
$msg.Subject = "Open a ticket for Terminated Exception Users - Script Failure" 
$msg.Body = "Script error." 
$smtp.Send($msg) 
} 

В частности, $TermRep = Import-Csv $Path\TestFileTerm2.csv не существует. Тем не менее, моя транскрипция возвращается в следующем виде:

********************** 
Windows PowerShell Transcript Start 
Start time: 20151223165030 
Username : DOMAIN\Username 
Machine : WKSTNName (Microsoft Windows NT 6.1.7601 Service Pack 1) 
********************** 
Transcript started, output file is D:\DIR\LogFile2015-12-23.log 
********************** 
Windows PowerShell Transcript End 
End time: 20151223165030 
********************** 

Может ли кто-нибудь сказать мне, что мне не хватает? Не понимаю, как работает Start-Transcript?

Если кто-то может мне помочь, все, что я пытаюсь сделать, это получить журнал ошибок в файл.

Обновлены Попытки

Я попытался изменить его:

Try{$TermRep = Import-Csv $Path\TestFileTerm.csv -verbose -EA stop} 
Catch { Write "$DateTime Error: Import-Csv: $_" >>$Errorlog} 

Если установить каждую команду try-catch печатает ошибки в лог-файл, но он больше не работает функция электронной почты ошибки (2-й электронная почта), даже когда я пытаюсь импортировать несуществующий CSV. Вместо этого он запускает Else по первому электронному письму, что означает, что пользователей не было найдено.

Кроме того, предложение Мэтта, когда пытался печатает ошибки в лог-файл, но заставляет его всегда посылать электронную почту ошибки (второй адрес электронной почты), даже если нет никакой ошибки:

try{ 
    Start-Transcript -Path c:\temp\text.txt 
    $TermRep = Import-Csv $Path\TestFileTerm2.csv 
} catch { 
    $Error[0] 
} 
+0

Что вы ожидаете увидеть, что не видите? – dfundako

+0

@dfundako Я ожидаю увидеть что-то вроде сообщения об ошибке, сообщающего мне, что он не может импортировать csv, потому что файл не существует. – Nate

+0

Каково состояние '$ ErrorActionPreference'? – Matt

ответ

0

Важной частью что вы опустили, вполне возможно, содержит ваш ответ. У вас есть блок try, улавливающий ошибки. Если вы не выходите в блок catch, вы увидите вывод, который вы показываете.

try{ 
    Start-Transcript -Path c:\temp\text.txt 
    $TermRep = Import-Csv $Path\TestFileTerm2.csv 
} catch { 
} 

Stop-Transcript 

Вышеуказанные не будут отображаться ошибки Стенограмма или нет. Если вы должны были затем вывести ошибку в блоке catch (аналогично тому, что вы делали в комментариях), вы увидите ошибку. Если вы сделали что-то подобное, вы не показываете его.

try{ 
    Start-Transcript -Path c:\temp\text.txt 
    $TermRep = Import-Csv $Path\TestFileTerm2.csv 
} catch { 
    $Error[0] 
} 

Stop-Transcript 

Имейте в виду, что это будет показывать только последнюю ошибку. Не уверен, как вы хотите сыграть это для нескольких ошибок. Уловка try предназначена для захвата одного из них, которое вы ожидаете не выполнить несколько.


Мой $ErrorActionPreference будет продолжаться за то, что она стоит.

PS C:\temp> $ErrorActionPreference 
Continue 
+0

. Я добавил весь свой код sans' $ msg.body'. Если я 'try-catch' какой-либо конкретной ошибки и вывода в файл, он не отправляет сообщение об ошибке. Он отправляет электронное письмо, в котором говорится, что обрабатывать нечего - это версия «Else» первого электронного письма, в отличие от второго сценария электронной почты. Думаю, это имеет смысл, поскольку он заменяет ошибку? Вот почему я изначально просто искал способ написать все, что он делает для этого небольшого раздела, независимо от того, сбой или неудача. – Nate

Смежные вопросы