none
Ordnerstruktur auf Sharepoint Bibliothek per Powershell Script aus Vorlagen erstellen RRS feed

  • Frage

  • Guten Abend zusammen,

    leider habe ich bisher keine eindeutige Antwort auf meine Frage erkannt, daher schreibe ich nun selbst. Ich hoffe, jemand kann mir hier helfen.

    Wir haben im Büro bislang auf einer örtlichen WD Mycloud Angebote etc. gespeichert. Per Powershell Script konnte man Projekte in einem bestimmten Kundenordner auf der Mycloud speichern. Man hat den Projektnamen eingegeben und seine Initialen und schon wurde alles angelegt. Wir satteln nun auf den Sharepoint um und hier habe ich bereits versucht, per Powershell das Script umzuschreiben.

    Ich bin permanent auf officeonline.com angemeldet - Seiten sind als vertrauenswürdig eingestuft. Ebenso habe ich die Bibliothek "Verkauf" als Netzlaufwerk "Z" verbunden. Manuell speichern über den Explorer geht. Allerdings wirft mir Powershell den Fehler "Es wurde kein Positionsparameter gefunden, der das Argument "..." akzeptiert. Ebenso sagt mir Powershell, dass das Laufwerk "Z" nicht existiere - aber ich kann aus dem Explorer heraus dort speichern.

    Hier mal der ganze Code:

    $foldername = Read-Host "Bitte gib einen Projektnamen ein"
    $foldername_kuerzel = Read-Host "Bitte gib dein Kürzel ein"
    
    New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Angebote -type Directory
    New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Auftrag -type Directory
    New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Rechnung -type Directory
    New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Kalkulation -type Directory
    Get-Childitem "C:\Users\PMMue\OneDrive\Desktop\Script\Kalkulationsvorlage.xlsm" -recurse | Copy-Item -Destination "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Kalkulation\"
    Rename-Item  "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Kalkulation\Kalkulationsvorlage.xlsm" -Newname "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Kalkulation\$foldername-kalkulation.xlsm"
    New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung -type Directory
    New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Fotos -type Directory
    New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Einkauf -type Directory
    New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Partner -type Directory
    New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung\Eventlog -type Directory
    Get-Childitem "C:\Users\PMMue\OneDrive\Desktop\Script\vorlage_eventlog.docx" -recurse | Copy-Item -Destination "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung\Eventlog\"
    Rename-Item "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung\Eventlog\vorlage_eventlog.docx" -NewName "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung\Eventlog\$foldername-eventlog.docx"
    New-Item -Path Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung\Sonstiges -type Directory
    start Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\

    Kann mir jemand einen Tipp geben, was ich ändern muss?

    Viele Grüße

    Philipp


    • Bearbeitet Morpheus200k Freitag, 1. November 2019 20:13 Angepasst.
    Freitag, 1. November 2019 20:10

Antworten

  • Philipp,

    Willkommen im Deutschen Microsoft Powershell Forum.

    Wenn Du Fehlermeldungen produzierst, solltest Du diese hier vollständig und als Code formatiert posten. Die sind üblicherweise wichtig und weisen häufig bereits auf die Lösung hin.  ;-)

    Wenn ich Dienen Code richtig verstanden habe, schlage ich ein paar Veränderungen vor:

    $TargetFolderList = @(
        'Angebote',
        'Auftrag',
        'Rechnung',
        'Kalkulation',
        'Fotos',
        'Einkauf',
        'Partner',
        'Planung\Eventlog',
        'Planung\Sonstiges'
    )
    foreach ($TargetFolder in $TargetFolderList) {
        New-Item -Path "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\$TargetFolder" -ItemType Directory
    }
    
    $Params = @{
        Path = 'C:\Users\PMMue\OneDrive\Desktop\Script\Kalkulationsvorlage.xlsm'
        Destination = "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Kalkulation\$foldername-kalkulation.xlsm"
    }
    Copy-Item @Params
    
    $Params = @{
        Path = 'C:\Users\PMMue\OneDrive\Desktop\Script\vorlage_eventlog.docx'
        Destination = "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung\Eventlog\$foldername-eventlog.docx"
    }
    Copy-Item @Params
    
    Invoke-Item "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername"

    Wir (Powershell) Scripter schreiben Code nicht gern doppelt (oder noch mehrfach). ;-) Für solche "wiederkehrenden/wiederholenden" Aufgaben eigenen sich Schleifen. Die lassen sich meistens auch leichter lesen und einfacher erweitern oder anpassen falls nötig.

    Wenn Du nur eine einzelne bestimmte Datei verarbeiten möchtest, ist Get-ChildItem und dann auch noch mit dem Parameter -Recurse irgendwie unpassend. Da könntest Du stattdessen eher Get-Item benutzen. Aber in Deinem speziellen Fall brauchst Du das gar nicht. Du kannst den Kopier- und Umbenennen-Vorgang direkt mit dem Copy-Item cmdlet in einem Zug erledigen.

    Da Deine Pfade ziemlich lang sind, machen sie den Code ein bissl schlecht leserlich, wenn z.B wie beim Copy-Item gleich zwei diese langen Pfade hintereinander stehen. Da kann man dann Splatting benutzen. Das macht den Code etwas übersichtlicher.  ... auch gut anzuwenden bei sehr vielen Parametern für ein einzelnes cmdlet.

    Probier ma ...

    Viel Spaß!


    Live long and prosper!

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

    Freitag, 1. November 2019 23:46
  • Moin. Startest Du Powershell (oder Dein Skript) als Admin? https://support.microsoft.com/de-de/help/3035277/mapped-drives-are-not-available-from-an-elevated-prompt-when-uac-is-co

    Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq

    Montag, 4. November 2019 08:21

Alle Antworten

  • Philipp,

    Willkommen im Deutschen Microsoft Powershell Forum.

    Wenn Du Fehlermeldungen produzierst, solltest Du diese hier vollständig und als Code formatiert posten. Die sind üblicherweise wichtig und weisen häufig bereits auf die Lösung hin.  ;-)

    Wenn ich Dienen Code richtig verstanden habe, schlage ich ein paar Veränderungen vor:

    $TargetFolderList = @(
        'Angebote',
        'Auftrag',
        'Rechnung',
        'Kalkulation',
        'Fotos',
        'Einkauf',
        'Partner',
        'Planung\Eventlog',
        'Planung\Sonstiges'
    )
    foreach ($TargetFolder in $TargetFolderList) {
        New-Item -Path "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\$TargetFolder" -ItemType Directory
    }
    
    $Params = @{
        Path = 'C:\Users\PMMue\OneDrive\Desktop\Script\Kalkulationsvorlage.xlsm'
        Destination = "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Kalkulation\$foldername-kalkulation.xlsm"
    }
    Copy-Item @Params
    
    $Params = @{
        Path = 'C:\Users\PMMue\OneDrive\Desktop\Script\vorlage_eventlog.docx'
        Destination = "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername\Planung\Eventlog\$foldername-eventlog.docx"
    }
    Copy-Item @Params
    
    Invoke-Item "Z:\Freigegebene Dokumente\Interessenten\$foldername_kuerzel-$foldername"

    Wir (Powershell) Scripter schreiben Code nicht gern doppelt (oder noch mehrfach). ;-) Für solche "wiederkehrenden/wiederholenden" Aufgaben eigenen sich Schleifen. Die lassen sich meistens auch leichter lesen und einfacher erweitern oder anpassen falls nötig.

    Wenn Du nur eine einzelne bestimmte Datei verarbeiten möchtest, ist Get-ChildItem und dann auch noch mit dem Parameter -Recurse irgendwie unpassend. Da könntest Du stattdessen eher Get-Item benutzen. Aber in Deinem speziellen Fall brauchst Du das gar nicht. Du kannst den Kopier- und Umbenennen-Vorgang direkt mit dem Copy-Item cmdlet in einem Zug erledigen.

    Da Deine Pfade ziemlich lang sind, machen sie den Code ein bissl schlecht leserlich, wenn z.B wie beim Copy-Item gleich zwei diese langen Pfade hintereinander stehen. Da kann man dann Splatting benutzen. Das macht den Code etwas übersichtlicher.  ... auch gut anzuwenden bei sehr vielen Parametern für ein einzelnes cmdlet.

    Probier ma ...

    Viel Spaß!


    Live long and prosper!

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

    Freitag, 1. November 2019 23:46
  • Moin. Startest Du Powershell (oder Dein Skript) als Admin? https://support.microsoft.com/de-de/help/3035277/mapped-drives-are-not-available-from-an-elevated-prompt-when-uac-is-co

    Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq

    Montag, 4. November 2019 08:21
  • Guten Morgen,

    vielen Dank für den Code und die Anpassung. Jetzt ist mir einiges klar geworden :D.

    Sorry für die späte Mitteilung aber ich kam jetzt erst dazu, das Ganze zu sichten.

    Viele Grüße...


    The world's best event agency: https://b-ceed.de/ Feel the adventure. Things get better.

    Mittwoch, 29. Januar 2020 08:37