Spring til indholdet

Mange underwebsteder på én gang med PowerShell

Et kort script, der bygger en struktur af underwebsteder i SharePoint Server til demo eller til at prøve en migrering af, river den ned igen, og hvad der svarer til det i SharePoint Online, hvor underwebsteder ikke længere er vejen.

Opdateret PowerShellSharePoint Online 3 min. læsning

Til demoer og til at prøve en migrering af har jeg ofte brug for en struktur af underwebsteder, der hurtigt kan bygges, testes, rives ned og bygges igen. I SharePoint Server er det New-SPWeb i en løkke over en liste af adresser og navne.

SharePoint Server#

 1Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
 2
 3$root = "https://intranet/"
 4
 5# Adresse fra roden og navn. Et websted skal stå før sine underwebsteder.
 6$webs = @(
 7    @{ Url = "afdeling";          Name = "Afdelingen" }
 8    @{ Url = "afdeling/projekter"; Name = "Projekter" }
 9    @{ Url = "afdeling/kvalitet";  Name = "Kvalitet" }
10)
11
12foreach ($w in $webs) {
13    New-SPWeb -Url ($root + $w.Url) -Name $w.Name -Template "CMSPUBLISHING#0" -Language 1030 -UseParentTopNav
14}
  • -Template: CMSPUBLISHING#0 er et publiceringswebsted og kræver, at publicering er slået til på webstedssamlingen. Et almindeligt teamwebsted er STS#0. Get-SPWebTemplate viser, hvad farmen har.
  • -Language 1030 er dansk og kræver, at den danske sprogpakke er installeret.
  • -UseParentTopNav giver underwebstedet det overordnede websteds topnavigation.
  • Rettigheder arves fra det overordnede websted. -UniquePermissions giver webstedet sine egne.

Rive ned igen, nederste niveau først, fordi et websted med underwebsteder ikke kan slettes:

1for ($i = $webs.Count - 1; $i -ge 0; $i--) {
2    Remove-SPWeb ($root + $webs[$i].Url) -Confirm:$false
3}

Rettet i forhold til 2014-udgaven#

  • Kommaet efter det sidste element i listerne ("site/subsite", lige før )) er en syntaksfejl: “Missing expression after ‘,’” (afprøvet i PowerShell 7.6). Scriptet kunne ikke køre, som det stod.
  • Løkken kørte én gang for meget. for ($i=0; $i -le $url.Count; $i++) går til og med Count, så sidste omgang kaldte New-SPWeb med en tom adresse (afprøvet: tre omgange for to elementer).
  • To lister, der skulle passe sammen. Adresser og navne stod i hver sin liste og blev parret efter plads. Nu er hvert websted ét element med begge dele.

SharePoint Online#

Microsoft anbefaler ikke længere underwebsteder. I stedet er der ét websted pr. emne eller opgave, samlet med hubs (Microsoft). Administratoren kan slå oprettelse af underwebsteder helt fra, også gennem adresse og API (Microsoft), og et underwebsted får altid en klassisk skabelon (Microsoft).

Samme struktur som websteder i en hub, med PnP PowerShell:

 1Connect-PnPOnline -Url "https://<tenant>-admin.sharepoint.com" -Interactive -ClientId "<app-id>"
 2
 3$hub = "https://<tenant>.sharepoint.com/sites/afdeling"
 4$sites = @(
 5    @{ Url = "afdeling-projekter"; Name = "Projekter" }
 6    @{ Url = "afdeling-kvalitet";  Name = "Kvalitet" }
 7)
 8
 9foreach ($s in $sites) {
10    $url = New-PnPSite -Type TeamSiteWithoutMicrosoft365Group -Title $s.Name `
11        -Url "https://<tenant>.sharepoint.com/sites/$($s.Url)" -Lcid 1030
12    Add-PnPHubSiteAssociation -Site $url -HubSite $hub
13}

Webstedet i $hub skal allerede være registreret som hub (Register-PnPHubSite). -ClientId er en app-registrering i egen tenant.

Er underwebsteder slået til, og skal det være dem, er det New-PnPWeb forbundet til det overordnede websted, fx New-PnPWeb -Title "Projekter" -Url "projekter" -Template "STS#0" -Locale 1030 -InheritNavigation (PnP). -Url er kun det sidste led i adressen. Et underwebsted længere nede kræver en forbindelse til webstedet lige over det.

Ingen af de to PnP-eksempler er kørt.

Alle noter