Last active
September 18, 2020 13:58
-
-
Save vgrem/10713514 to your computer and use it in GitHub Desktop.
SharePoint Online REST request
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add-Type –Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.dll" | |
Add-Type –Path "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" | |
<# | |
.Synopsis | |
Sends an HTTP or HTTPS request to a SharePoint Online REST-compliant web service. | |
.DESCRIPTION | |
This function sends an HTTP or HTTPS request to a Representational State | |
Transfer (REST)-compliant ("RESTful") SharePoint Online web service. | |
.EXAMPLE | |
Invoke-SPORestMethod -Url "https://contoso.sharepoint.com/_api/web" | |
.EXAMPLE | |
Invoke-SPORestMethod -Url "https://contoso.sharepoint.com/_api/contextinfo" -Method "Post" | |
#> | |
Function Invoke-RestSPO(){ | |
Param( | |
[Parameter(Mandatory=$True)] | |
[String]$Url, | |
[Parameter(Mandatory=$False)] | |
[Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get, | |
[Parameter(Mandatory=$True)] | |
[String]$UserName, | |
[Parameter(Mandatory=$False)] | |
[String]$Password, | |
[Parameter(Mandatory=$False)] | |
[String]$Metadata, | |
[Parameter(Mandatory=$False)] | |
[System.Byte[]]$Body, | |
[Parameter(Mandatory=$False)] | |
[String]$RequestDigest, | |
[Parameter(Mandatory=$False)] | |
[String]$ETag, | |
[Parameter(Mandatory=$False)] | |
[String]$XHTTPMethod, | |
[Parameter(Mandatory=$False)] | |
[System.String]$Accept = "application/json;odata=verbose", | |
[Parameter(Mandatory=$False)] | |
[String]$ContentType = "application/json;odata=verbose", | |
[Parameter(Mandatory=$False)] | |
[Boolean]$BinaryStringResponseBody = $False | |
) | |
if([string]::IsNullOrEmpty($Password)) { | |
$SecurePassword = Read-Host -Prompt "Enter the password" -AsSecureString | |
} | |
else { | |
$SecurePassword = $Password | ConvertTo-SecureString -AsPlainText -Force | |
} | |
$credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $SecurePassword) | |
$request = [System.Net.WebRequest]::Create($Url) | |
$request.Credentials = $credentials | |
$request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f") | |
$request.ContentType = $ContentType | |
$request.Accept = $Accept | |
$request.Method=$Method | |
if($RequestDigest) { | |
$request.Headers.Add("X-RequestDigest", $RequestDigest) | |
} | |
if($ETag) { | |
$request.Headers.Add("If-Match", $ETag) | |
} | |
if($XHTTPMethod) { | |
$request.Headers.Add("X-HTTP-Method", $XHTTPMethod) | |
} | |
if($Metadata -or $Body) { | |
if($Metadata) { | |
$Body = [byte[]][char[]]$Metadata | |
} | |
$request.ContentLength = $Body.Length | |
$stream = $request.GetRequestStream() | |
$stream.Write($Body, 0, $Body.Length) | |
} | |
else { | |
$request.ContentLength = 0 | |
} | |
#Process Response | |
$response = $request.GetResponse() | |
try { | |
if($BinaryStringResponseBody -eq $False) { | |
$streamReader = New-Object System.IO.StreamReader $response.GetResponseStream() | |
try { | |
$data=$streamReader.ReadToEnd() | |
$results = $data | ConvertFrom-Json | |
$results.d | |
} | |
finally { | |
$streamReader.Dispose() | |
} | |
} | |
else { | |
$dataStream = New-Object System.IO.MemoryStream | |
try { | |
Stream-CopyTo -Source $response.GetResponseStream() -Destination $dataStream | |
$dataStream.ToArray() | |
} | |
finally { | |
$dataStream.Dispose() | |
} | |
} | |
} | |
finally { | |
$response.Dispose() | |
} | |
} | |
# Get Context Info | |
Function Get-SPOContextInfo(){ | |
Param( | |
[Parameter(Mandatory=$True)] | |
[String]$WebUrl, | |
[Parameter(Mandatory=$True)] | |
[String]$UserName, | |
[Parameter(Mandatory=$False)] | |
[String]$Password | |
) | |
$Url = $WebUrl + "/_api/contextinfo" | |
Invoke-RestSPO $Url Post $UserName $Password | |
} | |
Function Stream-CopyTo([System.IO.Stream]$Source, [System.IO.Stream]$Destination) | |
{ | |
$buffer = New-Object Byte[] 8192 | |
$bytesRead = 0 | |
while (($bytesRead = $Source.Read($buffer, 0, $buffer.Length)) -gt 0) | |
{ | |
$Destination.Write($buffer, 0, $bytesRead) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Usage
Create a List
$list = New-SPOList -WebUrl $Url -UserName $UserName -Password $Password -Title "Nokia Offices" -BaseTemplate 100
Write-Output 'List has been created'
Delete a List
Remove-SPOList -WebUrl $Url -UserName $UserName -Password $Password -Identity "Nokia Offices"
Get Lists
$lists = Get-SPOList -WebUrl $Url -UserName $UserName -Password $Password
Write-Output $lists | Select-Object Title, BaseTemplate
Update a List
$list = Set-SPOList -WebUrl $Url -UserName $UserName -Password $Password -Identity "Nokia Offices" -Title "Offices"