Powershell导入模块未找到模块

dfuffjeb  于 2023-01-09  发布在  Shell
关注(0)|答案(9)|浏览(314)

我正在学习PowerShell,我正在尝试建立自己的模块库。
我已经写了一个简单的模块XMLHelpers.psm1,并放在我的文件夹$home/WindowsPowerShell/Modules中。
当我这样做:

import-module full_path_to_XMLHelpers.psm1

很有效。但当我这么做的时候:

import-module XMLHelpers

它不起作用,我得到的错误:
导入模块:未加载指定的模块"xmlhelpers",因为在任何模块目录中都找不到有效的模块文件。
我检查了环境变量PSModulePath中有这个文件夹,因为是网络文件夹,我也试过移动到本地文件夹修改PSModulePath,但是没有成功

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

是否知道可能导致此问题的原因?

qfe3c7zg

qfe3c7zg1#

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

$home/WindowsPowerShell/Modules/XMLHelpers/

完整路径为:

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

然后,您将能够执行以下操作:

import-module XMLHelpers
ttp71kqs

ttp71kqs2#

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

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

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

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

3duebb1j3#

我认为Import-Module试图在默认目录C:\Windows\System32\WindowsPowerShell\v1.0\Modules中查找模块。
尝试输入完整路径,或将其复制到C:\Windows\System32\WindowsPowerShell\v1.0\Modules

1qczuiv0

1qczuiv04#

我也遇到过同样的错误,在成功之前尝试了很多方法,解决方法是将脚本的路径放在模块的相对路径前面,如下所示:

// 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)的值中包含的目录中的任何模块

iyzzxitl

iyzzxitl5#

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

klsxnrf1

klsxnrf16#

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

kgqe7b3p

kgqe7b3p7#

我的发现与PS 5.0在Windows 7:$ENV:PsModulePath必须以a结尾。这通常意味着它将加载该路径中的所有模块。
我无法在$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(没有尾随\),但现在似乎不起作用。
有趣的是,在这两种情况下,执行Get-Module -ListAvailable都显示了模块,但是它不会导入,尽管模块的cmdlet看起来仍然可以工作。
AFAIK,要使自动导入工作,必须将函数名添加到清单(.psd1)文件中的FunctionsToExport。添加FunctionsToExport = '*'会中断自动加载。您仍然可以在模块文件(.psm1)中添加Export-ModuleMember -Function *
这些是我的发现。是否有变化或我的电脑坏了,还有待观察。HTH

9vw9lbht

9vw9lbht8#

在powershell上尝试以下内容:

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

请输入完整路径,而不是[]
thisthat的完整说明

tp5buhyn

tp5buhyn9#

首先检查一下您的账户类型,有些是不允许导入到正常的合作伙伴账户的.

相关问题