EZOut.psm1
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseDeclaredVarsMoreThanAssignments", "", Justification="Using Within the Module")] [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSAvoidGlobalVars", "", Justification="Allowing Extensibility")] param() $Script:FormatModules = @{} $script:TypeModules = @{} #region Formatters . $psScriptRoot\Add-FormatData.ps1 . $psScriptRoot\Clear-FormatData.ps1 . $psScriptRoot\Remove-FormatData.ps1 . $psScriptRoot\Out-FormatData.ps1 . $psScriptRoot\Import-FormatView.ps1 . $psScriptRoot\Import-TypeView.ps1 . $psScriptRoot\Write-FormatControl.ps1 . $psScriptRoot\Write-FormatView.ps1 . $psScriptRoot\Write-FormatCustomView.ps1 . $psScriptRoot\Write-FormatListView.ps1 . $psScriptRoot\Write-FormatTableView.ps1 . $psScriptRoot\Write-FormatTreeView.ps1 . $psScriptRoot\Write-FormatViewExpression.ps1 . $psScriptRoot\Write-FormatWideView.ps1 Set-Alias Write-CustomAction Write-FormatCustomView Set-Alias Show-CustomAction Write-FormatViewExpression #endregion Formatters #region Format Discovery . $psScriptRoot\Get-FormatFile.ps1 . $psScriptRoot\Find-FormatView.ps1 #endregion Format Discovery #region Property Sets . $psScriptRoot\ConvertTo-PropertySet.ps1 . $psScriptRoot\Get-PropertySet.ps1 . $psScriptRoot\Write-PropertySet.ps1 Set-Alias ConvertTo-TypePropertySet ConvertTo-PropertySet #endregion Property Sets #region TypeData . $psScriptRoot\Add-TypeData.ps1 . $psScriptRoot\Clear-TypeData.ps1 . $psScriptRoot\Remove-TypeData.ps1 . $psScriptRoot\Out-TypeData.ps1 . $psScriptRoot\Write-TypeView.ps1 #endregion TypeData . $PSScriptRoot\Write-EZFormatFile.ps1 . $psScriptRoot\@.ps1 # Import Splatter $myInvocation.MyCommand.ScriptBlock.Module.pstypenames.insert(0,'EZOut.RichModuleInfo') #region Import Parts # Parts are simple .ps1 files beneath a /Parts directory that can be used throughout the module. $partsDirectory = $( # Because we want to be case-insensitive, and because it's fast foreach ($dir in [IO.Directory]::GetDirectories($psScriptRoot)) { # [IO.Directory]::GetDirectories() if ($dir -imatch "\$([IO.Path]::DirectorySeparatorChar)Parts$") { # and some Regex [IO.DirectoryInfo]$dir;break # to find our parts directory. } }) if ($partsDirectory) { # If we have parts directory foreach ($partFile in $partsDirectory.EnumerateFileSystemInfos()) { # enumerate all of the files. if ($partFile.Extension -ne '.ps1') { continue } # Skip anything that's not a PowerShell script. $partName = # Get the name of the script. $partFile.Name.Substring(0, $partFile.Name.Length - $partFile.Extension.Length) $ExecutionContext.SessionState.PSVariable.Set( # Set a variable $partName, # named the script that points to the script (e.g. $foo = gcm .\Parts\foo.ps1) $ExecutionContext.SessionState.InvokeCommand.GetCommand($partFile.Fullname, 'ExternalScript').ScriptBlock ) } } #endregion Import Parts Export-ModuleMember -Function * -Alias * $myInvocation.MyCommand.ScriptBlock.Module.OnRemove = { Clear-FormatData Clear-TypeData } |