Az információs adatfolyam (Write-Information)

PowerShell 5.0-ban jelent meg egy új adatfolyam a Verbose, Warning, Error és Debug mellett, ez pedig az Information. Miről is van szó? A korábbi adatfolyamokat (stream) nagyon könnyen tudjuk szabályozni a vonatkozó preferencia változókkal vagy a -…Action általános paraméterekkel. Azaz teletűzdelhetjük a szkriptjeinket pl. Write-Debug vagy Write-Verbose kifejezésekkel, alapban nem lesz semmi hatásuk, de ha látni akarjuk ezeket az információkat, akkor könnyen bekapcsolhatjuk ezeket.

Kivétel pont a „sima” információk jelzésére való Write-Host. Ha ezt berakjuk a szkriptünkbe akkor, ha törik, ha szakad az ki lesz írva. Sőt! Ez nehézséget jelent a Workflow-knál (lásd 3.1 PowerShell workflow fejezet), hiszen ott nem is használhatjuk ezt az információk jelzésére.

Pont ezen hiányosságok orvoslására hozták létre a Write-Information  cmdletet. Első nekifutásra látszólag nem csinál semmit:

PS C:\> Write-Information -MessageData "Szép szöveg"

PS C:\>

De ha bekapcsoljuk a vonatkozó $InformationPreference változót, akkor már látjuk a szövegünket:

PS C:\> $InformationPreference = "Continue"

PS C:\> Write-Information -MessageData "Szép szöveg"

Szép szöveg

Ez a szöveg ugyanúgy nem vándorol a futószalagon, mint a Write-Host „kimenete”:

PS C:\> Write-Information -MessageData "Szép szöveg" | Get-Member

Szép szöveg

Get-Member : You must specify an object for the Get-Member cmdlet.

At line:1 char:48

+ Write-Information -MessageData "Szép szöveg" | Get-Member

+                                                ~~~~~~~~~~

    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperationE

   xception

    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Comman

   ds.GetMemberCommand

De az igazi értelme ennek a cmdletnek egy kicsit trükkösebb módon jön elő:

PS C:\> Write-Information -MessageData "Szép szöveg" -Tags Fontos –InformationV

ariable Info

PS C:\> $Info

Szép szöveg

Azaz átirányítottam a információt egy $Info változóba. A tartalma látszólag egy szöveg, de ha megvizsgáljuk, akkor látszik, hogy nem az:

PS C:\> $Info | gm

 

 

   TypeName: System.Management.Automation.InformationRecord

 

Name            MemberType Definition

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

Equals          Method     bool Equals(System.Object obj)

GetHashCode     Method     int GetHashCode()

GetType         Method     type GetType()

ToString        Method     string ToString()

Computer        Property   string Computer {get;set;}

ManagedThreadId Property   uint32 ManagedThreadId {get;set;}

MessageData     Property   System.Object MessageData {get;}

NativeThreadId  Property   uint32 NativeThreadId {get;set;}

ProcessId       Property   uint32 ProcessId {get;set;}

Source          Property   string Source {get;set;}

Tags            Property   System.Collections.Generic.List[string] Tags {get;}

TimeGenerated   Property   datetime TimeGenerated {get;set;}

User            Property   string User {get;set;}

Hogyan férünk hozzá ezekhez a tulajdonságokhoz? Format-List-el sajnos nem:

PS C:\> $Info | fl *

Szép szöveg

De egy kis kerülőúton hozzáférünk ezekhez:

$info | gm -MemberType Properties |

    Select-Object -ExpandProperty name | %{

        [pscustomobject]@{Name = $_; Value = $info.$_}

    }

Ennek eredménye:

Name            Value

----            -----

Computer        STLeno

ManagedThreadId 7

MessageData     Szép szöveg

NativeThreadId  5360

ProcessId       10604

Source          Write-Information

Tags            Fontos

TimeGenerated   2015.10.19. 23:10:21

User            STLENO\Tibi

És itt tényleg minden fontos információt megtalálunk, amit általában a szkriptek futásával kapcsolatban elő szoktunk állitani: ki futtatta, hol, mit és mikor. A Tags tulajdonság szabadon kitölthető tetszőleges információval, így egyedi jelleget is ölthet egy ilyen információmorzsa.

Ezt természetesem távoli végrehajtás során is használhatjuk:

PS C:\> Invoke-Command -ComputerName dc2016 -ScriptBlock {Write-Information -Me

ssageData "Távoli info" -Tags Remote -InformationAction continue} -InformationV

ariable localinfo

Távoli info

PS C:\> $localinfo

Távoli info

Itt a távoli gépen kiadott Write-Information eredményét kaptam el a $localinfo változóval a helyi gépen. Erre alkalmazva a korábban látott elemző kifejezést:

PS C:\> $localinfo | gm -MemberType Properties |

>>>     Select-Object -ExpandProperty name | %{

>>>         [pscustomobject]@{Name = $_; Value = $localinfo.$_}

>>>     }

 

Name            Value

----            -----

Computer        DC2016.mydomain.local

ManagedThreadId 1

MessageData     Távoli info

NativeThreadId  5064

ProcessId       4544

Source          Write-Information

Tags            Remote

TimeGenerated   2015. 10. 20. 23:13:14

User            MYDOMAIN\Administrator

 



Word To HTML Converter