schreckinger 10 Geschrieben 27. März 2012 Melden Teilen Geschrieben 27. März 2012 Hallo Leute ich wünsche euch einen guten Morgen :) ich hab mir gerade die Frage gestellt ob es Sinn macht Schleifen in einer Function verpacken. Z.b Mein Beispiel BackupTool #Backup Tool Clear-Host # Funkton 1 function Select-Folder($message='Wählen Sie einen Ornder', $path = 0) { $object = New-Object -comObject Shell.Application $folder = $object.BrowseForFolder(0, $message, 0, $path) if ($folder -ne $null) { $folder.self.Path } } ################################################################################################################## $date = Get-Date -Format d.MMMM.yyyy $var1 = Select-Folder 'Wählen Sie den Ornder aus denn Sie sichern möchten!' ############################################################################################################### if (Test-Path -Path $var1) { Write-Host "Die Eingabe war korrket." } else{ Write-Host "Der Angebene Ornder exestiert nicht bitte prüfen sie die Schreibweise und achten sie auf Groß/Klein Schreibun" #Write-Host "Der Pfad zum Ornder ist nicht Korrekt:"$var1 } $var2 = Select-Folder 'Wählen Sie nun den Ornder denn sie als Backup verwenden möchten!' if (Test-Path -Path $var2) { Write-Host "Die Eingabe war Korrekt." cd $var2 $var3 = mkdir $date -Force Copy-Item -Path $var1 -Destination $var3 -Recurse -Force | Write-Host "Kopiervorgang gestartet dies kann einige Zeit in Anspruch nehmen" For($i = 1; $i -le $files.count; $i++) { Write-Progress -Activity "Backup von den Daten" -status "Backup gestartet" ` -percentComplete ($i / $files.count*100)} $backup_log = Dir -Recurse $var2 | Sort-Object | out-File "$var2\backup_log.txt" Write-Host "Der Kopiervorgang abgeschlossen auf"$var2 Write-Host "Das Protokoll finden sie unter:"$var2 } else { Write-Host "Der Angebene Ornder exestiert nicht" Write-Host "Der Pfad zum Ornder von ihrer Eingabe:"$var2 } ################################################################################################################# Würde es sinn machen den Unteren Teil in ein Function einzubauen ? Oder ist es z.b bei diesem Beispiel 2 Rangig ? Sollte ich in der Zukunpf eher function bauen ? Danke ich freue mich auf Antworten LG Schreckinger Zitieren Link zu diesem Kommentar
PowerShellAdmin 169 Geschrieben 27. März 2012 Melden Teilen Geschrieben 27. März 2012 Mit Funktionen steigerst du die Übersichtlichkeit deines Programmiercodes. Das heißt im oberen Bereich deines Skriptes lagerst du sämtliche Funktionen aus und im unteren Bereich hast du dann den Aufruf der einzelnen Funktionen. Besonders vorteilhaft, du kannst einzelne Funktionen relativ leicht in anderen Skripten verwenden. Wie z.B. Timestamp, Emailer uvm. In wie weit das jetzt in deinem Skript sinnvoll ist das zu unterglieder müsstest du selbst abwegen. Gerade im Bereich Fehlerabarbeitung kann man tolle Konstrukte bauen, die erheblich besser als ein TryCatch sind. Ich habe mir generell angewöhnt, sämtlichen Code möglichst in Funktionen zu fassen. Grüße Admin Hier zum Beispiel verschiedene Tests, macht ja Sinn das zu untergliedern (Ping, HTTP Test, Überprüfung freier Speicherplatz) #Funktion Ping function ping ($ping_host) { $ping = new-object system.net.networkinformation.ping $pingreturns=$ping.send($ping_host) if($pingreturns.status -ne "success") { #Platzhalter Fehlerabarbeitung echo 'fehler' } } #Funktionsaufruf / Beispiel #1er DNS Server ping ("192.168.0.1") #2er DNS Server ping ("8.8.8.8") #Funktion Website function Test-Site ($URL) { $webclient = New-Object Net.WebClient #Berechtigungen für den Aufruf werden gesetzt $webclient.Credentials = [system.Net.CredentialCache]::DefaultCredentials if($webclient.Proxy -ne $null) { $webclient.Proxy.Credentials = ` [system.Net.CredentialCache]::DefaultNetworkCredentials } # Hier ist der Hauptaufruf $webclient.DownloadString($URL) | Out-Null #Fehlerüberprüfung if ($error[0] -ne $null) { #Fehlermeldung wird gesetzts $error_msg=$error[0] $error_msg } } #Funktionsaufruf Website Test-Site "http://domain.tld/yoursite" #Speicherplatz prüfen function diskspace ($drive) { #Läd ein Listenobjekt $disk_list=get-wmiobject win32_logicaldisk -filter "Name = '$drive'" #Gibt den freien Speicher in Megabyte an $disk_space=$disk_list.Freespace/1MB if($disk_space -le 7000) #weniger als 7GB dann wird eine Fehler MSG ausgegeben { $error_msg="Fehler im Laufwerk '$drive'. Freier Speicher beträgt nur noch '$disk_space' MB" $error_msg } } diskspace ("c:") diskspace ("g:") Zitieren Link zu diesem Kommentar
schreckinger 10 Geschrieben 27. März 2012 Autor Melden Teilen Geschrieben 27. März 2012 Danke Powershell admin wieder ein Antwort die mich zu 100% zufrieden stellt. Jetzt noch eine Frage zum Forum ? Wenn ich mir denke das der Thread fertig muss ich denn schließen oder werden diese automatisch geschlossen. Danke nochmals lg schreckinger Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.