Skriptorganisation (alle meine Funktionen überfluten mein Skript)

7

Ich habe ein großes Skript, das ich jetzt mit Funktionen aufräume. Aber ich habe festgestellt, dass es irgendwie unordentlich wird, sie alle oben im Skript zu platzieren. Ich muss an hunderten Zeilen Code vorbei scrollen, um zum Skript selbst zu gelangen.

Wie halten Sie Ihre Skripte sauber? Haben Sie Ihre Funktionen in einer separaten Datei?

    
Sune 20.02.2012, 14:32
quelle

5 Antworten

13

Versuchen Sie #Region und #EndRegion

Wenn Sie den Skript-Editor PowerGUI verwenden, können Sie Regionen wie diese verwenden:

%Vor%

Wenn Sie das Skript im PowerGUI-Skript-Editor öffnen, werden die Bereiche ausgeblendet, so dass Sie nicht blättern müssen, um zur Hauptlogik zu gelangen. Dies funktioniert auch in Microsoft ISE. Nicht alle Skript-Editoren berücksichtigen jedoch die Regions-Tags.

Probieren Sie das Dot-Sourcing oder Importieren als Modul

aus

Eine weitere Möglichkeit besteht darin, Ihre Funktionen entweder in ein anderes Skript zu externalisieren und das so genannte dot sourcing . C:\myfunctions.ps1 auszuführen oder sie in eine Moduldatei mit der Erweiterung .psm1 einzufügen und Import-Module zu verwenden.

    
Andy Arismendi 20.02.2012, 14:46
quelle
8

Eine nützliche Technik besteht darin, Ihr gesamtes Skript in eine Funktion zu stellen:

%Vor%

Ich habe gerade festgestellt, dass diese Frage mit powershell markiert wurde, während das obige Beispiel für Bourne ist. Die Technik ist wahrscheinlich gültig, aber die Syntax kann abweichen.

    
William Pursell 20.02.2012 14:37
quelle
6

Probieren Sie Module

aus

Die Technik, die wir eingeführt haben, besteht darin, alle unsere Funktionen über ein Skriptmodul zu laden. Wir haben einen Ordner erstellt, der alle einzelnen Funktionsdateien enthält und diese in die entsprechenden Kategorien unterteilt. Sobald dies geschehen ist, erstellen wir eine .psm1 -Datei, um dem Modul mitzuteilen, was geladen werden soll, und fügen dann den Modulpfad zu unserem PowerShell-Profil hinzu (falls nicht im Standardmodul-Speicherort).

Ordnerstruktur

%Vor%

.psm1-Datei

Module-Name.psm1 (befindet sich unter einem Ordner mit demselben Namen - Erforderlich)

%Vor%

Profildatei

Microsoft.PowershellISE_profile.ps1 / Microsoft.Powershell_profile.ps1

%Vor%

Der obige Code bedeutet, dass Sie das Modul nicht an der gleichen Stelle wie der Rest speichern müssen (nützlich in unserem Fall, da wir SVN verwenden, um unsere Sachen mit unserem Team zu versionieren und zu teilen).

Wiederholen

Zur Erinnerung:

  • Benennen Sie die Funktionsdateien als "func_ {Verb} - {Namespace} {Substantiv} .ps1"
  • Erstellen Sie einen Ordner auf oberster Ebene für die Moduldatei psm1
  • Unterordner erstellen, um die Funktionen zu kategorisieren und zu halten, d. h. Dienstprogramme, Active Directory, Exchange usw.
  • Erstellen Sie Ihre "psm1" -Datei
  • Optional: Fügen Sie einen zusätzlichen Modulstandort zu Ihrem Profil hinzu

Wir fügen den "ps1" -Dateien die Präfixe "func_" hinzu, so dass bei der Vervollständigung des Funktionsnamens durch die Tabs, wenn sie sich im selben Verzeichnis wie die Datei befinden, keine Verwirrung entsteht. Außerdem fügen wir den Namespace (Firmeninitialen usw.) voran, damit unsere Funktionsnamen nicht mit anderen hinzugefügten Funktionen kollidieren.

Handy-Neuladefunktion

Ein zusätzlicher nützlicher Tipp, der sich während der Entwicklung als nützlich erweisen könnte, ist die Definition eines Alias, "reload" in unserem Fall, der das Modul zum Nachladen zwingt. Das heißt, sobald Sie eine Datei geändert haben, müssen Sie nur noch die Datei eingeben und sie wird mit Ihren Änderungen erneut in den Speicher geladen.

%Vor%

Der Grund, warum ich "int_" anstelle unserer normalen Benennungsstruktur verwende, ist, dass sich diese Funktion in unserem Profil befindet und ich es als interne und nicht als vollständige Funktion ansehe.

Ich hoffe, das gibt dir ein paar gute Ideen, es hat bis jetzt super für uns geklappt!

-Adam

    
alistek 22.02.2012 01:17
quelle
4

Eine Sache, auf die man achten muss, ist der Umfang. Dies wird nicht funktionieren:

%Vor%

Die load-functions-Funktion hat ihren eigenen Bereich, und die Funktionen, die sie erstellt, existieren nur in ihrem lokalen Bereich. Sie werden weg sein, wenn die Funktion beendet und der Bereich entsorgt wird.

Sie müssen diese im lokalen Bereich ausführen, indem Sie die Funktionen wie folgt dot-sourcen:
(Beachten Sie, dass zwischen dem Punkt und den Funktionsnamen ein Leerzeichen steht.)

%Vor%

Es funktioniert, wenn main nicht im lokalen Bereich ausgeführt wird, aber wenn Sie Argumente an das Skript übergeben, müssen Sie dies tun, damit $args im Skriptbereich verwendet wird.

    
mjolinor 20.02.2012 16:46
quelle
1

Eine andere mögliche Lösung besteht darin, die Funktionen in separate Dateien zu zerlegen und sie als Modul zu packen. Dann können Sie das Modul einfach in das Hauptskript importieren.

Sie haben zwar eine Anzahl von .ps1-Dateien, aber es macht die Verwaltung (und das Testen) jeder einzelnen Funktion viel einfacher.

Webcast, wie man das macht (etwa 1/2 in):

[http://powershell.com/cs/media/p/8773.aspx] [1]   [1]: Ссылка

Es enthält auch ein praktisches Modul zum Erstellen von Modulen.

    
Arcass 20.02.2012 16:37
quelle

Tags und Links