2010-08-04 38 views
10

Tôi muốn có quyền truy cập vào cùng một thông điệp rằng Powershell in khi bạn gửi một bản ghi lỗi vào dòng đầu raTôi làm cách nào để có được mô tả ngoại lệ của PowerShell thành chuỗi?

Ví dụ:

Đây là thông điệp ngoại lệ Tại C: \ Documents and Cài đặt \ BillBillington \ Desktop \ psTest \ exThrower.ps1: 1 char: 6 + ném < < < < (New-Object ArgumentException ("Đây là ngoại lệ")); + CategoryInfo: OperationStopped: (:) [], ArgumentException + FullyQualifiedErrorId: Đây là ngoại lệ

tôi khi nhận được ErrorRecord cuối cùng bằng cách làm $ Lỗi [0] Tôi dường như không thể tìm ra cách tìm thông tin này theo cách đơn giản

Tôi đã tìm thấy chức năng 'Giải quyết lỗi' này từ tiện ích mở rộng cộng đồng here, điều đó gần như tôi muốn nhưng nó in danh sách bán các công cụ khổng lồ mà tôi không cần Tôi phải sau đó dải

Có cách nào để truy cập ng thông điệp mà Powershell sử dụng hoặc thất bại rằng một cách đơn giản hơn để nhận được băm của các giá trị mà tôi quan tâm để tôi có thể đặt chúng vào một chuỗi theo định dạng mà tôi chọn?

Trả lời

13

Nếu bạn muốn có một thông điệp chút ngắn hơn (nhiều người dùng thân thiện đôi khi?) So với @tomasr gợi ý này sẽ làm:

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

Bạn sẽ nhận được một cái gì đó như:

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 

Thông tin này kỹ thuật sẽ bị loại trừ:

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

Làm thế nào về:

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

Là những gì bạn muốn?

+0

1 + Cảm ơn bạn, Cảm ơn bạn – Willbill

4

Tôi lấy thêm một chút vì tôi không thích nhiều dòng rom $ error [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 

Bạn có thể nhìn vào những gì khác là availible để xây dựng chuỗi riêng bạn qua:

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

Bạn cũng có thể làm điều này và bạn sẽ nhận được tất cả các Thông tin về Lỗi

Các vấn đề liên quan