2010-08-04 18 views
10

Ben PowerShell baskılar çıkış akışına bir hata kaydını göndermek aynı mesaja erişimi olmasını istediğinizPowershell istisna açıklamalarını bir dizeye nasıl alabilirim?

Örnek: \ Documents and Ayarlar: Bu C'de istisna mesajıdır

\ BillBillington \ Desktop \ psTest \ exThrower.ps1: 1 karakter: 6 + (("Bu istisnadır") Yeni-Nesne ArgumentException) < < < < atmak; + CategoryInfo: OperationStopped: (:) [], ArgumentException + FullyQualifiedErrorId: Bu $ Hata yaparak geçen ErrorRecord dönünce [0] ben anlamaya görünüyor olamaz istisna

olduğunu Bu bilgi nasıl basit bir şekilde edinilir

Bu 'Resolve-Error' işlevini, istediğim kabaca istediğim topluluk uzantılarından (here) buldum, ancak ihtiyacım olan şeylerin büyük bir yarı formatlı listesini yazdırıyor Daha sonra

şeritleri var. Powershell'in önemsediğim değerlerin karmaşasını almanın daha basit bir yolunu kullandığını veya başarısız olduğunu belirten bir mesaj gönderdiğimde, seçtiğim bir biçimde bir dizeye yerleştirebilirim.

cevap

13

sen (bazen daha kullanıcı dostu?) @tomasr yapacak anlaşılacağı daha biraz daha kısa mesaj isterseniz:

$error[0].ToString() + $error[0].InvocationInfo.PositionMessage 

Sen alacak gibi bir şey:

Cannot find path 'C:\TEMP\_100804_135716\missing' because it does not exist. 
At C:\TEMP\_100804_135716\test.ps1:5 char:15 
+ Get-ChildItem <<<< missing 

Bu teknik bilgi olacak dışlanan:

+ CategoryInfo   : ObjectNotFound: (C:\TEMP\_100804_135716\missing:String) [Get-ChildItem], ItemNotFoundException 
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand 
13

ne dersiniz: ne istediğini

$x = ($error[0] | out-string) 

mı?

+0

1 ile ilgili tüm Informations alacak + Teşekkür ederim, teşekkürler – Willbill

4

Biraz daha ileri gittim çünkü çok satırlı f rom $ hata [0] .InvocationInfo.PositionMessage.

Function FriendlyErrorString ($thisError) { 
    [string] $Return = $thisError.Exception 
    $Return += "`r`n" 
    $Return += "At line:" + $thisError.InvocationInfo.ScriptLineNumber 
    $Return += " char:" + $thisError.InvocationInfo.OffsetInLine 
    $Return += " For: " + $thisError.InvocationInfo.Line 
    Return $Return 
} 

[string] $ErrorString = FriendlyErrorString $Error[0] 
$ErrorString 

Sen kullanarak kendi dize oluşturmak için availible başka ne bakabilirsiniz: Ayrıca yapabilirsiniz

$Error | Get-Member 
$Error[0].InvocationInfo | Get-Member 
0
Foreach ($Errors in $Error){ 
    #Log Eintrag wird zusammengesetzt und in errorlog.txt geschrieben 
    "[$Date] $($Errors.CategoryInfo.Category) $($Errors.CategoryInfo.Activity) $($Errors.CategoryInfo.Reason) $($Errors.CategoryInfo.TargetName) $($Errors.CategoryInfo.TargetType) $($Errors.Exception.Message)" |Add-Content $Path\errorlog.txt -Encoding UTF8 
} 

ve Hata

İlgili konular