簡體   English   中英

使用PowerShell和OData API將文件上載到SharePoint 2010

[英]Upload file to SharePoint 2010 using PowerShell and the OData API

我正在嘗試將文件上傳到SharePoint 2010:

Function Add-Attachments()
{

    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True)]
        [int]$Id,
        [Parameter(Mandatory=$True)]
        [string[]]$Paths
    )

    BEGIN {}
    PROCESS {

        $url = "http://server/resource/_vti_bin/listdata.svc/TheList($Id)/Attachments"

        Foreach ($Path in $Paths) {

            Write-Verbose "Attaching $Path ..."
            $headers = @{
                'Slug' = "TheList|$Id|$(Split-Path $path -Leaf)"
            }

            $Payload = @{filename=(Split-Path $path -Leaf);filecontent=([IO.File]::ReadAllBytes($path))}

            Invoke-WebRequest -Uri $url -Method Post -UseDefaultCredentials -Body $Payload -Headers $headers

        } # Foreach

    } # PROCESS
    END {}

}

Add-Attachments -Id 1234 -Paths 'C:\Users\gandalf\Desktop\test.txt' -verbose

我收到的錯誤是:

Invoke-WebRequest: 處理此請求時發生錯誤。 在C:\\ Users \\ gandalf \\ Documents \\ WindowsPowerShell \\ Scripts \\ SP \\ SharePoint2010.ps1:382 char:13 + Invoke-WebRequest -Uri $ url -Method Post -UseDefaultCredentials -Bod ... + ~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:InvalidOperation :( System.Net.HttpWebRequest:HttpWebRequest)[Invoke-WebRequest],WebException + FullyQualifiedErrorId:WebCmdletWebResponseException,Microsoft .PowerShell.Commands.InvokeWebRequestCommand

**編輯**

該文件的原始內容:

Lorem ipsum dolor坐下來,精致的adipistur elit。 Donec diam lectus。 Sed坐在amet ipsum mauris。 Maecenas認為ligula ac quam viverra nec consectetur ante hendrerit。 Donec et mollis dolor。 Praesent et diam eget libero egestas mattis sit amet vitae augue。 Nam tincidunt congue enim,ut porta lorem lacinia consectetur。 Donec ut libero sed arcu vehicula ultricies a non tortor。 Lorem ipsum dolor坐下來,精致的adipistur elit。 Aenean ut gravida lorem。 Ut turpis felis,pulvinar a semper sed,adipiscing id dolor。 Pellentesque auctor nisi id magna consequat sagittis。 Curabitur dapibus enim坐在amet elit pharetra tincidunt feugiat nisl imperdiet。 Ull convallis libero in urna ultrices accumsan。 Donec sed odio eros。 在malesuada arcu rhoncus的Donec viverra mi quis quam pulvinar。 Cum sociis natoque penatibus et magnis dis parturient montes,nascetur ridiculus mus。 在rutrum accumsan ultricies。 Mauris vitae nisi at sem facilisis semper ac in est。

該腳本確實在服務器上創建了一個文件,但是具有以下內容:

文件名= test.txt的&filecontent =的Lorem + ipsum的+悲+坐+阿梅特%2C + consectetur + adipiscing + ELIT。+ Donec + A +直徑+ lectus。+桑達+坐+阿梅特+存有+ mauris。+保護者+ congue + ligula + AC +華富+靈貓+ NEC + consectetur +賭注+ hendrerit。+ Donec +等+油樹+悲。+ Praesent +等+直徑+ eget +自由人+ egestas +馬蒂斯+坐+阿梅德+簡歷+ augue。+南+ tincidunt + congue + enim%2C + UT + PORTA + LOREM + lacinia + consectetur。+ Donec + UT +自由人+ SED + arcu + vehicula + ultricies + A +非+ tortor。+的Lorem + ipsum的+悲+坐+阿梅特%圖2c + consectetur + adipiscing + ELIT。+ Aenean + UT +孕婦+ LOREM。+ UT + turpis +蚤%2C +枕+ A +森佩爾+ SED%2C + adipiscing + ID +悲。+ Pellentesque + auctor +硅化鎳+ ID +蚤+ consequat + sagittis。+ Curabitur + dapibus + enim +坐+阿梅德+ ELIT + pharetra + tincidunt + feugiat + nisl + imperdiet。+ UT + convallis +自由人+中+烏仁娜+ ultrices + accumsan。+ Donec +的sed +奧迪奧+性愛。+ Donec +靈貓+ MI + QUIS +財經+枕+在+ malesuada + arcu + rhoncus。+射精+ sociis + natoque + penatibus +等+ magnis + DIS +產婦+特斯%2C + nascetur + ridiculus +畝。+在+ rutrum + accumsan + ultricies。+ Mauris +履歷+耐司+在+ SEM + facilisis +森佩爾+ AC +在+ 美東時間。

我錯過了什么? 我需要包含內容長度嗎? 設置MIME類型?

要創建附件資源,必須指定以下屬性:

Endpoint Uri: http://server/site/_vti_bin/listdata.svc/entityset(itemid)/Attachments
Method: POST
Headers:
   Slug: "entityset|itemid|name"
   ContentType: */* 
Body: content

話雖如此,我在提供的示例中指出了指定的body參數( $payload )無效。

以下示例演示如何通過SharePoint 2010 REST Interface上載附件文件:

Function Add-Attachments()
{

    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True)]
        [string]$WebUrl, 
        [Parameter(Mandatory=$True)]
        [string]$ListName, 
        [Parameter(Mandatory=$True)]
        [int]$ItemId,
        [Parameter(Mandatory=$True)]
        [string]$SourcePath
    )

    BEGIN {}
    PROCESS {
        $endpointUri = New-Object System.Uri("$WebUrl/_vti_bin/listdata.svc/$ListName($ItemId)/Attachments")
        $fileName = (Split-Path $SourcePath -Leaf)
        $fileContent = ([IO.File]::ReadAllBytes($SourcePath))
        $headers = @{
                 'Slug' = "$ListName|$ItemId|$fileName";
        }

        Invoke-WebRequest -Uri $endpointUri -Method Post -UseDefaultCredentials -Body $fileContent -Headers $headers -ContentType "*/*"

    } # PROCESS
    END {}

}

用法:

Add-Attachments -WebUrl "http://contoso.intranet.com/" -ListName "Tasks" -ItemId 1 -SourcePath "C:\Users\user\Documents\SharePointUserGuide.docx" -verbose

更新

在通過Fiddler執行一些分析之后,確定適當的端點URL應該是:

/_vti_bin/listdata.svc/Attachments HTTP/1.1

代替:

/_vti_bin/listdata.svc/Tasks(<id>)/Attachments HTTP/1.1

修改的例子

Function Add-Attachments()
{

    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True)]
        [string]$WebUrl, 
        [Parameter(Mandatory=$True)]
        [string]$ListName, 
        [Parameter(Mandatory=$True)]
        [int]$ItemId,
        [Parameter(Mandatory=$True)]
        [string]$SourcePath
    )

    BEGIN {}
    PROCESS {
        $endpointUri = New-Object System.Uri("$WebUrl/_vti_bin/listdata.svc/Attachments")  
        $fileName = (Split-Path $SourcePath -Leaf)
        $fileContent = ([IO.File]::ReadAllBytes($SourcePath))
        $headers = @{
                 'Slug' = "$ListName|$ItemId|$fileName";
        }

        Invoke-WebRequest -Uri $endpointUri -Method Post -UseDefaultCredentials -Body $fileContent -Headers $headers -ContentType "*/*"

    } # PROCESS
    END {}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM