none
Per Powershell Hauptordner überwachen und bei neuen Unterordner Dateien erstellen RRS feed

  • Frage

  • Hallo und guten Tag,

    bislang haben wir per eigenem Powershell Script auf Knopfdruck Kundenordner erstellt, die entsprechende Unterordner (Kalkulation, Angebot etc.) hatten. Nun arbeiten wir mit einem CRM Tool, das die Kundenordner auf unserem lokalen Western Digital Server anlegt. Allerdings verfügen diese nicht über die entsprechenden Unterordner und man müsste diese nun manuell anlegen.

    Ich suche nun nach einer Möglichkeit, per Powershell den "Mutterordner", also den Ordner, in welchem die Kunden abgelegt werden zu überwachen. Sobald ein neuer Kundenordner erstellt wird, soll Powershell automatisch Unterordner erstellen, in denen wiederum Vorlagedateien sind (Ordner Kalkulation beinhaltet dann beispielsweise eine Excel Datei).

    Frage: funktioniert das? Wie könnte der Code aussehen?

    Viele Grüße

    Marv

    Montag, 25. März 2019 15:23

Antworten

  • Hi 

    ich denke Du hast hier die .net FileWatcherClass verwenden, hiermit erhälst Du ein Event auf das Du reagieren kannst und dann den Task "Verzeichnis" anlegen starten kannst

    https://gallery.technet.microsoft.com/scriptcenter/Powershell-FileSystemWatche-dfd7084b

    ich verwende diese Technik mit VB.NET bzw. C# schon seid vielen jahren ohne Probleme 

    lg Klaus

    | Please Mark This As Answer if it solved your issue |
    | Please Vote This As Helpful if it helps to solve your issue |
    | Disclaimer:
     This posting is provided with no warranties and confers no rights. |
    | N 48° 8' 39.8419" E 11° 36' 1.3359" |


    Klaus

    Dienstag, 26. März 2019 09:13
  • OK ... wie unmittelbar müssen diese Unterordner denn erstellt werden? Das einfachste wäre es wohl, einfach eine geplante Aufgabe zu erstellen, diese alle 5 oder 10 oder 15 oder 60 Minuten laufen zu lassen, die dann prüft, sind neue Ordner angelegt worden, in denen die gewünschten Unterordner und Dateien fehlen und diese dann entsprechend erstellt.

    Dein Code könnte übrigens deutlich übersichtlicher gestalltet werden, wenn ihr die Vorteile der Powershell nutzt ....  ungefähr sowas hier:

    $foldername = Read-Host "Bitte gib einen Projektnamen ein"
    $foldername_kuerzel = Read-Host "Bitte gib dein Kürzel ein"
    
    $RootFolder = 'V:\2019\Kunden'
    
    $FolderList = @(
        'Angebote',
        'Auftrag',
        'Rechnung',
        'Kalkulation',
        'Planung',
        'Fotos',
        'Einkauf',
        'Partner',
        'Planung\Eventlog',
        'Planung\Sonstiges'
    )
    Foreach ($Folder in $FolderList){
        $Target = Join-Path -Path $(Join-Path -Path $RootFolder -ChildPath $($foldername_kuerzel + '-' + $foldername) ) -ChildPath $Folder
        New-Item -Path $Target -ItemType Directory
    }
    
    Get-Childitem "Y:\administration\Kalkulationsvorlage.xlsm" -recurse | Copy-Item -Destination "V:\2019\Kunden\$foldername_kuerzel-$foldername\Kalkulation\"
    Rename-Item "V:\2019\Kunden\$foldername_kuerzel-$foldername\Kalkulation\Kalkulationsvorlage.xlsm" -Newname "V:\2019\Kunden\$foldername_kuerzel-$foldername\Kalkulation\$foldername-kalkulation.xlsm"
    Get-Childitem "Y:\administration\vorlage_eventlog.docx" -recurse | Copy-Item -Destination "V:\2019\Kunden\$foldername_kuerzel-$foldername\Planung\Eventlog\"
    Rename-Item "V:\2019\Kunden\$foldername_kuerzel-$foldername\Planung\Eventlog\vorlage_eventlog.docx" -NewName "V:\2019\Kunden\$foldername_kuerzel-$foldername\Planung\Eventlog\$foldername-eventlog.docx"
    start V:\2019\Kunden\$foldername_kuerzel-$foldername\
    Eine weitere Möglichkeit wäre auch, die Unterordnerstruktur an einer definierten Stelle komplett zu erzeugen und diese dann mittels robocopy einfach in den neuen Projektordner zu kopieren.

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''


    Montag, 25. März 2019 17:41

Alle Antworten

  • Hallo Marv und willkommen im Deutschen Microsoft Powershell Forum.

    Wie Du in den hilfreichen Hinweisen und Regeln am Anfang dieses Forums bestimmt gelesen haben wirst, erstellen wir hier keinen gebrauchsfertigen Code auf Anfrage.

    Es wird von Dir erwartet schon mal selber aktiv geworden zu sein. Was hast Du denn schon versucht, um Deine Aufgabe zu lösen?

    Wenn Du bei Google z.B. einfach nach "Powershell Ordner überwachen" suchst, erhältst Du in den ersten Treffern eigentlich schon alles, was man dazu braucht.

    Ich könnte mir auch vorstellen, dass ihr euer CRM-Tool entsprechend erweitert, dass es diese Aufgabe gleich mit erledigt.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''


    • Bearbeitet BOfH-666 Montag, 25. März 2019 15:47
    Montag, 25. März 2019 15:40
  • Hallo Bofh,

    danke für das Feedback. Dass ich keinen marktfähigen Code erhalte ist mir schon bewusst. Den Thread "Powershell Ordner überwachen" kenne ich, allerdings beantwortet dieser eben nicht meine Frage, wie daraufhin automatisch Ordner und Dateien erstellt werden können.

    Wir haben ein eigenes Script erstellt, das bislang den Projektordner und Unterordner erstellt hat. In den Unterordnern befanden sich Vorlagedateien, die angepasst werden konnten. Den Schritt der Projektordner Erstellung übernimmt nun unser CRM System. Daher brauchen wir einen automatisierten Prozess, der in jedem neuen Projektordner automatisch entsprechende Unterordner erstellt - da fehlt mir die Expertise einfach.

    Nachfolgend mal unser bisheriges Script:

    $foldername = Read-Host "Bitte gib einen Projektnamen ein"
    $foldername_kuerzel = Read-Host "Bitte gib dein Kürzel ein"
    
    New-Item -Path V:\2019\Kunden\$foldername_kuerzel-$foldername\Angebote -type Directory
    New-Item -Path V:\2019\Kunden\$foldername_kuerzel-$foldername\Auftrag -type Directory
    New-Item -Path V:\2019\Kunden\$foldername_kuerzel-$foldername\Rechnung -type Directory
    New-Item -Path V:\2019\Kunden\$foldername_kuerzel-$foldername\Kalkulation -type Directory
    Get-Childitem "Y:\administration\Kalkulationsvorlage.xlsm" -recurse | Copy-Item -Destination "V:\2019\Kunden\$foldername_kuerzel-$foldername\Kalkulation\"
    Rename-Item "V:\2019\Kunden\$foldername_kuerzel-$foldername\Kalkulation\Kalkulationsvorlage.xlsm" -Newname "V:\2019\Kunden\$foldername_kuerzel-$foldername\Kalkulation\$foldername-kalkulation.xlsm"
    New-Item -Path V:\2019\Kunden\$foldername_kuerzel-$foldername\Planung -type Directory
    New-Item -Path V:\2019\Kunden\$foldername_kuerzel-$foldername\Fotos -type Directory
    New-Item -Path V:\2019\Kunden\$foldername_kuerzel-$foldername\Einkauf -type Directory
    New-Item -Path V:\2019\Kunden\$foldername_kuerzel-$foldername\Partner -type Directory
    New-Item -Path V:\2019\Kunden\$foldername_kuerzel-$foldername\Planung\Eventlog -type Directory
    Get-Childitem "Y:\administration\vorlage_eventlog.docx" -recurse | Copy-Item -Destination "V:\2019\Kunden\$foldername_kuerzel-$foldername\Planung\Eventlog\"
    Rename-Item "V:\2019\Kunden\$foldername_kuerzel-$foldername\Planung\Eventlog\vorlage_eventlog.docx" -NewName "V:\2019\Kunden\$foldername_kuerzel-$foldername\Planung\Eventlog\$foldername-eventlog.docx"
    New-Item -Path V:\2019\Kunden\$foldername_kuerzel-$foldername\Planung\Sonstiges -type Directory
    start V:\2019\Kunden\$foldername_kuerzel-$foldername\

    Vielleicht ist es ja ganz einfach ... würde mich über Hilfestellung sehr freuen.

    Herzlichst

    Marv

    Montag, 25. März 2019 16:32
  • OK ... wie unmittelbar müssen diese Unterordner denn erstellt werden? Das einfachste wäre es wohl, einfach eine geplante Aufgabe zu erstellen, diese alle 5 oder 10 oder 15 oder 60 Minuten laufen zu lassen, die dann prüft, sind neue Ordner angelegt worden, in denen die gewünschten Unterordner und Dateien fehlen und diese dann entsprechend erstellt.

    Dein Code könnte übrigens deutlich übersichtlicher gestalltet werden, wenn ihr die Vorteile der Powershell nutzt ....  ungefähr sowas hier:

    $foldername = Read-Host "Bitte gib einen Projektnamen ein"
    $foldername_kuerzel = Read-Host "Bitte gib dein Kürzel ein"
    
    $RootFolder = 'V:\2019\Kunden'
    
    $FolderList = @(
        'Angebote',
        'Auftrag',
        'Rechnung',
        'Kalkulation',
        'Planung',
        'Fotos',
        'Einkauf',
        'Partner',
        'Planung\Eventlog',
        'Planung\Sonstiges'
    )
    Foreach ($Folder in $FolderList){
        $Target = Join-Path -Path $(Join-Path -Path $RootFolder -ChildPath $($foldername_kuerzel + '-' + $foldername) ) -ChildPath $Folder
        New-Item -Path $Target -ItemType Directory
    }
    
    Get-Childitem "Y:\administration\Kalkulationsvorlage.xlsm" -recurse | Copy-Item -Destination "V:\2019\Kunden\$foldername_kuerzel-$foldername\Kalkulation\"
    Rename-Item "V:\2019\Kunden\$foldername_kuerzel-$foldername\Kalkulation\Kalkulationsvorlage.xlsm" -Newname "V:\2019\Kunden\$foldername_kuerzel-$foldername\Kalkulation\$foldername-kalkulation.xlsm"
    Get-Childitem "Y:\administration\vorlage_eventlog.docx" -recurse | Copy-Item -Destination "V:\2019\Kunden\$foldername_kuerzel-$foldername\Planung\Eventlog\"
    Rename-Item "V:\2019\Kunden\$foldername_kuerzel-$foldername\Planung\Eventlog\vorlage_eventlog.docx" -NewName "V:\2019\Kunden\$foldername_kuerzel-$foldername\Planung\Eventlog\$foldername-eventlog.docx"
    start V:\2019\Kunden\$foldername_kuerzel-$foldername\
    Eine weitere Möglichkeit wäre auch, die Unterordnerstruktur an einer definierten Stelle komplett zu erzeugen und diese dann mittels robocopy einfach in den neuen Projektordner zu kopieren.

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''


    Montag, 25. März 2019 17:41
  • Hi 

    ich denke Du hast hier die .net FileWatcherClass verwenden, hiermit erhälst Du ein Event auf das Du reagieren kannst und dann den Task "Verzeichnis" anlegen starten kannst

    https://gallery.technet.microsoft.com/scriptcenter/Powershell-FileSystemWatche-dfd7084b

    ich verwende diese Technik mit VB.NET bzw. C# schon seid vielen jahren ohne Probleme 

    lg Klaus

    | Please Mark This As Answer if it solved your issue |
    | Please Vote This As Helpful if it helps to solve your issue |
    | Disclaimer:
     This posting is provided with no warranties and confers no rights. |
    | N 48° 8' 39.8419" E 11° 36' 1.3359" |


    Klaus

    Dienstag, 26. März 2019 09:13