2013-09-27 7 views
20

Vor dem Import meines Powershell-Modul bearbeitet (MyModule.psm1), ich habe eine Funktion darin geschrieben:Powershell: eine bereits importierte Modul

Function T1() 
{ 
    Write-Host "T1 is just called" -ForegroundColor red 
} 

In meinem MyModule.psd1:

@{ 

    # Minimum version of the Windows PowerShell engine required by this module 
    PowerShellVersion = '2.0' 

    # Name of the Windows PowerShell host required by this module 
    PowerShellHostName = '' 

    # Minimum version of the Windows PowerShell host required by this module 
    PowerShellHostVersion = '2.0' 

    # Modules that must be imported into the global environment prior to importing this module 
    RequiredModules = @() 

    # Script files (.ps1) that are run in the caller's environment prior to importing this module 
    ScriptsToProcess = @() 

    # Modules to import as nested modules of the module specified in ModuleToProcess 
    NestedModules = @() 

    # Functions to export from this module 
    FunctionsToExport = '*' 

    # Cmdlets to export from this module 
    CmdletsToExport = '*' 

    # Variables to export from this module 
    VariablesToExport = '*' 

    # List of all modules packaged with this module 
    ModuleList = @() 

    # List of all files packaged with this module 
    FileList = @() 

} 

Diese feinen importiert wird, wenn ich kopiert beide Dateien in:

C:\Users\fwaheed\Documents\WindowsPowerShell\Modules\MyModule

und ich kann T1 in meiner Powershell-Sitzung ausführen.

Aber jetzt wollte ich eine neue Funktion in demselben Modul d.h .:

Function T2() 
{ 
    Write-Host "Its now T2.." -ForegroundColor red 
} 

Selbst hinzuzufügen, nachdem meine Powershell-Sitzung neu zu starten, ist es nie T2 zu erkennen, aber T1 arbeitet immer noch.

Wie kann ich meine bereits importierte Modul bearbeiten, so dass Änderungen sofort zur Verfügung stehen ...

Dank einem Haufen ...

+2

'import-modul mymodule -force' ist nicht genug? –

+0

Versucht, dass auch, aber vergeblich .. :( –

+0

Danke Freund ... Nur das Modul entfernt, erneut importiert und mit versucht "Import-Modul MyModule-Force" Und es funktionierte durch Hinzufügen von 4 weitere Funktionen .. –

Antwort

22

Sobald ein Modul importiert wurde, ändert es nicht, da die erkannt werden Modul wird in den Speicher geladen. Ich war jedoch immer in der Lage, eine Remove-Module foo, gefolgt von einer Import-Module foo zu tun, um neue Funktionen zu laden.

Alles, was gesagt wurde, Ihre PSD1-Datei sieht nicht richtig aus. Es sollte ein ModuleToProcess Feld auf 'MyModule.psm1' festgelegt sein. Dann, wenn Sie Import-Module MyModule oder Import-Module .\mymodule.psd1 tun, finden PowerShell & laden Sie die zugehörige MyModule.psm1 Datei. Ich frage mich, ob dies dazu führt, dass Sie mit der Zwischenspeicherung von PowerShell im Cache kollidieren?

+0

Keith, ich habe nur einen Teil der psd1-Datei gepostet, die die Export-Methode einrichtet.Es hat ModuleToProcess, oder es wird nicht in der Lage sein, mein Modul-Skript zu importieren, richtig? –

+1

Das ist irgendwie richtig diesen Eintrag, um das PSM1 zu laden, wenn Ihr PSD1 importiert wird.Sie können jedoch das Modul mymodule.psm1 importieren, das Ihr PSD1 umgeht.Ich bin mir aber ziemlich sicher, wenn Sie das Modulmodulmodul importieren, wird es das PSD1 verarbeiten, das dann PowerShell anweist dass MyModule.psm1 geladen werden muss. –

34

Verwenden Sie den -Force Befehl mit der Import-Module und es wird neu geladen.

Verwandte Themen