使用CSOM for SharePoint Online以编程方式更改多个文件内容类型

时间:2015-04-06 23:36:42

标签: sharepoint csom sharepoint-online

我正在尝试将库中的所有文件从一种内容类型更改为另一种内容类型。这是在SharePoint Online中,所以我使用CSOM。我是新手,所以我会坚持从下面的地方开始。

我认为我最大的问题是获取内容类型的值。那个和我已经习惯了SP On Premise我很难掌握这个CSOM的东西。非常感谢能帮助我指明正确方向的任何人!

#Load necessary module to connect to SPOService
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") | Out-Null

#Login Information for script
$User = "user"
$Pass = "password"
$WebUrl = "SiteURL"

#Connect to SharePoint Online service
Write-Host "Logging into SharePoint online service." -ForegroundColor Green
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($WebUrl)
$Context.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($User, (ConvertTo-SecureString $Pass -AsPlainText -Force))

#Get the Necessary List
Write-Host "Getting the required list." -ForegroundColor Green
$List = $Context.Web.Lists.GetByTitle("TestLibrary")

Write-Host "Getting the Content Types." -ForegroundColor Green
$oldCT = $list.ContentTypes("OldCTName")
$newCT = $list.ContentTypes("NewCTName")
$newCTID = $newCT.ID

$Query = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery(1000); 
$Items = $List.GetItems($Query);

$Context.Load($Items);
$Context.ExecuteQuery();

#Check if the values specified for the content types actually exist on the list
    if (($oldCT -ne $null) -and ($newCT -ne $null))
    {
        #Go through each item in the list
        #Edit existing list items
    foreach($item in $Items)
    {
            #Check if the item content type currently equals the old content type specified
            if ($_.ContentType.Name -eq $oldCT.Name)
            {
                #Check the check out status of the file
                if ($_.File.CheckOutType -eq "None")
                {
                    #Change the content type association for the item
                    $_.File.CheckOut()
                    write-host "Resetting content type for file" $_.Name "from" $oldCT.Name "to" $newCT.Name
                    $_["ContentTypeId"] = $newCTID
                    $_.Update()
                    $_.File.CheckIn("Content type changed to " + $newCT.Name, 1)
                }
                else
                {
                    write-host "File" $_.Name "is checked out to" $_.File.CheckedOutByUser.ToString() "and cannot be modified"
                }
            }
            else
            {
                write-host "File" $_.Name "is associated with the content type" $_.ContentType.Name "and shall not be modified"
            }
        }
    }
    else
    {
        write-host "One of the content types specified has not been attached to the list"$list.Title
    }
        $Context.ExecuteQuery();
}

0 个答案:

没有答案