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