PowerShellBuddy.psm1
using namespace System.Management.Automation #region Public Cmdlets-Code ausführen und Function in die Session Exportieren Get-ChildItem "$PSScriptRoot\Public\*.ps1" -PipelineVariable cmdlet -Exclude '*.Tests.ps1' -File | ForEach-Object -Process { . $cmdlet.FullName Export-ModuleMember -Function $cmdlet.BaseName } #endregion #region Aufräumarbeiten bei Remove-Module -Name AKPT $MyInvocation.MyCommand.ScriptBlock.Module.OnRemove = { } #endregion #region Public Cmdlets laden $publicScripts = Get-ChildItem -Path (Join-Path $PSScriptRoot 'Public') -Filter '*.ps1' -Exclude '*.Tests.ps1' -File foreach ($s in $publicScripts) { . $s.FullName } #endregion #region Export: nur tatsächlich definierte Funktionen exportieren # Annahme: Funktionsname = Dateiname (BaseName). Falls du abweichst, trage sie in $explicit ein. $byConvention = $publicScripts.BaseName # Optional: manuelle Ausnahmen/Abweichungen ergänzen (falls nötig) $explicit = @() # z.B. 'Get-WeatherEx' # Nur Funktionen exportieren, die lokal wirklich existieren $toExport = @($byConvention + $explicit) | Where-Object { Test-Path Function:\$_ } | Sort-Object -Unique # Aliasse automatisch mit exportieren (falls du welche setzt) $aliases = Get-Alias | Where-Object { $_.Definition -in $toExport } | Select-Object -ExpandProperty Name #endregion #region Aufräumen bei Remove-Module PowerShellBuddy $MyInvocation.MyCommand.ScriptBlock.Module.OnRemove = { try { # Beispiel: Event-Handler, Jobs, temporäre Variablen etc. aufräumen Get-Job -Name 'PowerShellBuddy-*' -ErrorAction SilentlyContinue | Remove-Job -Force -ErrorAction SilentlyContinue Unregister-Event -SourceIdentifier 'PowerShellBuddy-*' -ErrorAction SilentlyContinue Remove-Variable -Name 'PowerShellBuddy*' -Scope Script -ErrorAction SilentlyContinue } catch { } } #endregion |