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.
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#0er et publiceringswebsted og kræver, at publicering er slået til på webstedssamlingen. Et almindeligt teamwebsted erSTS#0.Get-SPWebTemplateviser, hvad farmen har.-Language 1030er dansk og kræver, at den danske sprogpakke er installeret.-UseParentTopNavgiver underwebstedet det overordnede websteds topnavigation.- Rettigheder arves fra det overordnede websted.
-UniquePermissionsgiver 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 medCount, så sidste omgang kaldteNew-SPWebmed 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.