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

Create Content Type via Powershell und CSV

bewertet von 0 Usern
Dieser Beitrag hat 7 Antworten | 2 Followers

Ohne Rang
Beiträge 4
Poipoi erstellt: 4 Feb 2019 12:11

Hallo zusammen,

ich erstelle gerade ein Script um Contenttypes via Powershell zu erstellen, Die Definition der CTs ist in einer CSV hinterlegt.

Leider funktionier das Script nicht richtig. Im 1.Schritt würde ich gerne die CTs in der CSV mit den vorhandenen einer SCs überprüfen, für den Fall, dass es die CTs schon gibt.

Das Script spring aber leider nicht in die "If" Bedingung,auch wenn es den CT bereits gibt.

Fehlt hier etwas bei der Instanzierung?

In der Else Schleife gibt er mir folgendes aus:

"Info: The content type Microsoft.SharePoint.Client.ContentType does not exists."

Da müsste ja eigentlich der Name des Contentypes stehen, oder?

***

 

function new-SPOnlineContentType {
    #variables that needs to be set before starting the script
    $siteURL = "xxx"
    $userName = "xxx"
    $CSVLocation = "xxx"
   
  
    
    # Let the user fill in their password in the PowerShell window
    $password = Read-Host "Please enter the password for $($userName)" -AsSecureString
    
    # set SharePoint Online credentials
    $SPOCredentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($userName, $password)
        
    # Creating client context object
    $context = New-Object Microsoft.SharePoint.Client.ClientContext($siteURL)
    $context.credentials = $SPOCredentials
    $contentTypesSPO = $context.web.contenttypes
    $context.load($contentTypesSPO)
    #$context.ExecuteQuery()
   
    #load CSV file
    $contentTypesCSV = import-csv $CSVLocation
    
    # send the request containing all operations to the server
    try{
        $context.executeQuery()
        write-host "info: Loaded Fields and Content Types" -foregroundcolor green
    }
    catch{
        write-host "info: $($_.Exception.Message)" -foregroundcolor red
    }
        
    # Loop through all content types to verify it doesn't exist
   
    foreach ($contentType in $contentTypesSPO){
        if ($contentTypesSPO.name -eq $contentTypesCSV.NameContentType ){
            write-host "Info: The content type $($contentType) already exists." -foregroundcolor red
            $contentTypeExists = $true
        }
        else{
        write-host "Info: The content type $($contentType) does not exists." -foregroundcolor green
            $contentTypeExists = $false
        }
    }
        
  
}
new-SPOnlineContentType

***

Top-25-Beitragsschreiber
Beiträge 446

Du schreibst im Script:

 

foreach ($contentType in $contentTypesSPO){
        if ($contentTypesSPO.name -eq $contentTypesCSV.NameContentType ){
            write-host "Info: The content type $($contentType) already exists." -foregroundcolor red
            $contentTypeExists = $true
        }
        else{
        write-host "Info: The content type $($contentType) does not exists." -foregroundcolor green
            $contentTypeExists = $false
        }
    }

Du löst die CTs in $contenttype auf, vergleichst dann aber $contentTypesSPO.name  mit $contentTypesCSV.NameContentType. Das kann nicht funktionieren.


Ohne Rang
Beiträge 4

Hi Derby,

 

danke für für das Feedback.

Wieso kann das nicht funktionieren?

 

Top-25-Beitragsschreiber
Beiträge 446

Na weil $contentType was anderes ist als $contentTypesSPO. :)

Ohne Rang
Beiträge 4

Du machste es aber spannend.

Ernsthaft, wüsste ich die Lösung würde ich hier nicht fragen.

Könntest Du mir bitte einen konkreten Lösungsvorschlag liefern?

Top-25-Beitragsschreiber
Beiträge 446

Du löst $contentTypesSPO in foreach $contentType auf. Also musst du auch den $contentTypesSPO.name anpassen.

$contentTypesSPO.name -eq $contentTypesCSV.NameContentType 

=

$contentType.name -eq $contentTypesCSV.NameContentType 

 

Ohne Rang
Beiträge 4

Vielen Dank!

Das Ergebniss ist allerdings das gleiche, es wird immernoch ausgegeben, dassder CT bereits existiert, obwohl er es nicht tut :-(

Top-25-Beitragsschreiber
Beiträge 446

Ich habe mir den Scriptteil mal genauer angeschaut. Du hast da noch nen Fehler in # Creating client context object. 

$contentTypesSPO wird nicht korrekt gefüllt und da leer geht das script nie in die Abfrage rein.

Lass dir die Variable ausgeben und siehst die Fehlermeldung.

Schau dir mal das an:

https://www.sharepointfire.com/2016/01/get-content-types-and-columns-with-powershell-for-sharepoint-online/

Da ist eine ähnliche Abfrage drin und die funktioniert.

Derby

Seite 1 von 1 (8 Elemente) | RSS