Powershell import-module找不到模块

时间:2011-06-20 14:37:34

标签: powershell module

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

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

当我这样做时:

 import-module full_path_to_XMLHelpers.psm1

有效。但是当我这样做时:

import-module XMLHelpers

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

  

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

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

 $env:PSModulePath=$env:PSModulePath+";"+'C:\local'

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

8 个答案:

答案 0 :(得分:86)

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

$home/WindowsPowerShell/Modules/XMLHelpers/

完整路径是:

$home/WindowsPowerShell/Modules/XMLHelpers/XMLHelpers.psm1

然后你就可以做到:

import-module XMLHelpers

答案 1 :(得分:9)

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

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

答案 2 :(得分:9)

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

Import-Module (Resolve-Path('XMLHelpers'))

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

Import-Module (Resolve-Path('XMLHelpers.psm1'))

答案 3 :(得分:4)

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

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

Import-Module $ScriptPath\Modules\Builder.psm1

顺便说一句,你应该看一下http://msdn.microsoft.com/en-us/library/dd878284(v=vs.85).aspx说明:

  

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

答案 4 :(得分:1)

某些插件需要一个插件作为Administrator运行,除非在shell中激活这些凭据,否则不会加载。

答案 5 :(得分:1)

我在Windows 7上使用PS 5.0的发现:$ENV:PsModulePath必须以。这通常意味着它将加载该路径中的所有模块。

我无法将单个模块添加到$ env:PsModulePath并使用Import-Module ExampleModule加载它。我必须使用模块的完整路径。例如C:\MyModules\ExampleModule。我确信它曾经工作过。

例如: 说我有模块:

C:\MyModules\ExampleModule
C:\MyModules\FishingModule

我需要将C:\MyModules\添加到$env:PsModulePath,这样我才能

Import-Module ExampleModule
Import-Module FishingModule

如果由于某种原因,我不想FishingModule,我认为我只能添加C:\MyModules\ExampleModule(没有尾随\),但现在似乎不起作用。要加载它,我必须Import-Module C:\MyModules\ExampleModule

有趣的是,在这两种情况下,执行Get-Module -ListAvailable会显示模块,但不会导入。虽然,模块的cmdlet似乎仍然有用。

AFAIK,要使自动导入正常工作,必须在清单(.psd1)文件中将函数名称添加到FunctionsToExport。添加FunctionsToExport = '*'会中断自动加载。您仍然可以在模块文件(.psm1)中使用Export-ModuleMember -Function *

这些是我的发现。是否有变化或我的电脑坏了,还有待观察。 HTH

答案 6 :(得分:1)

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

答案 7 :(得分:0)

在powershell上尝试以下操作:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted
import-module [\path\]XMLHelpers.psm1

代替[]放置完整路径

thisthat的完整说明