• +49-331-979-11-588
  • info@deinserverfachmann.de

Organisation: Jahresordner per Skript erstellen

Organisation: Jahresordner per Skript erstellen

Sie Organisieren ihre Daten in Ordnern und Jahresweise pro Mandanten oder Kunden. Mit diesem PowerShell Skript haben sie ein kleines Beispiel wie die Ordner automatisch erstellt werden können. In diesem Beispiel gehen wir davor aus das im Musterverzeichnis “- Neuer Mandant -” die Ordner “2018 JA” und “2018 FIBU” existieren. Es sollen nun, mit Beginn jeden Jahres, diese beiden Ordner mit dem aktuellen Jahr 2019 und dem darauffolgenden Jahr 2020 angelegt werden. Folglich sollten im Musterverzeichnis die Ordner “2018 JA”, “2018 FIBU”, “2019 JA”, “2019 FIBU”, “2020 JA” und “2020 FIBU” existieren. Wir kopieren also die alten Musterordner aus 2018 zu den jeweiligen des Jahres 2019 und 2020. Dieses Musterverzeichnis benutzen wir dann, um die Mandanten 1 und Mandanten 2 mit den neuen Ordnern zu bestücken. Es werden also nur die Ordner “2019 JA”, “2019 FIBU”, “2020 JA” und “2020 FIBU” kopiert, wenn sie nicht vorhanden sind.

In unserem Datenverzeichnis existieren 2 Ordner, welche nicht im gleichen Maß behandelt werden wie die Mandanten. Einmal das Backupverzeichnis für alte Mandanten bzw. Kunden und unser Musterverzeichnis. Das Backupverzeichnis darf nicht verändert werden und das Musterverzeichnis ist unser Skeleton bzw. Grundgerüst auf dem die Mandanten- bzw. Kundenordner basieren. Im späteren Verlauf könnten wir dieses Verzeichnis auch verstecken, um es nicht immer so prominent sichtbar zu haben oder wir möchten es ganz wo anders abgelegen.

param ($customerFolder)

function ExitWithMessage($message) {
    Write-Host $message
    exit
}

function CopyFolderIfNotExist($sourcePath, $destinationPath) {
    if (-not (Test-Path -Path $destinationPath)) {
        Copy-Item -Path $sourcePath -Destination $destinationPath -Recurse -Force
    }
}

function CopyYearlyFolders($sourcePath, $destinationPath, $years, $folderTypes, $clonePreviousYear) {
    foreach ($year in $years) {
        foreach ($folderType in $folderTypes) {
            $srcYear = $year
            if($clonePreviousYear -eq $True) {
              $srcYear -= 1
            }
            $sourceChildPath = Join-Path -Path $sourcePath -ChildPath "${srcYear} $folderType"
            $destinationChildPath = Join-Path -Path $destinationPath -ChildPath "${year} $folderType"
            CopyFolderIfNotExist $sourceChildPath $destinationChildPath
        }
    }
}

# Überprüfen, ob das Mandantenverzeichnis existiert
if ([string]::IsNullOrWhitespace($customerFolder)) {
    ExitWithMessage "Bitte als Parameter das Mandantenverzeichnis angeben."
} elseif (-not (Test-Path -Path $customerFolder)) {
    ExitWithMessage "Mandantenverzeichnis existiert nicht."
}

# Pfad-Variablen festlegen
$customerFolder = [System.IO.Path]::GetFullPath($customerFolder)
$newCustomerFolder = Join-Path -Path $customerFolder -ChildPath "- Neuer Mandant -"
$bakCustomerFolder = Join-Path -Path $customerFolder -ChildPath "- Backup (Altdaten) -"

# Überprüfen, ob das Mandanten-Musterverzeichnis existiert
if (-not (Test-Path -Path $newCustomerFolder)) {
    ExitWithMessage "Mandanten-Musterverzeichnis existiert nicht."
}

# Aktuelles und nächstes Jahr festlegen
$years = @((Get-Date).Year, (Get-Date).AddYears(1).Year)

# Jahresordner Suffix
$folderTypes = @("JA", "FIBU")

# Kopiere Vorjahresordner innerhalb des Mandanten-Musterverzeichnis
CopyYearlyFolders $newCustomerFolder $newCustomerFolder $years $folderTypes true

Write-Host "Durchlaufe Mandantenverzeichnis."
Get-ChildItem -Path $customerFolder -Directory | ForEach-Object {
    $subFolder = $_.FullName
    Write-Host "    Prüfe auf Mandantenverzeichnis: " $subFolder
    if ($subFolder -ne $newCustomerFolder -and $subFolder -ne $bakCustomerFolder) {
        Write-Host "       Darf beschrieben werden!"
        CopyYearlyFolders $newCustomerFolder $subFolder $years $folderTypes false
    }
}
Daniel Jörg Schuppelius

Selbstständiger IT-Dienstleister und Assistent für Elektronik und Datentechnik, Ich bin sozusagen Mädchen für alles was die Informationstechnik angeht. Kümmere mich gerne um Probleme, an denen andere Dienstleister scheitern und bin ständig auf der Suche nach einer neuen Herausforderung. Entwickle gerne Programme und Skripte und kümmere mich um diverse Blogs und Seiten. Auch sonst probiere ich mich an neuen Techniken aus, um mich noch unabhängiger von anderen Personen zu machen. Wenn du willst, dass irgendetwas funktioniert, dann kümmere dich immer selbst darum.

Sie suchen,
Informationen

zum
Unternehmen!