命令是干什么的
模块是 PowerShell 命令的集装箱:它把相关 cmdlet、函数与类型打包并附带版本信息。Get-Module 查看已加载的模块,Get-Module -ListAvailable 列出可加载模块,Import-Module 显式加载,Remove-Module 卸载。定位命令来源、排查版本差异都从这里入手。
为什么要在入口检查
模块被卸载后其中的命令会立即不可用,依赖它的脚本也随之失败;模块目录被清理或版本被替换,往往要等到下一次调度执行才以“命令找不到”的形式暴露。在脚本入口先做模块可用性检查,能把环境问题提前到执行开始前,而不是跑到中途才中断。
基本信息
| 适用平台 | PowerShell 2.0 及以后,3.0 起支持模块自动加载 |
|---|---|
| 语法 | Get-Module -ListAvailable;Import-Module 名称;Remove-Module 名称 |
| 搜索路径 | 由 $env:PSModulePath 决定,多路径以分号分隔 |
| 要点 | 同名命令可能来自不同模块,用 Get-Command -All 查全部来源 |
典型使用场景
- 确认域管理命令是否可用:检查 ActiveDirectory 模块是否已安装
- 脚本开头显式 Import-Module,避免依赖隐式自动加载
- 排查命令冲突:同名 cmdlet 来自多个模块时确认实际生效的那个
- 查看模块版本,判断目标机上是否具备所需功能
- 长驻会话里卸载旧模块再加载新版本,验证更新是否生效
常用示例
常用示例
Get-Module -ListAvailable | Select-Object Name, Version # 列出可用模块与版本
Import-Module ActiveDirectory # 显式加载域管理模块
Get-Command Get-ADUser -All # 查看该命令的全部来源
Get-Command Get-ADUser | Select-Object Name, Source, Version
Remove-Module ActiveDirectory # 在当前会话卸载
Import-Module D:\mods\MyMod.psm1 -Force # 指定路径强制重新加载常用命令读法
| 命令 | 作用 | 注意 |
|---|---|---|
| Get-Module | 查看已加载模块 | 只显示当前会话已导入的 |
| Get-Module -ListAvailable | 列出可加载模块 | 结果多时用 Select-Object 精简 |
| Import-Module | 显式加载模块 | 可用 -RequiredVersion 指定版本 |
| Get-Command -All | 列出同名命令的所有来源 | 排查冲突的关键手段 |
| Import-Module -Force | 强制重新加载 | 模块文件更新后使用 |
| $env:PSModulePath | 模块搜索路径 | 路径缺失会让自动加载失效 |
要确认某个命令来自哪里,最直接的是 Get-Command 名称 | Select-Object Source,比逐个试 Import-Module 快得多。
PowerShell 3.0 起支持自动加载:首次使用某命令时会自动导入其所在模块;自动加载失败通常是模块未安装,或 $env:PSModulePath 不含其目录。