2016-12-27 318 views
1

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

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 "[email protected]", "[email protected]" - 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 
} 
+0

你刚才的意思是你想最后三行应该得到执行后,尝试或赶上呢?我没有得到你想说的话。 – MobileEvangelist

+0

是的。详细地说,当Try块中的上述命令有一些问题时,它将会输入csv文件并发送邮件。但如果它成功运行,我也想进入一个条目。哪个不起作用。 – Jeetcu

+0

您可以将该部分移至抓取后的{}块,以便在尝试执行并执行后执行。即使你尝试和catch执行后会得到异常,最终会阻止并添加该csv文件条目。 – MobileEvangelist

回答

1

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

这里是一个向下突破:

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

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

The finally block 将始终执行!! 您通常使用此块进行清理。 如果您打开到数据库的连接或在try块中打开一个文件。 你关闭连接或最后的文件,所以你确定你正确地关闭了每一件事情。

提示 如果你想确保你赶上Try块每个错误您更好地使用somting类似如下:

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

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

或者你必须使用与每个“-ErrorAction停止”参数重要声明。

你可以找到更多关于errorhanding Here

+0

谢谢。另一种编码方式。很好的解释。 ;) – Jeetcu

1

您应该使用最后阻止您的需求。所以无论结果如何,都应该始终运行最后块。

所以 取而代之的是:

$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 
    } 

} 

希望它可以帮助...

+0

感谢吨@Ranadip。有用 :)。 – Jeetcu

+0

@Jeetcu:如果它有效,请接受答案:) –

+0

@Randadip:完成:) – Jeetcu