PowerShell是否存储已导入模块的临时副本?(PS5.1/Win10 1709)
关于PowerShell会话中已加载模块的存储机制
你遇到的这个情况其实很典型——当PowerShell加载模块时,会把模块的全部内容(包括函数、变量、类等)加载到当前会话的内存中,之后磁盘上的模块文件即使被修改或覆盖,也不会影响已经在内存里运行的模块版本。
针对你的问题,明确回答:PowerShell确实会在当前会话的内存中存储已加载模块的完整状态,你可以通过以下方式查看和验证:
使用
Get-Module命令查看会话中加载的模块信息:
运行Get-Module <modulename>,会返回当前会话中该模块的详细数据,包括加载时的版本、导出的命令、模块路径(注意路径还是指向磁盘,但内容是内存中的快照)。即使磁盘文件已经被覆盖,这里显示的Version和ExportedCommands还是你最初加载模块时的最新版本。查看内存中实际生效的命令:
用Get-Module <modulename> | Select-Object -ExpandProperty ExportedCommands,可以列出当前会话中真正可用的命令集合,这些就是加载到内存里的内容,和磁盘上的文件完全无关。
如果想让磁盘上的新版本模块生效,你需要强制重新导入模块:
Import-Module <modulename> -Force
这个命令会让PowerShell重新读取磁盘上的模块文件,覆盖内存中已有的旧版本。
简单总结一下:PowerShell模块导入是一次性内存加载机制,会话一旦加载模块,就和磁盘文件脱钩,直到你主动重新导入。
内容的提问来源于stack exchange,提问作者vr8ce
相关产品推荐
相关产品推荐

