Public/Reset-Module.ps1
|
$Script:TestValidPath = { param([string]$Path) $null = [System.Management.Automation.Language.Parser]::ParseInput( "`"$Path`"", [ref]$null, [ref]$null ) return $? } <# .SYNOPSIS Resets a PowerShell module. .DESCRIPTION This function unloads and reloads a specified PowerShell module. If no module name is provided, it resets all loaded modules. .PARAMETER Name The name of the module to reset. .PARAMETER Quiet If specified, suppresses verbose output. #> function Reset-Module { param( [Parameter(Mandatory = $false, Position = 0, ValueFromPipelineByPropertyName = $true)] [ArgumentCompleter({ param($commandName, $parameterName, $wordToComplete) Get-Module | Select-Object -ExpandProperty Name | Where-Object { $_ -like "$wordToComplete*" } })] [string] $Name, [Parameter(Mandatory = $false)] [switch] $Quiet ) $Module = $null # Unload the module if it's already loaded if ($Name) { if ((& $Script:TestValidPath -Path $Name)) { $LocalModule = Get-Item -Path $Name $Module = [pscustomobject]@{ Name = $LocalModule.BaseName LocalModulePath = $LocalModule } } else { $Module = Get-Module -Name $Name } } else { $Module = Get-Module } # Force reload off all module in $Module $Module | ForEach-Object { Write-Verbose "Stopping $($_.Name)" Remove-Module -Name $_.Name -Force Import-Module -Name "$(if ($_.LocalModulePath) { $_.LocalModulePath } else { $_.Name })" -Force } } |