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'
この問題の原因は何か?
モジュールは、モジュールと同じ名前のフォルダーに配置する必要があります。あなたの場合:
$home/WindowsPowerShell/Modules/XMLHelpers/
完全なパスは次のとおりです。
$home/WindowsPowerShell/Modules/XMLHelpers/XMLHelpers.psm1
その後、次のことができるようになります。
import-module XMLHelpers
1.現在のフォルダーでXMLHelpers/XMLHelpers.psm1を検索します
Import-Module (Resolve-Path('XMLHelpers'))
2.現在のフォルダーでXMLHelpers.psm1を検索します
Import-Module (Resolve-Path('XMLHelpers.psm1'))
Import-Module
はデフォルトのディレクトリC:\Windows\System32\WindowsPowerShell\v1.0\Modules
でモジュールを見つけようとしていると思います。
フルパスを入力するか、C:\Windows\System32\WindowsPowerShell\v1.0\Modules
にコピーしてください
私は同じエラーを経験し、成功する前に多くのことを試しました。解決策は、次のようにスクリプトのパスをモジュールの相対パスの前に追加することでした。
// 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)の値に含まれるディレクトリ内のすべてのモジュールで機能します。
この問題は発生しましたが、ISEではなくVisual Studio Codeでのみ発生しました。 VSCodeでx86セッションを使用していたことがわかりました。 PowerShellセッションメニューを表示してx64セッションに切り替えたところ、すべてのモジュールが完全なパスなしで機能し始めました。 VSCodeのアーキテクチャx64のバージョン1.17.2を使用しています。私のモジュールはC:\ Windows\System32\WindowsPowerShell\v1.0\Modulesディレクトリに保存されていました。
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
一部のプラグインはAdministrator
として実行する必要があり、シェルでこれらの資格情報がアクティブになっていないとロードされません。