Powershell导入模块找不到模块

我正在学习PowerShell,并试图build立自己的模块库。

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

当我做:

  import-module full_path_to_XMLHelpers.psm1 

有用。 但是当我这样做:

 import-module XMLHelpers 

它不起作用,我得到的错误:

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

我已经检查过,环境variablesPSModulePath包含这个文件夹。 因为这是一个networking文件夹,我也试图将其移动到本地文件夹,并修改PSModulePath但没有成功

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

任何想法可能会导致这个问题?

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

 $home/WindowsPowerShell/Modules/XMLHelpers/ 

完整的path是:

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

你将能够做到:

 import-module XMLHelpers 

我认为Import-Module正试图在默认目录C:\Windows\System32\WindowsPowerShell\v1.0\Modulesfind该C:\Windows\System32\WindowsPowerShell\v1.0\Modules

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

我经历了同样的错误,并在我成功之前尝试了许多事情。 解决方法是将脚本path预先添加到模块的相对path中,如下所示:

 // 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或函数时,会自动导入模块。 此function可用于包含在PSModulePath环境variables($ env:PSModulePath)的值中的目录中的任何模块

这将在当前文件夹中searchXMLHelpers / XMLHelpers.psm1

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

2.将在当前文件夹中searchXMLHelpers.psm1

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

一些插件需要以Administrator身份运行,并且不会加载,除非在shell中具有活动的凭据。

我有这个问题,但只在Visual Studio代码,而不是在ISE。 原来我在VSCode中使用x86会话。 我显示了PowerShell会话菜单,并切换到x64会话,所有模块开始工作,没有完整的path。 我正在使用版本1.17.2,VSCode的体系结构x64。 我的模块存储在C:\ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules目录中。

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

我无法将单个模块添加到$ env:PsModulePath,并使用Import-Module ExampleModule加载它。 我必须使用模块的完整path。 例如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