Lit*_*ain 2 powershell powershell-7.3
我是 PowerShell 的新手。我在导入模块时遇到了问题。当我尝试在该模块中调用 cmdlet 时,似乎会自动导入已安装的模块。
那是:
Install-Module -Name PSscriptAnalyzerGet-Module PSScriptAnalyzer
# Show nothing
Run Code Online (Sandbox Code Playgroud)
PSScriptAnalyzer:
Invoke-ScriptAnalyzer -Path ./ -Recurse
# Ignore any info
Run Code Online (Sandbox Code Playgroud)
PSScriptAnalyzer将自动导入:
Get-Module PSScriptAnalyzer
Run Code Online (Sandbox Code Playgroud)
显示如下:
ModuleType Version PreRelease Name
ExportedCommands
---------- ------- ---------- ---- ----------------
Script 1.21.0 PSScriptAnalyzer {Get-ScriptAnalyzerRule, Invoke-Formatter, Invoke-ScriptAnalyzer}
Run Code Online (Sandbox Code Playgroud)
为什么模块只要导入了就会自动导入呢ExportedCommands?它的机制是什么?如果是这样,那么Remove-Module在一般使用场景中似乎就没有多大意义了。
提前致谢。
此功能称为模块自动加载,在 PowerShell 3.0 中引入:
当您第一次在已安装的模块中运行任何命令时,PowerShell 会自动导入模块。现在,您可以使用模块中的命令,而无需进行任何设置或配置文件配置,因此在将模块安装到计算机上后无需管理它们。
如果是这样,那么
Remove-Module在一般使用场景中似乎就没有多大意义了。
确实,cmdlet 很少使用,但Remove-Module仍然有其用途,主要用于模块开发。当您需要测试对模块的更改而不需要重新启动会话时,cmdlet 仍然可行(这只适用于非二进制模块,对于二进制模块,您必须重新启动会话,程序集无法卸载)。Import-Module -Force也适用于相同的用例。
另一个用例(也是罕见的)是具有自定义OnRemove回调的模块。请参阅使用 OnRemove 事件。
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |