想在Try / Catch块中使用IF / Else语句

时间:2016-12-27 06:41:55

标签: powershell exchange-server

我想在Try / Catch块中使用If / Else语句。以下是我的代码。 在这里,我能够在脚本失败时捕获错误,但是当它成功时我想在.csv文件中标记日期时间但它不起作用。请帮忙。

Try 
 {
    $hostcomputer = hostname
    $IP = "10.x.x.x"
    $pso = New - PSSessionOption - SkipCACheck - SkipRevocationCheck - SkipCNCheck: $TRUE - ErrorAction Stop# $Session = New - PSSession - ConfigurationName Microsoft.Exchange - ConnectionUri https: //mail.Test.com/powershell/?ExchClientVer=15.0 -Credential (Get-Credential) -Authentication Basic –AllowRedirection –SessionOption (New-PSSessionOption –SkipRevocationCheck)
        $session = New - PSSession - Authentication Negotiate - ConnectionUri https: //mail.Test.com/powershell/?ExchClientVer=15.1
        -ConfigurationName microsoft.exchange - SessionOption $pso - ErrorAction Stop
    import -pssession $session - allowclobber - ErrorAction Stop
 }
 Catch 
 {
    $ErrorMessage = $_.Exception.Message
    $FailedItem = $Error
    Send - MailMessage - From FromAddress @Test.com - To "ToAddress@Test.com", "ToAddress2@Test.com" - Subject "Test - RPS Not Working" - SmtpServer smtp.TEST.net - Body "Error generated on $hostcomputer = $IP. The Error Message was:- $ErrorMessage. AdditionalInfo:--$FailedItem. --NOTE: This is very first error and you may require to check and diagnose if any other issue."
    $Text = "Connection Failed"###
    You have to create.csv file manually and name the column as 'DC2'
    $Text | select @ {
        l = 'DC2';
        e = {
            $_
        }
    } | Export - Csv D: \Output.csv - append
 }

 $Time = Get - Date
 if (!$Error) 
 {
    $Time | select @ {l = 'DC2'; e = {$_.DateTime}} | Export - Csv D: \Output.csv - append
 }

2 个答案:

答案 0 :(得分:1)

您应该使用最终阻止您的要求。因此,无论是try还是catch的结果,都应该始终运行 Finally 块。

所以 而不是:

$Time=Get-Date
if (!$Error) {
    $Time | select @{l='DC2';e={$_.DateTime}} | Export-Csv D:\Output.csv -append
}

执行此操作:

Finally 
{

$Time=Get-Date
    if (!$Error) {
        $Time | select @{l='DC2';e={$_.DateTime}} | Export-Csv D:\Output.csv -append
    }

}

希望它有所帮助...

答案 1 :(得分:1)

如果您只想在csv文件中放置日期时间戳,如果您在try块中成功传递了语句。 您可以将标记作为try块中的最后一个命令。

这是一个细分:

Try块中的错误:每个语句都会按顺序执行,直到出现错误。
然后不会执行Try块中的其余语句。 而是执行Catch块。

Try块中没有错误: Try块中的所有语句都将被执行 Catch块将不会被执行。

最后一块 将永远执行!! 您通常使用此块进行清理。 如果您打开与数据库的连接或在try块中打开一个文件。 你关闭了最后的连接或文件,所以你确定你正确地关闭了所有东西。

<强>提示 如果您想确保捕获Try块中的每个错误,最好使用如下的somting:

Try
{
    $OldErrorActionPreference = $ErrorActionPreference
    $ErrorActionPreference = 'Stop'

    Statement 1
    Statement 2
    Statement 3
    Statement ...
}
Catch
{
     Errorhandling
}
Finally
{
    $ErrorActionPreference = $OldErrorActionPreference
}

或者你必须使用&#34; -ErrorAction Stop&#34;参数与每个重要的陈述。

您可以找到有关错误发送Here

的更多信息