Spring til indholdet

Flyt en liste eller et bibliotek til en anden webstedssamling med Export-SPWeb

I SharePoint Server flyttes en liste eller et bibliotek mellem webstedssamlinger med Export-SPWeb og Import-SPWeb, med versioner og rettigheder. Scriptet, hvad der ikke kommer med, en ny indholdsdatabase, og hvad der svarer til det i SharePoint Online.

Opdateret PowerShellSharePoint OnlineSharePoint 2010 4 min. læsning

Et websted kan ikke flyttes til en anden webstedssamling med én kommando i SharePoint Server. En webstedssamling kan flyttes mellem indholdsdatabaser med Move-SPSite, men lister og biblioteker, der skal over i en anden webstedssamling, må eksporteres og importeres én ad gangen. Sagen, det kom fra, står i Biblioteket, der voksede ud af sin indholdsdatabase.

En ny indholdsdatabase til den nye webstedssamling#

Skal den nye webstedssamling ligge i sin egen database:

  1. Opret en ny indholdsdatabase til webapplikationen.
  2. Sæt de andre databaser til Offline i Central Administration. Microsoft: mens en database er offline, kan der ikke oprettes webstedssamlinger i den, men de eksisterende kan stadig læses og skrives.
  3. Opret den nye webstedssamling. Den havner i den database, der er online.
  4. Sæt de andre databaser tilbage til Ready.

Det kan også gøres direkte med New-SPSite -ContentDatabase <database>.

Scriptet#

Køres i SharePoint Management Shell på en server i farmen. Min udgave fra 2015 er rettet, se nedenfor.

 1Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
 2
 3# Midlertidig mappe til eksportfilerne. Den slettes til sidst.
 4$path = "E:\flytning"
 5
 6$oldWeb = "http://<intranet>/departement/sales"
 7$newWeb = "http://<intranet>/departements/sales"
 8
 9# Lister og biblioteker, med adressen fra webstedet og ned
10$items = @("Lists/Clients", "Lists/Contacts", "Shared Documents")
11
12New-Item -ItemType Directory -Path $path -Force | Out-Null
13
14foreach ($i in $items) {
15    $file = Join-Path $path (($i -replace '[/ ]', '_') + ".cmp")
16    $itemUrl = ([uri]$oldWeb).AbsolutePath + "/" + $i
17
18    Export-SPWeb $oldWeb -Path $file -ItemUrl $itemUrl -IncludeVersions All -IncludeUserSecurity
19    Import-SPWeb $newWeb -Path $file -UpdateVersions Overwrite -IncludeUserSecurity
20}
21
22Remove-Item -Path $path -Recurse -Force
  • -ItemUrl er listens adresse, ikke dens navn. Microsoft skriver “the relative URL of the list or library”, begyndende med /. Jeg brugte adressen fra serverens rod, her /departement/sales/Lists/Clients. En liste oprettet i browseren ligger normalt under Lists/, et bibliotek direkte under webstedet.
  • -IncludeVersions All tager hele versionshistorikken med. Standarden er LastMajor, og så er historikken væk.
  • -IncludeUserSecurity tager rettighederne med (“Preserves the user security settings”).
  • -UpdateVersions bestemmer, hvad der sker med en fil, der findes i forvejen: Append (standard) lægger versionerne oven i, Overwrite sletter og indsætter, Ignore springer den over.

Rettet i forhold til 2015-udgaven#

  • Oprydningen kunne tømme hele drevet. Variablen $afdeling fandtes ikke (resten hed $departement), så Remove-Item -Recurse -Force ($path + $afdeling) blev til Remove-Item -Recurse -Force "e:\". Afprøvet i PowerShell 7: udtrykket giver e:\. Den midlertidige mappe har nu sin egen sti.
  • Bibliotekerne blev aldrig flyttet. Den anden løkke gik over $list igen i stedet for bibliotekerne. Nu er det én liste over begge.
  • md lavede ikke mappen, der blev eksporteret til, af samme grund. New-Item -Force gør.
  • Tankestregerne i –UpdateVersions kom fra WordPress. PowerShell accepterer dem, men de er skiftet til bindestreger.

Det, der ikke kommer med#

  • Workflows. Microsoft: “Workflows are not included in exports of sites or lists.”
  • Alarmer. -IncludeAlerts findes kun i SharePoint 2016 og 2019. At de ikke kommer med i 2010 og 2013, har jeg ikke fundet skrevet nogen steder.
  • Kun samme version. En eksport fra én version af SharePoint Server kan ikke importeres i en anden.
  • Hele filen eller intet. Import-SPWeb kan ikke importere et udvalg af elementerne i en eksportfil.
  • Skabelonen. Microsoft kræver, at et importeret websted har samme skabelon som målet. For en enkelt liste siger de det ikke. Det gik i 2015 med en liste fra et websted bygget på en skabelon, der ikke længere fandtes.

Størrelsen på en indholdsdatabase#

Microsoft anbefaler at holde en indholdsdatabase under 200 GB i SharePoint 2010 og senere. Op til 4 TB understøttes, hvis disken kan følge med. Health Analyzer-reglen Some content databases are growing too large advarer allerede ved 100 GB. 100 GB var grænsen i SharePoint 2007. En webstedssamling anbefales holdt under 100 GB, blandt andet fordi sikkerhedskopiering og gendannelse af en webstedssamling kun understøttes op til den størrelse.

I SharePoint Online#

Export-SPWeb findes ikke. Det, der kommer tættest på:

  • Move to i biblioteket flytter filer og mapper til et andet websted med versionshistorikken. Copy to tager kun seneste version. Kolonner, som målet ikke har, går tabt, og værdier i administrerede metadata følger ikke med. Højst 100 GB og 30.000 filer ad gangen.
  • Move-PnPFile og Copy-PnPFile bruger samme API (CreateCopyJobs) og tager versionerne med, medmindre -IgnoreVersionHistory er sat. -AllowSchemaMismatch lader flytningen gå igennem, selvom kolonnerne ikke er ens.
  • Copy-PnPList kopierer kun listens kolonner, visninger og indstillinger, ikke elementerne. Sammen med Move-PnPFile bliver det en flytning af et bibliotek.
  • SharePoint Migration Tool og Migration Manager kan ikke flytte fra SharePoint Online til SharePoint Online.

Move to findes kun for filer og mapper i biblioteker. Elementer i en liste har ingen tilsvarende flytning med versionerne.

Alle noter