当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] SharePoint Online:使用 PowerShell 从经典体验更改为现代体验(反之亦然)

作者:精品下载站 日期:2024-12-14 15:32:13 浏览:13 分类:玩电脑

SharePoint Online:使用 PowerShell 从经典体验更改为现代体验(反之亦然)


要求:将 SharePoint Online 网站从经典体验更改为现代体验。

如何从经典中激活现代体验?

SharePoint Online 列表和库中的现代体验更快、适合移动设备且更易于使用。 它带来了新的功能、用户界面和组件。不过,有些功能只能在经典体验中使用。因此,您可能需要在 SharePoint Online 中的现代 UI 和经典体验之间切换。如何在 SharePoint 中从经典视图更改为现代视图?要在 SharePoint Online 中启用新的现代图书馆体验,请使用左下角的“退出经典体验”链接。

[玩转系统] SharePoint Online:使用 PowerShell 从经典体验更改为现代体验(反之亦然)

这开启了现代体验。如何在 SharePoint Online 中恢复为经典?那么,要禁用 SharePoint Online 中的现代体验并切换回经典体验,请使用链接“返回经典 SharePoint”。

[玩转系统] SharePoint Online:使用 PowerShell 从经典体验更改为现代体验(反之亦然)

如果您没有看到“返回经典 SharePoint”或“退出经典体验”,则很可能它尚未启用!如何在 SharePoint Online 中启用或禁用“返回经典 SharePoint”?

请注意,此脚本不会将您的经典团队网站主页转换为现代主页。您必须创建一个新的现代页面并将其设置为主页!

PowerShell 从经典体验转向现代体验

为了启用现代体验,我们必须禁用经典体验功能。要禁用现代体验,我们应该重新启用 SharePoint Online 中的经典体验功能。该 PowerShell 脚本分为两个不同的函数。

  1. 将给定功能状态设置为在给定范围(例如站点或 Web)内启用或禁用。
  2. 在适当的范围内激活相关功能以设置 UI 体验。

您可以使用此 PowerShell 脚本在网站集或网站级别启用或禁用现代体验。此脚本对对象设置现代体验或经典体验:列表和库(如果列表体验设置为:“站点的默认体验”)、站点内容、站点使用情况、回收站等。


#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

#Function to Enable or Disable Feature in SharePoint Online
Function Set-SPOFeatureStatus
{
    [CMDLetBinding()]
    Param
    (
        [Parameter(Mandatory=$True)][Microsoft.SharePoint.Client.ClientContext]$Context,
        [Parameter(Mandatory=$True)][GUID]$FeatureGUID,
        [Parameter(Mandatory=$True)][ValidateSet('Site','Web')][String]$Scope,
        [Parameter(Mandatory=$True)][ValidateSet('Enable','Disable')][String]$Status
    )
    If($Scope -eq "Site")
    {
        #Get the Site
        $Site = $Context.Site
        #Get the Feature Status
        $FeatureStatus =  $Site.Features.GetById($FeatureGuid)
        $FeatureStatus.Retrieve("DefinitionId")
        $Context.Load($FeatureStatus)
        $Context.ExecuteQuery()

        If($Status -eq "Enable")
        {
            #Activate the feature if its not enabled already
            If($FeatureStatus.DefinitionId -eq $null)
            {
                #Enable the Feature
                $Site.Features.Add($FeatureGuid, $True, [Microsoft.SharePoint.Client.FeatureDefinitionScope]::None) | Out-Null
                $Context.ExecuteQuery()
                Write-host -f Green "`tFeature has been Enabled at Site Level!"
            }
            Else
            {
                Write-host -f Yellow "`tFeature is Already Enabled at Site Level!"
            }
        }
        Elseif($Status -eq "Disable")
        {
            #De-Activate the feature if its enabled already
            If($FeatureStatus.DefinitionId -ne $null)
            {
                #Disable feature
                $Site.Features.Remove($FeatureGuid, $True) | Out-Null
                $Context.ExecuteQuery()
                Write-host -f Green "`tFeature has been Disabled at Site Level!"
            }
            Else
            {
                Write-host -f Yellow "`tFeature is Already Disabled at Site Level!"
            }
        }
    }
    ElseIf($Scope -eq "Web")
    {
        #Get the web
        $Web = $Context.Web
        #Get the Feature Status
        $FeatureStatus =  $Web.Features.GetById($FeatureGUID)
        $FeatureStatus.Retrieve("DefinitionId")
        $Context.Load($FeatureStatus)
        $Context.ExecuteQuery()
    
        If($Status -eq "Enable")
        {
            #Activate the feature if its not enabled already
            If($FeatureStatus.DefinitionId -eq $null)
            {
                #Enable Feature
                $Web.Features.Add($FeatureGUID, $True, [Microsoft.SharePoint.Client.FeatureDefinitionScope]::None)| Out-Null
                $Context.ExecuteQuery()
                Write-host -f Green "`tFeature has been Enabled at Web Level!"
            }
            Else
            {
                Write-host -f Yellow "`tFeature is Already Enabled at Web Level!"
            }
        }
        ElseIf($Status -eq "Disable")
        {
            #De-Activate the feature if its enabled already
            If($FeatureStatus.DefinitionId -ne $null)
            {
                #Disable Classic Experience feature, which Enables Modern UI
                $Web.Features.Remove($FeatureGUID, $True) | Out-Null                
                $Context.ExecuteQuery()
                Write-host -f Green "`tFeature has been Disabled at Web Level!"   
            }
            Else
            {
                Write-host -f Yellow "`tFeature is Already Disabled at Web Level!"
            }
        }
    }
}

#Function to set UI  experience to Modern or Classic at Site or Web Level
Function Set-SPOUIExperience
{
    [CMDLetBinding()]
    Param
    (
        [String]$SiteURL, 
        [Parameter(Mandatory=$True)][ValidateSet('Modern','Classic')][String]$Experience,
        [Parameter(Mandatory=$True)][ValidateSet('Site','Web')][String]$Scope
    )

    Try {
        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)

        #Site Scoped Feature "EnableDefaultListLibrarExperience" - Classic Experience
        $SiteFeatureGuid = New-Object System.Guid "E3540C7D-6BEA-403C-A224-1A12EAFEE4C4"
        
        #Web Scoped Feature "EnableDefaultListLibrarExperience" - Classic Experience
        $WebFeatureGUID = New-Object System.Guid "52E14B6F-B1BB-4969-B89B-C4FAA56745EF" 

        #Enable or Disable Modern Experience based on the parameters
        If($Scope -eq "Site")
        {
            #Get the web
            $Web = $Ctx.Web
            $Ctx.Load($Web)
            $Ctx.ExecuteQuery()

            If($Experience -eq "Modern")
            { 
                #Disable Classic Experience feature at site level
                Write-host -f Green "Enabling Modern Experience at the Site Collection by Disabling Classic UI Feature..."
                Set-SPOFeatureStatus -Context $Ctx -FeatureGUID $SiteFeatureGuid -Scope Site -Status Disable

                #Disable Classic Experience feature at web level
                Set-SPOUIExperience $Web.URL -Experience $Experience -Scope Web

                #Process each subsite in the site
                $Subsites = $Web.Webs
                $Ctx.Load($Subsites)
                $Ctx.ExecuteQuery()        
                Foreach ($SubSite in $Subsites)
                {
                    #Call the function Recursively
                    Set-SPOUIExperience $SubSite.URL -Experience $Experience -Scope Web
                }
            }
            ElseIf($Experience -eq "Classic")
            {
                #Enable Classic Experience feature at site level
                Write-host -f Green "Enabling Classic Experience at the Site Collection..."
                Set-SPOFeatureStatus -Context $Ctx -FeatureGUID $SiteFeatureGuid -Scope Site -Status Enable                
                
                #Enable Classic Experience feature at web level
                Set-SPOUIExperience $Web.URL -Experience $Experience -Scope Web

                #Process each subsite in the site
                $Subsites = $Web.Webs
                $Ctx.Load($Subsites)
                $Ctx.ExecuteQuery()        
                Foreach ($SubSite in $Subsites)
                {
                    #Call the function Recursively
                    Set-SPOUIExperience $SubSite.URL -Experience $Experience -Scope Web
                }
            }
        }
        ElseIf($Scope -eq "Web")
        {
            If($Experience -eq "Modern")
            {
                #Disable Classic Experience
                Write-host -f Green "Enabling Modern Experience at the Web $($SiteURL) by Disabling Classic UI Feature..."
                Set-SPOFeatureStatus -Context $Ctx -FeatureGUID $WebFeatureGUID -Scope Web -Status Disable                
            }
            ElseIf($Experience -eq "Classic")
            {
                #Enable Classic Experience
                Write-host -f Green "Enabling Classic Experience at the Web $($SiteURL)"
                Set-SPOFeatureStatus -Context $Ctx -FeatureGUID $WebFeatureGUID -Scope Web -Status Enable
            }
        }
    }
    Catch {
        write-host -f Red "Error:" $_.Exception.Message
    }
}

#Set Variable
$SiteURL = "https://crescent.sharepoint.com/sites/marketing"

#Get Credentials to connect
$Cred = Get-Credential

#Call the function to set UI experience
Set-SPOUIExperience -SiteURL $SiteURL -Experience Modern -Scope Site

当您激活站点级功能时,您创建的新站点将遵循 UI 体验集。同样,Web 级功能设置现有 Web 上的 UI 体验。

如何在 SharePoint Online 中将经典视图更改为新式视图?

您可以使用相关参数调用该函数,以将 SharePoint 网站中的经典视图更改为新式视图。例如。,


Set-SPOUIExperience -SiteURL $SiteURL -Experience Modern -Scope Site

此 PowerShell 脚本将给定网站集中的所有列表和库的 UI 体验从经典视图更改为现代视图。但是,单个列表和库级别的高级设置可以覆盖站点范围的设置。使用此脚本更新库设置:SharePoint Online:如何将列表 UI 更改为现代体验?

同样,您可以通过以下方式从 SharePoint Online 网站的新式视图切换回经典体验:


Set-SPOUIExperience -SiteURL $SiteURL -Experience Classic -Scope Site

PnP PowerShell 为站点禁用经典体验并启用现代 UI

PnP PowerShell 使将经典网站转变为现代网站变得更加简单。


#Parmeter
$SiteURL = "https://crescent.sharepoint.com/sites/Marketing/townhall"

#Connect to Site
Connect-PnPOnline -Url $SiteURL -Interactive

#Disable Modern UI Blocking Features at both Site and Web Level
Disable-PnPFeature -Identity "E3540C7D-6BEA-403C-A224-1A12EAFEE4C4" -Scope Site
Disable-PnPFeature -Identity "52E14B6F-B1BB-4969-B89B-C4FAA56745EF" -Scope Web

请注意,您也必须在站点级别禁用该功能,即使您想在一个特定子站点禁用经典 UI! (因为子网站继承了网站集范围内的功能!)。此外,此脚本不会将任何经典 SharePoint 页面(包括主页、发布页面、wiki 页面、Web 部件页面和网站页面库)更改为新式页面。要获得现代主页,您必须使用:如何在 SharePoint Online 中将经典页面转换为现代页面?

经常问的问题:

如何在 SharePoint Online 中将现代网站更改为经典网站?

如果您想从现代团队网站返回经典用户体验,请使用:SharePoint Online 切换到经典视图。您仍然可以使用经典网站模板创建新网站。

如何在 SharePoint Online 中将根网站更改为新式通信网站?

要将根站点(或任何团队站点)更改为通信站点,请使用“Enable-SPOCommSite”cmdlet。您还可以在 SharePoint 管理中心将经典 SharePoint 网站替换为新式网站。
详细信息:在 SharePoint Online 中将根网站转换为通信网站

如何在 SharePoint Classic 网站上创建新式页面?

要在经典 SharePoint Online 网站中创建新式页面: 首先激活 Web 范围的功能“网站页面”。启用该功能后,您将在网站内容页面或网站的“网站页面”库中找到“页面”。
更多信息:SharePoint Online 将新式页面添加到经典网站

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯