SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Powershell auf Subsites zugreifen

Geprüfte Antwort Dieser Beitrag hat 2 Antworten

Ohne Rang
354 Beiträge
ExpoIT erstellt 21 März 2017 17:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo liebes Forum,

ich habe ein Skript geschrieben, welches auf alle  Subsites zugreift und in der Liste "Tasks" Einträge vornimmt.

Allerdings erstellt mein Skript nicht einzelne Zeilen, sondern überschreibt die bereits vorhandene, sodass es immer nur eine Zeile gibt. Seht ihr hier den Fehler, den ich mache?

foreach($subSite in $root.AllWebs)    {

        $subSiteURL = $subSite.Url

        $subSiteTitle = $subSite.Title

        $listName = "Tasks"

        $web = Get-SPWeb $subSiteURL

        $list = $web.Lists[$listName]

        $items = $list.items 

        foreach($row in $csvVariable)        {

             foreach($item in $items)             {

             write-host $subSiteTitle

             }

                  if($subSiteTitle -eq $row."Job No")                 { 

                    $newItem = $list.Items.Add()

 

                    $newItem["Taskname"] = "Calculation Start Date"

                    $newItem["Due Date"] = $row."Calculation Start Date"

                    $newItem.Update()

 

                    $newItem["Taskname"] = "Event Start Date"

                    $newItem["Due Date"] = $row."Event Start Date"

                    $newItem.Update()

 

                    $newItem["Taskname"] = "Event Finish Date"

                    $newItem["Due Date"] = $row."Event Finish Date"

                    $newItem.Update()

                } 

               $subSite.Dispose()

        }

      $root.Dispose()

}

Am Ende steht in der Liste nur der letzte Eintrag drin, hier: Event Finish Date

Alle Antworten

Ohne Rang
354 Beiträge
ExpoIT Als Antwort am 22 März 2017 11:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nun sieht mein (Teil-)Skript folgendermaßen aus:

 if($subSiteTitle -eq $row."Job No") 

                {  foreach($item in $items)

                    {   if($item["Taskname"] -eq "Event Start Date") 

                        {  $added++

                        } 

                    }

                   if($added -eq 0)

                   {

                        $newItem = $list.Items.Add()

                        $newItem["Taskname"] = "Event Start Date"

                        $newItem["Due Date"] = $row."Event Start Date"

                        $newItem.Update()

 

                        $newItem = $list.Items.Add()

                        $newItem["Taskname"] = "Event Finish Date"

                        $newItem["Due Date"] = $row."Event Finish Date"

                        $newItem.Update()

 

                        $newItem = $list.Items.Add()

                        $newItem["Taskname"] = "Calculation Start Date"

                        $newItem["Due Date"] = $row."Calculation Start Date"

                        $newItem.Update()

                        ................

 

 

Gäbe es eventuell eine einfachere/zusammengefasste Variante??

 

Danke und Gruß

 

Viele Grüße AS

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 März 2017 17:32
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe nicht den ganzen Beitrag gelesen, aber eines ist mir aufgefallen:

[quote user="ExpoIT"]$newItem = $list.Items.Add()[/quote]

Das funktioniert zwar, aber man sollte es niemals verwenden. Besser ist $list.AddItem()

SPList.Items ruft wirklich bei jedem Zugriff wirklich alle Elemente der Liste aus der Datenbank ab und ist deshalb mit extremer Vorsicht zu genießen.

Viele Grüße
Andi
af @ evocom de
Blog