Powershell i typy zawartości SharePoint Online: Dodawanie

Powershell i typy zawartości SharePoint Online: Dodawanie




Typy zawartości witryny pozwalają na skonfigurowanie szablonu o odpowiedniej charakterystyce, używającego określonego dokumentu czy konkretnych metadanych. Typy zawartości ułatwiają zapewnienie spójności w witrynie lub całej subskrypcji. Niektóre z popularnych typów zawartości to Nowy Element czy Nowy Dokument.  Właściciel zbioru witryn może modyfikować istniejące lub tworzyć własne typy zawartościWłasne typy zawartości jeszcze lepiej odpowiadają potrzebom firmy. Własne lub istniejące typy zawartości mogą być dodawane do list, bibliotek lub zbiorów witryn. Typ zawartości mogą być również publikowane do Centrum Publikowania Typów Zawartości i zarządzane centralnie.

PowerShell


Wszystkie te czynności można wykonać za pomocą interfejsu użytkownika, jak również za pośrednictwem Powershell'a. Wymagane do tego jest Program SharePoint Online SDKPoniżej znajdziesz kilka kroków opisujących tworzenie, dodawanie, wyszukiwanie i usuwanie typów zawartości. Pełną listę gotowych, opublikowanych i darmowych skryptów znajdziesz poniżej. Poniższe skrypty zostały również napisane jako polecenia programu Powershell i spakowane do modułu Powershell dostępnego tutaj.

Dodawanie typu zawartości


Jak przy tworzeniu listy czy biblioteki, tworzenie typu zawartości wiąże się z wykorzystaniem CreationInformation, w tym przypadku klasy ContentTypeCreationInformation.
$lci =New-Object Microsoft.SharePoint.Client.ContentTypeCreationInformation

Właściwości


Jego właściwości zawierają Description (opis), Group (grupę), identyfikator (ID), nazwę (Name), nadrzędny typ zawartości (ParentContentType) i typ id (IDType), zarezerwowanego jedynie do użytku wewnętrznego, który nie powinien być używane w kodzie. Nazwa (właściwość Name) jest wymagana i musi być zdefiniowana przed użyciem zmiennej CreationInformation do tworzenia zawartości.

Poniższa tabela przedstawia zestawienie właściwości. Nazwy angielskie zostały zachowane.

Description Opcjonalne Typ: String
Group Opcjonalne Typ: String
ID Unikalne Typ: String
Name Wymagane Typ: String
ParentContentType Opcjonalne Typ: Microsoft.SharePoint.Client.ContentType 
TypeID Wewnętrzne Typ: String



Grupa



Grupa określa grupę typu zawartości witryny. Podział na grupy sprawia, że łatwiej je znaleźć użytkownikom. Domyślnie istnieje tutaj kilka opcji do wyboru. Opcje te widoczne są w liście rozwijanej na obrazku poniżej i mają format podobny do:
"Lista typów zawartości"
"Grupa pracy typów zawartości"




Polskie odpowiedniki powyższych typów zawrtości przedstawiają się następująco:
Analiza Biznesowa
Folder Content Types
List Content Types
Specjalne typy zawartości
Typ Zawartości do Opublikowania
Typ elementów zawartości cyfrowej
Typy zawartości dokumentu
Typ zawartości zestawu dokumentów
Typy zawartości folderu
Typ zawartości pracy grupy
Typ zawartości listy
Typy zawartości społeczności
Typ zawartości szablonu wyświetlania
Typ zawartości układu strony

To ważne, aby określić typ zawartości grupy poprawnie, jako że nie wszystkie typy grup są dostępne dla wszystkich bibliotek/list. Przykładowo grupa "typy zawartości listy" nie jest dostępne dla biblioteki:



Jeśli grupa nie jest określona, typ zawartości zostanie domyślnie dodany do niestandardowych typów zawartości.


Identyfikator typu zawartości



Identyfikatory typu zawartości jednoznacznie identyfikują typ zawartości. Identyfikator typu zawartości zawiera informację na temat rodowodu lub linii nadrzędnych typów zawartości, z których dziedziczy dany typ zawartości. Każdy identyfikator typu zawartości zawiera identyfikator nadrzędnego typu zawartości, który z kolei zawiera identyfikator rodzica danego typu zawartości, i tak dalej, ostatecznie aż do identyfikatora typu zawartości systemu. SharePoint Foundation wykorzystuje te informacje do określania relacji między typami zawartości i operacji push-down. [1]

Można utworzyć identyfikator typu zawartości przy użyciu jednej z dwóch konwencji:

  • Nadrzędnego typu zawartości ID + dwie wartości szesnastkowe (dwie wartości szesnastkowe nie mogą być "00")

  • Nadrzędnego typu zawartości ID + "00" + szesnastkowy identyfikator GUID


Źródło: https://msdn.microsoft.com/en-us/library/office/aa543822%28v=office.14%29.aspx?f=255&MSPPError=-2147217396

Identyfikator niestandardowego typu zawartości, którego nadrzędnym typem zawartości jest element, będzie wyglądać tak przy użyciu podejścia GUID:
0x01 który jest identyfikatorem typu zawartości "element"
00 
9e862727eed04408b2599b25356e7914 - wartość szesnastkowa


Element zawartości typu ID Zgodnie z Konwencją Wartość szesnastkowa
0x01 00 9e862727eed04408b2599b25356e7914

Razem: 0x01009e862727eed04408b2599b25356e7914
 
Można utworzyć identyfikator guid automatycznie za pomocą narzędzia Windows Powershell
[System.Guid]::NewGuid().toString()
lub
[guid]::NewGuid()

Można również wymyśleć własny i skrypt przedstawiony poniżej będzie używał identyfikatora 0x0100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, który także działa :)

Każdy typ zawartości powinien posiadać identyfikator unikatowy w zbiorze witryn Jeśli skrypt nie określa identyfikatora guid, SharePoint przydzieli go do typu zawartości automatycznie.



ParentContentType



Nadrzędny typu zawartości określa typ zawartości, z którego nowo utworzony typ zawartości będzie dziedziczył. Parametr może używać zarówno metody get; jaki i set; Parametry ParentContentType oraz Identyifkator (ID) wzajemnie się wykluczają. Jest to spowodowane informacją zakodowaną w Identyfikatorze. Parametr ID zawiera nadrzędny typu zawartości w swoich pierwszych znakach (np. "0x01" jako element). Więc co się dzieje, jeśli spróbujemy utworzyć typ zawartości, określając oba te parametry?

$lci.ID= "0x0108009e862727eed04408b2599b25356e7914"
$lci.ParentContentType=$ctx.Web.ContentTypes.GetById("0x01")

"Parameters.Id, parametry. ParentContentType nie mogą być używane razem. Proszę używać tylko jednego z nich."





Do zbioru witryn


Skrypt



Po ustaleniu, jakie informacje są potrzebne do tworzenia typu zawartości, otwórz Powershell ISE (albo Notatnik, który jest również opcją, choć niezbyt wygodną).

1. Wpisz ścieżki do biblioteki programu SharePoint Online SDK Client.dll i Client.Runtime.dll zainstalowanych na komputerze lokalnym.

Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

2. Tworzenie Microsoft.SharePoint.Client.ClientContext. Zmienne $Username, $Url i $AdminPassword zostały zdefiniowane wcześniej. ExecuteQuery() nie jest wymagane na tym etapie. Taki zapis i użycie wynika z osobistych preferencji i pozwala mi wyeliminować nieprawidłowe poświadczenia jako potencjalne błędy na wczesnym etapie.
$ctx =New-Object Microsoft.SharePoint.Client.ClientContext($Url)
$ctx .Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username$AdminPassword)
$ctx .ExecuteQuery()

3. Określenie ContentTypeCreationInformation

$lci =New-Object Microsoft.SharePoint.Client.ContentTypeCreationInformation
  $lci .Description="Description"
  $lci .Name="Powershell Content Type2"
  $lci .ParentContentType=$ctx.Web.ContentTypes.GetById("0x01")
  $lci .Group="List Content Types"

lub
$lci = New - Object Microsoft.SharePoint.Client.ContentTypeCreationInformation
#$lci.Description="Description"
$lci.Name="Powershell Content Type2id22aa"
#$lci.Group="List Content Types"
$lci.ID = "0x0100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

znak # określa komentarz w Powershellu. Parametry nieobowiązkowe opisu i Grupa są wykomentowane tutaj. Można je zdefiniować lub polegać na ustawieniach domyślnych.

4.  Dodawanie typu zawartości do zbioru typów zawartości witryny przy użyciu CreationInformation,
$ContentType $ctx .Web.ContentTypes.Add($lci)
$ctx .Load($contentType)
$ctx .ExecuteQuery()

5. Obsługa błędów:

$ContentType $ctx .Web.ContentTypes.Add($lci)
$ctx .Load($contentType)
try
   {
      
       $ctx .ExecuteQuery()
       Write-Host "Content Type " $Title " has been added to " $Url
   }
   catch [Net.WebException]
   {
      Write-Host $_ .Exception.ToString()
   }


Pełny skrypt



Powyższy skrypt zostały zapakowane do funkcji (między innymi dlatego, że funkcje są łatwiejsze do ponownego użycia). Poniżej znajdziesz pełny skrypt. 


function New-SPOContentType
{
param(
[Parameter(Mandatory=$true,Position=1)]
[string] $Username,
[Parameter(Mandatory=$true,Position=2)]
$AdminPassword,
        [Parameter(Mandatory=$true,Position=3)]
[string] $Url
)
   
  $ctx =New-Object Microsoft.SharePoint.Client.ClientContext($Url)
  $ctx .Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username$AdminPassword)
 
  $ctx .ExecuteQuery()
 
   
 
  $lci =New-Object Microsoft.SharePoint.Client.ContentTypeCreationInformation
  $lci .Description="Description"
  $lci .Name="Powershell Content Type2"
  $lci .ParentContentType=$ctx.Web.ContentTypes.GetById("0x01")
  $lci .Group="List Content Types"
   
  $ContentType $ctx .Web.ContentTypes.Add($lci)
  $ctx .Load($contentType)
  try
     {
        
         $ctx .ExecuteQuery()
         Write-Host "Content Type " $Title " has been added to " $Url
     }
     catch [Net.WebException]
     {
        Write-Host $_ .Exception.ToString()
     }
 
      
 
}
 
 
 
  # Paths to SDK. Please verify location on your computer.
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
 
# Insert the credentials and the name of the admin site
$Username = "admin@tenant.onmicrosoft.com"
$AdminPassword =Read-Host -Prompt "Password" -AsSecureString
 
 
New-SPOContentType -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl


Skryptu można także pobrać z Galerii Technetu.


Centrum Publikowania Typów Zawartości



Centrum Publikowania Typów Zawartości w usłudze SharePoint Online służy do centralnego zarządzania typami zawartości i publikowania ich do subskrybujących stron. Centrum Publikowania Typów Zawartości stanowi centralną lokalizację i umożliwia jednolite zarządzanie typami zawartości. Z centrum publikowania typów zawartości można opublikować dany typ do wielu zbiorów witryn. Centralna lokalizacja gwarantuje, że ustawienia, kolumny i wygląd zawartości jest spójny w całej organizacji. Typy zawartości są wyświetlane w subskrybujących witrynach pod Ustawienia witryny > Publikowanie typu zawartości:






 

Dla porównania, w poprzednim przykładzie, gdzie typ zawartości był dodawany na poziomie zbioru witryn, można było go propagować go tylko do podstawowej listy. Dodawanie zawartości do Centrum Publikowania Typów Zawartości pozwoli Ci używać tego samego typu zawartości w całej swojej subskrypcji.

Jak znaleźć Centrum Publikowania Typów Zawartości?

Z poziomu zbioru witryn:

  1. Wybierz przycisk opcji Settings button , a następnie wybierz Ustawienia witryny.

  2. Administracja zbiorem witryn kliknij Typ zawartości publikacji.

  3. W sekcji Centra Publikowania Typów Zawartości można zobaczyć nazwy wszystkie aplikacje zarządzane usługi przesyłania metadanych, które publikują typy zawartości do tego zbioru witryn wymienione pogrubioną czcionką. Po nazwy aplikacji usługa można zobaczyć adresy URL dla strony piasty. Można również zobaczyć listę typów zawartości subskrybowanych.

Źródło: https://support.office.com/en-za/article/Publish-a-content-type-from-a-content-publishing-hub-58081155-118d-4e7a-9cc5-d43b5dbb7d02

Bezpośredni adres url:


https://TENANT.SharePoint.com/sites/ContentTypeHub

gdzie TENANT jest nazwą tenanta SharePoint Online.


Skrypt



The ContentTypeCreationInformation i jego właściwości poddawane są analogiczne jak podczas dodawania go na poziomie zbioru witryn Równie mogą być widział przez url powyżej, pod wieloma względami centrum typ zawartości jest po prostu inny zbiór witryn. Pełny scenariusz dodawanie typu zawartości do CTH różni się tylko za pomocą adresu url:

function New-SPOContentType
{
param(
[Parameter(Mandatory=$true,Position=1)]
        [string] $Username,
        [Parameter(Mandatory=$true,Position=2)]
        $AdminPassword,
        [Parameter(Mandatory=$true,Position=3)]
        [string] $Url,
[Parameter(Mandatory=$true,Position=4)]
        [string] $Description,
[Parameter(Mandatory=$true,Position=5)]
        [string] $Name,
[Parameter(Mandatory=$true,Position=6)]
        [string] $Group,
[Parameter(Mandatory=$true,Position=7)]
        [string] $ParentContentTypeID
 
        )
   
  $ctx =New-Object Microsoft.SharePoint.Client.ClientContext($Url)
  $ctx .Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username$AdminPassword)
 
  $ctx .ExecuteQuery()
 
   
 
  $lci =New-Object Microsoft.SharePoint.Client.ContentTypeCreationInformation
  $lci .Description=$Description
  $lci .Name=$Name
  #$lci .ID= "0x0108009e862727eed04408b2599b25356e7914"
  $lci .ParentContentType=$ctx.Web.ContentTypes.GetById($ParentContentTypeID)
  $lci .Group=$Group
   
  $ContentType $ctx .Web.ContentTypes.Add($lci)
  $ctx .Load($contentType)
  try
     {
        
         $ctx .ExecuteQuery()
         Write-Host "Content Type " $Name " has been added to " $Url
     }
     catch [Net.WebException]
     {
        Write-Host $_ .Exception.ToString()
     }
 
      
 
}
 
 
 
  # Paths to SDK. Please verify location on your computer.
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
 
# Insert the credentials and the name of the admin site
$Username = "admin@tenant.onmicrosoft.com"
$AdminPassword =Read-Host -Prompt "Password" -AsSecureString
$Description = "desc"
$Name = "From Powershell directly to CTH"
$ParentContentTypeID = "0x01"
$Group = "List Content Types"
 
 
New-SPOContentType -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl -Description$Description -Name $Name -Group $Group -ParentContentTypeID $ParentContentTypeID

Skrypt można pobrać z galerii Technet tu.










Bezpośrednio do listy



Typ zawartości mogą być tworzone bezpośrednio w obrębie listy typów zawartości i być dostępne tylko w tym zakresie listy. To praktyczne rozwiązanie, jeśli typ zawartości, który zamierzasz utworzyć jest bardzo specyficzny, dostosowany tylko do tej konkretnej listy i nie powinien być używany w innym miejscu.

Zarządzanie typami zawartości


Aby zobaczyć dodane typy zawartości i móc z nich korzystać, upewnij się, że lista ma włączoną funkcję zarządzania typami zawartości.
Można również zmienić to ustawienie za pomocą skryptu Powershell i przykłady można znaleźć w skryptach poniżej:
Umożliwiają zarządzanie typu zawartości na wszystkich listach w zbiorze witryn przy użyciu Powershell   
Umożliwiają zarządzanie typu zawartości do listy wszystkie witryny przy użyciu Powershell
Ustawienie zarządzania typu zawartości do listy programu SharePoint Online przy użyciu Powershell   
Niestandardowe Powershell apletu polecenia Set-SPOList - ContentTypesEnabled


Skrypt


Jeśli chodzi o dodawanie typu zawartości do listy, istnieje kilka opcji, w zależności od wymagań. Za pomocą jednego skryptu typ zawartości mogą być dodawane do:
  • jednej listy
  • wszystkich listy
  • kilku list spełniające wspólne kryteria

Jednej listy


, Aby miejsce docelowe listy, niektóre informacje o liście jest potrzebne. Dla , jednej określonej listy, najlepsze są ID lub tytuł. Pozwalają wykorzystać GetByID GetByTitle metody:
$ctx .Web.Lists.GetByID("4C834F99-D908-4E1C-A04F-C8B1F971371C")
lub
$ctx .Web.Lists.GetByTitle("The Title of My List")

Wszystkie listy


Jest również możliwe, aby dodać typ zawartości wszystkich istniejących list. W celu dodania zawartości do wszystkich list, musisz pobrać z kolekcja listy. Www i pętli każdego z listy, dodawanie treści wpisz tam 
$ctx .Load($ctx.Web.Lists)
  $ctx .ExecuteQuery()
  foreach ($ll in $ctx.Web.Lists)
  {
    #Add Content Type here
  }

     
Niektóre listy


Po utworzeniu typu zawartości, można podjąć decyzję, że to jest właściwe tylko dla określonej listy. Tu jest nie do końca się opcje filtrowania. Można wybrać tylko ogłoszenia wykazów, tylko z typu zawartości włączone, list z określonego typu zawartości już dodane, utworzonych po lub przed określonym terminem, list, list z wersji włączone lub tych, które zawierają pewne pola lub widoków. Poniżej znajdują się niektóre z przykładów: 

  • listy zadań
foreach ($ll in $ctx.Web.Lists)
  {
 
   if ($ll.BaseTemplate -eq 107 -or $ll.BaseTemplate -eq 171)
     {
          # Add Content Type comes here
     }
  }

  • list z przepływami pracy
$ctx .Load($ctx.Web.Lists)
$ctx .ExecuteQuery()
 
  foreach ($ll in $ctx.Web.Lists)
  {
 
     $ctx .Load($ll.WorkflowAssociations)
     $ctx .ExecuteQuery()
 
      if ($ll.WorkflowAssociations. Count -gt 0)
       {
             # Add Content Type comes here
      
        }
  }



Pełny skrypt


Poniższy skrypt jest przykładem dodawanie typu zawartości listy z przepływami pracy. Aby uzyskać skrypt dla innych scenariuszy, zastąp jego sekcje odpowiednimi modyfikacjami. Skrypty można pobrać z galerii Technet:
Dodawanie typu zawartości do listy z przepływami pracy
Dodać typ zawartości do listy zadań
Utworzyć typ zawartości i dodać go do listy wszystkich w jednym miejscu
Utworzyć typ zawartości i dodawać bezpośrednio do listy SPO przy użyciu Powershell

function New-SPOContentType
{
param(
[Parameter(Mandatory=$true,Position=1)]
        [string] $Username,
        [Parameter(Mandatory=$true,Position=2)]
        $AdminPassword,
        [Parameter(Mandatory=$true,Position=3)]
        [string] $Url,
[Parameter(Mandatory=$true,Position=4)]
        [string] $Description,
[Parameter(Mandatory=$true,Position=5)]
        [string] $Name,
[Parameter(Mandatory=$true,Position=6)]
        [string] $Group,
[Parameter(Mandatory=$true,Position=7)]
        [string] $ParentContentTypeID
 
        )
   
  $ctx =New-Object Microsoft.SharePoint.Client.ClientContext($Url)
  $ctx .Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username$AdminPassword)
  $ctx .Load($ctx.Web.Lists)
  $ctx .ExecuteQuery()
 
   
 
  $lci =New-Object Microsoft.SharePoint.Client.ContentTypeCreationInformation
  $lci .Description=$Description
  $lci .Name=$Name
  #$lci .ID= "0x0100aa862727aed04408b2599b25356e7000"
  $lci .ParentContentType=$ctx.Web.ContentTypes.GetById($ParentContentTypeID)
  $lci .Group=$Group
   
  foreach ($ll in $ctx.Web.Lists)
  {
 
     $ctx .Load($ll.WorkflowAssociations)
     $ctx .ExecuteQuery()
 
   if ($ll.WorkflowAssociations. Count -gt 0)
   {
  $ContentType $ll .ContentTypes.Add($lci)
  $ctx .Load($contentType)
  try
     {
        
         $ctx .ExecuteQuery()
         Write-Host "Adding content type " $Name " to " $ll .Title
     }
     catch [Net.WebException]
     {
        Write-Host $_ .Exception.ToString()
     }
 
      
     }
     }
}
 
 
 
  # Paths to SDK. Please verify location on your computer.
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
 
# Insert the credentials and the name of the admin site
$Username = "admin@tenant.onmicrosoft.com"
$AdminPassword =Read-Host -Prompt "Password" -AsSecureString
$Description = "desc"
$Name = "From PS to Tasks234"
$ParentContentTypeID = "0x0107"
$Group = "List Content Types"
 
 
 
New-SPOContentType -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl -Description $Description -Name$Name -Group $Group -ParentContentTypeID $ParentContentTypeID



Od istniejącego typu zawartości



Po dodaniu typu zawartości do zbioru witryn lub centrum publikowania typu zawartości i jest przekazywana do subskrypcji witryn, można także dodać do listy jako istniejącego typu zawartości. Takie rozwiązanie umożliwia scentralizowaną kontrolę nad ustawienia typu zawartości. Można zastosować zmian w witrynie kolekcja poziom i zaktualizowanie wszystkich typów zawartości:



Można też edytować typ zawartości treści na poziomie Centrum Publikowania Typów Zawartości i opublikować go w celu propagowania zmian do wszystkich subskrybujących witryn:






Skrypt


Istnieje metoda przeznaczona do dodawania typu zawartości, która już istnieje na poziomie zbioru witryn. Wywoływana jest przez AddExistingContentType() i należy do klasy ContentTypeCollectionMetoda zwraca ContentType obiekt. 

1. Utworzyć kontekst.
$ctx =New-Object Microsoft.SharePoint.Client.ClientContext($Url)
$ctx .Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username$AdminPassword)
$ctx .Load($ctx.Web.Lists)
$ctx .ExecuteQuery()

2. Uzyskać typ zawartości, którą chcesz dodać przy użyciu jego identyfikatora.
$contentType = $ctx .Web.ContentTypes.GetById($ContentTypeID)
$ctx .Load($contentType)

3. Pobranie listy i kolekcji typów zawartości skojarzonych z tą listą:
$ll = $ctx .Web.Lists.GetByTitle($ListTitle)
$ctx .load($ll)
$ctx .load($ll.ContentTypes)
$ctx .ExecuteQuery()

4. Upewnij się, że zarządzanie zawartością typu jest dozwolone.
$ll .ContentTypesEnabled=$true

5. dodać typ zawartości. 
$AddedContentType = $ll .ContentTypes.AddExistingContentType($contentType)
$ll .Update()

Metoda zwraca wartość typu zawartości, tak działa Metoda sam 
$ll .ContentTypes.AddExistingContentType($contentType)
zwróci błąd "Kolekcja nie została zainicjowana" jak wspaniale opisane tutaj.


6. Wykonanie wniosku i dodać obsługę podstawowych błędów.
try
     {
        
         $ctx .ExecuteQuery()
         Write-Host "Adding content type " $AddedContentType .Name " to " $ll.Title
     }
catch [Net.WebException]
     {
        Write-Host $_ .Exception.ToString()
     }


Pełny skrypt


Polecenia opisane powyżej zostały zapakowane do funkcji i skrypt dostępny do pobrania tutaj: dodać istniejący typ zawartości bezpośrednio do SPO listy przy użyciu Powershell

function Add-SPOContentType
{
param(
[Parameter(Mandatory=$true,Position=1)]
        [string] $Username,
        [Parameter(Mandatory=$true,Position=2)]
        $AdminPassword,
        [Parameter(Mandatory=$true,Position=3)]
        [string] $Url,
        [Parameter(Mandatory=$true,Position=4)]
        [string] $ListTitle,
[Parameter(Mandatory=$true,Position=7)]
        [string] $ContentTypeID
 
        )
   
  $ctx =New-Object Microsoft.SharePoint.Client.ClientContext($Url)
  $ctx .Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username$AdminPassword)
  $ctx .Load($ctx.Web.Lists)
  $ctx .ExecuteQuery()
 
  $contentType = $ctx .Web.ContentTypes.GetById($ContentTypeID)
  $ctx .Load($contentType)
 
 $ll = $ctx .Web.Lists.GetByTitle($ListTitle)
 $ctx .load($ll)
 $ctx .load($ll.ContentTypes)
 $ctx .ExecuteQuery()
  $ll .ContentTypesEnabled=$true
 $AddedContentType = $ll .ContentTypes.AddExistingContentType($contentType)
 $ll .Update()
  try
     {
        
         $ctx .ExecuteQuery()
         Write-Host "Adding content type " $AddedContentType .Name " to " $ll.Title
     }
     catch [Net.WebException]
     {
        Write-Host $_ .Exception.ToString()
     }
 
      
      
}
 
 
 
  # Paths to SDK. Please verify location on your computer.
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"
 
# Insert the credentials and the name of the admin site
$Username = "admin@tenant.onmicrosoft.com"
$AdminPassword =Read-Host -Prompt "Password" -AsSecureString
$ListTitle = "tas1207"
$ContentTypeID = "0x01200200C44754774BD8D4449F4B7E3FE70A7E0E"
 
 
 
Add-SPOContentType -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl -ListTitle $ListTitle -ContentTypeID $ContentTypeID

Pliki do pobrania


W tym artykule zastosowano wiele skryptów, przykładowo różne funkcje służące do dodawania typu zawartości. Wszystkie skrypty używane tutaj są dostępne do pobrania z galerii Technet:

Dodawanie

SharePoint Online: Create a content type using Powershell
Create content type and add directly to SPO list using Powershell
Create and add content type to a content type hub SharePoint Online
Create content type and add it to all lists in one site
Add Content Type to Task Lists
Add Content Type to Lists with Workflows
Add existing content type directly to SPO list using Powershell


Zarządzanie Typami Zawartości

Allow content type management for all lists in site collection using Powershell
Allow content type management for all lists in a site using Powershell
Set content type management setting for SharePoint Online list using Powershell
Custom Powershell cmdlet Set-SPOList -ContentTypesEnabled

 Inne Skrypty

SharePoint Online: Check content types added to your lists
SharePoint Online: Check content types added to your lists (recursive)
Get a report on lists where a given content type is added
SharePoint Online: Remove a content type from all lists in a site collection

Get all properties of all content types in a SharePoint site
Get All Properties of All Content Types (Detailed)
Get All Properties of All Content Types in All Lists (Detailed) across one site
Get properties of a single content type by its ID


Oryginalny artykuł został opublikowany przez mnie tutaj.

Inne języki


Wiki: SharePoint Online content types in Powershell: Add (en-us)