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

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Create Content Type via Powershell und CSV

Dieser Beitrag hat 7 Antworten

Ohne Rang
4 Beiträge
Poipoi erstellt 4 Feb. 2019 12:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

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

***

Alle Antworten

Ohne Rang
496 Beiträge
Derby Als Antwort am 4 Feb. 2019 13:26
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

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
4 Beiträge
Poipoi Als Antwort am 4 Feb. 2019 13:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Derby,

 

danke für für das Feedback.

Wieso kann das nicht funktionieren?

 

Ohne Rang
496 Beiträge
Derby Als Antwort am 4 Feb. 2019 16:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

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

Ohne Rang
4 Beiträge
Poipoi Als Antwort am 4 Feb. 2019 16:28
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

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?

Ohne Rang
496 Beiträge
Derby Als Antwort am 4 Feb. 2019 16:53
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

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
4 Beiträge
Poipoi Als Antwort am 4 Feb. 2019 19:30
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen Dank!

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

Ohne Rang
496 Beiträge
Derby Als Antwort am 5 Feb. 2019 13:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

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