Sharepoint:哪个dll包含Microsoft.SharePoint.SPTemplateFileType

时间:2015-01-09 11:51:19

标签: powershell sharepoint

我正在尝试将Wiki页面添加到Sharepoint online / 365网站。为此,我需要能够

$wikiFile = $wikiPages.RootFolder.Files.Add($targetPath, [Microsoft.SharePoint.SPTemplateFileType]::WikiPage)

我在其他人的片段中看到的代码是什么,似乎对他们有效,因为他们做了

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

在他们的代码的开头。不幸的是,上面没有为我做任何事情,

Unable to find type [Microsoft.SharePoint.SPTemplateFileType]: make sure that the assembly containing this type is loaded

可能是因为我没有安装客户端SDK(并且我的工作计算机上没有管理员权限)。我已经通过使用MICROSOFT.SHAREPOINT.CLIENT.DLL得到了我已经从SDK安装文件中提取并通过执行加载

[Reflection.Assembly]::LoadFrom("$scriptdir\dll\Microsoft.SharePoint.Client.dll")

所以现在我希望我还需要加载一些额外的dll,这样我就可以访问Microsoft.SharePoint.SPTemplateFileType ...我已经尝试加载所有其他的DLL该SDK安装文件,但不会删除该错误。有谁知道要使用哪个DLL文件?当然,下载链接也会受到赞赏。

2 个答案:

答案 0 :(得分:0)

不会工作,因为"添加"你使用的方法不是带有两个参数的方法。这是Files.Add,它只接受一个参数,而你认为​​你正在使用的是SPFileCollection.Add。

不知道如何编写代码,以便在不使用实际服务器的情况下使用第二个代码。

答案 1 :(得分:0)

使用this project中的信息并将其与this answer相结合,我将以下代码放在一起,以便从客户端计算机向SharePoint O365发送内容(确保在更改路径时更改路径你使用这段代码!):

# global vars
$clientContext
$rootSiteUrl

#the $PSScriptRoot variable changes over time so let's stick the value to our own variable
$scriptdir = $PSScriptRoot

function Initialize-SPPS
{
    [CmdletBinding()]
    param
    (
        [Parameter(Mandatory=$true, Position=1)]
        [string]$siteURL,

        [Parameter(Mandatory=$false, Position=2)]
        [bool]$online,

        [Parameter(Mandatory=$false, Position=3)]
        [string]$username,

        [Parameter(Mandatory=$false, Position=4)]
        [string]$password
    )
    Write-Host "Loading the CSOM library" -foregroundcolor black -backgroundcolor yellow
    [Reflection.Assembly]::LoadFrom("$scriptdir\dll\Microsoft.SharePoint.Client.dll")
    Write-Host "Succesfully loaded the CSOM library" -foregroundcolor black -backgroundcolor green

    Write-Host "Create client context for site $siteUrl" -foregroundcolor black -backgroundcolor yellow
    $context = New-Object Microsoft.SharePoint.Client.ClientContext($siteURL)

    $context.RequestTimeOut = 1000 * 60 * 10;

    if ($online)
    {
        Write-Host "Setting SharePoint Online credentials" -foregroundcolor black -backgroundcolor yellow

        $context.AuthenticationMode = [Microsoft.SharePoint.Client.ClientAuthenticationMode]::Default
        $securePassword = ConvertTo-SecureString $password -AsPlainText -Force

        $credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $securePassword)
        $context.Credentials = $credentials
    }

    Write-Host "Check connection" -foregroundcolor black -backgroundcolor yellow
    $web = $context.Web
    $site = $context.Site
    $context.Load($web)
    $context.Load($site)
    $context.ExecuteQuery()

    Set-Variable -Name "clientContext" -Value $context -Scope Global
    Set-Variable -Name "rootSiteUrl" -Value $siteURL -Scope Global

    Write-Host "Succesfully connected" -foregroundcolor black -backgroundcolor green
}
# get files for variables
    # get file for pagename
    $pageName = [IO.File]::ReadAllText("C:\workspace\PortableSoft\UniServerZ\www\wikimigration\powershell\pageName.txt")
    # get file for page contents
    $pageContent = [IO.File]::ReadAllText("C:\workspace\PortableSoft\UniServerZ\www\wikimigration\powershell\pageContent.txt")

# connect
Initialize-SPPS -siteURL "https://xxx.sharepoint.com/sites/123456/" -online $true -username "user@xxx.com" -password "myPass" 

# put page
$fullPageName = "$pageName.aspx"
Write-Host "Adding page" -foregroundcolor black -backgroundcolor yellow
Create-WikiPage -Context $clientContext -WikiLibraryTitle "Site Pages" -PageName $fullPageName -PageContent $pageContent
Write-Host "New page added" -foregroundcolor black -backgroundcolor green

$clientContext.Dispose()

您可以从SharePoint SDK获取Microsoft.SharePoint.Client.dll。如果像我一样,您正在为拥有严格用户权限的公司工作,那么您将无法实际安装它:只需使用7zip或其他东西打开下载的文件,就像它是压缩文件一样以这种方式提取dll。