Powershell import-module找不到模块

Ser*_*ock 47 powershell module

我正在学习PowerShell,我正在尝试构建自己的模块库.

我写了一个简单的模块XMLHelpers.psm1并放入我的文件夹$home/WindowsPowerShell/Modules.

当我做:

 import-module full_path_to_XMLHelpers.psm1
Run Code Online (Sandbox Code Playgroud)

有用.但当我这样做时:

import-module XMLHelpers
Run Code Online (Sandbox Code Playgroud)

它不起作用,我收到错误:

Import-Module:未加载指定的模块"xmlhelpers",因为在任何模块目录中都找不到有效的模块文件.

我检查过环境变量PSModulePath包含这个文件夹.由于它是一个网络文件夹,我还尝试将其移动到本地文件夹并进行修改PSModulePath但没有成功

 $env:PSModulePath=$env:PSModulePath+";"+'C:\local'
Run Code Online (Sandbox Code Playgroud)

有什么可能导致这个问题的想法吗?

Ryn*_*ant 87

该模块需要放在与模块同名的文件夹中.在你的情况下:

$home/WindowsPowerShell/Modules/XMLHelpers/
Run Code Online (Sandbox Code Playgroud)

完整的路径是:

$home/WindowsPowerShell/Modules/XMLHelpers/XMLHelpers.psm1
Run Code Online (Sandbox Code Playgroud)

然后你就可以做到:

import-module XMLHelpers
Run Code Online (Sandbox Code Playgroud)

  • 是的,除非您使用`Import-Module`语句中的完整路径.您还可以将函数组织为多个.psm1文件,并通过Module Manifest文件(.psd1)加载它们.在这种情况下,.psd1和多个.psm1文件将位于相同的"module_name /"目录下.只有.psd1文件需要与模块具有相同的名称. (7认同)
  • 您还可以使用:`import-module .\XMLHelpers.psm1` (2认同)
  • 这可以在文档中更清楚地说明。文件夹结构是我缺少的部分。 (2认同)

vit*_*ilo 10

1.这将在当前文件夹中搜索XMLHelpers/XMLHelpers.psm1

Import-Module (Resolve-Path('XMLHelpers'))
Run Code Online (Sandbox Code Playgroud)

2.这将在当前文件夹中搜索XMLHelpers.psm1

Import-Module (Resolve-Path('XMLHelpers.psm1'))
Run Code Online (Sandbox Code Playgroud)

  • 非常适合您开发和调试模块时 (3认同)

小智 9

我认为Import-Module是试图在默认目录中找到该模块C:\Windows\System32\WindowsPowerShell\v1.0\Modules.

尝试放置完整路径,或将其复制到 C:\Windows\System32\WindowsPowerShell\v1.0\Modules

  • 这只是它看起来的一个位置.还有其他人.请参阅`$ env:PSModulePath`. (6认同)

Tec*_*hek 5

在成功之前,我遇到了同样的错误并尝试了很多事情。解决方案是将脚本的路径添加到模块的相对路径中,如下所示:

// Note that .Path will only be available during script-execution
$ScriptPath = Split-Path $MyInvocation.MyCommand.Path

Import-Module $ScriptPath\Modules\Builder.psm1
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您应该看看http://msdn.microsoft.com/en-us/library/dd878284(v=vs.85).aspx,其中指出:

从 Windows PowerShell 3.0 开始,当在命令中使用模块中的任何 cmdlet 或函数时,将自动导入模块。此功能适用于包含在 PSModulePath 环境变量 ($env:PSModulePath) 值中的目录中的任何模块


Dav*_*ach 5

我遇到了这个问题,但只是在 Visual Studio Code 中,而不是在 ISE 中。结果我在 VSCode 中使用了 x86 会话。我显示了 PowerShell 会话菜单并切换到 x64 会话,所有模块都在没有完整路径的情况下开始工作。我使用的是 VSCode 版本 1.17.2,架构 x64。我的模块存储在C:\Windows\System32\WindowsPowerShell\v1.0\Modules目录中。