Featured image of post Windows powershell module install

Windows powershell module install

|
Document-edit Created with Sketch.
|

本笔记记录公司限制连接外网,且无法获取管理员权限的情况下安装PowerShell模块的教程。 有网络直接命令行输入:Install-Module -Name 模块名称

核心思路 由于无法通过Install-Module自动解决依赖,我们需要手动确保模块的所有依赖项都完整存在,并且放置在PowerShell能够识别的个人模块目录中。

获取PowerShell的模块压缩包

PowerShellGallery 获取所需module PowerShellGallery

确认正确的模块目录结构(以ImportExcel为例)

PowerShell对模块的目录结构有严格的要求。仅仅将解压的文件放到一个文件夹并添加到PSModulePath是不够的。正确的结构必须是:

你的模块根目录/
└── ImportExcel/
    ├── ImportExcel.psd1          <-- 模块清单文件
    ├── ImportExcel.psm1          <-- 主脚本模块文件 (通常存在)
    ├── Microsoft.PowerShell.Utility.psm1  <-- 可能需要的依赖模块
    ├── Microsoft.PowerShell.Commands.Utility.dll
    ├── ... (其他dll依赖文件)
    └── lib/
        └── ... (更多的.NET程序集依赖)

网上下载的.nupkg文件实际上是一个zip压缩包,解压后里面可能还有一个lib文件夹,包含对应.NET版本的文件夹(如net472, netstandard2.0等)。需要的是这个子文件夹里的内容。

检查解压后的文件夹结构是否与上述类似。如果只是一个散乱的文件堆,那很可能是解压的层级不对。

手动安装到个人模块目录

这是最关键的一步,因为没有管理员权限,无法安装到系统级的Program Files目录。PowerShell允许用户在自己的文档目录下安装模块。

创建个人模块目录(如果不存在): 在PowerShell中运行以下命令,它会自动创建正确的目录:

New-Item -ItemType Directory -Path $HOME\Documents\PowerShell\Modules -Force

这个路径(C:\Users\<你的用户名>\Documents\PowerShell\Modules)会自动被PowerShell识别,无需手动修改系统环境变量。

放置模块文件: 将整理好的 整个 ImportExcel 文件夹(确保其结构正确),复制或移动到上一步创建的Modules目录下。

C:\Users\<你的用户名>\Documents\PowerShell\Modules\
└── ImportExcel/          <-- 整个文件夹放在这里
    ├── ImportExcel.psd1
    ├── ImportExcel.psm1
    ├── ...
    └── lib/

解决依赖问题(错误的主要原因)

ImportExcel模块依赖于多个.NET程序集(如EPPlus、DocumentFormat.OpenXml等)。离线安装时,这些依赖项必须随主模块一起提供。

验证依赖项: 用文本编辑器(如VSCode、Notepad++)打开 ImportExcel.psd1 文件。 查找 RequiredModulesNestedModules 字段。这里会声明它需要哪些其他模块和程序集。

确保所有文件齐全: 根据ImportExcel.psd1中的声明,检查ImportExcel文件夹下是否包含了所有必需的.dll文件和.psm1文件。常见的依赖包括:

EPPlus.dll (最重要的依赖)

DocumentFormat.OpenXml.dll

System.IO.Packaging.dll

其他在lib文件夹下的dll文件。

如果这些文件缺失,需要从原始下载的nupkg包中或从另一台有网络的电脑上通过Save-Module命令重新获取完整模块。

重新导入并测试

关闭当前所有的PowerShell窗口。

重新打开一个新的 PowerShell窗口。这是为了确保它重新读取模块路径。

尝试导入模块:

Import-Module ImportExcel -Verbose

添加 -Verbose 参数可以看到详细的加载信息,帮助定位是哪个具体的依赖项加载失败。

如果导入成功,运行一个简单命令测试:

Get-Command -Module ImportExcel

这会列出所有ImportExcel模块的命令,如果能看到一长串以Export-、Import-开头的命令,说明安装成功。

如果经过以上步骤仍然报错,可以尝试手动加载依赖: 在导入ImportExcel之前,先尝试手动加载其依赖的DLL。首先进入的模块目录:

# 首先CD到你的ImportExcel模块目录
cd $HOME\Documents\PowerShell\Modules\ImportExcel

# 尝试手动加载关键依赖,例如EPPlus(根据你实际有的dll文件名来加载)
Add-Type -Path ".\EPPlus.dll"
# 加载其他可能需要的dll...
# Add-Type -Path ".\DocumentFormat.OpenXml.dll"

再导入模块

Import-Module .\ImportExcel.psd1 -Verbose 观察哪一条Add-Type命令报错,那就是缺失的文件。

检查PowerShell版本: 确保的电脑PowerShell版本不是太老(如PS 2.0)。ImportExcel可能需要PS 3.0或更高版本。运行$PSVersionTable.PSVersion查看。

终极方法:重新获取完整模块

这是最可能解决问题的办法。找一台有互联网连接的电脑,以管理员身份运行PowerShell,执行:

Save-Module -Name ImportExcel -Path C:\Temp\OfflineModules
这会将ImportExcel模块及其所有依赖项完整地下载到C:\Temp\OfflineModules目录然后将这个目录下的ImportExcel文件夹完整地复制到公司电脑的个人模块目录$HOME\Documents\PowerShell\Modules这能100%确保依赖项的完整性

成功验证

导入模块后,请运行以下命令来验证是否安装成功:

Get-Command -Module ImportExcel | Select-Object -First 5
Get-Module ImportExcel | Format-List Version, Path

如果这些命令能返回模块的版本信息和命令列表,那就安装成功了!

PS C:\Users\Administrator> Get-Command -Module ImportExcel | Select-Object -First 5

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           Convert-XlRangeToImage                             7.8.10     ImportExcel
Alias           Export-ExcelSheet                                  7.8.10     ImportExcel
Alias           New-ExcelChart                                     7.8.10     ImportExcel
Alias           Set-Column                                         7.8.10     ImportExcel
Alias           Set-Format                                         7.8.10     ImportExcel

总结

无法一键安装直接尝试手动import依赖和模块

附录

PowerShellGallery

参考文章

Licensed under CC BY-NC-SA 4.0 转载请留言告知
最后更新于 2025-09-10 23:31