powershell@批量重新导入模块@刷新发生了变更的模块@ipmof

文章目录

abstract

  • 由于同一个会话下,powershell无法自动更新已经导入但发生变化的模块,这时候用户有两个选择:
    • 重新执行pwsh,或者使用ipmo(Import-Module) 配合-Force参数强制重载相应的模块
      • 前者重载得彻底,但是会无法继承父级会话中的环境,比如定义的变量在新开的pwsh中无法访问,而且开销比较大,速度慢
      • 后者一种方法更加轻量,由于不会创建新的pwsh进程,不会造成环境变量丢失,但是一个个检查模块然后重新加载对于开发者来说不方便
  • 为此编写了以下函数,可以直接重载已经加载了的模块,方便了这一个刷新变更了的模块的过程
  • NOTES
    • 一个有意思的现象是,如果自动导入模块的路径$PsModulePath下的模块如果在当前powershell会话中没有加载,例如某个函数x在模块test中
    • 而当前shell环境没有调用x,也没有调用模块test中的任意函数,或定义的东西,此时对此摸块做了更改后,不需要刷新,在当前会话shell中调用test的变更的内容是自动更新的,也就是说会自动刷新
  • 总结:可以重载已经加载了的模块,对于开发测试powershell模块很有用
function Import-ModuleForce
{
<#
.SYNOPSIS
默认重载已经加载了的模块,而不是重载所有模块来加快操作速度
#>
[CmdletBinding()]
param (
# [switch]$PassThru
)
# 获取当前 已经加载了的模块
$modules = Get-Module | Select-Object -ExpandProperty Name
$res = @()
foreach ($module in $modules)
{
# 跳过某些模块的重载(如果这个模块比较特殊的话,比如包含注册补全的模块,这个模块就要谨慎重载,默认跳过,可以根据自己的情况调整)
# Remove-Module $module -ErrorAction SilentlyContinue -Force
# if ($module -like '*completion*')
# {
# Write-Warning "Skipping $module"
# continue
# }
# Import-Module $module -Force -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
$exp = "Import-Module $module -Force -ErrorAction SilentlyContinue -WarningAction SilentlyContinue"
$res += $exp
Write-Verbose "Imported $module "
}
# if ($PassThru)
# {
# return $res -join "`n"
# }
return $res -join "`n"
}
function ipmof
{
<#
.SYNOPSIS
作为Import-ModuleForce的别名
由于同一个会话下,powershell无法自动更新发生变化的模块,这时候用户有两个选择:
重新执行pwsh,或者使用ipmo(Import-Module) 配合-Force参数强制重载相应的模块
前者重载得彻底,但是会无法继承父级会话中的环境,比如定义的变量在新开的pwsh中无法访问,而且开销比较大,速度慢
后者一种方法更加轻量,由于不会创建新的pwsh进程,不会造成环境变量丢失,但是一个个检查模块然后重新加载对于开发者来说不方便
为此编写了此函数,可以直接重载已经加载了的模块,方便了这一个刷新变更了的模块的过程
.NOTES
一个有意思的现象是,如果自动导入模块的路径$PsModulePath下的模块如果在当前powershell会话中没有加载,例如某个函数x在模块test中
而当前shell环境没有调用x,也没有调用模块test中的任意函数,或定义的东西,此时对此摸块做了更改后,不需要刷新,在当前会话shell中调用test的变更的内容是自动更新的,也就是说会自动刷新
可以重载已经加载了的模块,对于开发测试powershell模块很有用
.Notes
本函数调用要配合iex,效果比较稳定,如果你的模块比价简单,那么可以更改import-ModuleForce内部让其直接执行强制导入
.EXAMPLE
重载已经加载了的模块:
ipmof|iex
.ExAMPLE
Import-ModuleForce -verbose|iex
#>
param (
)
# Import-Module PSReadLine -Force
Import-ModuleForce
}
posted @   xuchaoxin1375  阅读(16)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2023-10-01 EM@极坐标系@曲线的极坐标方程
点击右上角即可分享
微信分享提示