【问题标题】:Unable To Load PowerShell Module无法加载 PowerShell 模块
【发布时间】:2017-09-22 17:25:48
【问题描述】:
我创建了一个 *.psm1 和 *.psd1 文件。驻留在与文件同名的目录(文件夹)中。这个目录在c:\Program Files\WindowsPowerShell\Modules\...
Import-module 没有报告错误,Get-Module 显示之后的模块。 Test-ModuleManifest 返回正确的清单。但是,PowerShell 无法识别 cmdlet 本身。还要注意的是Test-ModuleManifest 没有显示任何导出的命令(这正常吗?)。
文件安全性很好,当我将 *.psm1 放入 Autoload 文件夹时,它可以按预期工作。
检查了常见的错误和错误以及广泛的谷歌搜索。 PS Gallery 中的几个模块已成功导入。这家店里没有人能够弄清楚缺少什么。
此故障发生在几个不同的平台上,所有 Windows(7 或 10)都具有 AMD 和 Intel 内核。
有人遇到过这个问题吗?你能解决这个问题吗?
这是我的 ModuleManifest,使用 New-ModuleManifest 生成并使用 ISE 修改。
# 模块“Convert-F2C”的模块清单
#
# 生成者:我
#
# 生成于:2017 年 4 月 25 日
#
@{
# 与此清单关联的脚本模块或二进制模块文件。
# 根模块 = ''
# 该模块的版本号。
模块版本 = '1.0'
# 支持的 PS 版本
# 兼容PSEditions = @()
# 用于唯一标识此模块的 ID
GUID = '252b9222-9bc8-4634-b658-dd234b483152'
# 这个模块的作者
作者 = '我'
# 该模块的公司或供应商
CompanyName = '我的公司'
# 此模块的版权声明
版权所有 = '(c) 2017 我。版权所有。'
# 本模块提供的功能说明
说明 = '将华氏温度转换为摄氏温度'
# 此模块所需的 Windows PowerShell 引擎的最低版本
# PowerShell版本 = ''
# 此模块所需的 Windows PowerShell 主机的名称
# PowerShellHostName = ''
# 此模块所需的 Windows PowerShell 主机的最低版本
# PowerShellHostVersion = ''
# 此模块所需的 Microsoft .NET Framework 的最低版本。这
先决条件仅对 PowerShell 桌面版有效。
# DotNetFrameworkVersion = ''
# 此所需的公共语言运行时 (CLR) 的最低版本
模块。此先决条件仅对 PowerShell 桌面版有效。
# CLRVersion = ''
# 此模块所需的处理器架构(无,X86,Amd64)
# 处理器架构 = ''
# 必须先导入全局环境的模块
导入此模块
# 必需模块 = @()
# 在导入此模块之前必须加载的程序集
# 必需组件 = @()
# 之前在调用者环境中运行的脚本文件 (.ps1)
导入此模块。
# ScriptsToProcess = @()
# 导入此模块时要加载的类型文件(.ps1xml)
# TypesToProcess = @()
# 导入此模块时要加载的格式文件(.ps1xml)
# FormatsToProcess = @()
# 模块作为指定模块的嵌套模块导入
RootModule/ModuleToProcess
# 嵌套模块 = @()
# 从此模块导出的函数,为获得最佳性能,请勿使用
通配符并且不删除条目,如果没有则使用空数组
导出的功能。
FunctionsToExport = '转换-F2C'
# 要从此模块导出的 Cmdlet,为了获得最佳性能,请勿使用
通配符并且不删除条目,如果没有则使用空数组
要导出的 cmdlet。
CmdletsToExport = @()
# 要从此模块导出的变量
变量导出 = @()
# 从此模块导出的别名,为获得最佳性能,请勿使用
通配符并且不删除条目,如果没有则使用空数组
要导出的别名。
AliasesToExport = '*'
# 要从此模块导出的 DSC 资源
# DscResourcesToExport = @()
# 与该模块打包的所有模块列表
# ModuleList = @(Convert-F2c.psm1)
# 该模块打包的所有文件列表
# 文件列表 = @()
# 传递给指定模块的私有数据
RootModule/ModuleToProcess。这也可能包含一个 PSData 哈希表
PowerShell 使用的其他模块元数据。
私人数据 = @{
PSData = @{
# 应用于此模块的标签。这些有助于模块发现
在线画廊。
# 标签 = @()
# 此模块的许可证的 URL。
# LicenseUri = ''
# 此项目主网站的 URL。
# ProjectUri = ''
# 代表此模块的图标的 URL。
# IconUri = ''
# 该模块的发布说明
ReleaseNotes = '初始创建,第一个体现的模块由
作者'
} # PSData 哈希表结束
} # PrivateData 哈希表结束
# 此模块的 HelpInfo URI
# 帮助信息URI = ''
# 从该模块导出的命令的默认前缀。覆盖
使用 Import-Module -Prefix 的默认前缀。
# 默认命令前缀 = ''
}
【问题讨论】:
-
创建一个只有一个简单函数的示例模块。确保它按预期工作。然后,您可以在不起作用的模块中识别您的错误。
-
-
第一个注意事项:如果 *.psd1 不在它所在的文件夹中,*.psm1 可以正常工作。
-
在您的清单中,检查FunctionsToExport,我通常使用FunctionsToExport = '*' 将它们全部导出,并且NestedModules 列出了模块文件的名称(psm1)
-
无法在 PS v2.0 环境中修复它 ($psversiontable.psversion) 尝试使用以下解决方案下载一些模块,因此现在尝试升级到 v5.1。
标签:
powershell
module