编辑已导入的模块

29

在导入我的 PowerShell 模块 (MyModule.psm1) 之前,我已经在其中编写了一个函数:

Function T1()
{
    Write-Host "T1 is just called" -ForegroundColor red
}

在我的MyModule.psd1中:

@{
    PowerShellVersion = '2.0'
    PowerShellHostName = ''
    PowerShellHostVersion = '2.0'
    RequiredModules = @()
    ScriptsToProcess = @()
    NestedModules = @()
    FunctionsToExport = '*'
    CmdletsToExport = '*'
    VariablesToExport = '*'
    ModuleList = @()
    FileList = @()
}

当我将这两个文件复制到以下目录中时,它已成功导入:

C:\Users\fwaheed\Documents\WindowsPowerShell\Modules\MyModule

我可以在 PowerShell 会话中运行 T1。但现在我想要在同一个模块中添加一个新的函数,即:

Function T2()
{
    Write-Host "Its now T2.." -ForegroundColor red
}
即使我重新启动了PowerShell会话,它仍然无法识别T2,而T1仍然可以使用。我该如何编辑已经导入的模块以使更改立即生效。

即使我重新启动PowerShell会话,它也无法识别T2,但T1仍然有效。我该如何编辑已导入的模块以使更改立即生效。


5
仅使用import-module mymodule -force不够吗? - CB.
也尝试过了,但徒劳无功.. :( - Farrukh Waheed
谢谢伙计... 刚刚移除了模块,重新导入并尝试使用 "import-module MyModule -force" 通过添加4个新的函数,它成功运行了... - Farrukh Waheed
3个回答

58

使用-Force命令与Import-Module一起使用,它会重新加载它。


33

一旦导入了一个模块,由于该模块被加载到内存中,因此对其进行的更改将不会被识别。但是,我总是能够执行 Remove-Module foo,然后再执行Import-Module foo来加载新的函数。

所有这些说法,你的PSD1文件看起来不对。它应该有一个设置为 'MyModule.psm1' 的ModuleToProcess字段。然后当您执行Import-Module MyModuleImport-Module .\mymodule.psd1时,PowerShell会找到并加载相关的MyModule.psm1文件。我想知道这是否让你违反了一些PowerShell缓存的规定?


Keith,我只发布了 psd1 文件的一部分,其中设置了导出方法。它确实有 ModuleToProcess,否则就无法导入我的模块脚本,对吧? - Farrukh Waheed
1
那差不多正确。当导入PSD1时,您必须具有该条目才能加载PSM1。但是,您可以导入模块mymodule.psm1,从而绕过您的PSD1。不过我相当确定,如果您执行import-module mymodule,它将处理PSD1,然后指示PowerShell需要加载MyModule.psm1。 - Keith Hill

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接