2015-02-26 9 views
32

Um zu überprüfen, ob ein Modul vorhanden Ich habe folgendes versucht:Wie überprüfe ich, ob ein Powershell-Modul installiert ist?

try { 
    Import-Module SomeModule 
    Write-Host "Module exists" 
} catch { 
    Write-Host "Module does not exist" 
} 

Die Ausgabe lautet:

Import-Module : The specified module 'SomeModule' was not loaded because no valid module file was found in any module directory. 
At D:\keytalk\Software\Client\TestProjects\Export\test.ps1:2 char:5 
+  Import-Module SomeModule 
+  ~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ResourceUnavailable: (SomeModule:String) [Import-Module], FileNotFoundException 
    + FullyQualifiedErrorId : Modules_ModuleNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand 

Module exists 

ich einen Fehler, aber keine Ausnahme ausgelöst wird, so dass wir sehen Module exists in der Ende, obwohl SomeModule nicht existiert.

Kennt jemand einen guten Weg (vorzugsweise ohne einen Fehler zu erzeugen), um festzustellen, ob ein Powershell-Modul auf dem System installiert ist?

+0

Siehe [Tipp: Geladene und verfügbare Module in Windows PowerShell anzeigen] (https://technet.microsoft.com/en-us/library/ff642467.aspx) –

Antwort

56

Eine Lösung gefunden. Sie können die ListAvailable Möglichkeit Get-Module verwenden:

if (Get-Module -ListAvailable -Name SomeModule) { 
    Write-Host "Module exists" 
} else { 
    Write-Host "Module does not exist" 
} 
+1

Ich wollte suggets: Import-Module NonexistingModule -ErrorAction SilentlyContinue IF ($ error) {Write-Host 'Modul existiert nicht'} else {Write-Host 'Modul existiert'} Aber Ihre Art und Weise ist besser, eleganter :) –

+0

Das funktioniert super. Vielen Dank. Ich benutze 'Write-Warning 'Modul existiert nicht ..."; Pause "Aber du hast die ganze harte Arbeit gemacht. –

13

Die ListAvailable Option nicht für mich arbeiten. Statt dies tut:

if (-not (Get-Module -Name "<moduleNameHere>")) { 
    # module is not loaded 
} 

Oder prägnanter zu sein:

if (!(Get-Module "<moduleNameHere>")) { 
    # module is not loaded 
} 
+4

Was passiert, wenn Sie '-ListAvailable' verwenden? –

+0

@Oɔɯǝɹ Ich dachte -ListAvailable war einfach nicht verfügbar, aber ich versuchte immer noch Import-Modul. Mit Get-Module ist es in Ordnung –

+0

Sie überprüfen, ob das Modul LOADED (was für sich nützlich ist) -http: //www.systemcentercentral.com/powershell-tip-how-to-load-if-a-module-is-loaded-before -attempting-import-module-3 /), aber nicht die andere Antwort prüft, ob das Modul existiert. –

4

Genau dies als seine somthing Neubetrachtung ich gerade konfrontiert, und es gibt einige falsche Sachen in den Antworten (auch wenn seine in den Kommentaren erwähnt).

Als erstes fragen die ursprünglichen Fragen, wie man erkennt, ob ein Powershell-Modul installiert ist. Wir müssen über das installierte Wort sprechen! Sie installieren keine Powershell-Module (nicht auf die herkömmliche Weise, auf der Sie die Software installieren). Powershell-Module sind entweder verfügbar (d. H. Sie befinden sich auf dem Powershell-Modulpfad) oder sie werden importiert (sie werden in Ihre Sitzung importiert und Sie können die enthaltenen Funktionen aufrufen). Dies ist, wie Ihr Modul Pfad zu überprüfen, falls Sie wissen wollen, wo ein Modul zu speichern:

$env:psmodulepath 

Ich würde argumentieren, dass seine immer gemeinsam C zu verwenden: \ Program Files \ Windows \ Modules; häufiger, da es für alle Benutzer verfügbar ist, aber wenn Sie Ihre Module für Ihre eigene Sitzung sperren möchten, fügen Sie sie in Ihr Profil ein. C: \ Benutzer \% Benutzername% \ Dokumente \ WindowsPowerShell \ Module;

In Ordnung, zurück zu den beiden Zuständen.

Ist das Modul verfügbar (unter Verwendung verfügbar zu meinen, in der ursprünglichen Frage installiert)?

Dies sagt Ihnen, ob ein Modul für den Import verfügbar ist.

Wird das Modul importiert? (Ich benutze dies als die Antwort für das Wort "existiert" in der ursprünglichen Frage).

Get-module -Name <modulename> 

Dies wird entweder eine leere Last von nichts zurück, wenn das Modul nicht importiert wird, oder eine eine Zeile Beschreibung des Moduls, wenn es ist. Wie immer auf SO, versuchen Sie die oben genannten Befehle auf Ihren eigenen Modulen.

Verwandte Themen