web-dev-qa-db-fra.com

Le module d'importation Powershell ne trouve pas de modules

J'apprends PowerShell et j'essaie de créer ma propre bibliothèque de modules.

J'ai écrit un module simple XMLHelpers.psm1 et mis dans mon dossier $home/WindowsPowerShell/Modules

Quand je fais:

 import-module full_path_to_XMLHelpers.psm1

Ça marche. Mais quand je fais:

import-module XMLHelpers

Cela ne fonctionne pas et j'obtiens l'erreur:

Import-Module: Le module spécifié 'xmlhelpers' n'a pas été chargé car aucun fichier de module valide n'a été trouvé dans un répertoire de module.

J'ai vérifié que la variable d'environnement PSModulePath contient ce dossier. S'agissant d'un dossier réseau, j'ai également essayé de le déplacer dans un dossier local et de modifier PSModulePath mais sans succès.

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

Une idée sur ce qui pourrait causer ce problème?

44
Serge Weinstock

Le module doit être placé dans un dossier portant le même nom que le module. Dans ton cas:

$home/WindowsPowerShell/Modules/XMLHelpers/

Le chemin complet serait:

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

Vous seriez alors capable de faire:

import-module XMLHelpers
84
Rynant

Je pense que le Import-Module essaie de trouver le module dans le répertoire par défaut C:\Windows\System32\WindowsPowerShell\v1.0\Modules.

Essayez de mettre le chemin complet ou copiez-le dans C:\Windows\System32\WindowsPowerShell\v1.0\Modules

9
Sam Doxy

1.Ceci recherchera XMLHelpers/XMLHelpers.psm1 dans le dossier actuel

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

2.Ceci recherchera XMLHelpers.psm1 dans le dossier en cours

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

J'ai vécu la même erreur et essayé de nombreuses choses avant de réussir. La solution consistait à ajouter le chemin du script au chemin relatif du module, comme suit:

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

Import-Module $ScriptPath\Modules\Builder.psm1

Btw, vous devriez jeter un oeil à http://msdn.Microsoft.com/en-us/library/dd878284(v=vs.85).aspx qui indique:

À compter de Windows PowerShell 3.0, les modules sont importés automatiquement lorsqu'une cmdlet ou une fonction du module est utilisée dans une commande. Cette fonctionnalité fonctionne sur tous les modules d'un répertoire inclus dans la valeur de la variable d'environnement PSModulePath ($ env: PSModulePath).

4
Techek

J'ai eu ce problème, mais uniquement dans Visual Studio Code, pas dans ISE. Il s'avère que j'utilisais une session x86 en VSCode. J'ai affiché le menu de session PowerShell et je suis passé à la session x64, et tous les modules ont commencé à fonctionner sans chemins complets. J'utilise la version 1.17.2, architecture x64 de VSCode. Mes modules étaient stockés dans le répertoire C:\Windows\System32\WindowsPowerShell\v1.0\Modules .

1
David Roach

Certains plugins nécessitent que l'un d'eux s'exécute en tant que Administrator et ne se chargera que si l'un de ces identifiants est actif dans le shell. 

1
ΩmegaMan

essayez avec under sur powershell:

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

Au lieu de [] mettez le chemin complet

Explication complète de ceci et que

0
Morteza M

Ma conclusion avec PS 5.0 sur Windows 7: $ENV:PsModulePath doit se terminer par un. Cela signifie normalement que tous les modules seront chargés dans ce chemin.

Je ne parviens pas à ajouter un seul module à $ env: PsModulePath et à le charger avec Import-Module ExampleModule. Je dois utiliser le chemin complet du module. par exemple. C:\MyModules\ExampleModule. Je suis sûr que cela fonctionnait. 

Par exemple: Disons que j'ai les modules:

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

Je dois ajouter C:\MyModules\ à $env:PsModulePath, ce qui me permettra de faire

Import-Module ExampleModule
Import-Module FishingModule

Si pour une raison quelconque, je ne voulais pas FishingModule, je pensais pouvoir ajouter C:\MyModules\ExampleModule seulement (pas de fin \), mais cela ne semble pas fonctionner maintenant. Pour le charger, je dois Import-Module C:\MyModules\ExampleModule

Fait intéressant, dans les deux cas, Get-Module -ListAvailable affiche les modules, mais cela n’importera pas. Bien que, les applets de commande du module semblent fonctionner de toute façon.

Si je comprends bien, pour que l'importation automatique fonctionne, il faut ajouter le nom de la fonction à FunctionsToExport dans le fichier manifeste (.psd1). L'ajout de FunctionsToExport = '*' interrompt le chargement automatique. Vous pouvez toujours avoir Export-ModuleMember -Function * dans le fichier de module (.psm1).

Ce sont mes conclusions. Qu'il y ait eu un changement ou que mon ordinateur soit en panne, reste à voir. HTH

0
woter324