2016-12-27 32 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