en-us/about_PSTypeExtensionTools.help.txt

TOPIC
    about_PSTypeExtensionTools
 
SHORT DESCRIPTION
    This PowerShell module contains commands that make it easier to work with
    type extensions. Many of these commands are wrappers for built-in tools like
    Get-TypeData or Update-TypeData. The commands in this module simplify
    the process of finding, creating, exporting, and importing type extensions.
 
LONG DESCRIPTION
    Let's say you want to update a number object, but you have no idea what the
    type name is. Once you have read help for the commands in this module you
    could run a PowerShell command like this:
 
    PS C:\> 123 | Get-PSType |
    Add-PSTypeExtension -MemberType ScriptProperty -MemberName SquareRoot
    -Value { [math]::Sqrt($this)}
 
    Use $this to reference the object instead of $_. Now you can get the new
    property.
 
    PS C:\> $x = 123
    PS C:\> $x.SquareRoot
    11.0905365064094
 
    Once you know the type name, you can add other type extensions.
 
    Add-PSTypeExtension -TypeName system.int32 -MemberType ScriptProperty -MemberName Squared -value { $this*$this}
    Add-PSTypeExtension -TypeName system.int32 -MemberType ScriptProperty -MemberName Cubed -value { [math]::Pow($this,3)}
    Add-PSTypeExtension -TypeName system.int32 -MemberType ScriptProperty -MemberName Value -value { $this}
    Add-PSTypeExtension -TypeName system.int32 -MemberType ScriptMethod -MemberName GetPercent -value {Param([int32]$Total,[int32]$Round=2) [math]::Round(($this/$total)*100,$round)}
 
    Here's how it might look:
 
    PS C:\> $x = 38
    PS C:\> $x | select *
 
          SquareRoot Squared Cubed Value
          ---------- ------- ----- -----
    6.16441400296898 1444 54872 38
 
    PS C:\> $x.GetPercent(50)
    76
    PS C:\> $x.GetPercent(100)
    38
    PS C:\> $x.GetPercent(110,4)
    34.5455
 
    To see what has been defined, you can use Get-PSTypeExtension. You can
    choose to see all extensions or selected ones by member name.
 
    PS C:\> Get-PSTypeExtension system.int32
 
    TypeName: System.Int32
 
    Name Type Value
    ---- ---- -----
    SquareRoot ScriptProperty [math]::Sqrt($this)
    Squared ScriptProperty $this*$this
    Cubed ScriptProperty [math]::Pow($this,3)
    Value ScriptProperty $this
    GetPercent ScriptMethod Param([int32]$Total,[int32]$Round=2) [math]::Round(($this/$total)*100,$round)
 
    If you always want these extensions, you would have to put the commands into
    your PowerShell profile script. Or you can export the extensions to a JSON
    or XML file. You can either export all members or selected ones which is
    helpful if you are extending a type that already has type extensions from
    PowerShell.
 
    PS C:\> Get-PSTypeExtension system.int32 -all | Export-PSTypeExtension -TypeName system.int32 -Path c:\work\int32-types.json
 
    In your PowerShell profile script, you can then re-import the type extension
    definitions.
 
    Import-PSTypeExtension -Path C:\work\int32-types.json
 
    You can also import a directory of type extensions with a single command.
 
    dir c:\scripts\mytypes | Import-PSTypeExtension
 
    A number of sample files with type extensions can be found in this module's
    Samples folder or GitHub repository at
    https://github.com/jdhitsolutions/PSTypeExtensionTools/tree/master/samples.
    When you have imported the module, you can access the samples folder using
    the $PSTypeSamples variable.
 
    Import-PSTypeExtension $PSTypeSamples\measure-extensions.json
 
    CREATING PS1XML FILES
    The Export-PSTypeExtension command will also export extensions to a
    properly formatted .ps1xml file. This can be useful when building type
    extension files for a module where you want to use the traditional ps1xml
    form. You can also import these types of files with Update-TypeData with
    the -AppendPath or -PrependPath parameters.
 
    When exporting to .ps1xml file, Export-PSTypeExtension has a dynamic
    parameter, Append. Tis allows you to combine multiple type extensions into
    a single file. If you intend to use a property set, create that file first.
    Then append your custom type extensions to that file.
 
NOTE
    PowerShell type extensions only last for the duration of your PowerShell
    session. If you make a mistake that is causing problems, restart PowerShell
    or use the Remove-TypeData cmdlet.
 
TROUBLESHOOTING NOTE
    Don't try to append or manually update an export file. If you have changes,
    re-run the export command and generate the file anew.
    Remember to use $this to reference the object and NOT $_.
    Remember to enclose scriptblocks in {}.
 
SEE ALSO
    + Add-PSTypeExtension
    + Export-PSTypeExtension
    + Get-PSType
    + Get-PSTypeExtension
    + Import-PSTypeExtension
    + Update-TypeData
    + New-PSPropertySet
 
    This project was first described at
    http://jdhitsolutions.com/blog/powershell/5777/a-powershell-module-for-your-type-extensions
 
KEYWORDS
- typedata
- typeextension
- propertyset