Hibajelzés kiolvasása ($error)

Az előzőekben a hibajelzéseket a képernyőn olvastuk el, de ezeket a PowerShell automatikusan egy $error tömbbe gyűjti. A [0]-ás indexű elem mindig a legfrissebb hibajelzést tartalmazza, és így tolja mindig el eggyel a hibákat. Ez azért jó, mert ha ki is kapcsoljuk a hibajelzést (SilentlyContinue), az $error változó ennek ellenére őrizni fogja a fellépő hibát:

[54] PS C:\old> "54Eleje"; get-content blabla.txt -ErrorAction SilentlyConti

nue; "54Vége"

54Eleje

54Vége

[55] PS C:\old> $error[0]

Get-Content : Cannot find path 'C:\blabla.txt' because it does not exist.

At line:1 char:23

+ "54Eleje"; get-content <<<<  blabla.txt -ErrorAction SilentlyContinue; "54Vé

ge"

    + CategoryInfo          : ObjectNotFound: (C:\blabla.txt:String) [Get-Con

   tent], ItemNotFoundException

    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetC

   ontentCommand

Ráadásul – most már nem is csodálkozunk – a $error elemei is objektumok! Nézzük meg a tagjellemzőit:

[59] PS C:\old> $error[0] | gm

 

 

   TypeName: System.Management.Automation.ErrorRecord

 

Name                  MemberType     Definition

----                  ----------     ----------

Equals                Method         bool Equals(System.Object obj)

GetHashCode           Method         int GetHashCode()

GetObjectData         Method         System.Void GetObjectData(System.Runti...

GetType               Method         type GetType()

ToString              Method         string ToString()

CategoryInfo          Property       System.Management.Automation.ErrorCate...

ErrorDetails          Property       System.Management.Automation.ErrorDeta...

Exception             Property       System.Exception Exception {get;}

FullyQualifiedErrorId Property       System.String FullyQualifiedErrorId {g...

InvocationInfo        Property       System.Management.Automation.Invocatio...

PipelineIterationInfo Property       System.Collections.ObjectModel.ReadOnl...

TargetObject          Property       System.Object TargetObject {get;}

PSMessageDetails      ScriptProperty System.Object PSMessageDetails {get=& ...

Itt igazából a tulajdonságok az érdekesek számunkra:

 [62] PS C:\old> $error[0].categoryinfo

 

 

Category   : ObjectNotFound

Activity   : Get-Content

Reason     : ItemNotFoundException

TargetName : C:\old\blabla.txt

TargetType : String

 

 

 

[63] PS C:\old> $error[0].errordetails

[64] PS C:\old> $error[0].fullyqualifiederrorid

PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand

[65] PS C:\old> $error[0].invocationinfo

 

 

MyCommand        : Get-Content

ScriptLineNumber : 1

OffsetInLine     : -2147483648

ScriptName       :

Line             : "54Eleje"; get-content blabla.txt -ErrorAction SilentlyC

                   ontinue; "54Vége"

PositionMessage  :

                   At line:1 char:23

                   + "54Eleje"; get-content  <<<< blabla.txt -ErrorAction S

                   ilentlyContinue; "54Vége"

InvocationName   : get-content

PipelineLength   : 1

PipelinePosition : 1

 

 

 

[66] PS C:\old> $error[0].targetobject

C:\old\blabla.txt

A CategoryInfo tulajdonság önmagában nagyon sok mindent elárul a hibáról, az InvocationInfo tulajdonságban még további részleteket láthatunk. Ezen információk birtokában tényleg nem jelenthet gondot a hibák felderítése és elhárítása.

Ha nem annyira lényeges, hogy sok információ jelenjen meg a hibákról, akkor átválthatjuk a hibajelentés nézetét egy egyszerűsített nézetre az $ErrorView változó NormalView-ról való átállításával CategoryView-ra:

[26] PS C:\> get-item c:\aaa\a.txt

Get-Item : Cannot find path 'C:\aaa\a.txt' because it does not exist.

At line:1 char:9

+ get-item <<<<  c:\aaa\a.txt

    + CategoryInfo          : ObjectNotFound: (C:\aaa\a.txt:String) [Get-Item

   ], ItemNotFoundException

    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetI

   temCommand

 

[27] PS C:\> $ErrorView = "CategoryView"

[28] PS C:\> get-item c:\aaa\a.txt

ObjectNotFound: (C:\aaa\a.txt:String) [Get-Item], ItemNotFoundException

Így jóval egyszerűbb hibajelzést kapun, ami ott, ahol esetleg laikusok futtatják a szkriptjeinket, jól jöhet, mert kevésbé rémisztő.



Word To HTML Converter