TypeDataExtensions.psm1
<#
.SYNOPSIS Exports TypeData to a *.ps1xml to be re-used with Update-TypeData. .EXAMPLE Get-TypeData | Export-TypeData -Path .\all.ps1xml Exports all current TypeData to a single file. #> function Export-TypeData { [CmdletBinding()] Param( [Parameter(Mandatory, ValueFromPipeline)] [System.Management.Automation.Runspaces.TypeData]$TypeData, [Parameter(Mandatory)] [String]$Path, [Parameter()] [String[]]$Exclude ) Begin { Set-Content -Path $Path -Value "<?xml version=`"1.0`" encoding=`"utf-8`" ?> <Types>" } Process { Add-Content -Path $Path -Value " <Type> <Name>$($TypeData.TypeName)</Name> <Members> $($($TypeData.Members.Keys | Where-Object {$_ -NotIn $Exclude} | ForEach-Object { Switch($TypeData.Members.$_) { {$_ -Is [System.Management.Automation.Runspaces.AliasPropertyData]} { " <AliasProperty> <Name>$($_.Name)</Name> <ReferencedMemberName>$($_.ReferencedMemberName)</ReferencedMemberName> </AliasProperty>" } {$_ -Is [System.Management.Automation.Runspaces.CodeMethodData]} { " <CodeMethod> <Name>$($_.Name)</Name> <CodeReference> <TypeName>$($_.CodeReference.DeclaringType)</TypeName> <MethodName>$($_.CodeReference.Name)</MethodName> </CodeReference> </CodeMethod>" } {$_ -Is [System.Management.Automation.Runspaces.CodePropertyData]} { " <CodeProperty> <Name>$($_.Name)</Name> <GetCodeReference> <TypeName> $($_.GetCodeReference.DeclaringType) </TypeName> <MethodName>$($_.GetCodeReference.Name)</MethodName> </GetCodeReference> </CodeProperty>" } {$_ -Is [System.Management.Automation.Runspaces.NotePropertyData]} { " <NoteProperty> <Name>$($_.Name)</Name> <Value>$($_.Value)</Value> </NoteProperty>" } {$_ -Is [System.Management.Automation.Runspaces.ScriptMethodData]} { " <ScriptMethod> <Name>$($_.Name)</Name> <Script> $($_.Script) </Script> </ScriptMethod>" } {$_ -is [System.Management.Automation.Runspaces.ScriptPropertyData]} { " <ScriptProperty> <Name>$($_.Name)</Name> <GetScriptBlock> $($_.GetScriptBlock) </GetScriptBlock> </ScriptProperty>" } } }) -join "`n") </Members> </Type>" } End { Add-Content -Path $Path -Value "</Types> " } } Export-ModuleMember -Function Export-TypeData |