Benutzer mit den meisten Antworten
Namen der Funktionen eine Skriptdatei auflisten...

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.
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.
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Mittwoch, 7. Oktober 2015 13:00
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 13. Oktober 2015 11:51
-
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
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Mittwoch, 7. Oktober 2015 13:00
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 13. Oktober 2015 11:51
Alle Antworten
-
Schreib dir doch ein Modul ? In dem kannst du dir einfach alle Funktionen einbinden und einfach anzeigen lassen.
- Bearbeitet Andreas Bittner Mittwoch, 30. September 2015 13:00
-
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.
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Mittwoch, 7. Oktober 2015 13:00
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 13. Oktober 2015 11:51
-
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.
-
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.
-
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
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Mittwoch, 7. Oktober 2015 13:00
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 13. Oktober 2015 11:51