Skip to content

Instantly share code, notes, and snippets.

@turboBasic
Last active May 13, 2020 13:17
Show Gist options
  • Save turboBasic/5f1eac2ab5500f9206e8da927aebdc8c to your computer and use it in GitHub Desktop.
Save turboBasic/5f1eac2ab5500f9206e8da927aebdc8c to your computer and use it in GitHub Desktop.
Get-DynamicModuleImportsExample in #powershell, considering ./private and ./public subfolders with individual .ps1 files. Source: @RamblingCookieMonster/PSStackExchange/blob/master/PSStackExchange/PSStackExchange.psm1
#
# Module manifest for module 'PSStackExchange'
#
# Generated by: RamblingCookieMonster
#
# Generated on: 8/2/2015
#
@{
# Script module or binary module file associated with this manifest.
RootModule = 'myModule.psm1'
# Version number of this module.
ModuleVersion = '1.0.2'
# ID used to uniquely identify this module
GUID = '......'
# Author of this module
Author = 'Warren Frame'
# Company or vendor of this module
#CompanyName = 'Unknown'
# Copyright statement for this module
Copyright = '(c) 2015 Warren F. All rights reserved.'
# Description of the functionality provided by this module
Description = 'PowerShell module to query the StackExchange API'
# Minimum version of the Windows PowerShell engine required by this module
PowerShellVersion = '3.0'
# Name of the Windows PowerShell host required by this module
# PowerShellHostName = ''
# Minimum version of the Windows PowerShell host required by this module
# PowerShellHostVersion = ''
# Minimum version of Microsoft .NET Framework required by this module
# DotNetFrameworkVersion = ''
# Minimum version of the common language runtime (CLR) required by this module
# CLRVersion = ''
# Processor architecture (None, X86, Amd64) required by this module
# ProcessorArchitecture = ''
# Modules that must be imported into the global environment prior to importing this module
# RequiredModules = @()
# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()
# Script files (.ps1) that are run in the caller's environment prior to importing this module.
# ScriptsToProcess = @()
# Type files (.ps1xml) to be loaded when importing this module
# TypesToProcess = @()
# Format files (.ps1xml) to be loaded when importing this module
FormatsToProcess = 'myModule.Format.ps1xml'
# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
# NestedModules = @()
# Functions to export from this module
FunctionsToExport = '*'
# Cmdlets to export from this module
CmdletsToExport = '*'
# Variables to export from this module
VariablesToExport = '*'
# Aliases to export from this module
AliasesToExport = '*'
# DSC resources to export from this module
# DscResourcesToExport = @()
# List of all modules packaged with this module
# ModuleList = @()
# List of all files packaged with this module
# FileList = @()
# Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
PrivateData = @{
PSData = @{
# Tags applied to this module. These help with module discovery in online galleries.
Tags = @('StackExchange', 'StackOverflow')
# A URL to the license for this module.
LicenseUri = 'https://github.com/...'
# A URL to the main website for this project.
ProjectUri = 'https://github.com/...'
# A URL to an icon representing this module.
# IconUri = ''
# ReleaseNotes of this module
# ReleaseNotes = ''
} # End of PSData hashtable
} # End of PrivateData hashtable
# HelpInfo URI of this module
# HelpInfoURI = ''
# Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
# DefaultCommandPrefix = ''
}
<#
<one of PSModulePath directories> /
myModule/
Private/
includeMe1.ps1
includeMe2.ps1
Public/
thisWillBeincludedAndExported1.ps1
thisWillBeincludedAndExported2.ps1
en-US/
myModule.Format.ps1xml
myModule.psd1
myModule.psm1
#>
#Get public and private function definition files.
$Public = @( Get-ChildItem -Path $PSScriptRoot\Public\*.ps1 -ErrorAction SilentlyContinue )
$Private = @( Get-ChildItem -Path $PSScriptRoot\Private\*.ps1 -ErrorAction SilentlyContinue )
#Dot source the files
Foreach($import in @($Public + $Private))
{
Try
{
. $import.fullname
}
Catch
{
Write-Error -Message "Failed to import function $($import.fullname): $_"
}
}
# Here I might...
# Read in or create an initial config file and variable
# Export Public functions ($Public.BaseName) for WIP modules
# Set variables visible to the module and its functions only
Export-ModuleMember -Function $Public.Basename
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment