#PSTip Extending Type Data

Note: This tip requires PowerShell 3.0 or above.

In the previous article Matt used lambda functions to simplify data manipulation . In this tip I want to show you a way of using functions as methods by extending the System.Array class.

Beginning in Windows PowerShell 3.0 we can use the Update-TypeData to update types with new type data. In previous versions of PowerShell this operation required writing a ps1xml file (lots of XML to deal with). Here’s an example that adds a _‘map’ script _method to Array objects :

Update-TypeData -Force -MemberType ScriptMethod -MemberName map -TypeName System.Array -Value {
    param([object]$o)
    if($o -is [int]) { $this | foreach {$_ * $o} }
}

@(1..5).map(2)

2
4
6
8
10

One caveat of the new added method is its signature. When viewed using the Get-Member cmdlet we can see that the method doesn’t accept any arguments though the script block used to extend the type is using a param block with one parameter ($object).

PS> Get-Member -InputObject @(1..5) -MemberType ScriptMethod

   TypeName: System.Object[]
Name MemberType   Definition
---- ----------   ----------
map  ScriptMethod System.Object map();

In the same manner , we can use Update-TypeData to “attach” new functionality to .NET types. Check the help of Update-TypeData for more information and code examples.

Share on: