none
PS-Script entschlanken - nur wie? RRS feed

  • Frage

  • Guten Morgen zusammen,

    folgendes Szenario: Es gibt sechs Ordnerpfade und je nach Pfad soll der Inhalt des Ordners anders abgearbeitet werden, wobei es nur zwei Methoden der Abarbeitung gibt.

    • Ordner1 -> Methode1
    • Ordner2 -> Methode2
    • Ordner3 -> Methode2
    • Ordner4 -> Methode2
    • Ordner5 -> Methode1
    • Ordner6 -> Methode2

    Im Moment löse ich das noch so, dass die Ordner nach und nach abgearbeitet werden. Dadurch wird das Script aber ziemlich groß, pro Ordner bzw. Methode sind das ~120 Zeilen mit Code. Ich würde mir jetzt wünschen dass ich das Script so umbauen kann, dass die Ordner der einzelnen Methode über einen Codeblock abgearbeitet werden - nur wie?

    Ich brauche zwei Blöcke, pro Methode einen, und pro Block muss ich dann mittels Schleife die zwei bzw. vier Ordnerpfade abarbeiten. Aber wie kriege ich das am besten hin?

    Danke und Gruß

    Steffen

    Mittwoch, 19. Februar 2014 09:50

Antworten

  • Hallo,

    das kannst Du mit sogenannten Funktionen losen

    get-help about_fu*

    Grob sieht das dann so aus:

    function Myfunc1 {
    	# Dein Code fuer Methode 1 
    }
    
    function Myfunc2 {
    	# Dein Code fuer Methode 2 
    }
    
    # je nach dem wie du ermittels welcher Ordner welche Methode braucht rufts du die entsprecheden Funktion auf
    
    if ($FolderName -eq "Ordner1") {
    	Myfunc1
    }
    if ($FolderName -eq "Ordner2") {
    	Myfunc2
    }
    # ...

    Beste Gruesse
    brima

    Mittwoch, 19. Februar 2014 12:26
  • Das ist jetzt sehr abstrakt beschrieben vielleicht zu abstrakt! ;-)

    Verpacke deinen Code in Funktionen.

    Eine Funktion ist genau dafür gedacht Code Teile wieder zu verwenden.
    Der Code muss nur einmal in einem Skript / Modul stehen und alles was sich verändert wird über die Parameter als Argument übergeben.

    Pseudocode:

    Function Methode1 {
    
        param(
            [String]$Path
        )
    
        # Code der was macht hier ....
        Test-Path $Path
    
    }
    
    Function Methode2 {
    
        param(
            [String]$Path
        )
    
        # Code der was macht hier ....
        Test-Path $Path
    
    }
    
    
    # Ordner Gruppen festlegen
    $OrdnerGruppe1 = 'Ordner1','Ordner3','Ordner5'
    $OrdnerGruppe1 = 'Ordner2','Ordner4','Ordner6'
    
    # für jeden Ordner in Gruppe 1
    ForEach($Ordner in $OrdnerGruppe1) {
        # Funktion 1 aufrufen und Pfad übergeben
        Methode1 -Path $Ordner
    }
    
    # für jeden Ordner in Gruppe 2
    ForEach($Ordner in $OrdnerGruppe2) {
        # Funktion 2 aufrufen und Pfad übergeben
        Methode2 -Path $Ordner
    }


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    • Als Antwort vorgeschlagen Peter Kriegel Donnerstag, 20. Februar 2014 13:56
    • Als Antwort markiert notadmin Donnerstag, 20. Februar 2014 14:28
    Mittwoch, 19. Februar 2014 12:26

Alle Antworten

  • Hallo,

    das kannst Du mit sogenannten Funktionen losen

    get-help about_fu*

    Grob sieht das dann so aus:

    function Myfunc1 {
    	# Dein Code fuer Methode 1 
    }
    
    function Myfunc2 {
    	# Dein Code fuer Methode 2 
    }
    
    # je nach dem wie du ermittels welcher Ordner welche Methode braucht rufts du die entsprecheden Funktion auf
    
    if ($FolderName -eq "Ordner1") {
    	Myfunc1
    }
    if ($FolderName -eq "Ordner2") {
    	Myfunc2
    }
    # ...

    Beste Gruesse
    brima

    Mittwoch, 19. Februar 2014 12:26
  • Das ist jetzt sehr abstrakt beschrieben vielleicht zu abstrakt! ;-)

    Verpacke deinen Code in Funktionen.

    Eine Funktion ist genau dafür gedacht Code Teile wieder zu verwenden.
    Der Code muss nur einmal in einem Skript / Modul stehen und alles was sich verändert wird über die Parameter als Argument übergeben.

    Pseudocode:

    Function Methode1 {
    
        param(
            [String]$Path
        )
    
        # Code der was macht hier ....
        Test-Path $Path
    
    }
    
    Function Methode2 {
    
        param(
            [String]$Path
        )
    
        # Code der was macht hier ....
        Test-Path $Path
    
    }
    
    
    # Ordner Gruppen festlegen
    $OrdnerGruppe1 = 'Ordner1','Ordner3','Ordner5'
    $OrdnerGruppe1 = 'Ordner2','Ordner4','Ordner6'
    
    # für jeden Ordner in Gruppe 1
    ForEach($Ordner in $OrdnerGruppe1) {
        # Funktion 1 aufrufen und Pfad übergeben
        Methode1 -Path $Ordner
    }
    
    # für jeden Ordner in Gruppe 2
    ForEach($Ordner in $OrdnerGruppe2) {
        # Funktion 2 aufrufen und Pfad übergeben
        Methode2 -Path $Ordner
    }


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    • Als Antwort vorgeschlagen Peter Kriegel Donnerstag, 20. Februar 2014 13:56
    • Als Antwort markiert notadmin Donnerstag, 20. Februar 2014 14:28
    Mittwoch, 19. Februar 2014 12:26
  • Hallo,

    ihr seid ja beide in die gleiche Richtung gegangen, von daher werde ich mich damit beschäftigen. Vielen Dank! :)

    Gruß

    Steffen

    Donnerstag, 20. Februar 2014 14:28