5

Adaptacja odpowiedzi Vadima na Upload file to SharePoint 2010 using PowerShell and the OData API i SharePoint 2010 REST API JQUery Insert, Update, Delete.Wymiana dołączonego pliku za pomocą interfejsu OData API programu SharePoint 2010

Próba przesłać nową wersję załącznik:

Function Update-Attachments() { 

    [CmdletBinding()] 
    Param(
     [Parameter(Mandatory=$True,Position=1)] 
     [string]$WebUrl, 

     [Parameter(Mandatory=$True,Position=2)] 
     [string]$ListName, 

     [Parameter(Mandatory=$True,Position=3)] 
     [int]$ItemId, 

     # pipeline support 
     [Parameter(Mandatory=$True,Position=4,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)] 
     # associate FileInfo object's FullName property to be bound to parameter 
     [Alias('FullName')] 
     [string[]]$Paths 
    ) 

    BEGIN {} 
    PROCESS { 

     # 
     $endpointUri = New-Object System.Uri("$WebUrl/_vti_bin/listdata.svc/$ListName($ItemId)/Attachments") 

     Foreach ($Path In $Paths) { 
      Write-Verbose "Path: $Path" 

      $fileName = (Split-Path $Path -Leaf) 
      $fileContent = ([IO.File]::ReadAllBytes($Path)) 
      $headers = @{ 
       "X-HTTP-Method" = "MERGE"; 
       "If-Match" = "*" 
      } 

      try { 
       # reset each pass to ensure that prior response isn't reused 
       $response=$null 
       $response = Invoke-WebRequest -Uri $endpointUri -Method POST -UseDefaultCredentials -Body $fileContent -Headers $headers -ContentType "*/*" 
      } 

      # Invoke-WebRequest throws System.Net.WebException 
      catch [System.Net.WebException] { 
       throw $_ 
      } 

      finally { 
       # returns Microsoft.PowerShell.Commands.HtmlWebResponseObject 
       $response 
      } 

     } # Foreach 

    } # PROCESS 
    END {} 

} 

używając polecenia rzutów (405) Metoda Niedozwolona:

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

Próbowałem wariacje na punkt końcowy:

  • $endpointUri = New-Object System.Uri("$WebUrl/_vti_bin/listdata.svc/$ListName/Attachments/$ItemId/$fileName")
  • $endpointUri = New-Object System.Uri("$WebUrl/_vti_bin/listdata.svc/Attachments(EntitySet='$ListName',ItemId=$ItemId,Name='$fileName')")

i przełączanie między PUT i MERGE.

Czego mi brakuje?

+0

Co się dzieje, kiedy "ręcznie" spróbuj użyć API za pomocą powołać-WebRequest lub powołać-restmethod (a więc bez użycia skryptu)? Czy powoduje również błąd? A czy interfejs API jest skonfigurowany tak, aby akceptował metody HTTPpost, put, delete i inne? – bluuf

Odpowiedz

1

Czy można sprawdzić, czy to odwołanie do programu SharePoint 2013 działa z interfejsem API 2010?

url: http://site url/_api/web/lists/getbytitle('list title')/items(item id)/AttachmentFiles('file name')/$value 
method: POST 
body: "Contents of file." 
headers: 
    Authorization: "Bearer " + accessToken 
    "X-HTTP-Method":"PUT" 
    X-RequestDigest: form digest value 
    content-length:length of post body 

https://msdn.microsoft.com/en-us/library/office/dn292553.aspx?f=255&MSPPError=-2147217396