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

Want to use IF/Else statement in Try/Catch block

我想在 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
 }

您应该使用 Finally 块来满足您的要求。因此,无论 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
    }

}

希望对您有所帮助...

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

分解如下:

Try 块中的错误:每条语句将按顺序执行,直到出现错误。
那么Try块中剩下的语句就不会执行了。 相反,将执行 Catch 块。

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

Finally 块 永远被处死!! 您通常使用此块进行清理。 如果您打开与数据库的连接或在 try 块中打开文件。 您在 Finally 中关闭连接或文件,以确保您正确关闭了所有内容。

小贴士 如果你想确保捕获 Try 块中的每个错误,你最好使用如下所示的 somting:

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

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

或者您必须在每个重要语句中使用“-ErrorAction Stop”参数。

您可以找到有关错误处理的更多信息Here