2
votes

Has anyone been able to set the Site Logo on a SharePoint Online site using Powershell and CSOM ? Thanks

Nigel

4

4 Answers

1
votes

The following code solves setting Site Logo (ctx is ClientContext):

ctx.Web.SiteLogoUrl = "/teams/test/SiteAssets/45.jpg";

ctx.Web.Update();

ctx.ExecuteQuery();

1
votes

here is the script to change default sharepoint logo using powershell in sharepoint 2016

$logoLocation= "http://sharepoint2016/SiteAssets/MyCompanyLogo.png"
$oSite=new-object Microsoft.SharePoint.SPSite("http://sharepoint2016/")
foreach($oWeb in $oSite.Allwebs) {
$oWeb.SiteLogoUrl=$logoLocation
$oWeb.Update()
}
1
votes

According to UserVoice request Make the SiteLogoUrl property available in CSOM and post UserVoice driving improvements to SharePoint API the new version of SharePoint Online Client Components SDK Web class supports SiteLogoUrl property.

How to set Web.SiteLogoUrl property using CSOM in PowerShell:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime")

Function Get-SPOCredentials([string]$UserName,[string]$Password)
{
   $SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force
   return New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $SecurePassword)
}

Function Web-SetLogo([Microsoft.SharePoint.Client.ClientContext]$Content,[string]$SiteLogoUrl)
{
   $Context.Web.SiteLogoUrl = $SiteLogoUrl
   $Context.Web.Update()
   $Context.ExecuteQuery()
}

$UserName = "[email protected]"
$Password = Read-Host -Prompt "Enter the password"    
$Url = "https://contoso.sharepoint.com/"

$context = New-Object Microsoft.SharePoint.Client.ClientContext($Url)
$context.Credentials = Get-SPOCredentials -UserName $UserName -Password $Password

Web-SetLogo -Content $context -SiteLogoUrl "/SiteAssets/ContosoLogo.jpg"

$context.Dispose()
0
votes

This Script lets you change the logo of a complete site collection with one click:

Source: https://github.com/t1llo/change_logo_SharePointOnline-PS

Important: only works when executed in sharePoint Online Management Shell.

#Add PowerShell Module for SharePoint Online
    Import-Module Microsoft.Online.SharePoint.Powershell -DisableNameChecking

    ##Configuration variables
    $SiteUrl = "https://yoursite.collection.com/"
    $LogoURL="https://yourlogo.com"

    Try {
        #Get Credentials to connect
        $Cred = Get-Credential
        $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteUrl)
        $Ctx.Credentials = $Credentials

        #Get the Root web
        $Web = $Ctx.Web
        $Ctx.Load($Web)
        $Ctx.ExecuteQuery()

        #Function to change Logo for the given web
        Function Update-Logo($Web)
        {
            #Update Logo
            $Web.SiteLogoUrl = $LogoURL
            $Web.Update()
            $Ctx.ExecuteQuery()
            Write-host "Updated Logo for Web:" $Web.URL

            #Process each subsite in the site
            $Subsites = $Web.Webs
            $Ctx.Load($Subsites)
            $Ctx.ExecuteQuery()        
            Foreach ($SubSite in $Subsites)
            {
                #Call the function Recursively
                Update-Logo($Subsite)
            }
        }

        #Call the function to change logo of the web
        Update-Logo($Web)
    }
    Catch {
        write-host -f Red "Error updating Logo!" $_.Exception.Message
    }