Created
April 22, 2025 09:37
-
-
Save CN-CODEGOD/e7f65abf875f7476d80cc13546985d89 to your computer and use it in GitHub Desktop.
powershell export class from modules
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Define the types to export with type accelerators. | |
| $ExportableTypes =@( | |
| [DefinedTypeName] | |
| ) | |
| # Get the internal TypeAccelerators class to use its static methods. | |
| $TypeAcceleratorsClass = [psobject].Assembly.GetType( | |
| 'System.Management.Automation.TypeAccelerators' | |
| ) | |
| # Ensure none of the types would clobber an existing type accelerator. | |
| # If a type accelerator with the same name exists, throw an exception. | |
| $ExistingTypeAccelerators = $TypeAcceleratorsClass::Get | |
| foreach ($Type in $ExportableTypes) { | |
| if ($Type.FullName -in $ExistingTypeAccelerators.Keys) { | |
| $Message = @( | |
| "Unable to register type accelerator '$($Type.FullName)'" | |
| 'Accelerator already exists.' | |
| ) -join ' - ' | |
| throw [System.Management.Automation.ErrorRecord]::new( | |
| [System.InvalidOperationException]::new($Message), | |
| 'TypeAcceleratorAlreadyExists', | |
| [System.Management.Automation.ErrorCategory]::InvalidOperation, | |
| $Type.FullName | |
| ) | |
| } | |
| } | |
| # Add type accelerators for every exportable type. | |
| foreach ($Type in $ExportableTypes) { | |
| $TypeAcceleratorsClass::Add($Type.FullName, $Type) | |
| } | |
| # Remove type accelerators when the module is removed. | |
| $MyInvocation.MyCommand.ScriptBlock.Module.OnRemove = { | |
| foreach($Type in $ExportableTypes) { | |
| $TypeAcceleratorsClass::Remove($Type.FullName) | |
| } | |
| }.GetNewClosure() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment