none
Namen der Funktionen eine Skriptdatei auflisten... RRS feed

  • Frage

  • Hallo!

    ich habe eine gewisse Anzahl von Themenbezogenen Skripten, welche ich vor der Benutzung in der ISE mit einer Befehlszeile:

    . D:\Skriptverzeichnis\Skriptname.ps1

    initialisiere. Dadurch stehen mir die Funktionen innerhalb diese Skriptes nun auch per Intellisense zur Verfügung. Allerdings wird diese vorgehensweise mit steigender Zahl der eigenen Funktionen langsam unübersichtlich. Und dazu nun meine Frage.

    Wie erreiche ich, dass mir (wenigstens) die Namen der enthaltenen Funktionen bei der Initialisierung angezeigt werden?

    Gruß

    Michael L.

    Mittwoch, 30. September 2015 11:00

Antworten

  • Jap mit nem richtigen Modul würde das gehen:

    Copy-Item '.\Module'  -Destination "$env:UserProfile\Documents\WindowsPowerShell\Modules\PSGUI" -Recurse -Force
     
    Import-Module PSGUI -Global -Verbose
    

    In Module ist eine psm-Datei:

    PSGUI.psm1

    und eine Manifest-Datei / psd:

    PSGUI.psd1
    

    Beispiel:

    <#	
        .NOTES
        ===========================================================================
            Created on:   	01.09.2015
            Created by:   	David das Neves
            Version:        0.1
            Project:        PSGUI
            Filename:       PSGUI.psd1
        ===========================================================================
        .DESCRIPTION
            Manifest-File
    #> 
    
    #
    # Modulmanifest für das Modul "PSGUI"
    #
    # Generiert von: David das Neves
    #
    # Generiert am: 01.09.2015
    #
    
    @{
    
    # Die diesem Manifest zugeordnete Skript- oder Binärmoduldatei.
    # RootModule = ''
    
    # Die Versionsnummer dieses Moduls
    ModuleVersion = '1.0'
    
    # ID zur eindeutigen Kennzeichnung dieses Moduls
    GUID = '132456789'
    
    # Autor dieses Moduls
    Author = 'David das Neves'
    
    # Unternehmen oder Hersteller dieses Moduls
    CompanyName = ''
    
    # Urheberrechtserklärung für dieses Modul
    Copyright = '(c) 2015 David das Neves. All rights reserved.'
    
    # Beschreibung der von diesem Modul bereitgestellten Funktionen
    Description = 'Loads XAML-GUI in Powershell'
    
    # Die für dieses Modul mindestens erforderliche Version des Windows PowerShell-Moduls
    PowerShellVersion = '3.0'
    
    # Der Name des für dieses Modul erforderlichen Windows PowerShell-Hosts
    # PowerShellHostName = ''
    
    # Die für dieses Modul mindestens erforderliche Version des Windows PowerShell-Hosts
    PowerShellHostVersion = '3.0'
    
    # Die für dieses Modul mindestens erforderliche Microsoft .NET Framework-Version
    # DotNetFrameworkVersion = ''
    
    # Die für dieses Modul mindestens erforderliche Version der CLR (Common Language Runtime)
    # CLRVersion = ''
    
    # Die für dieses Modul erforderliche Prozessorarchitektur ("Keine", "X86", "Amd64").
    # ProcessorArchitecture = ''
    
    # Die Module, die vor dem Importieren dieses Moduls in die globale Umgebung geladen werden müssen
    # RequiredModules = @()
    
    # Die Assemblys, die vor dem Importieren dieses Moduls geladen werden müssen
    # RequiredAssemblies = @()
    
    # Die Skriptdateien (PS1-Dateien), die vor dem Importieren dieses Moduls in der Umgebung des Aufrufers ausgeführt werden.
    # ScriptsToProcess = @()
    
    # Die Typdateien (.ps1xml), die beim Importieren dieses Moduls geladen werden sollen
    # TypesToProcess = @()
    
    # Die Formatdateien (.ps1xml), die beim Importieren dieses Moduls geladen werden sollen
    # FormatsToProcess = @()
    
    # Die Module, die als geschachtelte Module des in "RootModule/ModuleToProcess" angegebenen Moduls importiert werden sollen.
    NestedModules = @()
    
    # Aus diesem Modul zu exportierende Funktionen
    FunctionsToExport = '*'
    
    # Aus diesem Modul zu exportierende Cmdlets
    CmdletsToExport = '*'
    
    # Die aus diesem Modul zu exportierenden Variablen
    VariablesToExport = '*'
    
    # Aus diesem Modul zu exportierende Aliase
    AliasesToExport = '*'
    
    # Aus diesem Modul zu exportierende DSC-Ressourcen
    # DscResourcesToExport = @()
    
    # Liste aller Module in diesem Modulpaket
    #ModuleList = @(".\PSGUI.psm1")
    
    # Script module or binary module file associated with this manifest
    ModuleToProcess = 'PSGUI.psm1'
    
    # Liste aller Dateien in diesem Modulpaket
    FileList = @(".\Resources\powershell_32px.png")
    
    # Die privaten Daten, die an das in "RootModule/ModuleToProcess" angegebene Modul übergeben werden sollen. Diese können auch eine PSData-Hashtabelle mit zusätzlichen von PowerShell verwendeten Modulmetadaten enthalten.
    PrivateData = @{
    
        PSData = @{
    
            # 'Tags' wurde auf das Modul angewendet und unterstützt die Modulermittlung in Onlinekatalogen.
            # Tags = @()
    
            # Eine URL zur Lizenz für dieses Modul.
            # LicenseUri = ''
    
            # Eine URL zur Hauptwebsite für dieses Projekt.
            # ProjectUri = ''
    
            # Eine URL zu einem Symbol, das das Modul darstellt.
            # IconUri = ''
    
            # 'ReleaseNotes' des Moduls
            # ReleaseNotes = ''
    
        } # Ende der PSData-Hashtabelle
    
    } # Ende der PrivateData-Hashtabelle
    
    # HelpInfo-URI dieses Moduls
    # HelpInfoURI = ''
    
    # Standardpräfix für Befehle, die aus diesem Modul exportiert werden. Das Standardpräfix kann mit "Import-Module -Prefix" überschrieben werden.
    # DefaultCommandPrefix = ''
    
    }
    



    Greetings,

    David das Neves

    Technology Specialist - Consulting Services
    Computacenter AG & Co. oHG - München

    Blog    

    Caution: This post may contain errors.

    Mittwoch, 30. September 2015 14:03
  • Eigentlich ist es noch einfacher. Die PSD1 Datei ist nur nötig, wenn das Modul beschreiben werden soll und / oder Abhängigkeiten hat. Ansonsten reicht schlicht die PSM1 Datei (nichts anderes als eine Script mit Funktionen) in einem gleichnamigen Ordner welcher wiederum unter $env:PSModulePath liegen sollte.

    Weitere Infos unter: about_Modules


    -Raimund

    Donnerstag, 1. Oktober 2015 10:42

Alle Antworten

  • Schreib dir doch ein Modul ? In dem kannst du dir einfach alle Funktionen einbinden und einfach anzeigen lassen.
    Mittwoch, 30. September 2015 11:41
  • Jap mit nem richtigen Modul würde das gehen:

    Copy-Item '.\Module'  -Destination "$env:UserProfile\Documents\WindowsPowerShell\Modules\PSGUI" -Recurse -Force
     
    Import-Module PSGUI -Global -Verbose
    

    In Module ist eine psm-Datei:

    PSGUI.psm1

    und eine Manifest-Datei / psd:

    PSGUI.psd1
    

    Beispiel:

    <#	
        .NOTES
        ===========================================================================
            Created on:   	01.09.2015
            Created by:   	David das Neves
            Version:        0.1
            Project:        PSGUI
            Filename:       PSGUI.psd1
        ===========================================================================
        .DESCRIPTION
            Manifest-File
    #> 
    
    #
    # Modulmanifest für das Modul "PSGUI"
    #
    # Generiert von: David das Neves
    #
    # Generiert am: 01.09.2015
    #
    
    @{
    
    # Die diesem Manifest zugeordnete Skript- oder Binärmoduldatei.
    # RootModule = ''
    
    # Die Versionsnummer dieses Moduls
    ModuleVersion = '1.0'
    
    # ID zur eindeutigen Kennzeichnung dieses Moduls
    GUID = '132456789'
    
    # Autor dieses Moduls
    Author = 'David das Neves'
    
    # Unternehmen oder Hersteller dieses Moduls
    CompanyName = ''
    
    # Urheberrechtserklärung für dieses Modul
    Copyright = '(c) 2015 David das Neves. All rights reserved.'
    
    # Beschreibung der von diesem Modul bereitgestellten Funktionen
    Description = 'Loads XAML-GUI in Powershell'
    
    # Die für dieses Modul mindestens erforderliche Version des Windows PowerShell-Moduls
    PowerShellVersion = '3.0'
    
    # Der Name des für dieses Modul erforderlichen Windows PowerShell-Hosts
    # PowerShellHostName = ''
    
    # Die für dieses Modul mindestens erforderliche Version des Windows PowerShell-Hosts
    PowerShellHostVersion = '3.0'
    
    # Die für dieses Modul mindestens erforderliche Microsoft .NET Framework-Version
    # DotNetFrameworkVersion = ''
    
    # Die für dieses Modul mindestens erforderliche Version der CLR (Common Language Runtime)
    # CLRVersion = ''
    
    # Die für dieses Modul erforderliche Prozessorarchitektur ("Keine", "X86", "Amd64").
    # ProcessorArchitecture = ''
    
    # Die Module, die vor dem Importieren dieses Moduls in die globale Umgebung geladen werden müssen
    # RequiredModules = @()
    
    # Die Assemblys, die vor dem Importieren dieses Moduls geladen werden müssen
    # RequiredAssemblies = @()
    
    # Die Skriptdateien (PS1-Dateien), die vor dem Importieren dieses Moduls in der Umgebung des Aufrufers ausgeführt werden.
    # ScriptsToProcess = @()
    
    # Die Typdateien (.ps1xml), die beim Importieren dieses Moduls geladen werden sollen
    # TypesToProcess = @()
    
    # Die Formatdateien (.ps1xml), die beim Importieren dieses Moduls geladen werden sollen
    # FormatsToProcess = @()
    
    # Die Module, die als geschachtelte Module des in "RootModule/ModuleToProcess" angegebenen Moduls importiert werden sollen.
    NestedModules = @()
    
    # Aus diesem Modul zu exportierende Funktionen
    FunctionsToExport = '*'
    
    # Aus diesem Modul zu exportierende Cmdlets
    CmdletsToExport = '*'
    
    # Die aus diesem Modul zu exportierenden Variablen
    VariablesToExport = '*'
    
    # Aus diesem Modul zu exportierende Aliase
    AliasesToExport = '*'
    
    # Aus diesem Modul zu exportierende DSC-Ressourcen
    # DscResourcesToExport = @()
    
    # Liste aller Module in diesem Modulpaket
    #ModuleList = @(".\PSGUI.psm1")
    
    # Script module or binary module file associated with this manifest
    ModuleToProcess = 'PSGUI.psm1'
    
    # Liste aller Dateien in diesem Modulpaket
    FileList = @(".\Resources\powershell_32px.png")
    
    # Die privaten Daten, die an das in "RootModule/ModuleToProcess" angegebene Modul übergeben werden sollen. Diese können auch eine PSData-Hashtabelle mit zusätzlichen von PowerShell verwendeten Modulmetadaten enthalten.
    PrivateData = @{
    
        PSData = @{
    
            # 'Tags' wurde auf das Modul angewendet und unterstützt die Modulermittlung in Onlinekatalogen.
            # Tags = @()
    
            # Eine URL zur Lizenz für dieses Modul.
            # LicenseUri = ''
    
            # Eine URL zur Hauptwebsite für dieses Projekt.
            # ProjectUri = ''
    
            # Eine URL zu einem Symbol, das das Modul darstellt.
            # IconUri = ''
    
            # 'ReleaseNotes' des Moduls
            # ReleaseNotes = ''
    
        } # Ende der PSData-Hashtabelle
    
    } # Ende der PrivateData-Hashtabelle
    
    # HelpInfo-URI dieses Moduls
    # HelpInfoURI = ''
    
    # Standardpräfix für Befehle, die aus diesem Modul exportiert werden. Das Standardpräfix kann mit "Import-Module -Prefix" überschrieben werden.
    # DefaultCommandPrefix = ''
    
    }
    



    Greetings,

    David das Neves

    Technology Specialist - Consulting Services
    Computacenter AG & Co. oHG - München

    Blog    

    Caution: This post may contain errors.

    Mittwoch, 30. September 2015 14:03
  • Danke für die ausführliche Erläuterung bezüglich der Modulvariante. Leider habe ich mit Modulen noch nichts gemacht, aber offensichtlich ist das gar kein Hexenwerk. Wenn ich das richtig verstehe, reicht die zusätzliche psd1-Metadatendatei aus um ein Modul zu erstellen bei der es sich im Grunde nur um eine Hash-Table handelt. Am Code in meinen Functionen ändert sich nichts?

    Gruß

    Michael L.

    Mittwoch, 30. September 2015 15:59
  • Ich würde ja gern eine ausführliche Erklärung hierfür geben, aber du hast es im Prinzip schon ziemlich gut erfasst. Ja kein Hexenwerk und es muss nix geändert werden.



    Greetings,

    David das Neves

    Technology Specialist - Consulting Services
    Computacenter AG & Co. oHG - München

    Blog    

    Caution: This post may contain errors.

    Mittwoch, 30. September 2015 19:56
  • Eigentlich ist es noch einfacher. Die PSD1 Datei ist nur nötig, wenn das Modul beschreiben werden soll und / oder Abhängigkeiten hat. Ansonsten reicht schlicht die PSM1 Datei (nichts anderes als eine Script mit Funktionen) in einem gleichnamigen Ordner welcher wiederum unter $env:PSModulePath liegen sollte.

    Weitere Infos unter: about_Modules


    -Raimund

    Donnerstag, 1. Oktober 2015 10:42