it-swarm.com.de

Powershell Import-Modul findet keine Module

Ich lerne PowerShell und versuche, eine eigene Modulbibliothek zu erstellen.

Ich habe ein einfaches Modul XMLHelpers.psm1 geschrieben und in meinem Ordner $home/WindowsPowerShell/Modules abgelegt. 

Wenn ich tue:

 import-module full_path_to_XMLHelpers.psm1

Es klappt. Aber wenn ich es mache:

import-module XMLHelpers

Es funktioniert nicht und ich bekomme die Fehlermeldung:

Import-Modul: Das angegebene Modul 'xmlhelpers' wurde nicht geladen, da in keinem Modulverzeichnis eine gültige Moduldatei gefunden wurde.

Ich habe geprüft, ob die Umgebungsvariable PSModulePath diesen Ordner enthält. Da es sich um einen Netzwerkordner handelt, habe ich auch versucht, ihn in einen lokalen Ordner zu verschieben und PSModulePath zu ändern, jedoch ohne Erfolg

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

Irgendeine Idee, woran es liegen könnte?

44
Serge Weinstock

Das Modul muss in einem Ordner mit demselben Namen wie das Modul abgelegt werden. In Ihrem Fall:

$home/WindowsPowerShell/Modules/XMLHelpers/

Der vollständige Pfad wäre:

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

Sie könnten dann tun:

import-module XMLHelpers
84
Rynant

Ich denke, dass Import-Module versucht, das Modul im Standardverzeichnis C:\Windows\System32\WindowsPowerShell\v1.0\Modules zu finden.

Versuchen Sie, den vollständigen Pfad einzugeben, oder kopieren Sie ihn nach C:\Windows\System32\WindowsPowerShell\v1.0\Modules.

9
Sam Doxy

1. Dies durchsucht XMLHelpers/XMLHelpers.psm1 im aktuellen Ordner

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

2. Dadurch wird XMLHelpers.psm1 im aktuellen Ordner durchsucht

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

Ich habe den gleichen Fehler erlebt und zahlreiche Dinge ausprobiert, bevor ich Erfolg hatte. Die Lösung bestand darin, den Pfad des Skripts dem relativen Pfad des Moduls wie folgt voranzustellen:

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

Import-Module $ScriptPath\Modules\Builder.psm1

Übrigens sollten Sie einen Blick auf http://msdn.Microsoft.com/de-de/library/dd878284(v=vs.85).aspx werfen, das besagt:

Ab Windows PowerShell 3.0 werden Module automatisch importiert, wenn ein Cmdlet oder eine Funktion im Modul in einem Befehl verwendet wird. Diese Funktion kann für jedes Modul in einem Verzeichnis verwendet werden, das in dem Wert der Umgebungsvariablen PSModulePath ($ env: PSModulePath) enthalten ist.

4
Techek

Ich hatte dieses Problem, aber nur in Visual Studio Code, nicht in ISE. Es stellte sich heraus, dass ich eine x86-Sitzung in VSCode verwendet habe. Ich habe das PowerShell-Sitzungsmenü angezeigt und zur x64-Sitzung gewechselt, und alle Module funktionierten ohne vollständige Pfade. Ich verwende Version 1.17.2, Architektur x64 von VSCode. Meine Module wurden im Verzeichnis C:\Windows\System32\WindowsPowerShell\v1.0\Modules gespeichert.

1
David Roach

Einige Plugins benötigen eines als Administrator und werden nicht geladen, es sei denn, diese Anmeldeinformationen sind in der Shell aktiv. 

1
ΩmegaMan

versuchen Sie es mit unten auf Powershell:

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

Setzen Sie statt [] den vollständigen Pfad

Vollständige Erklärung von dieser und der

0
Morteza M

Mein Befund mit PS 5.0 unter Windows 7: $ENV:PsModulePath muss mit einem enden. Dies bedeutet normalerweise, dass alle Module in diesem Pfad geladen werden.

Ich kann kein einzelnes Modul zu $ ​​env: PsModulePath hinzufügen und es mit Import-Module ExampleModule laden. Ich muss den vollständigen Pfad zum Modul verwenden. z.B. C:\MyModules\ExampleModule. Ich bin mir sicher, dass es funktioniert hat. 

Zum Beispiel: Ich habe die Module:

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

Ich muss C:\MyModules\ zu $env:PsModulePath hinzufügen, was mir erlaubt, dies zu tun

Import-Module ExampleModule
Import-Module FishingModule

Wenn ich aus irgendeinem Grund nicht FishingModule wollte, dachte ich, ich könnte nur C:\MyModules\ExampleModule hinzufügen (kein nachlaufendes \), aber das scheint jetzt nicht zu funktionieren. Um es zu laden, muss ich Import-Module C:\MyModules\ExampleModule

Interessanterweise werden in beiden Fällen durch Ausführen von Get-Module -ListAvailable die Module angezeigt, es wird jedoch kein Import durchgeführt. Die Cmdlets des Moduls scheinen jedoch trotzdem zu funktionieren.

AFAIK, um den automatischen Import zum Laufen zu bringen, muss man FunctionsToExport in der Manifest-Datei (.psd1) den Namen der Funktion hinzufügen. Durch Hinzufügen von FunctionsToExport = '*' wird das automatische Laden abgebrochen. Sie können noch Export-ModuleMember -Function * in der Moduldatei (.psm1) haben.

Das sind meine Erkenntnisse. Ob es eine Änderung gab oder mein Computer kaputt ist, bleibt abzuwarten. HTH

0
woter324