web-dev-qa-db-ja.com

Powershell import-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'

この問題の原因は何か?

46
Serge Weinstock

モジュールは、モジュールと同じ名前のフォルダーに配置する必要があります。あなたの場合:

$home/WindowsPowerShell/Modules/XMLHelpers/

完全なパスは次のとおりです。

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

その後、次のことができるようになります。

import-module XMLHelpers
87
Rynant

1.現在のフォルダーでXMLHelpers/XMLHelpers.psm1を検索します

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

2.現在のフォルダーでXMLHelpers.psm1を検索します

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

Import-ModuleはデフォルトのディレクトリC:\Windows\System32\WindowsPowerShell\v1.0\Modulesでモジュールを見つけようとしていると思います。

フルパスを入力するか、C:\Windows\System32\WindowsPowerShell\v1.0\Modulesにコピーしてください

9
Sam Doxy

私は同じエラーを経験し、成功する前に多くのことを試しました。解決策は、次のようにスクリプトのパスをモジュールの相対パスの前に追加することでした。

// 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以降、モジュール内のコマンドレットまたは関数がコマンドで使用されると、モジュールが自動的にインポートされます。この機能は、PSModulePath環境変数($ env:PSModulePath)の値に含まれるディレクトリ内のすべてのモジュールで機能します。

4
Techek

この問題は発生しましたが、ISEではなくVisual Studio Codeでのみ発生しました。 VSCodeでx86セッションを使用していたことがわかりました。 PowerShellセッションメニューを表示してx64セッションに切り替えたところ、すべてのモジュールが完全なパスなしで機能し始めました。 VSCodeのアーキテクチャx64のバージョン1.17.2を使用しています。私のモジュールはC:\ Windows\System32\WindowsPowerShell\v1.0\Modulesディレクトリに保存されていました。

1
David Roach

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を実行するとモジュールが表示されますが、インポートはされません。ただし、モジュールのコマンドレットはとにかく機能するようです。

知る限り、自動インポートを機能させるには、関数の名前をマニフェスト(.psd1)ファイルのFunctionsToExportに追加する必要があります。 FunctionsToExport = '*'を追加すると、自動ロードが中断されます。モジュールファイル(.psm1)にExport-ModuleMember -Function *を含めることができます。

これらは私の発見です。変更があったかどうか、またはコンピューターが壊れているかどうかは、まだわかりません。 HTH

1
woter324

一部のプラグインはAdministratorとして実行する必要があり、シェルでこれらの資格情報がアクティブになっていないとロードされません。

1
ΩmegaMan

powerShellで以下を試してください:

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

[]の代わりにフルパスを入力します

this および that の完全な説明

0
Morteza M