Often in Windows PowerShell module development, you’ll need to remove and import a module again, and again, to get the newest changes to your functions. It wasn’t long after some recent coding, that I tired from entering rmo mymodule and ipmo mymodule (the rmo alias is for Remove-Module and ipmo is used for Import-Module). Even when I added both commands to the same line, with a semi-colon in between: rmo mymodule; ipmo mymodule, and used wildcards: rmo mym*;ipmo mym*, I was still annoyed it was taking too much time.
Enter this quick function and alias:
Set-Alias -Name dump -Value Reset-Module Function Reset-Module { [CmdletBinding()] Param () Begin { } # End Begin. Process { Write-Verbose -Message 'Removing module.' Remove-Module -Name mymodule -ErrorAction SilentlyContinue -Verbose:$false Write-Verbose -Message 'Adding module.' Import-Module -Name mymodule -Verbose:$false } # End Process. End { } # End End. } # End Function.
Now, I simply enter dump and it will remove and import the module again, with the newest changes. It’s PowerShell: You can use it to develop, and use it to speed up development.
Note: In case you’re thinking it, yes, there are many things that can be improved in this function: checking for the module before trying to remove it (and eliminating the -ErrorAction parameter in Remove-Module), not hard-coding the module’s name and using a parameter instead, and adding help. Even so, I wanted to throw something together quickly that probably wouldn’t live long after the end of the module’s development. Providing it does, I can add some refinements later.
Hi Tommy,
you could also use the -force parameter of Import-Module in order to re-import a module.
That’s awesome, Dirk; I, apparently, hadn’t read that far down in the help file! Thank you for highlighting this parameter and its purpose when used with the Import-Module cmdlet. This might even be a candidate for the $PSDefaultParameterValues preference variable: $PSDefaultParameterValues += @{‘Import-Module:Force’ = $true}