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