PSNtfy.psm1
|
[string]$Root = (Get-Item -Path $PSScriptRoot -Force) # paths $PublicPath = Join-Path $Root "public" $PrivatePath = Join-Path $Root "private" $ClassesPath = Join-Path $Root "classes" # get all files for import/export $public = Get-ChildItem -Path $PublicPath -Recurse -Force | Where-Object { $_.Extension -eq ".ps1" } $private = Get-ChildItem -Path $PrivatePath -Recurse -Force | Where-Object { $_.Extension -eq ".ps1" } $classes = Get-ChildItem -Path $ClassesPath -Recurse -Force | Where-Object { $_.Extension -eq ".ps1" } # Import all to session $public | ForEach-Object { . $_.FullName } $private | ForEach-Object { . $_.FullName } $classes | ForEach-Object { . $_.FullName } # Export 'public' functions (w/ aliases if present) $aliases = @() $public | ForEach-Object { $alias = Get-Alias -Definition $_.BaseName -ErrorAction SilentlyContinue if ($alias) { $aliases += $alias Export-ModuleMember -Function $_.BaseName -Alias $alias } else { # Export with no alias Export-ModuleMember -Function $_.BaseName } } # Complain if missing functions in manifest $ManifestPath = Join-Path $Root "PSNtfy.psd1" $Manifest = Test-ModuleManifest $ManifestPath -ErrorAction Stop $Added = $public | Where-Object {$_.BaseName -notin $Manifest.ExportedFunctions.Keys} $Removed = $Manifest.ExportedFunctions.Keys | Where-Object {$_ -notin $public.BaseName} $aliasesAdded = $aliases | Where-Object {$_.Name -notin $Manifest.ExportedAliases.Keys} $aliasesRemoved = $Manifest.ExportedAliases.Keys | Where-Object {$_ -notin $aliases.Name} if ($Added -or $Removed -or $aliasesAdded -or $aliasesRemoved) { throw "Module manifest ExportedFunctions or ExportedAliases is out of date. Please update:`n Added Functions: $($Added.BaseName -join ', ')`n Removed Functions: $($Removed -join ', ')`n Added Aliases: $($aliasesAdded -join ', ')`n Removed Aliases: $($aliasesRemoved -join ', ')" } |