Resumo do problema: Quando tento chamar Import-Module de uma função avançada do PowerShell, ele não importa as novas alterações. Talvez seja um problema de cache?
O que funciona até agora:
- Importar o módulo digitando o comando completo no terminal funciona muito bem, mas quero automatizar isso para não ter que digitar o caminho completo toda vez que mudar para um novo módulo.
Import-Module -Name 'G:\Development\POSH\dev\modules\JnTestModule\JnTestModule\JnTestModule.psd1' -Force -Verbose
- Copiar minha função avançada para um arquivo externo chamado testModule.ps1 e executá-lo diretamente da pasta raiz do projeto do módulo também funciona muito bem.
Código de exemplo em testModule.ps1
function Import-JnScriptModule
{
<#
.SYNOPSIS
Quickly import my custom PowerShell script module for testing changes.
.EXAMPLE
Import-JnScriptModule
#>
[CmdletBinding()]
[Alias('imp')]
param()
begin {}
process
{
$modulesRootDirectory = "G:\Development\POSH\dev\modules"
Write-Debug "modulesRootDirectory:$modulesRootDirectory"
$currentDirectory = (Get-Location).Path
Write-Debug "currentDirectory:$currentDirectory"
Write-Verbose "Check if we are in the modules dev directory."
if ($currentDirectory.StartsWith("$modulesRootDirectory"))
{
if(!$moduleName)
{
$moduleName = (Get-Item -Path $currentDirectory).BaseName
}
Write-Debug "moduleName:$moduleName"
$manifestFileName = "$moduleName.psd1"
Write-Debug "manifestFileName:$manifestFileName"
$projectDirectory = Join-Path -Path $modulesRootDirectory -ChildPath $moduleName
Write-Debug "projectDirectory:$projectDirectory"
$moduleManifestFullPath = Join-Path -Path $projectDirectory -ChildPath $moduleName -AdditionalChildPath $manifestFileName
Write-Debug "moduleManifestFullPath:$moduleManifestFullPath"
if ((Test-Path -Path $moduleManifestFullPath) -eq $true)
{
Remove-Module -Name "$moduleName" -Force -ErrorAction SilentlyContinue
Import-Module -Name "$moduleManifestFullPath" -Force -Verbose
}
else
{
Write-Verbose "Unable to find module manifest path at '$moduleManifestFullPath'."
}
}
else
{
Write-Warning "Skipped import because not a module folder."
}
}
end {}
}
Import-JnScriptModule
Essa maneira funciona, mas então preciso incluir uma cópia de testModule.ps1 em cada pasta de projeto de módulos e não poderei usar o alias 'imp' para executá-lo. Também prefiro ter o código em um local central, se possível.
O que eu quero realizar: adicionar a função avançada a um módulo de script personalizado que eu uso para gerenciar meus módulos e, então, usar isso para importar rapidamente um módulo de script personalizado em desenvolvimento.
Gostaria de poder simplesmente digitar alias 'imp' enquanto estiver no diretório do projeto do módulo para uma importação rápida, testar alterações e iterações rápidas. Veja alguns exemplos abaixo.
PS G:\Development\POSH\dev\modules\JnTestModule> imp
PS G:\Development\POSH\dev\modules\JnTestModule2> imp
Quando eu digito 'imp', parece executar a função e importar o módulo, mas as últimas alterações não são importadas. Não tenho certeza se isso é um problema de cache ou não, mas na minha função, eu me certifico de remover o módulo existente da sessão antes de forçar outra importação. Isso não está funcionando.
Alguém sabe se existe uma maneira de fazer isso funcionar?
Também estou aberto a outras sugestões ou soluções alternativas. Obrigado!