From 9105bedfaddad80ecab5538435440c1a007a20d9 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Wed, 29 Jan 2020 23:46:25 +0100 Subject: [PATCH 001/114] Update description.md --- .../description.md | 39 +++++-------------- 1 file changed, 10 insertions(+), 29 deletions(-) diff --git a/Content Types/Content Types Management Setting/Allow content type management for all lists in site collection/description.md b/Content Types/Content Types Management Setting/Allow content type management for all lists in site collection/description.md index bc34af8c..eec2be23 100644 --- a/Content Types/Content Types Management Setting/Allow content type management for all lists in site collection/description.md +++ b/Content Types/Content Types Management Setting/Allow content type management for all lists in site collection/description.md @@ -1,29 +1,17 @@ A short Powershell script to allow management of content types for all SharePoint Online lists and libraries across all sites in a site collection - - -It is an equivalent of List>>List Settings>>Advanced>>Content types in Graphic User Interface (see screenshot) - - - - - - +It is an equivalent of **List**>>**List Settings**>>**Advanced**>>**Content types in Graphic User Interface** ([see screenshot](https://github.com/PowershellScripts/AllGalleryScriptsSamples/blob/develop/Content%20Types/Content%20Types%20Management%20Setting/Allow%20content%20type%20management%20for%20all%20lists%20in%20site%20collection/contentTypeManagement.png)) Applies to lists and libraries. - - -It requires installed SharePoint Online SDK +*It requires installed* [SharePoint Online SDK](www.microsoft.com/en-us/download/details.aspx?id=42038) You have to enter the list information before running the script: - - ```PowerShell # Paths to SDK. Please verify location on your computer. @@ -36,33 +24,26 @@ $AdminPassword="Pass" $Url="https://trialtrial123.sharepoint.com/sites/teamsitewithlists" $ContentTypesEnabled=$true ``` - - - - - -Please share your thoughts in the Q&A section! - - +### Please share your thoughts in the Q&A section! -Wiki article with detailed code description: +#### Wiki article with detailed code description: [SharePoint Online: Turn on support for multiple content types in a list or library using Powershell](http://social.technet.microsoft.com/wiki/contents/articles/30038.sharepoint-online-turn-on-support-for-multiple-content-types-in-a-list-or-library-using-powershell.aspx) -Related scripts -Set-SPOList properties (module) +#### Related scripts +[Set-SPOList properties (module)](https://gallery.technet.microsoft.com/office/Set-SPOList-properties-9d16f2ba) -Disable or enable attachments to list items using Powershell +[Disable or enable attachments to list items using Powershell](https://gallery.technet.microsoft.com/scriptcenter/Disable-or-enable-12cf3795) -Change search setting for all lists in a site using CSOM and Powershell +[Change search setting for all lists in a site using CSOM and Powershell](https://gallery.technet.microsoft.com/scriptcenter/Change-search-setting-for-8e842a48) -Allow content type management for all lists in a site using Powershell +[Allow content type management for all lists in a site using Powershell](https://gallery.technet.microsoft.com/scriptcenter/Allow-content-type-5bca5157) -Set content type management setting for SharePoint Online list using Powershell +[Set content type management setting for SharePoint Online list using Powershell](https://gallery.technet.microsoft.com/scriptcenter/Set-content-type-39ae4bce)

From 2539ee7de7ecef197c92ccd831bf88183bdc38aa Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Wed, 29 Jan 2020 23:47:12 +0100 Subject: [PATCH 002/114] Update description.md --- .../description.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content Types/Content Types Management Setting/Allow content type management for all lists in a site/description.md b/Content Types/Content Types Management Setting/Allow content type management for all lists in a site/description.md index a0d6f92d..fdc22124 100644 --- a/Content Types/Content Types Management Setting/Allow content type management for all lists in a site/description.md +++ b/Content Types/Content Types Management Setting/Allow content type management for all lists in a site/description.md @@ -22,9 +22,9 @@ $Url="https://trialtrial123.sharepoint.com/sites/teamsitewithlists" $ContentTypesEnabled=$true ``` -###Please share your thoughts in the Q&A section! +### Please share your thoughts in the Q&A section! -####Related scripts
+#### Related scripts
[Set direction of the reading order for a single list](https://gallery.technet.microsoft.com/office/Set-SPOList-properties-9d16f2ba) [Set-SPOList properties (module)](https://gallery.technet.microsoft.com/scriptcenter/Disable-or-enable-12cf3795) From 0f71c38dedec432b8b64503fddc0949bd0171f8e Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Wed, 29 Jan 2020 23:51:00 +0100 Subject: [PATCH 003/114] Update ContentTypeManagementSubsitesIncluded.ps1 --- .../ContentTypeManagementSubsitesIncluded.ps1 | 87 +++++++++---------- 1 file changed, 39 insertions(+), 48 deletions(-) diff --git a/Content Types/Content Types Management Setting/Allow content type management for all lists in site collection/ContentTypeManagementSubsitesIncluded.ps1 b/Content Types/Content Types Management Setting/Allow content type management for all lists in site collection/ContentTypeManagementSubsitesIncluded.ps1 index 9e762df4..71ad751b 100644 --- a/Content Types/Content Types Management Setting/Allow content type management for all lists in site collection/ContentTypeManagementSubsitesIncluded.ps1 +++ b/Content Types/Content Types Management Setting/Allow content type management for all lists in site collection/ContentTypeManagementSubsitesIncluded.ps1 @@ -3,61 +3,52 @@ # Created by Arleta Wanat, 2015 # -function Set-SPOListsContentTypesEnabled -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SPOListsContentTypesEnabled{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$AdminPassword, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string]$Url, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [bool]$ContentTypesEnabled -) - -$password = ConvertTo-SecureString -string $AdminPassword -AsPlainText -Force - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.ExecuteQuery() - -$Lists=$ctx.Web.Lists - $ctx.Load($ctx.Web) - $ctx.Load($ctx.Web.Webs) -$ctx.Load($Lists) -$ctx.ExecuteQuery() - -Foreach($ll in $Lists) -{ - $ll.ContentTypesEnabled = $ContentTypesEnabled - $ll.Update() - - - try - { - $ctx.ExecuteQuery() - Write-Host $ll.Title " Done" -ForegroundColor Green - } - - catch [Net.WebException] - { - - Write-Host "Failed" $_.Exception.ToString() -ForegroundColor Red - } + ) + + $password = ConvertTo-SecureString -string $AdminPassword -AsPlainText -Force + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.ExecuteQuery() + + $Lists=$ctx.Web.Lists + $ctx.Load($ctx.Web) + $ctx.Load($ctx.Web.Webs) + $ctx.Load($Lists) + $ctx.ExecuteQuery() + + Foreach($ll in $Lists){ + $ll.ContentTypesEnabled = $ContentTypesEnabled + $ll.Update() + + try{ + $ctx.ExecuteQuery() + Write-Host $ll.Title " Done" -ForegroundColor Green + } + catch [Net.WebException]{ + Write-Host "Failed" $_.Exception.ToString() -ForegroundColor Red + } + } + + if($ctx.Web.Webs.Count -gt 0){ + Write-Host "--"-ForegroundColor DarkGreen + + for($i=0;$i -lt $ctx.Web.Webs.Count ;$i++){ + Set-SPOListsContentTypesEnabled -Username $Username -Url $ctx.Web.Webs[$i].Url -AdminPassword $AdminPassword -ContentTypesEnabled $ContentTypesEnabled + } + } } -if($ctx.Web.Webs.Count -gt 0) - { - Write-Host "--"-ForegroundColor DarkGreen - for($i=0;$i -lt $ctx.Web.Webs.Count ;$i++) - { - Set-SPOListsContentTypesEnabled -Username $Username -Url $ctx.Web.Webs[$i].Url -AdminPassword $AdminPassword -ContentTypesEnabled $ContentTypesEnabled - } - } - -} - @@ -80,4 +71,4 @@ $ContentTypesEnabled=$true -Set-SPOListsContentTypesEnabled -Username $Username -AdminPassword $AdminPassword -Url $Url -ContentTypesEnabled $ContentTypesEnabled \ No newline at end of file +Set-SPOListsContentTypesEnabled -Username $Username -AdminPassword $AdminPassword -Url $Url -ContentTypesEnabled $ContentTypesEnabled From 85cd2de4827115154e21c3bba4ca4d189f65ab04 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Thu, 30 Jan 2020 00:11:52 +0100 Subject: [PATCH 004/114] Update ListContentTypes.ps1 --- .../ListContentTypes.ps1 | 65 ++++++++----------- 1 file changed, 26 insertions(+), 39 deletions(-) diff --git a/Content Types/Content Types Management Setting/Set content type management setting for a single list/ListContentTypes.ps1 b/Content Types/Content Types Management Setting/Set content type management setting for a single list/ListContentTypes.ps1 index db6603cf..a18ba4af 100644 --- a/Content Types/Content Types Management Setting/Set content type management setting for a single list/ListContentTypes.ps1 +++ b/Content Types/Content Types Management Setting/Set content type management setting for a single list/ListContentTypes.ps1 @@ -3,58 +3,45 @@ # Created by Arleta Wanat, 2015 # -function Set-SPOList -{ -param ( - [Parameter(Mandatory=$true,Position=0)] +function Set-SPOList{ + param( + [Parameter(Mandatory=$true,Position=0)] [string]$ListName, - [Parameter(Mandatory=$true,Position=1)] + [Parameter(Mandatory=$true,Position=1)] [bool]$ContentTypesEnabled - ) + ) -$ll=$ctx.Web.Lists.GetByTitle($ListName) + $ll=$ctx.Web.Lists.GetByTitle($ListName) -$ll.ContentTypesEnabled = $ContentTypesEnabled - $ll.Update() - - try - { - $ctx.ExecuteQuery() - Write-Host "Done" -ForegroundColor Green - } - - catch [Net.WebException] - { - - Write-Host "Failed" $_.Exception.ToString() -ForegroundColor Red - } - + $ll.ContentTypesEnabled = $ContentTypesEnabled + $ll.Update() + try{ + $ctx.ExecuteQuery() + Write-Host "Done" -ForegroundColor Green + } + catch [Net.WebException]{ + Write-Host "Failed" $_.Exception.ToString() -ForegroundColor Red + } } - - - -function Connect-SPOCSOM -{ - param ( - [Parameter(Mandatory=$true,Position=1)] +function Connect-SPOCSOM{ + param( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$AdminPassword, - [Parameter(Mandatory=$true,Position=2)] + [Parameter(Mandatory=$true,Position=2)] [string]$Url -) + ) - -$password = ConvertTo-SecureString -string $AdminPassword -AsPlainText -Force - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.ExecuteQuery() -$global:ctx=$ctx + $password = ConvertTo-SecureString -string $AdminPassword -AsPlainText -Force + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.ExecuteQuery() + $global:ctx=$ctx } - $global:ctx @@ -77,4 +64,4 @@ $ContentTypesEnabled =$false Connect-SPOCSOM -Username $Username -AdminPassword $AdminPassword -Url $Url -Set-SPOList -ListName $ListName -ContentTypesEnabled $ContentTypesEnabled \ No newline at end of file +Set-SPOList -ListName $ListName -ContentTypesEnabled $ContentTypesEnabled From 480c48a1415d16797276a4e6d9b0717dd7786618 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Thu, 30 Jan 2020 00:48:17 +0100 Subject: [PATCH 005/114] Update description.md --- .../description.md | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Content Types/Create/Add Content Type to Lists with Workflows/description.md b/Content Types/Create/Add Content Type to Lists with Workflows/description.md index 29aee1dd..b97da707 100644 --- a/Content Types/Create/Add Content Type to Lists with Workflows/description.md +++ b/Content Types/Create/Add Content Type to Lists with Workflows/description.md @@ -9,11 +9,9 @@ http://social.technet.microsoft.com/wiki/contents/articles/31051.sharepoint-onli ### How to use? +1. Download and install [SharePoint Online SDK](https://www.microsoft.com/en-us/download/details.aspx?id=42038). - -1. Download and install SharePoint Online SDK. - -2. Download the .ps1 file. +2. Download the *.ps1* file. 3. Open the file (you can do it also in NotePad) @@ -33,15 +31,14 @@ $Name="Name of the Content Type2" $ParentContentTypeID="0x01" $Group="List Content Types" ``` -a) Find on your computer where SharePoint.Clitent.dll and SharePoint.Client.Runtime.dll libraries are located and insert the correct paths -b) Instead of "admin@tenant.onmicrosoft.com" enter you username -c) Instead of "https://tenant.sharepoint.com/sites/teamsitewithlibraries" enter the name of the site collection where you want to find the content types -d) Fill in the properties of the content type. +a) Find on your computer where SharePoint.Clitent.dll and SharePoint.Client.Runtime.dll libraries are located and insert the correct paths
+b) Instead of "admin@tenant.onmicrosoft.com" enter you username
+c) Instead of "https://tenant.sharepoint.com/sites/teamsitewithlibraries" enter the name of the site collection where you want to find the content types
+d) Fill in the properties of the content type.
- 5. Run the script in Powershell (any module). -6. When the script has executed, Powershell will show a message Content Type Name of the Content Type2 has been added to Title of the List. +6. When the script has executed, Powershell will show a message *Content Type Name of the Content Type2 has been added to Title of the List*.

Enjoy and please share feedback! From 8de4cd4f1c9c3acf49e6485d00e7a33782e28ab9 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Thu, 30 Jan 2020 00:51:33 +0100 Subject: [PATCH 006/114] Update AddContentTypetoListsWithWorkflows.ps1 --- .../AddContentTypetoListsWithWorkflows.ps1 | 80 ++++++++----------- 1 file changed, 35 insertions(+), 45 deletions(-) diff --git a/Content Types/Create/Add Content Type to Lists with Workflows/AddContentTypetoListsWithWorkflows.ps1 b/Content Types/Create/Add Content Type to Lists with Workflows/AddContentTypetoListsWithWorkflows.ps1 index 503a5f26..c3693164 100644 --- a/Content Types/Create/Add Content Type to Lists with Workflows/AddContentTypetoListsWithWorkflows.ps1 +++ b/Content Types/Create/Add Content Type to Lists with Workflows/AddContentTypetoListsWithWorkflows.ps1 @@ -1,61 +1,51 @@ -function New-SPOContentType -{ -param( -[Parameter(Mandatory=$true,Position=1)] +function New-SPOContentType{ + param( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] $AdminPassword, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string]$Url, -[Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [string]$Description, -[Parameter(Mandatory=$true,Position=5)] + [Parameter(Mandatory=$true,Position=5)] [string]$Name, -[Parameter(Mandatory=$true,Position=6)] + [Parameter(Mandatory=$true,Position=6)] [string]$Group, -[Parameter(Mandatory=$true,Position=7)] + [Parameter(Mandatory=$true,Position=7)] [string]$ParentContentTypeID + ) - ) - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) - $ctx.Load($ctx.Web.Lists) - $ctx.ExecuteQuery() + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) + $ctx.Load($ctx.Web.Lists) + $ctx.ExecuteQuery() - - $lci =New-Object Microsoft.SharePoint.Client.ContentTypeCreationInformation - $lci.Description=$Description - $lci.Name=$Name - #$lci.ID="0x0100aa862727aed04408b2599b25356e7000" - $lci.ParentContentType=$ctx.Web.ContentTypes.GetById($ParentContentTypeID) - $lci.Group=$Group - - foreach($ll in $ctx.Web.Lists) - { - $ctx.Load($ll.WorkflowAssociations) - $ctx.ExecuteQuery() + $lci =New-Object Microsoft.SharePoint.Client.ContentTypeCreationInformation + $lci.Description=$Description + $lci.Name=$Name + #$lci.ID="0x0100aa862727aed04408b2599b25356e7000" + $lci.ParentContentType=$ctx.Web.ContentTypes.GetById($ParentContentTypeID) + $lci.Group=$Group - if($ll.WorkflowAssociations.Count -gt 0) - { - $ContentType = $ll.ContentTypes.Add($lci) - $ctx.Load($contentType) - try - { - - $ctx.ExecuteQuery() - Write-Host "Adding content type " $Name " to " $ll.Title - } - catch [Net.WebException] - { - Write-Host $_.Exception.ToString() - } + foreach($ll in $ctx.Web.Lists){ + $ctx.Load($ll.WorkflowAssociations) + $ctx.ExecuteQuery() - - } - } + if($ll.WorkflowAssociations.Count -gt 0){ + $ContentType = $ll.ContentTypes.Add($lci) + $ctx.Load($contentType) + try{ + $ctx.ExecuteQuery() + Write-Host "Adding content type " $Name " to " $ll.Title + } + catch [Net.WebException]{ + Write-Host $_.Exception.ToString() + } + } + } } @@ -75,4 +65,4 @@ $Group="List Content Types" -New-SPOContentType -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl -Description $Description -Name $Name -Group $Group -ParentContentTypeID $ParentContentTypeID \ No newline at end of file +New-SPOContentType -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl -Description $Description -Name $Name -Group $Group -ParentContentTypeID $ParentContentTypeID From 9cff9b180eeb0241cddae98227c89bdb6da1faa6 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Thu, 30 Jan 2020 00:55:16 +0100 Subject: [PATCH 007/114] Update description.md --- .../Add Content Type to Task Lists/description.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Content Types/Create/Add Content Type to Task Lists/description.md b/Content Types/Create/Add Content Type to Task Lists/description.md index 5b9a24e8..23db2c0a 100644 --- a/Content Types/Create/Add Content Type to Task Lists/description.md +++ b/Content Types/Create/Add Content Type to Task Lists/description.md @@ -11,9 +11,9 @@ http://social.technet.microsoft.com/wiki/contents/articles/31051.sharepoint-onli -1. Download and install SharePoint Online SDK. +1. Download and install [SharePoint Online SDK](https://www.microsoft.com/en-us/download/details.aspx?id=42038). -2. Download the .ps1 file. +2. Download the *.ps1* file. 3. Open the file (you can do it also in NotePad) @@ -33,15 +33,14 @@ $Name="Name of the Content Type2" $ParentContentTypeID="0x01" $Group="List Content Types" ``` -a) Find on your computer where SharePoint.Clitent.dll and SharePoint.Client.Runtime.dll libraries are located and insert the correct paths -b) Instead of "admin@tenant.onmicrosoft.com" enter you username -c) Instead of "https://tenant.sharepoint.com/sites/teamsitewithlibraries" enter the name of the site collection where you want to find the content types -d) Fill in the properties of the content type. +a) Find on your computer where SharePoint.Clitent.dll and SharePoint.Client.Runtime.dll libraries are located and insert the correct paths
+b) Instead of "admin@tenant.onmicrosoft.com" enter you username
+c) Instead of "https://tenant.sharepoint.com/sites/teamsitewithlibraries" enter the name of the site collection where you want to find the content types
+d) Fill in the properties of the content type.
- 5. Run the script in Powershell (any module). -6. When the script has executed, Powershell will show a message Content Type Name of the Content Type2 has been added to Title of the List. +6. When the script has executed, Powershell will show a message *Content Type Name of the Content Type2 has been added to Title of the List*. From 673c8b664c891875aa708b2301b35299d32c4c84 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Thu, 30 Jan 2020 18:08:19 +0100 Subject: [PATCH 008/114] Update description.md --- .../Create a content type/description.md | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/Content Types/Create/Create a content type/description.md b/Content Types/Create/Create a content type/description.md index b80d4a22..d07b7ff8 100644 --- a/Content Types/Create/Create a content type/description.md +++ b/Content Types/Create/Create a content type/description.md @@ -1,26 +1,14 @@ A short script to create a content type. -The script is fully described in an article here: - -http://social.technet.microsoft.com/wiki/contents/articles/31051.sharepoint-online-content-types-in-powershell.aspx - - - - - - - - - - +The script is fully described in an article [here](http://social.technet.microsoft.com/wiki/contents/articles/31051.sharepoint-online-content-types-in-powershell.aspx). ### How to use? -1. Download and install SharePoint Online SDK. +1. Download and install [SharePoint Online SDK](https://www.microsoft.com/en-us/download/details.aspx?id=42038). -2. Download the .ps1 file. +2. Download the *.ps1* file. 3. Open the file (you can do it also in NotePad) @@ -40,14 +28,14 @@ $ParentContentTypeID="0x01" $Group="List Content Types" ``` -a) Find on your computer where SharePoint.Clitent.dll and SharePoint.Client.Runtime.dll libraries are located and insert the correct paths -b) Instead of "admin@tenant.onmicrosoft.com" enter you username -c) Instead of "https://tenant.sharepoint.com/sites/teamsitewithlibraries" enter the name of the site collection where you want to find the content types -d) Fill in the properties of the content type. +a) Find on your computer where SharePoint.Clitent.dll and SharePoint.Client.Runtime.dll libraries are located and insert the correct paths
+b) Instead of "admin@tenant.onmicrosoft.com" enter you username
+c) Instead of "https://tenant.sharepoint.com/sites/teamsitewithlibraries" enter the name of the site collection where you want to find the content types
+d) Fill in the properties of the content type.
5. Run the script in Powershell (any module). -6. When the script has executed, Powershell will show a message Content Type Name of the Content Type2 has been added to Url of the Site. +6. When the script has executed, Powershell will show a message *Content Type Name of the Content Type2 has been added to Url of the Site*. From c826a0dfc21b2789e84cd26494cab2ce25a0527d Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Thu, 30 Jan 2020 18:41:43 +0100 Subject: [PATCH 009/114] Update ModifyDisplayFormTemplateName.ps1 --- .../ModifyDisplayFormTemplateName.ps1 | 51 +++++++++---------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/Content Types/Display Forms/Modify the Display Form Template Name/ModifyDisplayFormTemplateName.ps1 b/Content Types/Display Forms/Modify the Display Form Template Name/ModifyDisplayFormTemplateName.ps1 index f8f61ca4..083555b7 100644 --- a/Content Types/Display Forms/Modify the Display Form Template Name/ModifyDisplayFormTemplateName.ps1 +++ b/Content Types/Display Forms/Modify the Display Form Template Name/ModifyDisplayFormTemplateName.ps1 @@ -1,34 +1,31 @@ -function Set-SPOContentType -{ - param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SPOContentType{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, - [Parameter(Mandatory=$true,Position=2)] + [Parameter(Mandatory=$true,Position=2)] $AdminPassword, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string]$Url, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [string]$ListTitle - ) - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) - $ll=$ctx.Web.Lists.GetByTitle($ListTitle) - $ctx.Load($ll) - $ctx.Load($ll.ContentTypes) - $ctx.ExecuteQuery() - - - foreach($cc in $ll.ContentTypes) - { - Write-Host $cc.DisplayFormTemplateName - $cc.DisplayFormTemplateName="DocumentLibraryForm" - $cc.Update($false) - $ctx.ExecuteQuery() - } - - $ctx.Dispose() - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) + $ll=$ctx.Web.Lists.GetByTitle($ListTitle) + $ctx.Load($ll) + $ctx.Load($ll.ContentTypes) + $ctx.ExecuteQuery() + + + foreach($cc in $ll.ContentTypes){ + Write-Host $cc.DisplayFormTemplateName + $cc.DisplayFormTemplateName="DocumentLibraryForm" + $cc.Update($false) + $ctx.ExecuteQuery() + } + + $ctx.Dispose() } From 4ffc545ddc13be5ca3ff27a7a88c3289023ad1e1 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Thu, 30 Jan 2020 22:32:46 +0100 Subject: [PATCH 010/114] Update checkallcontenttypes.ps1 --- .../checkallcontenttypes.ps1 | 93 +++++++------------ 1 file changed, 34 insertions(+), 59 deletions(-) diff --git a/Content Types/Get/Find content types added to your lists/checkallcontenttypes.ps1 b/Content Types/Get/Find content types added to your lists/checkallcontenttypes.ps1 index ff953eda..d2803259 100644 --- a/Content Types/Get/Find content types added to your lists/checkallcontenttypes.ps1 +++ b/Content Types/Get/Find content types added to your lists/checkallcontenttypes.ps1 @@ -1,68 +1,43 @@  -function Get-SPOList -{ - - param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SPOList{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] $AdminPassword, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string]$Url - ) - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) - $ctx.ExecuteQuery() - - $ctx.Load($ctx.Web.Lists) - $ctx.ExecuteQuery() - Write-Host - Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen - foreach( $ll in $ctx.Web.Lists) - { - - $ctx.Load($ll.RootFolder) - $ctx.Load($ll.DefaultView) - $ctx.Load($ll.Views) - $ctx.Load($ll.WorkflowAssociations) - $ctx.Load($ll.ContentTypes) - - try - { - $ctx.ExecuteQuery() - } - catch - { - } - - - - - Write-Host $ll.Title -ForegroundColor Green - - foreach($cc in $ll.ContentTypes) - { - Write-Host $cc.Name - } - - - - - - - } - - - - } - - - - - - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) + $ctx.ExecuteQuery() + + $ctx.Load($ctx.Web.Lists) + $ctx.ExecuteQuery() + Write-Host + Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen + + foreach( $ll in $ctx.Web.Lists){ + $ctx.Load($ll.RootFolder) + $ctx.Load($ll.DefaultView) + $ctx.Load($ll.Views) + $ctx.Load($ll.WorkflowAssociations) + $ctx.Load($ll.ContentTypes) + + try{ + $ctx.ExecuteQuery() + } + catch{} + + Write-Host $ll.Title -ForegroundColor Green + + foreach($cc in $ll.ContentTypes){ + Write-Host $cc.Name + } + } +} # Paths to SDK. Please verify location on your computer. From 6ce02039c29a4faa7a54a2ad65b5d3f4b4d1143c Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Thu, 30 Jan 2020 22:43:42 +0100 Subject: [PATCH 011/114] Update ContentTypesWithoutPSObject.ps1 --- .../ContentTypesWithoutPSObject.ps1 | 109 +++++++----------- 1 file changed, 43 insertions(+), 66 deletions(-) diff --git a/Content Types/Get/Get All Detailed Properties of All Content Types/ContentTypesWithoutPSObject.ps1 b/Content Types/Get/Get All Detailed Properties of All Content Types/ContentTypesWithoutPSObject.ps1 index a21b170e..d8eea6bc 100644 --- a/Content Types/Get/Get All Detailed Properties of All Content Types/ContentTypesWithoutPSObject.ps1 +++ b/Content Types/Get/Get All Detailed Properties of All Content Types/ContentTypesWithoutPSObject.ps1 @@ -1,74 +1,51 @@  -function Get-SPOContentType -{ - - param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SPOContentType{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] $AdminPassword, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string]$Url - ) - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) - $ctx.ExecuteQuery() - - $ctx.Load($ctx.Web) - $ctx.Load($ctx.Web.ContentTypes) - $ctx.ExecuteQuery() - Write-Host - Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen - foreach( $cc in $ctx.Web.ContentTypes) - { - - - $ctx.Load($cc) - $ctx.Load($cc.FieldLinks) - $ctx.Load($cc.Fields) - $ctx.Load($cc.WorkflowAssociations) - $ctx.ExecuteQuery() - $cc | Add-Member NoteProperty Web($url) - foreach($field in $cc.Fields) - { - $PropertyName="Field"+$field.ID - $cc | Add-Member NoteProperty $PropertyName($field.Title) - } - foreach($fieldlink in $cc.FieldLinks) - { - $PropertyName="Fieldlink"+$fieldlink.ID - $cc | Add-Member NoteProperty $PropertyName($fieldlink.Name) - } - foreach($workflow in $cc.WorkflowAssociations) - { - $PropertyName="Workflow"+$workflow.ID - $cc | Add-Member NoteProperty $PropertyName($workflow.Name) - } - Write-Output $cc - } - - - - - - - } - - - - - - - - - - - - - - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) + $ctx.ExecuteQuery() + + $ctx.Load($ctx.Web) + $ctx.Load($ctx.Web.ContentTypes) + $ctx.ExecuteQuery() + Write-Host + Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen + + foreach( $cc in $ctx.Web.ContentTypes){ + $ctx.Load($cc) + $ctx.Load($cc.FieldLinks) + $ctx.Load($cc.Fields) + $ctx.Load($cc.WorkflowAssociations) + $ctx.ExecuteQuery() + $cc | Add-Member NoteProperty Web($url) + + foreach($field in $cc.Fields){ + $PropertyName="Field"+$field.ID + $cc | Add-Member NoteProperty $PropertyName($field.Title) + } + + foreach($fieldlink in $cc.FieldLinks){ + $PropertyName="Fieldlink"+$fieldlink.ID + $cc | Add-Member NoteProperty $PropertyName($fieldlink.Name) + } + + foreach($workflow in $cc.WorkflowAssociations){ + $PropertyName="Workflow"+$workflow.ID + $cc | Add-Member NoteProperty $PropertyName($workflow.Name) + } + + Write-Output $cc + } +} # Paths to SDK. Please verify location on your computer. @@ -82,4 +59,4 @@ $AdminUrl="https://tenant.sharepoint.com/sites/teamsitewithlibraries" -Get-SPOContentType -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl \ No newline at end of file +Get-SPOContentType -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl From 58b038b83926a864b45023753a9679ff14ac2c16 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Thu, 30 Jan 2020 22:59:43 +0100 Subject: [PATCH 012/114] Update GetContentTypeProperties.ps1 --- .../GetContentTypeProperties.ps1 | 204 ++++++++---------- 1 file changed, 86 insertions(+), 118 deletions(-) diff --git a/Content Types/Get/Get All Properties of All Content Types in All Lists (Detailed) across one site/GetContentTypeProperties.ps1 b/Content Types/Get/Get All Properties of All Content Types in All Lists (Detailed) across one site/GetContentTypeProperties.ps1 index 3cd8768f..33b0ee07 100644 --- a/Content Types/Get/Get All Properties of All Content Types in All Lists (Detailed) across one site/GetContentTypeProperties.ps1 +++ b/Content Types/Get/Get All Properties of All Content Types in All Lists (Detailed) across one site/GetContentTypeProperties.ps1 @@ -1,126 +1,94 @@  -function Get-SPOContentType -{ - - param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SPOContentType{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] $AdminPassword, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string]$Url - ) - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) - $ctx.ExecuteQuery() - - $ctx.Load($ctx.Web.Lists) - $ctx.Load($ctx.Web.Webs) - $ctx.ExecuteQuery() - Write-Host - Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen - foreach( $ll in $ctx.Web.Lists) - { - - $ctx.Load($ll.ContentTypes) - - try - { - $ctx.ExecuteQuery() - } - catch - { - } - - Write-Host $ll.Title - - - - - foreach($cc in $ll.ContentTypes) - { - $ctx.Load($cc) - $ctx.Load($cc.FieldLinks) - $ctx.Load($cc.Fields) - $ctx.Load($cc.WorkflowAssociations) - $ctx.ExecuteQuery() - $obj = New-Object PSObject - $obj | Add-Member NoteProperty Title($cc.Name) - $obj | Add-Member NoteProperty List($ll.Title) - $obj | Add-Member NoteProperty Web($url) - $obj | Add-Member NoteProperty Description($cc.Description) - $obj | Add-Member NoteProperty DisplayFormTemplateName($cc.DisplayFormTemplateName) - $obj | Add-Member NoteProperty DisplayFormUrl($cc.DisplayFormUrl) - $obj | Add-Member NoteProperty DocumentTemplate($cc.DocumentTemplate) - $obj | Add-Member NoteProperty DocumentTemplateUrl($cc.DocumentTemplateUrl) - $obj | Add-Member NoteProperty EditFormTemplateName($cc.EditFormTemplateName) - $obj | Add-Member NoteProperty EditFormUrl($cc.EditFormUrl) - - foreach($field in $cc.Fields) - { - $PropertyName="Field"+$field.ID - $obj | Add-Member NoteProperty $PropertyName($field.Title) - } - foreach($fieldlink in $cc.FieldLinks) - { - $PropertyName="Fieldlink"+$fieldlink.ID - $obj | Add-Member NoteProperty $PropertyName($fieldlink.Name) - } - - $obj | Add-Member NoteProperty Group($cc.Group) - $obj | Add-Member NoteProperty Hidden($cc.Hidden) - $obj | Add-Member NoteProperty ID($cc.ID) - $obj | Add-Member NoteProperty JSLink($cc.JSLink) - $obj | Add-Member NoteProperty NewFormTemplateName($cc.NewFormTemplateName) - $obj | Add-Member NoteProperty NewFormUrl($cc.NewFormUrl) - $obj | Add-Member NoteProperty Parent($cc.Parent) - $obj | Add-Member NoteProperty ReadOnly($cc.ReadOnly) - $obj | Add-Member NoteProperty SchemaXML($cc.SchemaXML) - $obj | Add-Member NoteProperty SchemaXmlWithResourceTokens($cc.SchemaXmlWithResourceTokens) - $obj | Add-Member NoteProperty Scope($cc.Scope) - $obj | Add-Member NoteProperty Sealed($cc.Sealed) - $obj | Add-Member NoteProperty ServerObjectIsNull($cc.ServerObjectIsNull) - $obj | Add-Member NoteProperty StringID($cc.StringID) - $obj | Add-Member NoteProperty Tag($cc.Tag) - $obj | Add-Member NoteProperty TypedObject($cc.TypedObject) - - foreach($workflow in $cc.WorkflowAssociations) - { - $PropertyName="Workflow"+$workflow.ID - $obj | Add-Member NoteProperty $PropertyName($workflow.Name) - } - - Write-Output $obj - } - - - - - - - } - - - - if($ctx.Web.Webs.Count -gt 0) - { - foreach ($web in $ctx.Web.Webs) - { - Get-SPOContentType -Username $Username -Url $web.Url -AdminPassword $AdminPassword - } - } - - - - } - - - - - - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) + $ctx.ExecuteQuery() + + $ctx.Load($ctx.Web.Lists) + $ctx.Load($ctx.Web.Webs) + $ctx.ExecuteQuery() + Write-Host + Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen + foreach( $ll in $ctx.Web.Lists){ + $ctx.Load($ll.ContentTypes) + + try{ + $ctx.ExecuteQuery() + } + catch{} + + Write-Host $ll.Title + + foreach($cc in $ll.ContentTypes){ + $ctx.Load($cc) + $ctx.Load($cc.FieldLinks) + $ctx.Load($cc.Fields) + $ctx.Load($cc.WorkflowAssociations) + $ctx.ExecuteQuery() + $obj = New-Object PSObject + $obj | Add-Member NoteProperty Title($cc.Name) + $obj | Add-Member NoteProperty List($ll.Title) + $obj | Add-Member NoteProperty Web($url) + $obj | Add-Member NoteProperty Description($cc.Description) + $obj | Add-Member NoteProperty DisplayFormTemplateName($cc.DisplayFormTemplateName) + $obj | Add-Member NoteProperty DisplayFormUrl($cc.DisplayFormUrl) + $obj | Add-Member NoteProperty DocumentTemplate($cc.DocumentTemplate) + $obj | Add-Member NoteProperty DocumentTemplateUrl($cc.DocumentTemplateUrl) + $obj | Add-Member NoteProperty EditFormTemplateName($cc.EditFormTemplateName) + $obj | Add-Member NoteProperty EditFormUrl($cc.EditFormUrl) + + foreach($field in $cc.Fields){ + $PropertyName="Field"+$field.ID + $obj | Add-Member NoteProperty $PropertyName($field.Title) + } + + foreach($fieldlink in $cc.FieldLinks){ + $PropertyName="Fieldlink"+$fieldlink.ID + $obj | Add-Member NoteProperty $PropertyName($fieldlink.Name) + } + + $obj | Add-Member NoteProperty Group($cc.Group) + $obj | Add-Member NoteProperty Hidden($cc.Hidden) + $obj | Add-Member NoteProperty ID($cc.ID) + $obj | Add-Member NoteProperty JSLink($cc.JSLink) + $obj | Add-Member NoteProperty NewFormTemplateName($cc.NewFormTemplateName) + $obj | Add-Member NoteProperty NewFormUrl($cc.NewFormUrl) + $obj | Add-Member NoteProperty Parent($cc.Parent) + $obj | Add-Member NoteProperty ReadOnly($cc.ReadOnly) + $obj | Add-Member NoteProperty SchemaXML($cc.SchemaXML) + $obj | Add-Member NoteProperty SchemaXmlWithResourceTokens($cc.SchemaXmlWithResourceTokens) + $obj | Add-Member NoteProperty Scope($cc.Scope) + $obj | Add-Member NoteProperty Sealed($cc.Sealed) + $obj | Add-Member NoteProperty ServerObjectIsNull($cc.ServerObjectIsNull) + $obj | Add-Member NoteProperty StringID($cc.StringID) + $obj | Add-Member NoteProperty Tag($cc.Tag) + $obj | Add-Member NoteProperty TypedObject($cc.TypedObject) + + foreach($workflow in $cc.WorkflowAssociations){ + $PropertyName="Workflow"+$workflow.ID + $obj | Add-Member NoteProperty $PropertyName($workflow.Name) + } + + Write-Output $obj + } + } + + if($ctx.Web.Webs.Count -gt 0){ + foreach ($web in $ctx.Web.Webs){ + Get-SPOContentType -Username $Username -Url $web.Url -AdminPassword $AdminPassword + } + } +} # Paths to SDK. Please verify location on your computer. @@ -134,4 +102,4 @@ $AdminUrl="https://tenant.sharepoint.com/sites/teamsitewithlibraries" -Get-SPOContentType -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl \ No newline at end of file +Get-SPOContentType -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl From b3bc53f7b9c36b4d3de5113e16e15a007d47da6c Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 31 Jan 2020 00:30:13 +0100 Subject: [PATCH 013/114] Update GetCTNamesinAllLists.ps1 --- .../GetCTNamesinAllLists.ps1 | 74 +++++++------------ 1 file changed, 26 insertions(+), 48 deletions(-) diff --git a/Content Types/Get/Get Names of all content types added to your lists/GetCTNamesinAllLists.ps1 b/Content Types/Get/Get Names of all content types added to your lists/GetCTNamesinAllLists.ps1 index d5c99a27..8eef5e5a 100644 --- a/Content Types/Get/Get Names of all content types added to your lists/GetCTNamesinAllLists.ps1 +++ b/Content Types/Get/Get Names of all content types added to your lists/GetCTNamesinAllLists.ps1 @@ -1,64 +1,42 @@  -function Get-SPOList -{ - - param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SPOList{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] $AdminPassword, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string]$Url - ) - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) - $ctx.ExecuteQuery() - - $ctx.Load($ctx.Web.Lists) - $ctx.ExecuteQuery() - Write-Host - Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen - foreach( $ll in $ctx.Web.Lists) - { + ) - $ctx.Load($ll.ContentTypes) + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) + $ctx.ExecuteQuery() - try - { - $ctx.ExecuteQuery() - } - catch - { - } + $ctx.Load($ctx.Web.Lists) + $ctx.ExecuteQuery() + Write-Host + Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen + foreach( $ll in $ctx.Web.Lists){ + $ctx.Load($ll.ContentTypes) - - - Write-Host $ll.Title -ForegroundColor Green - - foreach($cc in $ll.ContentTypes) - { - Write-Output $cc.Name - } + try{ + $ctx.ExecuteQuery() + } + catch{} - - + Write-Host $ll.Title -ForegroundColor Green - - - } - - - - } - - + foreach($cc in $ll.ContentTypes){ + Write-Output $cc.Name + } + } +} - - + # Paths to SDK. Please verify location on your computer. @@ -71,4 +49,4 @@ $AdminPassword=Read-Host -Prompt "Password" -AsSecureString $AdminUrl="https://tenant.sharepoint.com/sites/teamsitewithlibraries" -Get-SPOList -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl \ No newline at end of file +Get-SPOList -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl From 48c51aa69736a9ecb39e902d441490763c78d427 Mon Sep 17 00:00:00 2001 From: PowershellScripts <42035526+PowershellScripts@users.noreply.github.com> Date: Tue, 11 Feb 2020 13:24:38 +0200 Subject: [PATCH 014/114] Update GetCTNamesinAllLists.ps1 --- .../GetCTNamesinAllLists.ps1 | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Content Types/Get/Get Names of all content types added to your lists/GetCTNamesinAllLists.ps1 b/Content Types/Get/Get Names of all content types added to your lists/GetCTNamesinAllLists.ps1 index 8eef5e5a..45c10140 100644 --- a/Content Types/Get/Get Names of all content types added to your lists/GetCTNamesinAllLists.ps1 +++ b/Content Types/Get/Get Names of all content types added to your lists/GetCTNamesinAllLists.ps1 @@ -1,5 +1,3 @@ - - function Get-SPOList{ param ( [Parameter(Mandatory=$true,Position=1)] @@ -22,16 +20,17 @@ function Get-SPOList{ foreach( $ll in $ctx.Web.Lists){ $ctx.Load($ll.ContentTypes) - try{ - $ctx.ExecuteQuery() - } - catch{} + try{ + $ctx.ExecuteQuery() + } + catch{ + } Write-Host $ll.Title -ForegroundColor Green - foreach($cc in $ll.ContentTypes){ - Write-Output $cc.Name - } + foreach($cc in $ll.ContentTypes){ + Write-Output $cc.Name + } } } From 8288c04e8a0cd58945a14c0d5dde571c919125fe Mon Sep 17 00:00:00 2001 From: PowershellScripts <42035526+PowershellScripts@users.noreply.github.com> Date: Mon, 17 Feb 2020 20:36:53 +0200 Subject: [PATCH 015/114] Create description.md --- .../description.md | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Tenant Settings/Notify OneDrive for Business owner if their content is reshared/description.md diff --git a/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/description.md b/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/description.md new file mode 100644 index 00000000..7433eab2 --- /dev/null +++ b/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/description.md @@ -0,0 +1,31 @@ +Short Powershell script that enables or disables a setting to send emails to OneDrive for Business owners when someone further shares the ODB owner's content with external users. + +It uses CSOM and requires SharePoint Online SDK. The script is part of and more explained in a Technet Wiki article: + +OneDrive for Business notification settings with Powershell + + + + + +### How to use? +Download and open the .ps1 file. +Add correct libraries: + + +```PowerShell +#Paths to SDK +Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" +Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" +``` Enter the correct url and admin login: + + +```PowerShell +#Enter the data +$AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString +$username="admin@TENANT.onmicrosoft.com" +$Url="https://TENANT-admin.sharepoint.com" +$NotifyOwnersWhenItemsReshare=$true #Whether ODB owner should be notified the content is reshared with external users +``` + + Run the script From 9dbe9c3628e9921117705efbee17ebc10280df8d Mon Sep 17 00:00:00 2001 From: PowershellScripts <42035526+PowershellScripts@users.noreply.github.com> Date: Mon, 17 Feb 2020 20:37:14 +0200 Subject: [PATCH 016/114] Add files via upload --- .../NotifyOwnersWhenItemsReshared.ps1 | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Tenant Settings/Notify OneDrive for Business owner if their content is reshared/NotifyOwnersWhenItemsReshared.ps1 diff --git a/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/NotifyOwnersWhenItemsReshared.ps1 b/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/NotifyOwnersWhenItemsReshared.ps1 new file mode 100644 index 00000000..7db9720c --- /dev/null +++ b/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/NotifyOwnersWhenItemsReshared.ps1 @@ -0,0 +1,48 @@ +function Set-SPOTenant +{ +param ( + [Parameter(Mandatory=$true,Position=1)] + [string]$Username, + [Parameter(Mandatory=$true,Position=2)] + [string]$Url, + [Parameter(Mandatory=$true,Position=3)] + $password, + [Parameter(Mandatory=$true,Position=4)] + [Bool]$NotifyOwnersWhenItemsReshared + ) + + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.NotifyOwnersWhenItemsReshared=$NotifyOwnersWhenItemsReshared + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant + +} + + + + +#Paths to SDK +Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" +Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" + + + +#Enter the data +$AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString +$username="admin@TENANT.onmicrosoft.com" +$Url="https://TENANT-admin.sharepoint.com" +$NotifyOwnersWhenItemsReshared=$true #Whether ODB owner should be notified the content is reshared with external users + + + + +Set-SPOTenant -Username $username -Url $Url -password $AdminPassword -NotifyOwnersWhenItemsReshared $NotifyOwnersWhenItemsReshared \ No newline at end of file From 29ee9e6b12bb1ece3f02edbeca91924c4cbfeb90 Mon Sep 17 00:00:00 2001 From: PowershellScripts <42035526+PowershellScripts@users.noreply.github.com> Date: Mon, 17 Feb 2020 20:38:16 +0200 Subject: [PATCH 017/114] Create description.md --- .../description.md | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/description.md diff --git a/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/description.md b/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/description.md new file mode 100644 index 00000000..92bd29fa --- /dev/null +++ b/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/description.md @@ -0,0 +1,39 @@ +Short Powershell script that hides Sync button in OneDrive for Business for all users. + + + +The script uses CSOM and requires SharePoint Online SDK. + + + +This button will be removed with the script: + + + + + + + +### How to use? +Download and open the .ps1 file. +Add correct SharePoint Online SDK libraries: + + +```PowerShell +#Paths to SDK +Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" +Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" +``` Enter the correct url, the setting for the sync button, and admin login. You will be additionally prompted for the password. Do not enter it in the file: + + +```PowerShell +#Enter the data +$AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString +$username="arleta@TENANT.onmicrosoft.com" +$Url="https://TENANT-admin.sharepoint.com" +$HideSyncButtonOnODB=$true #Whether the sync button should be hidden +``` + + + Run the script + From 4f47b88187968eb544ea4e0cfa83938e7943ac27 Mon Sep 17 00:00:00 2001 From: PowershellScripts <42035526+PowershellScripts@users.noreply.github.com> Date: Mon, 17 Feb 2020 20:40:04 +0200 Subject: [PATCH 018/114] Add files via upload --- .../HideSyncButtonOnODB.ps1 | 48 ++++++++++++++++++ .../ODBAccessRequests.222ENG.PNG | Bin 0 -> 30630 bytes 2 files changed, 48 insertions(+) create mode 100644 Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/HideSyncButtonOnODB.ps1 create mode 100644 Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/ODBAccessRequests.222ENG.PNG diff --git a/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/HideSyncButtonOnODB.ps1 b/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/HideSyncButtonOnODB.ps1 new file mode 100644 index 00000000..9a4926cd --- /dev/null +++ b/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/HideSyncButtonOnODB.ps1 @@ -0,0 +1,48 @@ +function Set-SPOTenant +{ +param ( + [Parameter(Mandatory=$true,Position=1)] + [string]$Username, + [Parameter(Mandatory=$true,Position=2)] + [string]$Url, + [Parameter(Mandatory=$true,Position=3)] + $password, + [Parameter(Mandatory=$true,Position=4)] + [Bool]$HideSyncButtonOnODB + ) + + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.HideSyncButtonOnODB=$HideSyncButtonOnODB + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant + +} + + + + +#Paths to SDK +Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" +Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" + + + +#Enter the data +$AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString +$username="arleta@TENANT.onmicrosoft.com" +$Url="https://TENANT-admin.sharepoint.com" +$HideSyncButtonOnODB=$true #Whether the sync button should be hidden + + + + +Set-SPOTenant -Username $username -Url $Url -password $AdminPassword -HideSyncButtonOnODB $HideSyncButtonOnODB \ No newline at end of file diff --git a/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/ODBAccessRequests.222ENG.PNG b/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/ODBAccessRequests.222ENG.PNG new file mode 100644 index 0000000000000000000000000000000000000000..db2067de9d3415d7d3dc3f701ed7745550ac3937 GIT binary patch literal 30630 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 Date: Mon, 17 Feb 2020 20:40:49 +0200 Subject: [PATCH 019/114] Create description.md --- .../description.md | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/description.md diff --git a/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/description.md b/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/description.md new file mode 100644 index 00000000..1cc60d1b --- /dev/null +++ b/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/description.md @@ -0,0 +1,42 @@ +Short Powershell script to send bcc copies to all sharing invitations send from users' OneDrives for Business. The script uses CSOM with December 2015 update. + + + + + +How to use? +Download and open the .ps1 file. +Add correct SharePoint Online SDK libraries: + + +PowerShell +#Paths to SDK +Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" +Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" + Enter the correct url, and admin login. Under InvitationsList, enter the email addresses that you want to add in BCC to every sharing invitation in your users' OneDrive for Business. You will be additionally prompted for the password. Do not enter it in the file: +PowerShell + $spoTenant.BccExternalSharingInvitationsList={arleta.wanat@SomeFakeAdresse.com} + + + +#Enter the data +$AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString +$username="admin@TENANT.onmicrosoft.com" +$Url="https://TENANT-admin.sharepoint.com" + + Run the script + + + + + + +After the setting takes place, the BCC emails will start receiving copies of the sharing invitations with Invited person's email in the "TO" field and inviter's in "CC": + + + + + + + + From 0e03b68a734d78ce96198dfb6edc0340d44eb1b6 Mon Sep 17 00:00:00 2001 From: PowershellScripts <42035526+PowershellScripts@users.noreply.github.com> Date: Mon, 17 Feb 2020 20:41:16 +0200 Subject: [PATCH 020/114] Add files via upload --- .../BccExternalSharingInvitations.ps1 | 48 ++++++++++++++++++ .../Untitled099.png | Bin 0 -> 14132 bytes 2 files changed, 48 insertions(+) create mode 100644 Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/BccExternalSharingInvitations.ps1 create mode 100644 Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/Untitled099.png diff --git a/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/BccExternalSharingInvitations.ps1 b/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/BccExternalSharingInvitations.ps1 new file mode 100644 index 00000000..d7993850 --- /dev/null +++ b/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/BccExternalSharingInvitations.ps1 @@ -0,0 +1,48 @@ +function Set-SPOTenant +{ +param ( + [Parameter(Mandatory=$true,Position=1)] + [string]$Username, + [Parameter(Mandatory=$true,Position=2)] + [string]$Url, + [Parameter(Mandatory=$true,Position=3)] + $password + ) + + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.BccExternalSharingInvitations=$true + $spoTenant.BccExternalSharingInvitationsList={arleta.wanat@SomeFakeAdresse.com} + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant + +} + + + + +#Paths to SDK +Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" +Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" + + + +#Enter the data +$AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString +$username="admin@TENANT.onmicrosoft.com" +$Url="https://TENANT-admin.sharepoint.com" + + + + + + +Set-SPOTenant -Username $username -Url $Url -password $AdminPassword \ No newline at end of file diff --git a/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/Untitled099.png b/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/Untitled099.png new file mode 100644 index 0000000000000000000000000000000000000000..3df79a6feeb174c784008bd25df0e4d884371c2b GIT binary patch literal 14132 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

q-Js*r=(nTnVC`^ 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�tmW-dboPxqhIY|sb@{R9XQfqxVH{cKMn~$I+ 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 literal 0 HcmV?d00001 From f288f8c58695ddd9d07282286754a7a6f18f91e6 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Wed, 26 Feb 2020 21:58:19 +0100 Subject: [PATCH 021/114] Update description.md --- .../description.md | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/Items Management/Attachments/Copy list attachments to a separate library/description.md b/Items Management/Attachments/Copy list attachments to a separate library/description.md index fcd367e9..96826d5b 100644 --- a/Items Management/Attachments/Copy list attachments to a separate library/description.md +++ b/Items Management/Attachments/Copy list attachments to a separate library/description.md @@ -1,49 +1,44 @@ -Description +# Description The following script copies list attachments to another library within the same site. - - -Scenario: +# Scenario: - List with attachments: - - - + sometimes several attachments per item: - - - + The attachments are to be copied to another library: + - - - -Requirements +# Requirements The script requires SharePoint Online SDK. - - -How to use? +# How to use? 1. Download and open the file. 2. Enter correct paths to the SDK: -PowerShell +```PowerShell # Paths to SDK. Please verify location on your computer. Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" -Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" +Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" +``` 3. Enter credentials and list data and save the file: -PowerShell +```PowerShell Connect-SPOCSOM -Username "user@tenant.onmicrosoft.com" -Url "https://tenant.sharepoint.com/sites/powie4" Get-SPOListItems -ListTitle withatt -IncludeAllProperties $true -Recursive -DestinationLibrary "/sites/powie4/Destiny2/" -Overwrite $true +``` 4. Run it in Powershell. + + +

+Enjoy and please share feedback! From 182366eca104269723b25253e9c270f313c0a8ab Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Wed, 26 Feb 2020 22:02:52 +0100 Subject: [PATCH 022/114] Update CopyAttachments.ps1 --- .../CopyAttachments.ps1 | 178 ++++++++---------- 1 file changed, 80 insertions(+), 98 deletions(-) diff --git a/Items Management/Attachments/Copy list attachments to a separate library/CopyAttachments.ps1 b/Items Management/Attachments/Copy list attachments to a separate library/CopyAttachments.ps1 index b0d2db7d..b39b4b09 100644 --- a/Items Management/Attachments/Copy list attachments to a separate library/CopyAttachments.ps1 +++ b/Items Management/Attachments/Copy list attachments to a separate library/CopyAttachments.ps1 @@ -1,19 +1,16 @@ -function Get-SPOListFields -{ - -<# - .link - http://social.technet.microsoft.com/wiki/contents/articles/32334.sharepoint-online-spomod-cmdlets-resources.aspx - - #> +function Get-SPOListFields{ + <# + .link + http://social.technet.microsoft.com/wiki/contents/articles/32334.sharepoint-online-spomod-cmdlets-resources.aspx + #> - param ( - [Parameter(Mandatory=$true,Position=3)] + param ( + [Parameter(Mandatory=$true,Position=3)] [string]$ListTitle, - [Parameter(Mandatory=$false,Position=4)] + [Parameter(Mandatory=$false,Position=4)] [bool]$IncludeSubsites=$false - ) + ) $ll=$ctx.Web.Lists.GetByTitle($ListTitle) $ctx.Load($ll) @@ -23,51 +20,48 @@ function Get-SPOListFields $fieldsArray=@() $fieldslist=@() - foreach ($fiel in $ll.Fields) - { - #Write-Host $fiel.Description `t $fiel.EntityPropertyName `t $fiel.Id `t $fiel.InternalName `t $fiel.StaticName `t $fiel.Tag `t $fiel.Title `t $fiel.TypeDisplayName + + foreach ($fiel in $ll.Fields){ + #Write-Host $fiel.Description `t $fiel.EntityPropertyName `t $fiel.Id `t $fiel.InternalName `t $fiel.StaticName `t $fiel.Tag `t $fiel.Title `t $fiel.TypeDisplayName - $array=@() - $array+="InternalName" + $array=@() + $array+="InternalName" $array+="StaticName" - $array+="Title" + $array+="Title" - $obj = New-Object PSObject - $obj | Add-Member NoteProperty $array[0]($fiel.InternalName) - $obj | Add-Member NoteProperty $array[1]($fiel.StaticName) - $obj | Add-Member NoteProperty $array[2]($fiel.Title) + $obj = New-Object PSObject + $obj | Add-Member NoteProperty $array[0]($fiel.InternalName) + $obj | Add-Member NoteProperty $array[1]($fiel.StaticName) + $obj | Add-Member NoteProperty $array[2]($fiel.Title) - $fieldsArray+=$obj - $fieldslist+=$fiel.InternalName - Write-Output $obj - } + $fieldsArray+=$obj + $fieldslist+=$fiel.InternalName + Write-Output $obj + } - - $ctx.Dispose() + $ctx.Dispose() + return $fieldsArray - } -function Get-SPOListItems -{ +function Get-SPOListItems{ <# .link http://social.technet.microsoft.com/wiki/contents/articles/32334.sharepoint-online-spomod-cmdlets-resources.aspx - #> - param ( - [Parameter(Mandatory=$true,Position=1)] + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$ListTitle, - [Parameter(Mandatory=$false,Position=2)] + [Parameter(Mandatory=$false,Position=2)] [bool]$IncludeAllProperties=$false, - [switch]$Recursive, - [Parameter(Mandatory=$false,Position=4)] + [switch]$Recursive, + [Parameter(Mandatory=$false,Position=4)] $DestinationLibrary, - [Parameter(Mandatory=$false,Position=5)] + [Parameter(Mandatory=$false,Position=5)] [bool]$Overwrite - ) + ) $ll=$ctx.Web.Lists.GetByTitle($ListTitle) @@ -78,88 +72,76 @@ function Get-SPOListItems - $spqQuery = New-Object Microsoft.SharePoint.Client.CamlQuery -# $spqQuery.ViewAttributes = "Scope='Recursive'" -$spqQuery.ViewXml = "1"; -if($Recursive) -{ -$spqQuery.ViewXml +=""; -} - $bobo=Get-SPOListFields -ListTitle $ListTitle + $spqQuery = New-Object Microsoft.SharePoint.Client.CamlQuery + # $spqQuery.ViewAttributes = "Scope='Recursive'" + $spqQuery.ViewXml = "1"; + + if($Recursive){ + $spqQuery.ViewXml +=""; + } + + $bobo=Get-SPOListFields -ListTitle $ListTitle $itemki=$ll.GetItems($spqQuery) $ctx.Load($itemki) $ctx.ExecuteQuery() - - $objArray=@() - for($j=0;$j -lt $itemki.Count ;$j++) - { + for($j=0;$j -lt $itemki.Count ;$j++){ $attache=$itemki[$j].AttachmentFiles $ctx.Load($attache) $ctx.ExecuteQuery() Write-Host $itemki[$j]["Title"] -BackgroundColor DarkCyan - foreach($att in $attache) - { + foreach($att in $attache){ #Write-Output $att $file = - $ctx.Web.GetFileByServerRelativeUrl($att.ServerRelativeUrl); - $ctx.Load($file) - $ctx.ExecuteQuery() + $ctx.Web.GetFileByServerRelativeUrl($att.ServerRelativeUrl); + $ctx.Load($file) + $ctx.ExecuteQuery() $NewName=$file.Name - - if($DestinationLibrary.EndsWith("/")){} - else {$DestinationLibrary=$DestinationLibrary+"/"} - Write-Host "Processing " $file.Name -$file.CopyTo($DestinationLibrary+$NewName, $Overwrite) - try - { - $ctx.ExecuteQuery() + if($DestinationLibrary.EndsWith("/")){} + else {$DestinationLibrary=$DestinationLibrary+"/"} + + Write-Host "Processing " $file.Name + $file.CopyTo($DestinationLibrary+$NewName, $Overwrite) + + try{ + $ctx.ExecuteQuery() - Write-Host $file.Name " has been copied to" $DestinationLibrary -ForegroundColor DarkGreen - } - catch [Net.WebException] - { - Write-Host $_.Exception.ToString() - } + Write-Host $file.Name " has been copied to" $DestinationLibrary -ForegroundColor DarkGreen + } + catch [Net.WebException]{ + Write-Host $_.Exception.ToString() + } } - - } +} - } - - - function Connect-SPOCSOM -{ - -<# - .link - http://social.technet.microsoft.com/wiki/contents/articles/32334.sharepoint-online-spomod-cmdlets-resources.aspx - - #> - - param ( - [Parameter(Mandatory=$true,Position=1)] - [string]$Username, - [Parameter(Mandatory=$true,Position=3)] - [string]$Url - - -) - - $password = Read-Host "Password" -AsSecureString - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.ExecuteQuery() -$global:ctx=$ctx +function Connect-SPOCSOM{ + <# + .link + http://social.technet.microsoft.com/wiki/contents/articles/32334.sharepoint-online-spomod-cmdlets-resources.aspx + + #> + + param ( + [Parameter(Mandatory=$true,Position=1)] + [string]$Username, + [Parameter(Mandatory=$true,Position=3)] + [string]$Url + ) + + $password = Read-Host "Password" -AsSecureString + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.ExecuteQuery() + $global:ctx=$ctx } From 03c8daf593d997f236b8d2fceb94d78ec474e1a1 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Wed, 26 Feb 2020 22:07:06 +0100 Subject: [PATCH 023/114] Update CopyAttachments.ps1 --- .../CopyAttachments.ps1 | 44 +++++++++---------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/Items Management/Attachments/Copy list attachments to a separate library/CopyAttachments.ps1 b/Items Management/Attachments/Copy list attachments to a separate library/CopyAttachments.ps1 index b39b4b09..d1ebfc5d 100644 --- a/Items Management/Attachments/Copy list attachments to a separate library/CopyAttachments.ps1 +++ b/Items Management/Attachments/Copy list attachments to a separate library/CopyAttachments.ps1 @@ -1,16 +1,15 @@ function Get-SPOListFields{ - <# + <# .link http://social.technet.microsoft.com/wiki/contents/articles/32334.sharepoint-online-spomod-cmdlets-resources.aspx - - #> + #> param ( - [Parameter(Mandatory=$true,Position=3)] - [string]$ListTitle, - [Parameter(Mandatory=$false,Position=4)] - [bool]$IncludeSubsites=$false - ) + [Parameter(Mandatory=$true,Position=3)] + [string]$ListTitle, + [Parameter(Mandatory=$false,Position=4)] + [bool]$IncludeSubsites=$false + ) $ll=$ctx.Web.Lists.GetByTitle($ListTitle) $ctx.Load($ll) @@ -52,16 +51,16 @@ function Get-SPOListItems{ #> param ( - [Parameter(Mandatory=$true,Position=1)] - [string]$ListTitle, - [Parameter(Mandatory=$false,Position=2)] - [bool]$IncludeAllProperties=$false, - [switch]$Recursive, - [Parameter(Mandatory=$false,Position=4)] - $DestinationLibrary, - [Parameter(Mandatory=$false,Position=5)] - [bool]$Overwrite - ) + [Parameter(Mandatory=$true,Position=1)] + [string]$ListTitle, + [Parameter(Mandatory=$false,Position=2)] + [bool]$IncludeAllProperties=$false, + [switch]$Recursive, + [Parameter(Mandatory=$false,Position=4)] + $DestinationLibrary, + [Parameter(Mandatory=$false,Position=5)] + [bool]$Overwrite + ) $ll=$ctx.Web.Lists.GetByTitle($ListTitle) @@ -70,8 +69,6 @@ function Get-SPOListItems{ $ctx.ExecuteQuery() $i=0 - - $spqQuery = New-Object Microsoft.SharePoint.Client.CamlQuery # $spqQuery.ViewAttributes = "Scope='Recursive'" $spqQuery.ViewXml = "1"; @@ -95,7 +92,8 @@ function Get-SPOListItems{ $ctx.Load($attache) $ctx.ExecuteQuery() Write-Host $itemki[$j]["Title"] -BackgroundColor DarkCyan - foreach($att in $attache){ + + foreach($att in $attache){ #Write-Output $att $file = $ctx.Web.GetFileByServerRelativeUrl($att.ServerRelativeUrl); @@ -112,7 +110,6 @@ function Get-SPOListItems{ try{ $ctx.ExecuteQuery() - Write-Host $file.Name " has been copied to" $DestinationLibrary -ForegroundColor DarkGreen } catch [Net.WebException]{ @@ -127,8 +124,7 @@ function Connect-SPOCSOM{ <# .link http://social.technet.microsoft.com/wiki/contents/articles/32334.sharepoint-online-spomod-cmdlets-resources.aspx - - #> + #> param ( [Parameter(Mandatory=$true,Position=1)] From 16340f271532b23d42f41d894ecfd621f8eb6f85 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Wed, 26 Feb 2020 22:10:34 +0100 Subject: [PATCH 024/114] Update description.md --- .../description.md | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/Items Management/Attachments/Disable or enable attachments to list items/description.md b/Items Management/Attachments/Disable or enable attachments to list items/description.md index ab9eb158..cf0579b7 100644 --- a/Items Management/Attachments/Disable or enable attachments to list items/description.md +++ b/Items Management/Attachments/Disable or enable attachments to list items/description.md @@ -1,17 +1,13 @@ -Want to keep your lists tidy? Saving space?? This is a solution for you! Looking for a quick way to restore the option for all lists? This is also a solution for you! :) +Want to keep your lists tidy? Saving space?? This is a solution for you! Looking for a quick way to restore the option for all lists? +
**This is also a solution for you! :)** Want to keep your lists tidy? Saving space? Do you want to prevent users from adding unnecessary attachments to the list because their place belongs elsewhere? This is a solution for you! Or maybe you already disabled the feature? For some of the lists - for some not, and now you are looking for a quick way to restore the option for all lists? -This is also a solution for you! :) - - - - - - +
**This is also a solution for you! :)** +```Powershell # Paths to SDK. Please verify location on your computer. 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" @@ -21,23 +17,24 @@ $Username="trial@trialtrial123.onmicrosoft.com" $AdminPassword="Pass" $Url="https://trialtrial123.sharepoint.com/sites/teamsitewithlists" $Attachments=$false - + Set-SPOListsAttachments -Username $Username -AdminPassword $AdminPassword -Url $Url -Attachments $Attachments - +``` -For full description please refer here to the Wiki Article +For full description please refer here to the [Wiki Article](https://social.technet.microsoft.com/wiki/contents/articles/30024.sharepoint-online-disable-or-enable-attachments-to-list-items-using-powershell.aspx) - +

+Enjoy and please share feedback! -Related scripts -Set direction of the reading order for a single list +**Related scripts**
+[Set direction of the reading order for a single list](https://gallery.technet.microsoft.com/office/Set-the-direction-of-the-f17ca66a) -Set-SPOList properties (module) +[Set-SPOList properties (module)](https://gallery.technet.microsoft.com/office/Set-SPOList-properties-9d16f2ba) -Allow or disallow your users to create folders in SPO lists +[Allow or disallow your users to create folders in SPO lists](https://gallery.technet.microsoft.com/scriptcenter/Allow-or-disallow-your-20f7b44a) From faa1ace595dfe71a9d80ab2bc2109447b1fa76cc Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Wed, 26 Feb 2020 22:15:48 +0100 Subject: [PATCH 025/114] Update AttachmentsForAllLists.ps1 --- .../AttachmentsForAllLists.ps1 | 62 ++++++++----------- 1 file changed, 27 insertions(+), 35 deletions(-) diff --git a/Items Management/Attachments/Disable or enable attachments to list items/AttachmentsForAllLists.ps1 b/Items Management/Attachments/Disable or enable attachments to list items/AttachmentsForAllLists.ps1 index a08647c4..007c6cc6 100644 --- a/Items Management/Attachments/Disable or enable attachments to list items/AttachmentsForAllLists.ps1 +++ b/Items Management/Attachments/Disable or enable attachments to list items/AttachmentsForAllLists.ps1 @@ -1,49 +1,41 @@ - + # # Created by Arleta Wanat, 2015 # -function Set-SPOListsAttachments -{ -param ( - [Parameter(Mandatory=$true,Position=1)] - [string]$Username, - [Parameter(Mandatory=$true,Position=2)] - [string]$AdminPassword, +function Set-SPOListsAttachments{ + param ( + [Parameter(Mandatory=$true,Position=1)] + [string]$Username, + [Parameter(Mandatory=$true,Position=2)] + [string]$AdminPassword, [Parameter(Mandatory=$true,Position=3)] - [string]$Url, + [string]$Url, [Parameter(Mandatory=$true,Position=4)] - [bool]$Attachments -) + [bool]$Attachments + ) -$password = ConvertTo-SecureString -string $AdminPassword -AsPlainText -Force + $password = ConvertTo-SecureString -string $AdminPassword -AsPlainText -Force $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) $ctx.ExecuteQuery() -$Lists=$ctx.Web.Lists -$ctx.Load($Lists) -$ctx.ExecuteQuery() - -Foreach($ll in $Lists) -{ - $ll.EnableAttachments = $Attachments - $ll.Update() - - - try - { - $ctx.ExecuteQuery() - Write-Host $ll.Title " Done" -ForegroundColor Green - } - - catch [Net.WebException] - { - - Write-Host "Failed" $_.Exception.ToString() -ForegroundColor Red + $Lists=$ctx.Web.Lists + $ctx.Load($Lists) + $ctx.ExecuteQuery() + + Foreach($ll in $Lists){ + $ll.EnableAttachments = $Attachments + $ll.Update() + + try{ + $ctx.ExecuteQuery() + Write-Host $ll.Title " Done" -ForegroundColor Green } - -} + catch [Net.WebException] { + Write-Host "Failed" $_.Exception.ToString() -ForegroundColor Red + } + } } @@ -68,4 +60,4 @@ $Attachments=$false -Set-SPOListsAttachments -Username $Username -AdminPassword $AdminPassword -Url $Url -Attachments $Attachments \ No newline at end of file +Set-SPOListsAttachments -Username $Username -AdminPassword $AdminPassword -Url $Url -Attachments $Attachments From 9f37fd0fbbb6e7cff94c715e6f1ee7d49c88bf0b Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Thu, 27 Feb 2020 23:36:07 +0100 Subject: [PATCH 026/114] Update description.md --- .../description.md | 34 +++++-------------- 1 file changed, 9 insertions(+), 25 deletions(-) diff --git a/Items Management/Attachments/Enable or disable attachments to items of a chosen list/description.md b/Items Management/Attachments/Enable or disable attachments to items of a chosen list/description.md index e17f799d..ae4331ff 100644 --- a/Items Management/Attachments/Enable or disable attachments to items of a chosen list/description.md +++ b/Items Management/Attachments/Enable or disable attachments to items of a chosen list/description.md @@ -1,22 +1,10 @@ -A short Powershell script to set the EnableAttachments property for a SharePoint Online list. The property is responsible for the Attach File icon under new item tab. If you disable the button, you and your users will not be able to add the attachments to list items. +A short Powershell script to set the EnableAttachments property for a SharePoint Online list. The property is responsible for the **Attach File** icon under **new item** tab. If you disable the button, you and your users will not be able to add the attachments to list items. -A short Powershell script to set the EnableAttachments property for a SharePoint Online list. The property is responsible for the Attach File icon under new item tab (see screenshot). The button allows you to add attachments to the list item. - - - - - - - - + If you disable the button, you and your users will not be able to add the attachments to list items: - - - - - + Applies to lists. @@ -24,7 +12,7 @@ Applies to lists. -It requires installed SharePoint Online SDK +It requires installed [SharePoint Online SDK](https://www.microsoft.com/en-us/download/details.aspx?id=42038) You have to enter the list information before running the script: @@ -45,18 +33,14 @@ $ListName="Tasks list" $Attachments =$false ``` -### Related scripts -Set direction of the reading order for a single list +## **Related scripts** +[Set direction of the reading order for a single list](https://gallery.technet.microsoft.com/office/Set-the-direction-of-the-f17ca66a) -Set-SPOList properties (module) - - - - +[Set-SPOList properties (module)](https://gallery.technet.microsoft.com/office/Set-SPOList-properties-9d16f2ba) -### Related article +## **Related article** -SharePoint Online: Disable or enable attachments to list items using Powershell +[SharePoint Online: Disable or enable attachments to list items using Powershell](https://social.technet.microsoft.com/wiki/contents/articles/30024.sharepoint-online-disable-or-enable-attachments-to-list-items-using-powershell.aspx)

From a37898138e7ee68cf6c16318ad913e8920686564 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Thu, 27 Feb 2020 23:36:41 +0100 Subject: [PATCH 027/114] Update ListAttachments.ps1 --- .../ListAttachments.ps1 | 50 ++++++++----------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/Items Management/Attachments/Enable or disable attachments to items of a chosen list/ListAttachments.ps1 b/Items Management/Attachments/Enable or disable attachments to items of a chosen list/ListAttachments.ps1 index 275e2759..874aabc2 100644 --- a/Items Management/Attachments/Enable or disable attachments to items of a chosen list/ListAttachments.ps1 +++ b/Items Management/Attachments/Enable or disable attachments to items of a chosen list/ListAttachments.ps1 @@ -1,57 +1,49 @@ - + # # Created by Arleta Wanat, 2015 # -function Set-SPOList -{ -param ( +function Set-SPOList{ + param ( [Parameter(Mandatory=$true,Position=0)] - [string]$ListName, + [string]$ListName, [Parameter(Mandatory=$true,Position=1)] - [bool]$Attachments - ) + [bool]$Attachments + ) -$ll=$ctx.Web.Lists.GetByTitle($ListName) + $ll=$ctx.Web.Lists.GetByTitle($ListName) -$ll.EnableAttachments = $Attachments - $ll.Update() + $ll.EnableAttachments = $Attachments + $ll.Update() - try - { + try{ $ctx.ExecuteQuery() Write-Host "Done" -ForegroundColor Green - } - - catch [Net.WebException] - { - - Write-Host "Failed" $_.Exception.ToString() -ForegroundColor Red - } - - + } + catch [Net.WebException] { + Write-Host "Failed" $_.Exception.ToString() -ForegroundColor Red + } } -function Connect-SPOCSOM -{ - param ( - [Parameter(Mandatory=$true,Position=1)] +function Connect-SPOCSOM{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$AdminPassword, [Parameter(Mandatory=$true,Position=2)] [string]$Url -) + ) -$password = ConvertTo-SecureString -string $AdminPassword -AsPlainText -Force + $password = ConvertTo-SecureString -string $AdminPassword -AsPlainText -Force $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) $ctx.ExecuteQuery() -$global:ctx=$ctx + $global:ctx=$ctx } @@ -78,4 +70,4 @@ $Attachments =$true Connect-SPOCSOM -Username $Username -AdminPassword $AdminPassword -Url $Url -Set-SPOList -ListName $ListName -Attachments $Attachments \ No newline at end of file +Set-SPOList -ListName $ListName -Attachments $Attachments From 653a5742869cb260a5c83d8ba77244852da1ae29 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:17:53 +0100 Subject: [PATCH 028/114] Update and rename description.txt to description.md --- .../{description.txt => description.md} | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) rename OTHER/C# Create a contact list with internal user data/{description.txt => description.md} (87%) diff --git a/OTHER/C# Create a contact list with internal user data/description.txt b/OTHER/C# Create a contact list with internal user data/description.md similarity index 87% rename from OTHER/C# Create a contact list with internal user data/description.txt rename to OTHER/C# Create a contact list with internal user data/description.md index b3b12309..f5e04f36 100644 --- a/OTHER/C# Create a contact list with internal user data/description.txt +++ b/OTHER/C# Create a contact list with internal user data/description.md @@ -12,14 +12,9 @@ It retrieves all the users and creates a contact list with "CellPhone" - - - - Screenshot with test data - - + Technicalities: From d3112a64aedb66f4a5b0237b0661438f879261e6 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:28:07 +0100 Subject: [PATCH 029/114] Update description.md --- .../description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OTHER/C# Create a contact list with internal user data/description.md b/OTHER/C# Create a contact list with internal user data/description.md index f5e04f36..866d6e39 100644 --- a/OTHER/C# Create a contact list with internal user data/description.md +++ b/OTHER/C# Create a contact list with internal user data/description.md @@ -14,7 +14,7 @@ It retrieves all the users and creates a contact list with Screenshot with test data - + Technicalities: From 9e9091d7b3848ef17f0591f914a9637de43d5232 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:28:43 +0100 Subject: [PATCH 030/114] Update description.md --- .../description.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/OTHER/C# Create a contact list with internal user data/description.md b/OTHER/C# Create a contact list with internal user data/description.md index 866d6e39..e9565fb0 100644 --- a/OTHER/C# Create a contact list with internal user data/description.md +++ b/OTHER/C# Create a contact list with internal user data/description.md @@ -2,15 +2,15 @@ Short C# application. It retrieves all the users and creates a contact list with -"LastName" +**"LastName" -"FirstName" +**"FirstName" -"WorkEmail" +**"WorkEmail" -"WorkPhone" +**"WorkPhone" -"CellPhone" +**"CellPhone" Screenshot with test data From 706a62c409b40c11e57eda1e936b5ec85dddfd6c Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:29:02 +0100 Subject: [PATCH 031/114] Update description.md --- .../description.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/OTHER/C# Create a contact list with internal user data/description.md b/OTHER/C# Create a contact list with internal user data/description.md index e9565fb0..014a230f 100644 --- a/OTHER/C# Create a contact list with internal user data/description.md +++ b/OTHER/C# Create a contact list with internal user data/description.md @@ -2,15 +2,15 @@ Short C# application. It retrieves all the users and creates a contact list with -**"LastName" +**"LastName"** -**"FirstName" +**"FirstName"** -**"WorkEmail" +**"WorkEmail"** -**"WorkPhone" +**"WorkPhone"** -**"CellPhone" +**"CellPhone"** Screenshot with test data From 06634fc3570cb5b58a75355e984dd0ee22406d61 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:30:18 +0100 Subject: [PATCH 032/114] Update sample.cs --- .../sample.cs | 27 +++++++------------ 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/OTHER/C# Create a contact list with internal user data/sample.cs b/OTHER/C# Create a contact list with internal user data/sample.cs index 56239ea5..debba6c1 100644 --- a/OTHER/C# Create a contact list with internal user data/sample.cs +++ b/OTHER/C# Create a contact list with internal user data/sample.cs @@ -1,5 +1,4 @@ -static void PopulateProperties() - { +static void PopulateProperties() { ClientContext ctx = new ClientContext(adminsite); ctx.Credentials = new SharePointOnlineCredentials(userName, ss); @@ -7,35 +6,29 @@ static void PopulateProperties() string[] userProfileProperties = { "LastName", "FirstName", "WorkEmail", "WorkPhone","CellPhone", "AboutMe" }; propertiesforList=new string [userzy.Count, userProfileProperties.Length]; - for (int i = 0; i < userzy.Count;i++ ) - { - try - { + for (int i = 0; i < userzy.Count;i++ ) { + try{ Console.WriteLine("Retrieving properties for " + userzy[i].LoginName); UserProfilePropertiesForUser userProfilePropertiesForUser = new UserProfilePropertiesForUser(ctx, userzy[i].LoginName, userProfileProperties); IEnumerable profileProperties = peopleManager.GetUserProfilePropertiesFor(userProfilePropertiesForUser); ctx.Load(userProfilePropertiesForUser); ctx.ExecuteQuery(); int j = 0; - foreach (string property in profileProperties) - { + + foreach (string property in profileProperties) { propertiesforList[i, j] = property; j++; } } - catch (Exception ex) - { + catch (Exception ex) { } - } + + ctx.Dispose(); +} - - ctx.Dispose(); - } - - static void CreateList() - { +static void CreateList() { ClientContext ctx = new ClientContext(webUri); ctx.Credentials = new SharePointOnlineCredentials(userName,ss); ctx.ExecuteQuery(); From 5297837ff4d396f45d8e107b1a56f1adf26f676c Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:35:03 +0100 Subject: [PATCH 033/114] Update description.md --- .../description.md | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/OTHER/Change the default language for all the SharePoint Online users/description.md b/OTHER/Change the default language for all the SharePoint Online users/description.md index 185ca3ab..352582db 100644 --- a/OTHER/Change the default language for all the SharePoint Online users/description.md +++ b/OTHER/Change the default language for all the SharePoint Online users/description.md @@ -6,9 +6,9 @@ Have you ever created your tenant in the wrong language? Need to change it for t You know that the steps are: -Newsfeed>About me>Edit my profile> ... (three dots)>Language and region>Add the display language +**Newsfeed** > **About me** > **Edit my profile** > **... (three dots)** > **Language and region>Add the display language** -OneDrive>Gear icon>Site settings>Language settings>Mark alternate language +**OneDrive** > **Gear icon** > **Site settings** > **Language settings** > **Mark alternate language**

@@ -18,23 +18,19 @@ It's cool and awesome and flexible. But what if you have a thousand users? Are y Here it is: - - - - - + The red errors for system accounts are by design. I am expecting to get it better in the next version. The green users indicate for which users the language has been changed and into what. At the end the report will contain all users who did not get their language changed. -List of language ids +[List of language ids](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/a9eac961-e77d-41a6-90a5-ce1a8b0cdb9c?redirectedfrom=MSDN)

-Instructions +## *Instructions* 1. Download the .zip file @@ -52,11 +48,11 @@ Instructions Acknowledgements: -The app is using the new updates and nuggets. +The app is using the [new updates and nuggets.](https://docs.microsoft.com/pl-pl/archive/blogs/) -The app is prone to the known bug, which means it will not add desired alternate language for personal site unless there is one (any) added there already. +The app is prone to the [known bug](https://docs.microsoft.com/pl-pl/archive/blogs/), which means it will not add desired alternate language for personal site unless there is one (any) added there already. -Update on 20th of Dec - Adding additional language to web has unfortunately a bug and it does not work unless site has already one or more additional languages set, which means that this API does not really usable until this bug is fixed. This will be fixed for future releases and to redistributable version of the CSOM package. +**Update on 20th of Dec - Adding additional language to web has unfortunately a bug and it does not work unless site has already one or more additional languages set, which means that this API does not really usable until this bug is fixed. This will be fixed for future releases and to redistributable version of the CSOM package.** From c580028e67ade0febcbef32ef375617de2c31295 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:42:07 +0100 Subject: [PATCH 034/114] Update description.md --- .../description.md | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/OTHER/Get all event receivers on your lists in a site/description.md b/OTHER/Get all event receivers on your lists in a site/description.md index 3c098dc4..c5611511 100644 --- a/OTHER/Get all event receivers on your lists in a site/description.md +++ b/OTHER/Get all event receivers on your lists in a site/description.md @@ -2,7 +2,7 @@ A short solution to find event receivers on your SPO lists. -1. Install SharePoint Online SDK +1. Install [SharePoint Online SDK](http://www.microsoft.com/en-us/download/details.aspx?id=42038) 2. Download the file and open (e.g. in NotePad) @@ -31,19 +31,16 @@ Get-SPOListEventreceivers -Username $Username -AdminPassword $AdminPassword -Url It should ask you for your admin password - - If you want to export the event-receivers' data to a .csv file, use PathToTheScript | export-csv c:\users\MyUsers\Desktop\CSVReport.csv + +**Sample Report** - - -Sample Report - -ReceiverAssembly ReceiverClass ReceiverId ReceiverName SequenceNumber Synchronization EventType ReceiverUrl Context Tag Path ObjectVersion ServerObjectIsNull TypedObject -Microsoft.SharePoint.Portal, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c Microsoft.SharePoint.Portal.CommunityEventReceiver f13fb801-b306-42ea-bb1e-2f4c1e4a8e81 10000 Synchronous ItemAdding Microsoft.SharePoint.Client.ClientContext Microsoft.SharePoint.Client.ObjectPathIdentity False Microsoft.SharePoint.Client.EventReceiverDefinition -Microsoft.SharePoint.Portal, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c Microsoft.SharePoint.Portal.CommunityEventReceiver cebe300c-50ac-4d88-8a4b-a63b9d6da400 10000 Synchronous ItemUpdating Microsoft.SharePoint.Client.ClientContext Microsoft.SharePoint.Client.ObjectPathIdentity False Microsoft.SharePoint.Client.EventReceiverDefinition -Microsoft.SharePoint.Portal, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c Microsoft.SharePoint.Portal.CommunityEventReceiver bfc4ca11-32d6-4248-923c-fe16bcf8145d 10000 Synchronous ItemDeleting Microsoft.SharePoint.Client.ClientContext Microsoft.SharePoint.Client.ObjectPathIdentity False Microsoft.SharePoint.Client.EventReceiverDefinition -Microsoft.SharePoint.Portal, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c Microsoft.SharePoint.Portal.CommunityEventReceiver 6f2b105a-4834-40df-a450-c480c5c94ef0 10000 Asynchronous ItemAdded Microsoft.SharePoint.Client.ClientContext Microsoft.SharePoint.Client.ObjectPathIdentity False Microsoft.SharePoint.Client.EventReceiverDefinition +ReceiverAssembly | ReceiverClass | ReceiverId | ReceiverName | SequenceNumber | Synchronization | EventType | ReceiverUrl | Context | Tag | Path | ObjectVersion | ServerObjectIsNull | TypedObject +--|--|--|--|--|--|--|--|--|--|--|--|--|-- +Microsoft.SharePoint.Portal, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c | Microsoft.SharePoint.Portal.CommunityEventReceiver | f13fb801-b306-42ea-bb1e-2f4c1e4a8e81 | | 10000 | Synchronous | ItemAdding | Microsoft.SharePoint.Client.ClientContext | Microsoft.SharePoint.Client.ObjectPathIdentity | False | Microsoft.SharePoint.Client.EventReceiverDefinition +Microsoft.SharePoint.Portal, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c | Microsoft.SharePoint.Portal.CommunityEventReceiver | cebe300c-50ac-4d88-8a4b-a63b9d6da400 | | 10000 | Synchronous | ItemUpdating | Microsoft.SharePoint.Client.ClientContext | Microsoft.SharePoint.Client.ObjectPathIdentity | False | Microsoft.SharePoint.Client.EventReceiverDefinition +Microsoft.SharePoint.Portal, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c | Microsoft.SharePoint.Portal.CommunityEventReceiver | bfc4ca11-32d6-4248-923c-fe16bcf8145d | | 10000 | Synchronous | ItemDeleting | Microsoft.SharePoint.Client.ClientContext | Microsoft.SharePoint.Client.ObjectPathIdentity | False | Microsoft.SharePoint.Client.EventReceiverDefinition +Microsoft.SharePoint.Portal, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c | Microsoft.SharePoint.Portal.CommunityEventReceiver | 6f2b105a-4834-40df-a450-c480c5c94ef0 | | 10000 | Asynchronous | ItemAdded | Microsoft.SharePoint.Client.ClientContext | Microsoft.SharePoint.Client.ObjectPathIdentity | False | Microsoft.SharePoint.Client.EventReceiverDefinition From 295ee82d477d9e872ba9fe746e27260a6419c564 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:43:32 +0100 Subject: [PATCH 035/114] Update GetSPOListEventReceivers.ps1 --- .../GetSPOListEventReceivers.ps1 | 79 +++++++++---------- 1 file changed, 37 insertions(+), 42 deletions(-) diff --git a/OTHER/Get all event receivers on your lists in a site/GetSPOListEventReceivers.ps1 b/OTHER/Get all event receivers on your lists in a site/GetSPOListEventReceivers.ps1 index b6870fdb..158cfc2f 100644 --- a/OTHER/Get all event receivers on your lists in a site/GetSPOListEventReceivers.ps1 +++ b/OTHER/Get all event receivers on your lists in a site/GetSPOListEventReceivers.ps1 @@ -1,48 +1,43 @@ -function Get-SPOListEventreceivers -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SPOListEventreceivers{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] $AdminPassword, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string]$Url -) - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) - -try -{ -$ctx.ExecuteQuery() -} catch [Net.WebException] - { - - Write-Host $Url " failed to connect to the site" $_.Exception.Message.ToString() -ForegroundColor Red -} - - $ctx.Load($ctx.Site) - $ctx.Load($ctx.Web.Lists) - $ctx.ExecuteQuery() - Write-Host $ctx.Web.Lists.Count - for($j=0;$j -lt $ctx.Web.Lists.Count;$j++) - { - $lista=$ctx.Web.Lists[$j] - $ctx.Load($lista) - $ctx.ExecuteQuery() - $recevery=$lista.EventReceivers - $ctx.Load($recevery) - $ctx.ExecuteQuery() - Write-Host $recevery.Count $lista.Title - - for($i=0;$i -lt $recevery.Count ; $i++) - { - $ctx.Load($recevery[$i]) - $ctx.ExecuteQuery() - Write-Output $recevery[$i] - } - - } + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) + + try{ + $ctx.ExecuteQuery() + } + catch [Net.WebException] { + Write-Host $Url " failed to connect to the site" $_.Exception.Message.ToString() -ForegroundColor Red + } + + $ctx.Load($ctx.Site) + $ctx.Load($ctx.Web.Lists) + $ctx.ExecuteQuery() + Write-Host $ctx.Web.Lists.Count + + for($j=0;$j -lt $ctx.Web.Lists.Count;$j++){ + $lista=$ctx.Web.Lists[$j] + $ctx.Load($lista) + $ctx.ExecuteQuery() + $recevery=$lista.EventReceivers + $ctx.Load($recevery) + $ctx.ExecuteQuery() + Write-Host $recevery.Count $lista.Title + + for($i=0;$i -lt $recevery.Count ; $i++){ + $ctx.Load($recevery[$i]) + $ctx.ExecuteQuery() + Write-Output $recevery[$i] + } + } } @@ -57,4 +52,4 @@ $AdminPassword=Read-Host -Prompt "Password" -AsSecureString $Url="https://tenant.sharepoint.com/sites/teamsitewithlibraries" -Get-SPOListEventreceivers -Username $Username -AdminPassword $AdminPassword -Url $Url \ No newline at end of file +Get-SPOListEventreceivers -Username $Username -AdminPassword $AdminPassword -Url $Url From f5847dd97b3dd4ced284db708a074e9d20e8b55c Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:46:13 +0100 Subject: [PATCH 036/114] Update description.md --- .../Remove a single event receiver/description.md | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/OTHER/Remove a single event receiver/description.md b/OTHER/Remove a single event receiver/description.md index d5f18710..21ed399b 100644 --- a/OTHER/Remove a single event receiver/description.md +++ b/OTHER/Remove a single event receiver/description.md @@ -2,7 +2,7 @@ A short solution to remove a single event receiver from your SPO lists. -1. Install SharePoint Online SDK +1. Install [SharePoint Online SDK](http://www.microsoft.com/en-us/download/details.aspx?id=42038) 2. Download the file and open (e.g. in NotePad) @@ -28,7 +28,7 @@ Get-SPOListEventreceivers -Username $Username -AdminPassword $AdminPassword -Url 6. Instead of https://tenant.sharepint.com/sites/teamsitewithlibraries enter name of the site where the list with unwanted event receiver -7. Under $EventReceiverGUID, enter the guid of the receiver. If you need to find it, you can use Get all event receivers on your lists in a SharePoint Online site +7. Under $EventReceiverGUID, enter the guid of the receiver. If you need to find it, you can use [Get all event receivers on your lists in a SharePoint Online site](https://gallery.technet.microsoft.com/Get-all-event-receivers-on-479a1e8d) @@ -36,16 +36,10 @@ Run the script in any Powershell module. It should ask you for your admin password. - + The script will inform you how many receivers it found on the list and if it encountered any issues. - - - - -Please share your feedback in the Q&A section! - - +**Please share your feedback in the Q&A section!** Should you need any assistance or a different script, please let me know - I will be happy to help From 40465ebb78180dae3f260322c6ba0a0a635e5ee8 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:47:19 +0100 Subject: [PATCH 037/114] Update DeleteSingleReceiver.ps1 --- .../DeleteSingleReceiver.ps1 | 75 +++++++++---------- 1 file changed, 34 insertions(+), 41 deletions(-) diff --git a/OTHER/Remove a single event receiver/DeleteSingleReceiver.ps1 b/OTHER/Remove a single event receiver/DeleteSingleReceiver.ps1 index 7136c1c6..f70564d6 100644 --- a/OTHER/Remove a single event receiver/DeleteSingleReceiver.ps1 +++ b/OTHER/Remove a single event receiver/DeleteSingleReceiver.ps1 @@ -1,53 +1,46 @@ -function Get-SPOListEventreceivers -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SPOListEventreceivers{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] $AdminPassword, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string]$Url, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [string]$ListTitle, - [Parameter(Mandatory=$true,Position=5)] + [Parameter(Mandatory=$true,Position=5)] [GUID]$EventReceiverGUID -) + ) $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) -try -{ -$ctx.ExecuteQuery() -} catch [Net.WebException] - { - - Write-Host $Url " failed to connect to the site" $_.Exception.Message.ToString() -ForegroundColor Red -} - - $ctx.Load($ctx.Site) - - $lista=$ctx.Web.Lists.GetByTitle($ListTitle) - $ctx.Load($lista) - $ctx.ExecuteQuery() - $recevery=$lista.EventReceivers - $ctx.Load($recevery) - $ctx.ExecuteQuery() - Write-Host "Found " $recevery.Count " receivers in " $lista.Title - -$recevery.GetById($EventReceiverGUID).DeleteObject() - -try -{ -$ctx.ExecuteQuery() -Write-Host "receiver removed" -} - - catch [Net.WebException] - { - Write-Host "Failed to delete the receiver" $_.Exception.Message.ToString() -ForegroundColor Red - } - + try{ + $ctx.ExecuteQuery() + } + catch [Net.WebException] { + Write-Host $Url " failed to connect to the site" $_.Exception.Message.ToString() -ForegroundColor Red + } + + $ctx.Load($ctx.Site) + + $lista=$ctx.Web.Lists.GetByTitle($ListTitle) + $ctx.Load($lista) + $ctx.ExecuteQuery() + $recevery=$lista.EventReceivers + $ctx.Load($recevery) + $ctx.ExecuteQuery() + Write-Host "Found " $recevery.Count " receivers in " $lista.Title + + $recevery.GetById($EventReceiverGUID).DeleteObject() + + try{ + $ctx.ExecuteQuery() + Write-Host "receiver removed" + } + catch [Net.WebException] { + Write-Host "Failed to delete the receiver" $_.Exception.Message.ToString() -ForegroundColor Red + } } @@ -62,4 +55,4 @@ $Url="https://tenant.sharepoint.com/sites/teamsitewithlibraries" $ListTitle="kriiv" $EventReceiverGUID="154d2ca2-8335-464c-9059-214cdcc1c2c1" -Get-SPOListEventreceivers -Username $Username -AdminPassword $AdminPassword -Url $Url -ListTitle $ListTitle -EventReceiverGUID $EventreceiverGUID \ No newline at end of file +Get-SPOListEventreceivers -Username $Username -AdminPassword $AdminPassword -Url $Url -ListTitle $ListTitle -EventReceiverGUID $EventreceiverGUID From e807828e0abc037133b5dbbf52fce7492579526a Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:49:03 +0100 Subject: [PATCH 038/114] Update description.md --- .../description.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/OTHER/Unified Groups Storage Report/description.md b/OTHER/Unified Groups Storage Report/description.md index 69c03926..0b565251 100644 --- a/OTHER/Unified Groups Storage Report/description.md +++ b/OTHER/Unified Groups Storage Report/description.md @@ -1,4 +1,5 @@ -Short description +## Short description + The script retrieves all unified groups in your tenant and the storage quotas for their associated site collections. Whaaat? (explanation for those whose life doesn't evolve around O365 and who not only believe in but have actually seen the life beyond the firewall) @@ -13,7 +14,8 @@ Whaaat? (explanation for those whose life doesn't evolve around O365 and who not -Prerequisites +## Prerequisites + - SharePoint Online SDK @@ -22,14 +24,14 @@ Make sure the script refers to the library paths on your computer: -PowerShell +```PowerShell # Paths to SDK. Please verify location on your computer. Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" - + ``` -How to use? +## How to use? 1. Download the file. 2. Open in Powershell ISE or even notepad. @@ -42,8 +44,9 @@ How to use? -Expected results +##Expected results + @@ -51,6 +54,4 @@ Expected results - - -I am waiting for your comments in the Q&A section! +**I am waiting for your comments in the Q&A section!** From 850b757b42367d60d86251b6228c851796190163 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:51:30 +0100 Subject: [PATCH 039/114] Update UnifiedGroupStorageWithCSOM.ps1 --- .../UnifiedGroupStorageWithCSOM.ps1 | 110 ++++++++---------- 1 file changed, 51 insertions(+), 59 deletions(-) diff --git a/OTHER/Unified Groups Storage Report/UnifiedGroupStorageWithCSOM.ps1 b/OTHER/Unified Groups Storage Report/UnifiedGroupStorageWithCSOM.ps1 index 2bb3f63f..03dbed40 100644 --- a/OTHER/Unified Groups Storage Report/UnifiedGroupStorageWithCSOM.ps1 +++ b/OTHER/Unified Groups Storage Report/UnifiedGroupStorageWithCSOM.ps1 @@ -2,72 +2,66 @@ # Vadim Gremyachev's method. It is briliant Function Invoke-LoadMethod() { -param( - [Microsoft.SharePoint.Client.ClientObject]$Object = $(throw "Please provide a Client Object"), - [string]$PropertyName -) - $ctx = $Object.Context - $load = [Microsoft.SharePoint.Client.ClientContext].GetMethod("Load") - $type = $Object.GetType() - $clientLoad = $load.MakeGenericMethod($type) - - - $Parameter = [System.Linq.Expressions.Expression]::Parameter(($type), $type.Name) - $Expression = [System.Linq.Expressions.Expression]::Lambda( - [System.Linq.Expressions.Expression]::Convert( - [System.Linq.Expressions.Expression]::PropertyOrField($Parameter,$PropertyName), - [System.Object] - ), - $($Parameter) - ) + param( + [Microsoft.SharePoint.Client.ClientObject]$Object = $(throw "Please provide a Client Object"), + [string]$PropertyName + ) + + $ctx = $Object.Context + $load = [Microsoft.SharePoint.Client.ClientContext].GetMethod("Load") + $type = $Object.GetType() + $clientLoad = $load.MakeGenericMethod($type) + + + $Parameter = [System.Linq.Expressions.Expression]::Parameter(($type), $type.Name) + $Expression = [System.Linq.Expressions.Expression]::Lambda( + [System.Linq.Expressions.Expression]::Convert( + [System.Linq.Expressions.Expression]::PropertyOrField($Parameter,$PropertyName), + [System.Object] + ), + $($Parameter) + ) + $ExpressionArray = [System.Array]::CreateInstance($Expression.GetType(), 1) $ExpressionArray.SetValue($Expression, 0) $clientLoad.Invoke($ctx,@($Object,$ExpressionArray)) } -function Get-SPOWeb -{ +function Get-SPOWeb{ + <# + .link + http://social.technet.microsoft.com/wiki/contents/articles/32334.sharepoint-online-spomod-cmdlets-resources.aspx -<# - .link - http://social.technet.microsoft.com/wiki/contents/articles/32334.sharepoint-online-spomod-cmdlets-resources.aspx + #> - #> -param ( - [Parameter(Mandatory=$true,Position=1)] + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $AdminPassword - - ) - - # Connecting to particular personal site - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) - $ctx.Load($ctx.Web) - $ctx.Load($ctx.Site) - $ctx.ExecuteQuery() + ) - # loading usage data for the site - Invoke-LoadMethod -Object $ctx.Site -PropertyName "Usage" - $ctx.ExecuteQuery() - $outputty=1099511627776-$ctx.Site.Usage.StoragePercentageUsed - - # User output, feel free to modify the message content - Write-Host "Storage: " $ctx.Site.Usage.Storage - Write-Host "Percentage used: " $ctx.Site.Usage.StoragePercentageUsed - Write-Host "Storage free: " $outputty - - - - - $ctx.Dispose() - - - + # Connecting to particular personal site + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) + $ctx.Load($ctx.Web) + $ctx.Load($ctx.Site) + $ctx.ExecuteQuery() + + # loading usage data for the site + Invoke-LoadMethod -Object $ctx.Site -PropertyName "Usage" + $ctx.ExecuteQuery() + $outputty=1099511627776-$ctx.Site.Usage.StoragePercentageUsed + + # User output, feel free to modify the message content + Write-Host "Storage: " $ctx.Site.Usage.Storage + Write-Host "Percentage used: " $ctx.Site.Usage.StoragePercentageUsed + Write-Host "Storage free: " $outputty + + $ctx.Dispose() } @@ -99,9 +93,7 @@ $grupki=(get-unifiedgroup).sharepointsiteurl -foreach($group in $grupki) -{ - -Write-Host "Processing "$group -Get-SPOWeb -Username $admin -Url $group -AdminPassword $pass -} \ No newline at end of file +foreach($group in $grupki){ + Write-Host "Processing "$group + Get-SPOWeb -Username $admin -Url $group -AdminPassword $pass +} From 7f30138d1a0313f0e6588915792f155a71854ba1 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:54:27 +0100 Subject: [PATCH 040/114] Update description.md --- .../description.md | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/OTHER/Uninstall unwanted app from your site using Powershell/description.md b/OTHER/Uninstall unwanted app from your site using Powershell/description.md index 3d34a026..89e6fb53 100644 --- a/OTHER/Uninstall unwanted app from your site using Powershell/description.md +++ b/OTHER/Uninstall unwanted app from your site using Powershell/description.md @@ -2,13 +2,13 @@ A simple solution to uninstall an unwanted app from a Sharepoint Online site usi -1. Install SharePoint Online SDK +1. Install [SharePoint Online SDK](http://www.microsoft.com/en-us/download/details.aspx?id=42038) 2. Download the file and open (e.g. in NotePad) 3. Scroll down to these lines -PowerShell +```PowerShell # Paths to SDK. Please verify location on your computer. 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" @@ -18,7 +18,7 @@ $Username="admin@tenant.onmicrosoft.com" $AdminPassword=Read-Host -Prompt "Password" -AsSecureString $Url="https://tenant.sharepoint.com/sites/teamsitewithlibraries" $GUID="126d911b-b274-4b69-a52e-2a9e5bbae91b" - + ``` 4. Check if the 2 libraries are in the same location on your computer. If yes, proceed on. If no, change the paths in the file. Usually you will be required to change folder name "15" into "16". 5. Instead of admin@tenant.onmicrosoft.com, enter the name of your site collection admin. @@ -27,22 +27,11 @@ $GUID="126d911b-b274-4b69-a52e-2a9e5bbae91b" 7. Under GUID enter the app's guid. - - - Run the script in any Powershell module. It should ask you for your admin password and report success or detailed error: - - - - - - - - - + -Please share your feedback in the Q&A section! +**Please share your feedback in the Q&A section!** From 747361ed5586310c324c0411c67a5a1690734b92 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 04:55:57 +0100 Subject: [PATCH 041/114] Update RemoveSPOApp.ps1 --- .../RemoveSPOApp.ps1 | 64 +++++++++---------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/OTHER/Uninstall unwanted app from your site using Powershell/RemoveSPOApp.ps1 b/OTHER/Uninstall unwanted app from your site using Powershell/RemoveSPOApp.ps1 index be5824ab..869551fe 100644 --- a/OTHER/Uninstall unwanted app from your site using Powershell/RemoveSPOApp.ps1 +++ b/OTHER/Uninstall unwanted app from your site using Powershell/RemoveSPOApp.ps1 @@ -1,42 +1,36 @@ -function Uninstall-SPOApp -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Uninstall-SPOApp{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] $AdminPassword, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string]$Url, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [GUID]$SPOAppGUID -) - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) - -try -{ -$ctx.ExecuteQuery() -} catch [Net.WebException] - { - - Write-Host $Url " failed to connect to the site" $_.Exception.Message.ToString() -ForegroundColor Red -} - - $ctx.Load($ctx.Site) - $ctx.Load($ctx.Web.Webs) - $ctx.Web.GetAppInstanceById($SPOAppGUID).Uninstall() - - try - { - $ctx.ExecuteQuery() - Write-Host "Success" -ForegroundColor Green - } - catch [Net.WebException] - { - Write-Host "Failed to uninstall the app" $_.Exception.Message.ToString() -ForegroundColor Red - } - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) + + try{ + $ctx.ExecuteQuery() + } + catch [Net.WebException] { + Write-Host $Url " failed to connect to the site" $_.Exception.Message.ToString() -ForegroundColor Red + } + + $ctx.Load($ctx.Site) + $ctx.Load($ctx.Web.Webs) + $ctx.Web.GetAppInstanceById($SPOAppGUID).Uninstall() + + try{ + $ctx.ExecuteQuery() + Write-Host "Success" -ForegroundColor Green + } + catch [Net.WebException] { + Write-Host "Failed to uninstall the app" $_.Exception.Message.ToString() -ForegroundColor Red + } } @@ -50,4 +44,4 @@ $AdminPassword=Read-Host -Prompt "Password" -AsSecureString $Url="https://tenant.sharepoint.com/sites/teamsitewithlibraries" $GUID="126d911b-b274-4b69-a52e-2a9e5bbae91b" -Uninstall-SPOApp -Username $Username -AdminPassword $AdminPassword -Url $Url -SPOAppGUID $GUID \ No newline at end of file +Uninstall-SPOApp -Username $Username -AdminPassword $AdminPassword -Url $Url -SPOAppGUID $GUID From f1f72dab2d673323ccee3ccba454f4695b680b7a Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 22:10:30 +0100 Subject: [PATCH 042/114] Update description.md --- .../description.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/OneDrive for Business/Create OneDrive for Business usage report for all users/description.md b/OneDrive for Business/Create OneDrive for Business usage report for all users/description.md index cd6acad0..963a78d9 100644 --- a/OneDrive for Business/Create OneDrive for Business usage report for all users/description.md +++ b/OneDrive for Business/Create OneDrive for Business usage report for all users/description.md @@ -32,11 +32,8 @@ $mysiteHost="https://tenant-my.sharepoint.com" 4. Expected results: - - - - +

### Acknowledgement: -The script is using Invoke-LoadMethod published here, without which it could not proceed. The method was created and belongs to a brilliant SharePointer and Guru, Vadim Gremyachev. +The script is using Invoke-LoadMethod published here, without which it could not proceed. The method was created and belongs to a brilliant SharePointer and Guru, [Vadim Gremyachev.](https://sharepoint.stackexchange.com/users/10610/vadim-gremyachev) From e155bce6526ef86648a333d3b7e6ba6abf2ce6cf Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 22:11:56 +0100 Subject: [PATCH 043/114] Update description.md --- .../description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OneDrive for Business/Enable versioning for all lists in OneDrive sites/description.md b/OneDrive for Business/Enable versioning for all lists in OneDrive sites/description.md index 59cc0a80..f2978e30 100644 --- a/OneDrive for Business/Enable versioning for all lists in OneDrive sites/description.md +++ b/OneDrive for Business/Enable versioning for all lists in OneDrive sites/description.md @@ -1,6 +1,6 @@ Powershell script that enables versioning for all the libraries and lists in all personal sites (OneDrive for Business). -It requires SharePoint Online Management Shell and SharePoint SDK installed: +**It requires SharePoint Online Management Shell and SharePoint SDK installed:** http://technet.microsoft.com/en-us/library/fp161372(v=office.15).aspx From d5a667e846a17dc23ff41bea7552a88cd459b589 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 22:13:43 +0100 Subject: [PATCH 044/114] Update Enable versioning in ODB lists.ps1 --- .../Enable versioning in ODB lists.ps1 | 85 ++++++++----------- 1 file changed, 36 insertions(+), 49 deletions(-) diff --git a/OneDrive for Business/Enable versioning for all lists in OneDrive sites/Enable versioning in ODB lists.ps1 b/OneDrive for Business/Enable versioning for all lists in OneDrive sites/Enable versioning in ODB lists.ps1 index eb9532c5..6068a58a 100644 --- a/OneDrive for Business/Enable versioning for all lists in OneDrive sites/Enable versioning in ODB lists.ps1 +++ b/OneDrive for Business/Enable versioning for all lists in OneDrive sites/Enable versioning in ODB lists.ps1 @@ -1,54 +1,45 @@ -function Set-SPOListVersioning($EnableVersioning, $Urelek) -{ - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($urelek) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $Adminpassword) - $ctx.Load($ctx.Web.Lists) - $ctx.Load($ctx.Web) - $ctx.Load($ctx.Web.Webs) - $ctx.ExecuteQuery() - Write-Host - Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen - foreach( $ll in $ctx.Web.Lists) - { - $ll.EnableVersioning = $EnableVersioning - $ll.Update() - $csvvalue= new-object PSObject +function Set-SPOListVersioning($EnableVersioning, $Urelek){ + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($urelek) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $Adminpassword) + $ctx.Load($ctx.Web.Lists) + $ctx.Load($ctx.Web) + $ctx.Load($ctx.Web.Webs) + $ctx.ExecuteQuery() + Write-Host + Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen + + foreach( $ll in $ctx.Web.Lists){ + $ll.EnableVersioning = $EnableVersioning + $ll.Update() + $csvvalue= new-object PSObject $listurl=$null + if($ctx.Url.EndsWith("/")) {$listurl= $ctx.Url+$ll.Title} else {$listurl=$ctx.Url+"/"+$ll.Title} + $csvvalue | Add-Member -MemberType NoteProperty -Name "Url" -Value ($listurl) $csvvalue | Add-Member -MemberType NoteProperty -Name "Status" -Value "Failed" - try - { - $ErrorActionPreference="Stop" - $ctx.ExecuteQuery() - Write-Host $listurl -ForegroundColor DarkGreen - $csvvalue.Status="Success" - $Global:csv+= $csvvalue + + try{ + $ErrorActionPreference="Stop" + $ctx.ExecuteQuery() + Write-Host $listurl -ForegroundColor DarkGreen + $csvvalue.Status="Success" + $Global:csv+= $csvvalue } - - catch - { + catch{ $Global:csv+= $csvvalue Write-Host $listurl -ForegroundColor Red } finally {$ErrorActionPreference="Continue"} - - } - if($ctx.Web.Webs.Count -gt 0) - { - for($i=0; $i -lt $ctx.Web.Webs.Count ; $i++) - { + if($ctx.Web.Webs.Count -gt 0){ + for($i=0; $i -lt $ctx.Web.Webs.Count ; $i++){ Set-SPOListVersioning -EnableVersioning $EnableVersioning -Urelek ($ctx.Web.Webs[$i].Url) } - } - - - } @@ -71,23 +62,19 @@ $users=get-SPOUser -Site $myhost $EnableVersioning=$true $Global:csv=@() -foreach($user in $users) -{ - - - if($user.LoginName.Contains('@')) - { - $persweb=$user.LoginName.Replace(".","_").Replace("@","_") - $persweb=$myhost+"/personal/"+$persweb - Write-Host $persweb +foreach($user in $users){ + if($user.LoginName.Contains('@')){ + $persweb=$user.LoginName.Replace(".","_").Replace("@","_") + $persweb=$myhost+"/personal/"+$persweb + Write-Host $persweb - $AdminUrl=$persweb + $AdminUrl=$persweb - #Add the following line if you want to assign yourself, administrator or another user access to other users' personal sites - #Set-SPOUser -Site $AdminUrl -IsSiteCollectionAdmin $true -LoginName t@trial765.onmicrosoft.com - Set-SPOListVersioning -EnableVersioning $EnableVersioning -Urelek $AdminUrl + #Add the following line if you want to assign yourself, administrator or another user access to other users' personal sites + #Set-SPOUser -Site $AdminUrl -IsSiteCollectionAdmin $true -LoginName t@trial765.onmicrosoft.com + Set-SPOListVersioning -EnableVersioning $EnableVersioning -Urelek $AdminUrl } } # Specify the path where the log file will be published -$Global:csv | Export-Csv -Path C:\Users\Public\Versioning.csv \ No newline at end of file +$Global:csv | Export-Csv -Path C:\Users\Public\Versioning.csv From 3f9dd21a8f4abea8c85e32e35f5bc253efedd794 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 22:15:37 +0100 Subject: [PATCH 045/114] Update description.md --- .../description.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/OneDrive for Business/Update locale id for all personal sites/description.md b/OneDrive for Business/Update locale id for all personal sites/description.md index 08bac44b..e4c321ed 100644 --- a/OneDrive for Business/Update locale id for all personal sites/description.md +++ b/OneDrive for Business/Update locale id for all personal sites/description.md @@ -1,11 +1,11 @@ -Acknowledegement -The script uses Vadim Gremyachev's Invoke-LoadMethod published here +## Acknowledegement +The script uses [Vadim Gremyachev's](https://sharepoint.stackexchange.com/users/10610/vadim-gremyachev) Invoke-LoadMethod published [here](https://sharepoint.stackexchange.com/questions/126221/spo-retrieve-hasuniqueroleassignements-property-using-powershell) -Description +## Description The script updates locale id in regional settings of all personal sites to which you have access. The locale id can later be verified by going to Site Settings>Regional Settings. @@ -50,7 +50,7 @@ Set-SPOUser -Site $urelek -LoginName $username -IsSiteCollectionAdmin $true ``` -In order to use the cmdlet, you can either modify the.ps1 file or write a separate script. +In order to use the cmdlet, you can either modify the ```.ps1``` file or write a separate script. From f1270ed5c3eb9e50de588494e9935847970b4d1f Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Fri, 28 Feb 2020 22:17:31 +0100 Subject: [PATCH 046/114] Update LocaleID.ps1 --- .../LocaleID.ps1 | 77 +++++++++---------- 1 file changed, 35 insertions(+), 42 deletions(-) diff --git a/OneDrive for Business/Update locale id for all personal sites/LocaleID.ps1 b/OneDrive for Business/Update locale id for all personal sites/LocaleID.ps1 index 6de5c803..12f20701 100644 --- a/OneDrive for Business/Update locale id for all personal sites/LocaleID.ps1 +++ b/OneDrive for Business/Update locale id for all personal sites/LocaleID.ps1 @@ -1,41 +1,41 @@  # Vadim Gremyachev's function - Function Invoke-LoadMethod() { -param( - [Microsoft.SharePoint.Client.ClientObject]$Object = $(throw "Please provide a Client Object"), - [string]$PropertyName -) - $ctx = $Object.Context - $load = [Microsoft.SharePoint.Client.ClientContext].GetMethod("Load") - $type = $Object.GetType() - $clientLoad = $load.MakeGenericMethod($type) - - - $Parameter = [System.Linq.Expressions.Expression]::Parameter(($type), $type.Name) - $Expression = [System.Linq.Expressions.Expression]::Lambda( - [System.Linq.Expressions.Expression]::Convert( - [System.Linq.Expressions.Expression]::PropertyOrField($Parameter,$PropertyName), - [System.Object] - ), - $($Parameter) - ) +Function Invoke-LoadMethod() { + param( + [Microsoft.SharePoint.Client.ClientObject]$Object = $(throw "Please provide a Client Object"), + [string]$PropertyName + ) + + $ctx = $Object.Context + $load = [Microsoft.SharePoint.Client.ClientContext].GetMethod("Load") + $type = $Object.GetType() + $clientLoad = $load.MakeGenericMethod($type) + + + $Parameter = [System.Linq.Expressions.Expression]::Parameter(($type), $type.Name) + $Expression = [System.Linq.Expressions.Expression]::Lambda( + [System.Linq.Expressions.Expression]::Convert( + [System.Linq.Expressions.Expression]::PropertyOrField($Parameter,$PropertyName), + [System.Object] + ), + $($Parameter) + ) + $ExpressionArray = [System.Array]::CreateInstance($Expression.GetType(), 1) $ExpressionArray.SetValue($Expression, 0) $clientLoad.Invoke($ctx,@($Object,$ExpressionArray)) } -function Set-SPOUserRegionalSettings -{ - +function Set-SPOUserRegionalSettings{ param ( - [Parameter(Mandatory=$true,Position=1)] - [string]$Username, - [Parameter(Mandatory=$true,Position=2)] - $AdminPassword, + [Parameter(Mandatory=$true,Position=1)] + [string]$Username, + [Parameter(Mandatory=$true,Position=2)] + $AdminPassword, [Parameter(Mandatory=$true,Position=3)] - [string]$Url, + [string]$Url, [Parameter(Mandatory=$true,Position=3)] - [string]$LocaleID - ) + [string]$LocaleID + ) $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) @@ -49,12 +49,10 @@ function Set-SPOUserRegionalSettings Write-Host "Old locale id: " $ctx.Web.RegionalSettings.LocaleId.ToString() - $ctx.Web.RegionalSettings.LocaleId=$LocaleID -$ctx.Web.Update() -$ctx.ExecuteQuery() - - - } + $ctx.Web.RegionalSettings.LocaleId=$LocaleID + $ctx.Web.Update() + $ctx.ExecuteQuery() +} @@ -72,19 +70,14 @@ $LocaleID=1033 $users=get-SPOUser -Site $myhost -foreach($user in $users) -{ - - - if($user.LoginName.Contains('@')) - { +foreach($user in $users){ + if($user.LoginName.Contains('@')){ $persweb=$user.LoginName.Replace(".","_").Replace("@","_") $persweb=$myhost+"/personal/"+$persweb Write-Host $persweb $AdminUrl=$persweb - Set-SPOUserRegionalSettings -Username $Username -AdminPassword $AdminPassword -Url $AdminUrl -LocaleID $LocaleID } } From 78df7989824200c7440bd319de8f4a6f92ed29a2 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 13:40:57 +0100 Subject: [PATCH 047/114] Update description.md --- .../description.md | 30 +++++++------------ 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/Power Automate/Disable Flows in all lists on SharePoint site/description.md b/Power Automate/Disable Flows in all lists on SharePoint site/description.md index 5ed30198..20c7017b 100644 --- a/Power Automate/Disable Flows in all lists on SharePoint site/description.md +++ b/Power Automate/Disable Flows in all lists on SharePoint site/description.md @@ -1,35 +1,25 @@ Short Powershell script that disables flows for all lists and libraries in SharePoint Online modern site. -It modifies DisableFlows property of a SharePoint Online site. The script is related to and more described in an article Verifying and modifying Flows Policy in SharePoint Online site using Powershell on the TechNet Wiki. +It modifies DisableFlows property of a SharePoint Online site. The script is related to and more described in an article [Verifying and modifying Flows Policy in SharePoint Online site using Powershell](https://social.technet.microsoft.com/wiki/contents/articles/39331.sharepoint-online-verifying-and-modifying-flows-policy-in-site-using-powershell.aspx) on the TechNet Wiki. If the setting is set to disabled, the flows button will be missing on all lists and libraries in the site: - - - - - - - - - - - - - + + ### How to use? -Download and open the .ps1 file. -Add correct libraries: -PowerShell +- Download and open the .ps1 file. +- Add correct libraries: + +```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" - -Enter the correct url and admin login: +``` +- Enter the correct url and admin login: ```PowerShell #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString @@ -37,7 +27,7 @@ $username="admin@TENANT.onmicrosoft.com" $AdminUrl="https://TENANT-admin.sharepoint.com" $Url="https://TENANT.sharepoint.com" ``` - Run the script +- Run the script From ab914a67cad114efd420acdf40a7cbe771db3647 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 13:42:02 +0100 Subject: [PATCH 048/114] Update disableFlows.ps1 --- .../disableFlows.ps1 | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Power Automate/Disable Flows in all lists on SharePoint site/disableFlows.ps1 b/Power Automate/Disable Flows in all lists on SharePoint site/disableFlows.ps1 index 917f43ec..426e46ba 100644 --- a/Power Automate/Disable Flows in all lists on SharePoint site/disableFlows.ps1 +++ b/Power Automate/Disable Flows in all lists on SharePoint site/disableFlows.ps1 @@ -1,15 +1,14 @@ -function Set-SiteColl -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SiteColl{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$AdminUrl, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $Password, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] $Url - ) + ) $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Adminurl) @@ -47,4 +46,4 @@ $Url="https://TENANT.sharepoint.com" -Set-SiteColl -Username $username -AdminUrl $AdminUrl -password $AdminPassword -Url $Url \ No newline at end of file +Set-SiteColl -Username $username -AdminUrl $AdminUrl -password $AdminPassword -Url $Url From 49e50d81bd05cf54b44fcb6896932ae5887378a7 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 13:45:23 +0100 Subject: [PATCH 049/114] Update description.md --- .../description.md | 39 ++++++------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/Power Automate/Enable Microsoft Flow in all lists on SharePoint modern site/description.md b/Power Automate/Enable Microsoft Flow in all lists on SharePoint modern site/description.md index dd6d4147..7b991c5e 100644 --- a/Power Automate/Enable Microsoft Flow in all lists on SharePoint modern site/description.md +++ b/Power Automate/Enable Microsoft Flow in all lists on SharePoint modern site/description.md @@ -1,48 +1,33 @@ Short Powershell script that enables flows for all lists and libraries in SharePoint Online modern site. -It modifies DisableFlows property of a SharePoint Online site. The script is related to and more described in an article Verifying and modifying Flows Policy in SharePoint Online site using Powershell on the TechNet Wiki. +It modifies DisableFlows property of a SharePoint Online site. The script is related to and more described in an article [Verifying and modifying Flows Policy in SharePoint Online site using Powershell](https://social.technet.microsoft.com/wiki/contents/articles/39331.sharepoint-online-verifying-and-modifying-flows-policy-in-site-using-powershell.aspx) on the TechNet Wiki. If the setting is set to disabled, the flows button will be missing on all lists and libraries in the site: + + - - - - - +## How to use? +- Download and open the .ps1 file. +- Add correct libraries: - - - - - - -How to use? -Download and open the .ps1 file. -Add correct libraries: - - -PowerShell +```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" + ``` +- Enter the correct url and admin login: - -Enter the correct url and admin login: - - -PowerShell +```PowerShell #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $AdminUrl="https://TENANT-admin.sharepoint.com" $Url="https://TENANT.sharepoint.com" - - - - Run the script + ``` + - Run the script From 1be55f62b079a037cba69faf121a645b7daf7089 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 13:46:35 +0100 Subject: [PATCH 050/114] Update enableFlows.ps1 --- .../enableFlows.ps1 | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Power Automate/Enable Microsoft Flow in all lists on SharePoint modern site/enableFlows.ps1 b/Power Automate/Enable Microsoft Flow in all lists on SharePoint modern site/enableFlows.ps1 index 20d0f830..e2055749 100644 --- a/Power Automate/Enable Microsoft Flow in all lists on SharePoint modern site/enableFlows.ps1 +++ b/Power Automate/Enable Microsoft Flow in all lists on SharePoint modern site/enableFlows.ps1 @@ -1,15 +1,14 @@ -function Set-SiteColl -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SiteColl{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$AdminUrl, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $Password, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] $Url - ) + ) $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Adminurl) @@ -47,4 +46,4 @@ $Url="https://TENANT.sharepoint.com" -Set-SiteColl -Username $username -AdminUrl $AdminUrl -password $AdminPassword -Url $Url \ No newline at end of file +Set-SiteColl -Username $username -AdminUrl $AdminUrl -password $AdminPassword -Url $Url From 33589ede08a622662c67e7c405275db96df7fc08 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 13:49:22 +0100 Subject: [PATCH 051/114] Update description.md --- .../description.md | 36 ++++++------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/Power Automate/Get FlowsPolicy using REST API/description.md b/Power Automate/Get FlowsPolicy using REST API/description.md index 0f0474e2..d8706e41 100644 --- a/Power Automate/Get FlowsPolicy using REST API/description.md +++ b/Power Automate/Get FlowsPolicy using REST API/description.md @@ -1,40 +1,24 @@ -Powershell script that verifies DisableFlows property of a SharePoint Online site. The script is related to and more described in an article Verifying and modifying Flows Policy in SharePoint Online site using Powershell on the TechNet Wiki. +Powershell script that verifies DisableFlows property of a SharePoint Online site. The script is related to and more described in an article [Verifying and modifying Flows Policy in SharePoint Online site using Powershell](https://social.technet.microsoft.com/wiki/contents/articles/39331.sharepoint-online-verifying-and-modifying-flows-policy-in-site-using-powershell.aspx) on the TechNet Wiki. If the setting is set to disabled, the flows button will be missing on all lists and libraries in the site: - - - - - - - + + The property can also be verified using REST API in the browser: + - - - - - - - - - - - - - -How to use? -Download and open the .ps1 file. -Enter the correct url and admin login: -PowerShell +## How to use? +- Download and open the .ps1 file. +- Enter the correct url and admin login: +```PowerShell $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT.sharepoint.com" - Run the script +``` +- Run the script From b6a5cf8f0f876c1a2d830cfff285e9a5c798311f Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 13:50:19 +0100 Subject: [PATCH 052/114] Update flowsWithRest.ps1 --- .../flowsWithRest.ps1 | 41 +++++++------------ 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/Power Automate/Get FlowsPolicy using REST API/flowsWithRest.ps1 b/Power Automate/Get FlowsPolicy using REST API/flowsWithRest.ps1 index df21b879..ff7c5f8a 100644 --- a/Power Automate/Get FlowsPolicy using REST API/flowsWithRest.ps1 +++ b/Power Automate/Get FlowsPolicy using REST API/flowsWithRest.ps1 @@ -1,26 +1,21 @@ -function Get-SPOFlowSetting -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SPOFlowSetting{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, - [Parameter(Mandatory=$false,Position=2)] + [Parameter(Mandatory=$false,Position=2)] [SecureString] $password = (Read-Host -AsSecureString), - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string] $url, - [Parameter(Mandatory=$false,Position=4)] - [string] $object="" - ) - - + [Parameter(Mandatory=$false,Position=4)] + [string] $object="" + ) - $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $RestUrl=$url+"/_api/site/" - if($object -ne "") - { - $RestUrl+=$object - } - - + $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $RestUrl=$url+"/_api/site/" + + if($object -ne ""){ + $RestUrl+=$object + } $request = [System.Net.WebRequest]::Create($RESTUrl) $request.Credentials = $Credentials @@ -34,13 +29,7 @@ param ( $data=$read.ReadToEnd() $results = $data | ConvertFrom-Json Write-Output $results.d - - - - - - - } +} From 6308f88c6983af95088a0d0dc393bb3ff984ff48 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:09:33 +0100 Subject: [PATCH 053/114] Update mailb.ps1 --- SiteMailboxes/mailb.ps1 | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/SiteMailboxes/mailb.ps1 b/SiteMailboxes/mailb.ps1 index b2dc6dac..fbbf65f3 100644 --- a/SiteMailboxes/mailb.ps1 +++ b/SiteMailboxes/mailb.ps1 @@ -69,15 +69,11 @@ import-pssession $sesja $sitecollections=Get-SPOSite Write-Host "Found site collections:" -foreach($sitecoll in $sitecollections) -{ +foreach($sitecoll in $sitecollections){ Write-Host $sitecoll.Url } - - -function Add-MailboxToSite($urelek) -{ +function Add-MailboxToSite($urelek){ $ctx = New-Object Microsoft.SharePoint.Client.ClientContext($urelek) $ctx.Credentials= New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password) $rootWeb = $ctx.Web @@ -94,36 +90,30 @@ function Add-MailboxToSite($urelek) new-sitemailbox -displayName $rootWeb.Title -SharePointUrl $rootWeb.Url - foreach($site in $sites) - { + foreach($site in $sites){ $site.Features.Add($featureguid, $true, [Microsoft.SharePoint.Client.FeatureDefinitionScope]::None) | Out-Null $ctx.ExecuteQuery() Write-Host "Feature enabled for" $site.Url - } - Write-Host "Finished enabling site mailbox feature on" $rootWeb.Title " : " $rootWeb.Url - + } + + Write-Host "Finished enabling site mailbox feature on" $rootWeb.Title " : " $rootWeb.Url - foreach($site in $sites) - { - Write-Host "Trying to add mailbox for" $site.Url - new-sitemailbox -displayName $site.Title -SharePointUrl $site.Url -ErrorAction SilentlyContinue | Out-Null } + foreach($site in $sites){ + Write-Host "Trying to add mailbox for" $site.Url + new-sitemailbox -displayName $site.Title -SharePointUrl $site.Url -ErrorAction SilentlyContinue | Out-Null } Write-Host "Finished adding mailboxes on" $rootWeb.Title " : " $rootWeb.Url - - if($ctx.Web.Webs.Count -gt 0) - { - for($i=0; $i -lt $ctx.Web.Webs.Count ; $i++) - { + if($ctx.Web.Webs.Count -gt 0){ + for($i=0; $i -lt $ctx.Web.Webs.Count ; $i++){ Add-MailboxToSite($ctx.Web.Webs[$i].Url) } } } - foreach($sitecoll in $sitecollections) -{ - Add-MailboxToSite($sitecoll.Url) -} + foreach($sitecoll in $sitecollections){ + Add-MailboxToSite($sitecoll.Url) + } #Finishes by saving a transcript of the whole run to a local folder Stop-Transcript From 19f17dbb6268e9abb62973e987056e115f0f198f Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:10:20 +0100 Subject: [PATCH 054/114] Update mailbox1.ps1 --- SiteMailboxes/mailbox1.ps1 | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/SiteMailboxes/mailbox1.ps1 b/SiteMailboxes/mailbox1.ps1 index 65730096..adb4809c 100644 --- a/SiteMailboxes/mailbox1.ps1 +++ b/SiteMailboxes/mailbox1.ps1 @@ -78,22 +78,20 @@ new-sitemailbox -displayName $rootWeb.Title -SharePointUrl $rootWeb.Url #adding the feature and the mailbox for all the subsites. It checks for first-level subsites. If your structure is more complex, you need to add more loops - foreach($site in $sites) - { +foreach($site in $sites){ $site.Features.Add($featureguid, $true, [Microsoft.SharePoint.Client.FeatureDefinitionScope]::None) $ctx.ExecuteQuery() Write-Host "Feature enabled for" $site.Url - } - Write-Host "Finished enabling site mailbox feature." +} + +Write-Host "Finished enabling site mailbox feature." - - foreach($site in $sites) - { +foreach($site in $sites){ new-sitemailbox -displayName $site.Title -SharePointUrl $site.Url - } +} - Write-Host "Finished adding mailboxes." +Write-Host "Finished adding mailboxes." #Finishes by saving a transcript of the whole run to a local folder - Stop-Transcript \ No newline at end of file + Stop-Transcript From 68dcb40122364510f3d354b3abb55605acd524f4 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:12:51 +0100 Subject: [PATCH 055/114] Update description.md --- .../description.md | 33 ++++++------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/description.md b/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/description.md index 1cc60d1b..a4152221 100644 --- a/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/description.md +++ b/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/description.md @@ -1,20 +1,18 @@ Short Powershell script to send bcc copies to all sharing invitations send from users' OneDrives for Business. The script uses CSOM with December 2015 update. - - - +## How to use? -How to use? -Download and open the .ps1 file. -Add correct SharePoint Online SDK libraries: +- Download and open the .ps1 file. +- Add correct SharePoint Online SDK libraries: -PowerShell +```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" - Enter the correct url, and admin login. Under InvitationsList, enter the email addresses that you want to add in BCC to every sharing invitation in your users' OneDrive for Business. You will be additionally prompted for the password. Do not enter it in the file: -PowerShell +``` +- Enter the correct url, and admin login. Under InvitationsList, enter the email addresses that you want to add in BCC to every sharing invitation in your users' OneDrive for Business. You will be additionally prompted for the password. Do not enter it in the file: +```PowerShell $spoTenant.BccExternalSharingInvitationsList={arleta.wanat@SomeFakeAdresse.com} @@ -23,20 +21,9 @@ PowerShell $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" + ``` +- Run the script - Run the script - - - - - - After the setting takes place, the BCC emails will start receiving copies of the sharing invitations with Invited person's email in the "TO" field and inviter's in "CC": - - - - - - - + From 6a56a889445abc699aa62d6d14a53b99bc8c7a9f Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:13:42 +0100 Subject: [PATCH 056/114] Update BccExternalSharingInvitations.ps1 --- .../BccExternalSharingInvitations.ps1 | 53 +++++++------------ 1 file changed, 20 insertions(+), 33 deletions(-) diff --git a/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/BccExternalSharingInvitations.ps1 b/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/BccExternalSharingInvitations.ps1 index d7993850..c143e6dd 100644 --- a/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/BccExternalSharingInvitations.ps1 +++ b/Tenant Settings/Add BCC to all sharing invitations in OneDrive for Business/BccExternalSharingInvitations.ps1 @@ -1,48 +1,35 @@ -function Set-SPOTenant -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SPOTenant{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - $spoTenant.BccExternalSharingInvitations=$true - $spoTenant.BccExternalSharingInvitationsList={arleta.wanat@SomeFakeAdresse.com} - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - Write-Output $spoTenant - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.BccExternalSharingInvitations=$true + $spoTenant.BccExternalSharingInvitationsList={arleta.wanat@SomeFakeAdresse.com} + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" - - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" - - - - - -Set-SPOTenant -Username $username -Url $Url -password $AdminPassword \ No newline at end of file +Set-SPOTenant -Username $username -Url $Url -password $AdminPassword From d1f6863df1da0da284c6249669316a5e2f6c4cd6 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:14:59 +0100 Subject: [PATCH 057/114] Update description.md --- .../description.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Tenant Settings/Allow external sharing only with specific domains/description.md b/Tenant Settings/Allow external sharing only with specific domains/description.md index 707c197e..c0257d59 100644 --- a/Tenant Settings/Allow external sharing only with specific domains/description.md +++ b/Tenant Settings/Allow external sharing only with specific domains/description.md @@ -2,22 +2,23 @@ Short Powershell script that limits external sharing in SharePoint Online to onl -The script is related to and more described in a Wiki article SharePoint Online Sharing settings with CSOM. +The script is related to and more described in a Wiki article [SharePoint Online Sharing settings with CSOM](https://social.technet.microsoft.com/wiki/contents/articles/39365.sharepoint-online-sharing-settings-with-csom). -### How to use? -Download and open the .ps1 file. -Add correct libraries: +## How to use? + +- Download and open the .ps1 file. +- Add correct libraries: ``` PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" ``` -Enter the correct url and admin login: +- Enter the correct url and admin login: ```PowerShell @@ -27,5 +28,5 @@ $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $AllowDomainList="test.com madeup.com" ``` -Run the script +- Run the script From d0ce9a4500d2def533d9163aff7d7ee91ae3c2e0 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:16:05 +0100 Subject: [PATCH 058/114] Update SharingAllowedDomainList.ps1 --- .../SharingAllowedDomainList.ps1 | 54 ++++++++----------- 1 file changed, 21 insertions(+), 33 deletions(-) diff --git a/Tenant Settings/Allow external sharing only with specific domains/SharingAllowedDomainList.ps1 b/Tenant Settings/Allow external sharing only with specific domains/SharingAllowedDomainList.ps1 index 8a5388a3..6d2520cc 100644 --- a/Tenant Settings/Allow external sharing only with specific domains/SharingAllowedDomainList.ps1 +++ b/Tenant Settings/Allow external sharing only with specific domains/SharingAllowedDomainList.ps1 @@ -1,50 +1,38 @@ -function Set-SiteColl -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SiteColl{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] $AllowDomainList - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - $spoTenant.SharingDomainRestrictionMode=[Microsoft.Online.SharePoint.TenantManagement.SharingDomainRestrictionModes]::AllowList - $spoTenant.SharingAllowedDomainList=$AllowDomainList - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - Write-Output $spoTenant - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.SharingDomainRestrictionMode=[Microsoft.Online.SharePoint.TenantManagement.SharingDomainRestrictionModes]::AllowList + $spoTenant.SharingAllowedDomainList=$AllowDomainList + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" - - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $AllowDomainList="test.com madeup.com" - - - - -Set-SiteColl -Username $username -Url $Url -password $AdminPassword -AllowDomainList $AllowDomainList \ No newline at end of file +Set-SiteColl -Username $username -Url $Url -password $AdminPassword -AllowDomainList $AllowDomainList From b5d9ea6c955cfe1d7b3003713275647947dbbe5d Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:17:55 +0100 Subject: [PATCH 059/114] Update description.md --- .../description.md | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Tenant Settings/Force external users to accept sharing invitations with the same account/description.md b/Tenant Settings/Force external users to accept sharing invitations with the same account/description.md index 18904912..9be5637b 100644 --- a/Tenant Settings/Force external users to accept sharing invitations with the same account/description.md +++ b/Tenant Settings/Force external users to accept sharing invitations with the same account/description.md @@ -2,28 +2,29 @@ Short PowerShell script to force external users to accept sharing invitations wi It is one of the 3 additional settings: -Limit external sharing using domains -Prevent external users from sharing files, folders, and sites that they don’t own -External users must accept sharing invitations using the same account that the invitations were sent to +- Limit external sharing using domains +- Prevent external users from sharing files, folders, and sites that they don’t own +- External users must accept sharing invitations using the same account that the invitations were sent to The script is related to and more described in a Wiki article SharePoint Online Sharing settings with CSOM. - + ### How to use? -Download and open the .ps1 file. -Add correct libraries: + +- Download and open the .ps1 file. +- Add correct libraries: ```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" -```Enter the correct url and admin login: - +``` +- Enter the correct url and admin login: ```PowerShell #Enter the data @@ -31,4 +32,5 @@ $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $RequireAcceptingAccountMatchInvitedAccount=$true -``` Run the script +``` +- Run the script From bf6aea4fc1581480ea1ea7a53ad82fd9e627df0d Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:18:22 +0100 Subject: [PATCH 060/114] Update description.md --- .../description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tenant Settings/Force external users to accept sharing invitations with the same account/description.md b/Tenant Settings/Force external users to accept sharing invitations with the same account/description.md index 9be5637b..b960b28e 100644 --- a/Tenant Settings/Force external users to accept sharing invitations with the same account/description.md +++ b/Tenant Settings/Force external users to accept sharing invitations with the same account/description.md @@ -9,7 +9,7 @@ It is one of the 3 additional settings: -The script is related to and more described in a Wiki article SharePoint Online Sharing settings with CSOM. +The script is related to and more described in a Wiki article [SharePoint Online Sharing settings with CSOM](https://social.technet.microsoft.com/wiki/contents/articles/39365.sharepoint-online-sharing-settings-with-csom). From 58edb6a18dfaa51856f78dab05dcc427eeedbe41 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:18:57 +0100 Subject: [PATCH 061/114] Update RequireAcceptingAccountMatchInvitedAccount.ps1 --- ...ireAcceptingAccountMatchInvitedAccount.ps1 | 54 ++++++++----------- 1 file changed, 21 insertions(+), 33 deletions(-) diff --git a/Tenant Settings/Force external users to accept sharing invitations with the same account/RequireAcceptingAccountMatchInvitedAccount.ps1 b/Tenant Settings/Force external users to accept sharing invitations with the same account/RequireAcceptingAccountMatchInvitedAccount.ps1 index 49b50751..1b8470c6 100644 --- a/Tenant Settings/Force external users to accept sharing invitations with the same account/RequireAcceptingAccountMatchInvitedAccount.ps1 +++ b/Tenant Settings/Force external users to accept sharing invitations with the same account/RequireAcceptingAccountMatchInvitedAccount.ps1 @@ -1,49 +1,37 @@ -function Set-SiteColl -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SiteColl{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password, - [Parameter(Mandatory=$true,Position=4)] - $RequireAcceptingAccountMatchInvitedAccount - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - $spoTenant.RequireAcceptingAccountMatchInvitedAccount=$RequireAcceptingAccountMatchInvitedAccount - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - Write-Output $spoTenant - + [Parameter(Mandatory=$true,Position=4)] + $RequireAcceptingAccountMatchInvitedAccount + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.RequireAcceptingAccountMatchInvitedAccount=$RequireAcceptingAccountMatchInvitedAccount + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" - - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $RequireAcceptingAccountMatchInvitedAccount=$true - - - - -Set-SiteColl -Username $username -Url $Url -password $AdminPassword -RequireAcceptingAccountMatchInvitedAccount $RequireAcceptingAccountMatchInvitedAccount \ No newline at end of file +Set-SiteColl -Username $username -Url $Url -password $AdminPassword -RequireAcceptingAccountMatchInvitedAccount $RequireAcceptingAccountMatchInvitedAccount From f778652597ffa2ee6f232b84a34bc9f957468311 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:21:11 +0100 Subject: [PATCH 062/114] Update README.md --- .../README.md | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/Tenant Settings/Get SharePoint Online tenant properties using Powershell and CSOM/README.md b/Tenant Settings/Get SharePoint Online tenant properties using Powershell and CSOM/README.md index 2bc03c88..bd1e3b59 100644 --- a/Tenant Settings/Get SharePoint Online tenant properties using Powershell and CSOM/README.md +++ b/Tenant Settings/Get SharePoint Online tenant properties using Powershell and CSOM/README.md @@ -152,22 +152,15 @@ ServerObjectIsNull : False TypedObject - - - - - Expected results +## Expected results - - - + - +## How to use? -### How to use? -Download and open the .ps1 file. -Add correct libraries: +- Download and open the .ps1 file. +- Add correct libraries: ```PowerShell @@ -175,7 +168,7 @@ Add correct libraries: Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" ``` -Enter the correct url and admin login: +- Enter the correct url and admin login: ```PowerShell @@ -185,5 +178,5 @@ $Url="https://TENANT-admin.sharepoint.com" ``` - Run the script +- Run the script From 458afeab21e1faad4fb1505d904f10abf423e0f0 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:21:47 +0100 Subject: [PATCH 063/114] Update tenantProps.ps1 --- .../tenantProps.ps1 | 38 +++++++------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/Tenant Settings/Get SharePoint Online tenant properties using Powershell and CSOM/tenantProps.ps1 b/Tenant Settings/Get SharePoint Online tenant properties using Powershell and CSOM/tenantProps.ps1 index 91bf582e..5288f776 100644 --- a/Tenant Settings/Get SharePoint Online tenant properties using Powershell and CSOM/tenantProps.ps1 +++ b/Tenant Settings/Get SharePoint Online tenant properties using Powershell and CSOM/tenantProps.ps1 @@ -1,43 +1,33 @@ -function Get-SiteColl -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SiteColl{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password - ) + ) + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - - Write-Output $spoTenant + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" #Microsoft.Online.SharePoint.TenantAdministration.SiteProperties.AllowLimitedAccess - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" - - - -Get-SiteColl -Username $username -Url $Url -password $AdminPassword \ No newline at end of file +Get-SiteColl -Username $username -Url $Url -password $AdminPassword From fd85618adcebf7e49632c5f8c330eb175d05548b Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:23:24 +0100 Subject: [PATCH 064/114] Update description.md --- .../description.md | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/description.md b/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/description.md index 92bd29fa..d2189e8a 100644 --- a/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/description.md +++ b/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/description.md @@ -8,23 +8,19 @@ The script uses CSOM and requires SharePoint Online SDK. This button will be removed with the script: - - - - - + ### How to use? -Download and open the .ps1 file. -Add correct SharePoint Online SDK libraries: - +- Download and open the ```.ps1``` file. +- Add correct SharePoint Online SDK libraries: ```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" -``` Enter the correct url, the setting for the sync button, and admin login. You will be additionally prompted for the password. Do not enter it in the file: - +``` + +- Enter the correct url, the setting for the sync button, and admin login. You will be additionally prompted for the password. Do not enter it in the file: ```PowerShell #Enter the data @@ -34,6 +30,5 @@ $Url="https://TENANT-admin.sharepoint.com" $HideSyncButtonOnODB=$true #Whether the sync button should be hidden ``` - - Run the script +- Run the script From a9a19b9b3568ec4a45f6b6495beb81293f22e09c Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:24:01 +0100 Subject: [PATCH 065/114] Update HideSyncButtonOnODB.ps1 --- .../HideSyncButtonOnODB.ps1 | 51 ++++++++----------- 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/HideSyncButtonOnODB.ps1 b/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/HideSyncButtonOnODB.ps1 index 9a4926cd..6e40036d 100644 --- a/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/HideSyncButtonOnODB.ps1 +++ b/Tenant Settings/Hide OneDrive for Business Sync button using PS and CSOM/HideSyncButtonOnODB.ps1 @@ -1,48 +1,37 @@ -function Set-SPOTenant -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SPOTenant{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [Bool]$HideSyncButtonOnODB - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - $spoTenant.HideSyncButtonOnODB=$HideSyncButtonOnODB - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - Write-Output $spoTenant - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.HideSyncButtonOnODB=$HideSyncButtonOnODB + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" - - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="arleta@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $HideSyncButtonOnODB=$true #Whether the sync button should be hidden - - - -Set-SPOTenant -Username $username -Url $Url -password $AdminPassword -HideSyncButtonOnODB $HideSyncButtonOnODB \ No newline at end of file +Set-SPOTenant -Username $username -Url $Url -password $AdminPassword -HideSyncButtonOnODB $HideSyncButtonOnODB From 352cf48b2141fdb0f4d0a72c5a5d5481bfb55ab1 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:25:25 +0100 Subject: [PATCH 066/114] Update description.md --- .../description.md | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/Tenant Settings/Modify external sharing setting/description.md b/Tenant Settings/Modify external sharing setting/description.md index 03e80910..6c4018ca 100644 --- a/Tenant Settings/Modify external sharing setting/description.md +++ b/Tenant Settings/Modify external sharing setting/description.md @@ -5,27 +5,22 @@ It requires SharePoint Online SDK. The script is part of and more described in a TechNet Wiki [SharePoint Online Sharing settings with CSOM](https://social.technet.microsoft.com/wiki/contents/articles/39365.sharepoint-online-sharing-settings-with-csom.aspx?Sort=MostRecent&PageIndex=1) article. +## How to use? +- Download and open the .ps1 file. +- Add correct libraries: - - - - - -###How to use? -Download and open the .ps1 file. -Add correct libraries: - - ```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" -```Enter the correct url and admin login: +``` +- Enter the correct url and admin login: ```PowerShell #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $SharingCapability="Disabled" # Disabled, ExternalUserSharingOnly, ExternalUserAndGuestSharing, ExistingExternalUserSharingOnly -```Run the script +``` +- Run the script From 732228c77f560af7c63f42f604a6fb9fedabeb3c Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:26:38 +0100 Subject: [PATCH 067/114] Update SharingCapability.ps1 --- .../SharingCapability.ps1 | 56 ++++++++----------- 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/Tenant Settings/Modify external sharing setting/SharingCapability.ps1 b/Tenant Settings/Modify external sharing setting/SharingCapability.ps1 index 51542efa..f59c6674 100644 --- a/Tenant Settings/Modify external sharing setting/SharingCapability.ps1 +++ b/Tenant Settings/Modify external sharing setting/SharingCapability.ps1 @@ -1,50 +1,38 @@ -function Set-SiteColl -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SiteColl{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password, - [Parameter(Mandatory=$true,Position=4)] - $SharingCapability - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - - $spoTenant.SharingCapability=[Microsoft.Online.SharePoint.TenantManagement.SharingCapabilities]::$SharingCapability - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - Write-Output $spoTenant - + [Parameter(Mandatory=$true,Position=4)] + $SharingCapability + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + + $spoTenant.SharingCapability=[Microsoft.Online.SharePoint.TenantManagement.SharingCapabilities]::$SharingCapability + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" - - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $SharingCapability="Disabled" # Disabled, ExternalUserSharingOnly, ExternalUserAndGuestSharing, ExistingExternalUserSharingOnly - - - - -Set-SiteColl -Username $username -Url $Url -password $AdminPassword -SharingCapability $SharingCapability \ No newline at end of file +Set-SiteColl -Username $username -Url $Url -password $AdminPassword -SharingCapability $SharingCapability From dc7a58ec49544070db3cbb4d0ff442685a9c240d Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:28:10 +0100 Subject: [PATCH 068/114] Update description.md --- .../description.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Tenant Settings/Notify OneDrive for Business owner if anonymous link to their content is created/description.md b/Tenant Settings/Notify OneDrive for Business owner if anonymous link to their content is created/description.md index 626a5826..09e4549a 100644 --- a/Tenant Settings/Notify OneDrive for Business owner if anonymous link to their content is created/description.md +++ b/Tenant Settings/Notify OneDrive for Business owner if anonymous link to their content is created/description.md @@ -1,22 +1,22 @@ Short Powershell script that enables or disables a setting to send emails to OneDrive for Business owners when someone creates an anonymous link to the ODB owner's content. It uses CSOm and requires SharePoint Online SDK. The script is part of and more explained in a Technet Wiki article: -OneDrive for Business notification settings with Powershell +[OneDrive for Business notification settings with Powershell](https://social.technet.microsoft.com/wiki/contents/articles/39385.onedrive-for-business-notifications-with-powershell.aspx) -###How to use? -Download and open the .ps1 file. -Add correct libraries: - +## How to use? +- Download and open the .ps1 file. +- Add correct libraries: + ```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" ``` +- Enter the correct url and admin login: -Enter the correct url and admin login: ```PowerShell #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString @@ -25,5 +25,4 @@ $Url="https://TENANT-admin.sharepoint.com" $OwnerAnonymousNotification=$true #Whether ODB owner should be notified when anonymous link is created or changed ``` - - Run the script +- Run the script From 8fa7ffc7c80d33b39e7a8a8768fae5a9bb695341 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:28:44 +0100 Subject: [PATCH 069/114] Update OwnerAnonymousNotification.ps1 --- .../OwnerAnonymousNotification.ps1 | 53 ++++++++----------- 1 file changed, 21 insertions(+), 32 deletions(-) diff --git a/Tenant Settings/Notify OneDrive for Business owner if anonymous link to their content is created/OwnerAnonymousNotification.ps1 b/Tenant Settings/Notify OneDrive for Business owner if anonymous link to their content is created/OwnerAnonymousNotification.ps1 index 6afcce9e..23282e52 100644 --- a/Tenant Settings/Notify OneDrive for Business owner if anonymous link to their content is created/OwnerAnonymousNotification.ps1 +++ b/Tenant Settings/Notify OneDrive for Business owner if anonymous link to their content is created/OwnerAnonymousNotification.ps1 @@ -1,41 +1,33 @@ -function Set-SPOTenant -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SPOTenant{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [Bool]$OwnerAnonymousNotification - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - $spoTenant.NotificationsInOneDriveForBusinessEnabled =$true - $spoTenant.OwnerAnonymousNotification=$OwnerAnonymousNotification - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - Write-Output $spoTenant - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.NotificationsInOneDriveForBusinessEnabled =$true + $spoTenant.OwnerAnonymousNotification=$OwnerAnonymousNotification + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" - - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString @@ -43,7 +35,4 @@ $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $OwnerAnonymousNotification=$true #Whether ODB owner should be notified when anonymous link is created or changed - - - -Set-SPOTenant -Username $username -Url $Url -password $AdminPassword -OwnerAnonymousNotification $OwnerAnonymousNotification \ No newline at end of file +Set-SPOTenant -Username $username -Url $Url -password $AdminPassword -OwnerAnonymousNotification $OwnerAnonymousNotification From 4cca8fa4dd09d2a0138f36ea65da53ca36ef5543 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:30:18 +0100 Subject: [PATCH 070/114] Update description.md --- .../description.md | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/description.md b/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/description.md index 7433eab2..a7c3e28e 100644 --- a/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/description.md +++ b/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/description.md @@ -2,23 +2,20 @@ Short Powershell script that enables or disables a setting to send emails to One It uses CSOM and requires SharePoint Online SDK. The script is part of and more explained in a Technet Wiki article: -OneDrive for Business notification settings with Powershell +[OneDrive for Business notification settings with Powershell](https://social.technet.microsoft.com/wiki/contents/articles/39385.onedrive-for-business-notifications-with-powershell.aspx) - +## How to use? - - -### How to use? -Download and open the .ps1 file. -Add correct libraries: - +- Download and open the .ps1 file. +- Add correct libraries: ```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" -``` Enter the correct url and admin login: - +``` + +- ter the correct url and admin login: ```PowerShell #Enter the data @@ -28,4 +25,4 @@ $Url="https://TENANT-admin.sharepoint.com" $NotifyOwnersWhenItemsReshare=$true #Whether ODB owner should be notified the content is reshared with external users ``` - Run the script +- Run the script From fda0cd0b204cd5b95bb483a955b96bc1d8f9669f Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:31:04 +0100 Subject: [PATCH 071/114] Update NotifyOwnersWhenItemsReshared.ps1 --- .../NotifyOwnersWhenItemsReshared.ps1 | 51 ++++++++----------- 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/NotifyOwnersWhenItemsReshared.ps1 b/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/NotifyOwnersWhenItemsReshared.ps1 index 7db9720c..7bf757ae 100644 --- a/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/NotifyOwnersWhenItemsReshared.ps1 +++ b/Tenant Settings/Notify OneDrive for Business owner if their content is reshared/NotifyOwnersWhenItemsReshared.ps1 @@ -1,48 +1,37 @@ -function Set-SPOTenant -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SPOTenant{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [Bool]$NotifyOwnersWhenItemsReshared - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - $spoTenant.NotifyOwnersWhenItemsReshared=$NotifyOwnersWhenItemsReshared - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - Write-Output $spoTenant - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.NotifyOwnersWhenItemsReshared=$NotifyOwnersWhenItemsReshared + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" - - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $NotifyOwnersWhenItemsReshared=$true #Whether ODB owner should be notified the content is reshared with external users - - - -Set-SPOTenant -Username $username -Url $Url -password $AdminPassword -NotifyOwnersWhenItemsReshared $NotifyOwnersWhenItemsReshared \ No newline at end of file +Set-SPOTenant -Username $username -Url $Url -password $AdminPassword -NotifyOwnersWhenItemsReshared $NotifyOwnersWhenItemsReshared From e2242a5f52f2002b2da3f84dd0e0f80334d465a7 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:33:05 +0100 Subject: [PATCH 072/114] Update description.md --- .../description.md | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/Tenant Settings/Prevent external users from resharing/description.md b/Tenant Settings/Prevent external users from resharing/description.md index ee55c795..abd5f1a8 100644 --- a/Tenant Settings/Prevent external users from resharing/description.md +++ b/Tenant Settings/Prevent external users from resharing/description.md @@ -2,31 +2,26 @@ Short PowerShell script to prevent external users from sharing files, folders, a It is one of the 3 additional settings: -Limit external sharing using domains -Prevent external users from sharing files, folders, and sites that they don’t own -External users must accept sharing invitations using the same account that the invitations were sent to +- Limit external sharing using domains +- Prevent external users from sharing files, folders, and sites that they don’t own +- External users must accept sharing invitations using the same account that the invitations were sent to + - - -The script is related to and more described in a Wiki article SharePoint Online Sharing settings with CSOM. +The script is related to and more described in a Wiki article [SharePoint Online Sharing settings with CSOM](https://social.technet.microsoft.com/wiki/contents/articles/39365.sharepoint-online-sharing-settings-with-csom). - +## How to use? -How to use? -Download and open the .ps1 file. -Add correct libraries: +- Download and open the .ps1 file. +- Add correct libraries: - ```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" ``` - -Enter the correct url and admin login: - +- Enter the correct url and admin login: ```PowerShell #Enter the data @@ -35,8 +30,7 @@ $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $PreventExternalUsersFromResharing=$true ``` - - Run the script +- Run the script From 51d00666245a89381865b21a0328c7c0260543b0 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:33:50 +0100 Subject: [PATCH 073/114] Update PreventExternalUsersFromResharing.ps1 --- .../PreventExternalUsersFromResharing.ps1 | 54 ++++++++----------- 1 file changed, 21 insertions(+), 33 deletions(-) diff --git a/Tenant Settings/Prevent external users from resharing/PreventExternalUsersFromResharing.ps1 b/Tenant Settings/Prevent external users from resharing/PreventExternalUsersFromResharing.ps1 index 763cc092..13ea638e 100644 --- a/Tenant Settings/Prevent external users from resharing/PreventExternalUsersFromResharing.ps1 +++ b/Tenant Settings/Prevent external users from resharing/PreventExternalUsersFromResharing.ps1 @@ -1,40 +1,32 @@ -function Set-SiteColl -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SiteColl{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password, - [Parameter(Mandatory=$true,Position=4)] - $PreventExternalUsersFromResharing - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - $spoTenant.PreventExternalUsersFromResharing=$PreventExternalUsersFromResharing - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - Write-Output $spoTenant - + [Parameter(Mandatory=$true,Position=4)] + $PreventExternalUsersFromResharing + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.PreventExternalUsersFromResharing=$PreventExternalUsersFromResharing + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" - - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString @@ -42,8 +34,4 @@ $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $PreventExternalUsersFromResharing=$true - - - - -Set-SiteColl -Username $username -Url $Url -password $AdminPassword -PreventExternalUsersFromResharing $PreventExternalUsersFromResharing \ No newline at end of file +Set-SiteColl -Username $username -Url $Url -password $AdminPassword -PreventExternalUsersFromResharing $PreventExternalUsersFromResharing From 05e03cbf35f9cba7de1b47f67539a09187a39192 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:35:57 +0100 Subject: [PATCH 074/114] Update description.md --- .../description.md | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/Tenant Settings/Set Anonymous access for SPO tenant using PS and CSOM/description.md b/Tenant Settings/Set Anonymous access for SPO tenant using PS and CSOM/description.md index 98555208..b7536e6e 100644 --- a/Tenant Settings/Set Anonymous access for SPO tenant using PS and CSOM/description.md +++ b/Tenant Settings/Set Anonymous access for SPO tenant using PS and CSOM/description.md @@ -6,39 +6,33 @@ For folders you can choose between View and Edit. For files you can choose between -Edit - anonymous links will allow to edit documents +**Edit** - anonymous links will allow to edit documents -View - anonymous links will allow only to view documents +**View** - anonymous links will allow only to view documents -None - users can decide about the access level on per-document basis (no global setting) +**None** - users can decide about the access level on per-document basis (no global setting) -The script is related to and more described in a Wiki article SharePoint Online Sharing settings with CSOM. +The script is related to and more described in a Wiki article [SharePoint Online Sharing settings with CSOM](https://social.technet.microsoft.com/wiki/contents/articles/39365.sharepoint-online-sharing-settings-with-csom). It requires SharePoint Online SDK. - - - +## How to use? -### How to use? -Download and open the .ps1 file. -Add correct libraries: +- Download and open the .ps1 file. +- Add correct libraries: - ```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" ``` - -Enter the correct url and admin login: +- Enter the correct url and admin login: - ```PowerShell #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString @@ -47,5 +41,5 @@ $Url="https://TENANT-admin.sharepoint.com" $LinkType="View" #Edit, View or None $FolderLinkType="Edit" # View or Edit ``` -Run the script +- Run the script From c3733cefcae94561f636401bfa43e734b5f69d0d Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:36:38 +0100 Subject: [PATCH 075/114] Update SetAnonymousAccess.ps1 --- .../SetAnonymousAccess.ps1 | 56 ++++++++----------- 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/Tenant Settings/Set Anonymous access for SPO tenant using PS and CSOM/SetAnonymousAccess.ps1 b/Tenant Settings/Set Anonymous access for SPO tenant using PS and CSOM/SetAnonymousAccess.ps1 index 7e563b89..c296d84d 100644 --- a/Tenant Settings/Set Anonymous access for SPO tenant using PS and CSOM/SetAnonymousAccess.ps1 +++ b/Tenant Settings/Set Anonymous access for SPO tenant using PS and CSOM/SetAnonymousAccess.ps1 @@ -1,45 +1,37 @@ -function Set-SiteColl -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SiteColl{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [string]$LinkType, - [Parameter(Mandatory=$true,Position=5)] + [Parameter(Mandatory=$true,Position=5)] [string]$FolderLinkType - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - $spoTenant.SharingCapability=[Microsoft.Online.SharePoint.TenantManagement.SharingCapabilities]::ExternalUserAndGuestSharing - $spoTenant.FileAnonymousLinkType=[Microsoft.SharePoint.Client.AnonymousLinkType]::$LinkType - $spoTenant.FolderAnonymousLinkType=$FolderLinkType - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - Write-Output $spoTenant - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.SharingCapability=[Microsoft.Online.SharePoint.TenantManagement.SharingCapabilities]::ExternalUserAndGuestSharing + $spoTenant.FileAnonymousLinkType=[Microsoft.SharePoint.Client.AnonymousLinkType]::$LinkType + $spoTenant.FolderAnonymousLinkType=$FolderLinkType + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" - - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" @@ -47,6 +39,4 @@ $Url="https://TENANT-admin.sharepoint.com" $LinkType="View" #Edit, View or None $FolderLinkType="Edit" # View or Edit - - -Set-SiteColl -Username $username -Url $Url -password $AdminPassword -LinkType $LinkType -FolderLinkType $FolderLinkType \ No newline at end of file +Set-SiteColl -Username $username -Url $Url -password $AdminPassword -LinkType $LinkType -FolderLinkType $FolderLinkType From 4bfd513da1ffee66d873024fe9a4cad4adb64e38 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:38:17 +0100 Subject: [PATCH 076/114] Update description.md --- .../description.md | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/Tenant Settings/Set anonymous link access level for SPO tenant/description.md b/Tenant Settings/Set anonymous link access level for SPO tenant/description.md index f7779f59..05a6237f 100644 --- a/Tenant Settings/Set anonymous link access level for SPO tenant/description.md +++ b/Tenant Settings/Set anonymous link access level for SPO tenant/description.md @@ -1,36 +1,27 @@ After you have enabled anonymous links for SharePoint Online tenant, you can set what access level the links can give: edit or only view. The setting is global for the entire tenant. You can choose between -Edit - anonymous links will allow to edit documents +**Edit** - anonymous links will allow to edit documents -View - anonymous links will allow only to view documents +**View** - anonymous links will allow only to view documents -None - users can decide about the access level on per-document basis (no global setting) +**None** - users can decide about the access level on per-document basis (no global setting) - - - - -The script is related to and more described in a Wiki article SharePoint Online Sharing settings with CSOM. +The script is related to and more described in a Wiki article [SharePoint Online Sharing settings with CSOM](https://social.technet.microsoft.com/wiki/contents/articles/39365.sharepoint-online-sharing-settings-with-csom). It requires SharePoint Online SDK. +## How to use? +- Download and open the ```.ps1``` file. +- Add correct libraries: - - - -### How to use? -Download and open the .ps1 file. -Add correct libraries: - - ```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" ``` +- Enter the correct url and admin login: -Enter the correct url and admin login: ```PowerShell #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString @@ -38,4 +29,4 @@ $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $LinkType="View" #Edit, View or None ``` -Run the script +- Run the script From 299e4f182b6efd8fbabd5a0f4f00abbb78c24c5d Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:38:50 +0100 Subject: [PATCH 077/114] Update AnonymousLinkType.ps1 --- .../AnonymousLinkType.ps1 | 51 ++++++++----------- 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/Tenant Settings/Set anonymous link access level for SPO tenant/AnonymousLinkType.ps1 b/Tenant Settings/Set anonymous link access level for SPO tenant/AnonymousLinkType.ps1 index 1f8d950a..27bfbc11 100644 --- a/Tenant Settings/Set anonymous link access level for SPO tenant/AnonymousLinkType.ps1 +++ b/Tenant Settings/Set anonymous link access level for SPO tenant/AnonymousLinkType.ps1 @@ -1,48 +1,37 @@ -function Set-SiteColl -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SiteColl{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [string]$LinkType - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - $spoTenant.FileAnonymousLinkType=[Microsoft.SharePoint.Client.AnonymousLinkType]::$LinkType - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - Write-Output $spoTenant - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.FileAnonymousLinkType=[Microsoft.SharePoint.Client.AnonymousLinkType]::$LinkType + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" - - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $LinkType="View" #Edit, View or None - - - -Set-SiteColl -Username $username -Url $Url -password $AdminPassword -LinkType $LinkType \ No newline at end of file +Set-SiteColl -Username $username -Url $Url -password $AdminPassword -LinkType $LinkType From 0a62794055c36b7751f0a511b6981630f8497f23 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:40:41 +0100 Subject: [PATCH 078/114] Update description.md --- .../description.md | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/Tenant Settings/Set default link type for SharePoint Online tenant sharing settings/description.md b/Tenant Settings/Set default link type for SharePoint Online tenant sharing settings/description.md index bb6c5269..d412abb3 100644 --- a/Tenant Settings/Set default link type for SharePoint Online tenant sharing settings/description.md +++ b/Tenant Settings/Set default link type for SharePoint Online tenant sharing settings/description.md @@ -1,37 +1,24 @@ Short Powershell script to modify the Sharing Link Type setting in SharePoint Admin Center via DefaultSharingLinkType property of Tenant object - - The setting can be changed also via SharePoint Admin Center: + +The script is related to and more described in a Wiki article [SharePoint Online Sharing settings with CSOM](https://social.technet.microsoft.com/wiki/contents/articles/39365.sharepoint-online-sharing-settings-with-csom). - - -The script is related to and more described in a Wiki article SharePoint Online Sharing settings with CSOM. - - - - +## How to use? -How to use? -Download and open the .ps1 file. -Add correct libraries: +- Download and open the .ps1 file. +- Add correct libraries: - ```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" ``` +- Enter the correct url and admin login: - - - -Enter the correct url and admin login: - - ```PowerShell #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString @@ -39,6 +26,5 @@ $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $SharingLinkType="None" #None, Direct, Internal, AnonymousAccess ``` - - Run the script +- Run the script From 06e4d6f22e2ab83d8052bba99eb7d4f381f3cb88 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:41:14 +0100 Subject: [PATCH 079/114] Update description.md --- .../description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tenant Settings/Set default link type for SharePoint Online tenant sharing settings/description.md b/Tenant Settings/Set default link type for SharePoint Online tenant sharing settings/description.md index d412abb3..3b09c653 100644 --- a/Tenant Settings/Set default link type for SharePoint Online tenant sharing settings/description.md +++ b/Tenant Settings/Set default link type for SharePoint Online tenant sharing settings/description.md @@ -8,7 +8,7 @@ The script is related to and more described in a Wiki article [SharePoint Online ## How to use? -- Download and open the .ps1 file. +- Download and open the ```.ps1``` file. - Add correct libraries: ```PowerShell From cd3e518f1c4f675cfb0f2877031b029ef7a4976d Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:41:59 +0100 Subject: [PATCH 080/114] Update SharingLinkType.ps1 --- .../SharingLinkType.ps1 | 52 +++++++------------ 1 file changed, 20 insertions(+), 32 deletions(-) diff --git a/Tenant Settings/Set default link type for SharePoint Online tenant sharing settings/SharingLinkType.ps1 b/Tenant Settings/Set default link type for SharePoint Online tenant sharing settings/SharingLinkType.ps1 index 1647645a..52d54c73 100644 --- a/Tenant Settings/Set default link type for SharePoint Online tenant sharing settings/SharingLinkType.ps1 +++ b/Tenant Settings/Set default link type for SharePoint Online tenant sharing settings/SharingLinkType.ps1 @@ -1,49 +1,37 @@ -function Set-SiteColl -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SiteColl{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] $SharingLinkType - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - $spoTenant.DefaultSharingLinkType= [Microsoft.Online.SharePoint.TenantManagement.SharingLinkType]::$SharingLinkType - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - Write-Output $spoTenant - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.DefaultSharingLinkType= [Microsoft.Online.SharePoint.TenantManagement.SharingLinkType]::$SharingLinkType + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" - - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $SharingLinkType="None" #None, Direct, Internal, AnonymousAccess - - - - -Set-SiteColl -Username $username -Url $Url -password $AdminPassword -SharingLinkType $SharingLinkType \ No newline at end of file +Set-SiteColl -Username $username -Url $Url -password $AdminPassword -SharingLinkType $SharingLinkType From 2b2266b4561976bd49604d622d360a7df0a47e50 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:43:13 +0100 Subject: [PATCH 081/114] Update description.md --- .../description.md | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/Tenant Settings/Set expiration for anonymous links in SPO/description.md b/Tenant Settings/Set expiration for anonymous links in SPO/description.md index 45ac040e..563e99b8 100644 --- a/Tenant Settings/Set expiration for anonymous links in SPO/description.md +++ b/Tenant Settings/Set expiration for anonymous links in SPO/description.md @@ -2,27 +2,21 @@ After you have enabled anonymous links for SharePoint Online tenant, you can set It requires SharePoint Online SDK. - - -The script is related to and more described in a Wiki article SharePoint Online Sharing settings with CSOM. +The script is related to and more described in a Wiki article [SharePoint Online Sharing settings with CSOM](https://social.technet.microsoft.com/wiki/contents/articles/39365.sharepoint-online-sharing-settings-with-csom). - +## How to use? -How to use? -Download and open the .ps1 file. -Add correct libraries: +- Download and open the .ps1 file. +- Add correct libraries: - ```PowerShell #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" ``` - -Enter the correct url and admin login: +- Enter the correct url and admin login: - ```PowerShell #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString @@ -30,7 +24,6 @@ $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $HowManyDaysToExpire=17 #Choose 0 if the links should not expire ``` - -Run the script +- Run the script From 6dfaf4c93a2f1c0f8657b815ead62383cbd842c4 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:43:50 +0100 Subject: [PATCH 082/114] Update SetExpirationForAnonymousLinks (1).ps1 --- .../SetExpirationForAnonymousLinks (1).ps1 | 51 ++++++++----------- 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/Tenant Settings/Set expiration for anonymous links in SPO/SetExpirationForAnonymousLinks (1).ps1 b/Tenant Settings/Set expiration for anonymous links in SPO/SetExpirationForAnonymousLinks (1).ps1 index fc87dbfd..8213264c 100644 --- a/Tenant Settings/Set expiration for anonymous links in SPO/SetExpirationForAnonymousLinks (1).ps1 +++ b/Tenant Settings/Set expiration for anonymous links in SPO/SetExpirationForAnonymousLinks (1).ps1 @@ -1,48 +1,37 @@ -function Set-SiteColl -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Set-SiteColl{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [int]$HowManyDaysToExpire - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - - $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - $spoTenant.RequireAnonymousLinksExpireInDays=$HowManyDaysToExpire - $ctx.Load($spoTenant) - $ctx.ExecuteQuery() - Write-Output $spoTenant - + ) + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + + $spoTenant= New-Object Microsoft.Online.SharePoint.TenantAdministration.Tenant($Ctx) + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + $spoTenant.RequireAnonymousLinksExpireInDays=$HowManyDaysToExpire + $ctx.Load($spoTenant) + $ctx.ExecuteQuery() + Write-Output $spoTenant } - - - #Paths to SDK Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" Add-Type -Path "C:\Program Files\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.Online.SharePoint.Client.Tenant.dll" - - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="admin@TENANT.onmicrosoft.com" $Url="https://TENANT-admin.sharepoint.com" $HowManyDaysToExpire=17 #Choose 0 if the links should not expire - - - -Set-SiteColl -Username $username -Url $Url -password $AdminPassword -HowManyDaysToExpire $HowManyDaysToExpire \ No newline at end of file +Set-SiteColl -Username $username -Url $Url -password $AdminPassword -HowManyDaysToExpire $HowManyDaysToExpire From 00d8e31143a0fafb4fec61ae0a8d53a5695ccea5 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:47:09 +0100 Subject: [PATCH 083/114] Update description.md --- .../description.md | 33 ++++--------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/User Profiles/Export all user profiles using Powershell/description.md b/User Profiles/Export all user profiles using Powershell/description.md index 06ca6781..34f308f6 100644 --- a/User Profiles/Export all user profiles using Powershell/description.md +++ b/User Profiles/Export all user profiles using Powershell/description.md @@ -1,43 +1,24 @@ The script retrieves all user profile properties for SharePoint Online users within one site. - - The script uses the following endpoint to retrieve a user property: -/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='' +```/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v=''``` - For more details, please consult: -User profiles REST API reference +[User profiles REST API reference](https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-rest-reference/dn790354(v=office.15)?redirectedfrom=MSDN) - - - - -How to use? - +## How to use? Download, open the script and enter correct values in the following lines: -PowerShell +```PowerShell $SiteUrl="https://t321.sharepoint.com" $AdminCenter="https://t321-admin.sharepoint.com" $ExportTo="C:\Users\Arletka\Documents\SpUsers3.csv" + ``` - -Expected results +## Expected results - - - - - - - - - - - - + From 7a07a455cd2e0edaa2b06e9fd022bbee4673f378 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:48:10 +0100 Subject: [PATCH 084/114] Update ExportSPOUserAllPropertiesWithREST.ps1 --- .../ExportSPOUserAllPropertiesWithREST.ps1 | 81 +++++++------------ 1 file changed, 28 insertions(+), 53 deletions(-) diff --git a/User Profiles/Export all user profiles using Powershell/ExportSPOUserAllPropertiesWithREST.ps1 b/User Profiles/Export all user profiles using Powershell/ExportSPOUserAllPropertiesWithREST.ps1 index 17b1c888..374e29b6 100644 --- a/User Profiles/Export all user profiles using Powershell/ExportSPOUserAllPropertiesWithREST.ps1 +++ b/User Profiles/Export all user profiles using Powershell/ExportSPOUserAllPropertiesWithREST.ps1 @@ -1,58 +1,36 @@ -function Get-SPOUserProperty -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SPOUserProperty{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, - [Parameter(Mandatory=$true,Position=2)] + [Parameter(Mandatory=$true,Position=2)] $password, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string] $url, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [string] $userLogin - ) - - - - $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $RestUrl=$url+"/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='i:0%23.f|membership|"+$userLogin+"'" - - $request = [System.Net.WebRequest]::Create($RESTUrl) - $request.Credentials = $Credentials - $request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f") - $request.Accept = "application/json;odata=verbose" - [Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get - $request.Method=$Method - $response = $request.GetResponse() - $requestStream = $response.GetResponseStream() - $read = New-Object System.IO.StreamReader $requestStream - $data=$read.ReadToEnd() - $results = $data | ConvertFrom-Json - - - - return ($results.d.userprofileproperties.results) - - - - - - - - - } - - - - - - - - + ) + + $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $RestUrl=$url+"/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='i:0%23.f|membership|"+$userLogin+"'" + + $request = [System.Net.WebRequest]::Create($RESTUrl) + $request.Credentials = $Credentials + $request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f") + $request.Accept = "application/json;odata=verbose" + [Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get + $request.Method=$Method + $response = $request.GetResponse() + $requestStream = $response.GetResponseStream() + $read = New-Object System.IO.StreamReader $requestStream + $data=$read.ReadToEnd() + $results = $data | ConvertFrom-Json + + return ($results.d.userprofileproperties.results) +} #Paths to SDK Add-Type -Path "H:\Libraries\Microsoft.SharePoint.Client.dll" Add-Type -Path "H:\Libraries\Microsoft.SharePoint.Client.Runtime.dll" - #Enter the data @@ -65,16 +43,13 @@ $cred=Get-Credential Connect-SPOService $AdminCenter -Credential $cred $users=Get-SPOUser -Site $SiteUrl - -foreach($user in $users) -{ +foreach($user in $users){ Write-Verbose $user.LoginName $props=Get-SPOUserProperty -Username $cred.UserName -Url $SiteUrl -password $cred.Password -userLogin $user.LoginName $uss=New-Object PSObject - foreach($prop in $props) - { + + foreach($prop in $props){ $uss | Add-Member -MemberType NoteProperty -Name $prop.Key -Value $prop.Value - } $uss | Export-Csv -Path $ExportTo -Append -Force From eb76ad512557f99861a654464b484b4c763591ca Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:49:39 +0100 Subject: [PATCH 085/114] Update description.md --- .../description.md | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/User Profiles/Get MUI Languages for multiple users using REST/description.md b/User Profiles/Get MUI Languages for multiple users using REST/description.md index 150e60d4..8cf1df11 100644 --- a/User Profiles/Get MUI Languages for multiple users using REST/description.md +++ b/User Profiles/Get MUI Languages for multiple users using REST/description.md @@ -1,27 +1,18 @@ The script retrieves a SPS-MUILanguages property for specified SharePoint Online users. - - The script uses the following endpoint to retrieve a user property: -/getuserprofilepropertyfor(accountname=@v, propertyname='')?@v='' - - +```/getuserprofilepropertyfor(accountname=@v, propertyname='')?@v=''``` For more details, please consult: -User profiles REST API reference - - - - +[User profiles REST API reference](https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-rest-reference/dn790354(v=office.15)?redirectedfrom=MSDN) -### How to use? +## How to use? - Download, open the script and enter correct values in the following lines: -PowerShell +```PowerShell #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="t@t321.onmicrosoft.com" @@ -29,10 +20,7 @@ $Url="https://t321.sharepoint.com" $userLogins=("t@t321.onmicrosoft.com","user1@t321.onmicrosoft.com","user2@t321.onmicrosoft.com","user5@t321.onmicrosoft.com","yasen@t321.onmicrosoft.com") + ``` +## Expected results -Expected results - - - - - + From 5378f04931fc17baa796c9f03992f13489a88307 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:50:33 +0100 Subject: [PATCH 086/114] Update GetSPOUserLanguagesWithREST.ps1 --- .../GetSPOUserLanguagesWithREST.ps1 | 76 ++++++------------- 1 file changed, 25 insertions(+), 51 deletions(-) diff --git a/User Profiles/Get MUI Languages for multiple users using REST/GetSPOUserLanguagesWithREST.ps1 b/User Profiles/Get MUI Languages for multiple users using REST/GetSPOUserLanguagesWithREST.ps1 index 1bd38dae..0c10a640 100644 --- a/User Profiles/Get MUI Languages for multiple users using REST/GetSPOUserLanguagesWithREST.ps1 +++ b/User Profiles/Get MUI Languages for multiple users using REST/GetSPOUserLanguagesWithREST.ps1 @@ -1,71 +1,45 @@ -function Get-SPOUserProperty -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SPOUserProperty{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, - [Parameter(Mandatory=$true,Position=2)] + [Parameter(Mandatory=$true,Position=2)] $password, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string] $url, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [string] $userLogin - ) + ) + $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $RestUrl=$url+"/_api/sp.userprofiles.peoplemanager/getuserprofilepropertyfor(accountname=@v, propertyname='SPS-MUILanguages')?@v='i%3A0%23.f%7Cmembership%7C"+$userLogin+"'" - - $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $RestUrl=$url+"/_api/sp.userprofiles.peoplemanager/getuserprofilepropertyfor(accountname=@v, propertyname='SPS-MUILanguages')?@v='i%3A0%23.f%7Cmembership%7C"+$userLogin+"'" - - $request = [System.Net.WebRequest]::Create($RESTUrl) - $request.Credentials = $Credentials - $request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f") - $request.Accept = "application/json;odata=verbose" - [Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get - $request.Method=$Method - $response = $request.GetResponse() - $requestStream = $response.GetResponseStream() - $read = New-Object System.IO.StreamReader $requestStream - $data=$read.ReadToEnd() - - $results = $data | ConvertFrom-Json - - - - return (New-Object PSObject -Prop @{'Languages'=$results.d.GetUserProfilePropertyFor; 'User'=$userLogin}) - - - - - - - - - } - - - - - - + $request = [System.Net.WebRequest]::Create($RESTUrl) + $request.Credentials = $Credentials + $request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f") + $request.Accept = "application/json;odata=verbose" + [Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get + $request.Method=$Method + $response = $request.GetResponse() + $requestStream = $response.GetResponseStream() + $read = New-Object System.IO.StreamReader $requestStream + $data=$read.ReadToEnd() + $results = $data | ConvertFrom-Json + return (New-Object PSObject -Prop @{'Languages'=$results.d.GetUserProfilePropertyFor; 'User'=$userLogin}) +} #Paths to SDK Add-Type -Path "H:\Libraries\Microsoft.SharePoint.Client.dll" Add-Type -Path "H:\Libraries\Microsoft.SharePoint.Client.Runtime.dll" - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="t@t321.onmicrosoft.com" $Url="https://t321.sharepoint.com" - $userLogins=("t@t321.onmicrosoft.com","user1@t321.onmicrosoft.com","user2@t321.onmicrosoft.com","user5@t321.onmicrosoft.com","yasen@t321.onmicrosoft.com") - - -foreach($userLogin in $userLogins) -{ -Get-SPOUserProperty -Username $username -Url $Url -password $AdminPassword -userLogin $userLogin -} \ No newline at end of file +foreach($userLogin in $userLogins){ + Get-SPOUserProperty -Username $username -Url $Url -password $AdminPassword -userLogin $userLogin +} From 60a11cdbfe05745760da7e850cf03d128dd17579 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:52:04 +0100 Subject: [PATCH 087/114] Update description.md --- .../description.md | 31 ++++--------------- 1 file changed, 6 insertions(+), 25 deletions(-) diff --git a/User Profiles/Get all user profile properties using Powershell and REST/description.md b/User Profiles/Get all user profile properties using Powershell and REST/description.md index d4fc507d..e3a6bd1a 100644 --- a/User Profiles/Get all user profile properties using Powershell and REST/description.md +++ b/User Profiles/Get all user profile properties using Powershell and REST/description.md @@ -1,24 +1,15 @@ -The script retrieves all user profile properties for the specified SharePoint Online user. - - +The script retrieves all user profile properties for the specified SharePoint Online user. The script uses the following endpoint to retrieve a user property: -/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='' - - +```/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v=''``` For more details, please consult: -User profiles REST API reference - - - - +[User profiles REST API reference](https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-rest-reference/dn790354(v=office.15)?redirectedfrom=MSDN) -### How to use? +## How to use? - Download, open the script and enter correct values in the following lines: ```PowerShell @@ -28,17 +19,7 @@ $username="Admin@t321.onmicrosoft.com" $Url="https://t321.sharepoint.com" $userLogin="user2@t321.onmicrosoft.com" ``` -Expected result - - - - - - - - - - - +## Expected result + From ce159b81ceccbac3c067d6d8010790bf02e98a24 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:52:47 +0100 Subject: [PATCH 088/114] Update GetSPOUserAllPropertiesWithREST.ps1 --- .../GetSPOUserAllPropertiesWithREST.ps1 | 75 +++++++------------ 1 file changed, 25 insertions(+), 50 deletions(-) diff --git a/User Profiles/Get all user profile properties using Powershell and REST/GetSPOUserAllPropertiesWithREST.ps1 b/User Profiles/Get all user profile properties using Powershell and REST/GetSPOUserAllPropertiesWithREST.ps1 index 4f0beaed..ebb4c2ee 100644 --- a/User Profiles/Get all user profile properties using Powershell and REST/GetSPOUserAllPropertiesWithREST.ps1 +++ b/User Profiles/Get all user profile properties using Powershell and REST/GetSPOUserAllPropertiesWithREST.ps1 @@ -1,66 +1,41 @@ -function Get-SPOUserProperty -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SPOUserProperty{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, - [Parameter(Mandatory=$true,Position=2)] + [Parameter(Mandatory=$true,Position=2)] $password, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string] $url, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [string] $userLogin - ) - - - - $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $RestUrl=$url+"/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='i:0%23.f|membership|"+$userLogin+"'" - - $request = [System.Net.WebRequest]::Create($RESTUrl) - $request.Credentials = $Credentials - $request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f") - $request.Accept = "application/json;odata=verbose" - [Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get - $request.Method=$Method - $response = $request.GetResponse() - $requestStream = $response.GetResponseStream() - $read = New-Object System.IO.StreamReader $requestStream - $data=$read.ReadToEnd() - $results = $data | ConvertFrom-Json - - - - return ($results.d.userprofileproperties.results) - - - - - - - - - } - - - - - - - - + ) + + $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $RestUrl=$url+"/_api/SP.UserProfiles.PeopleManager/GetPropertiesFor(accountName=@v)?@v='i:0%23.f|membership|"+$userLogin+"'" + + $request = [System.Net.WebRequest]::Create($RESTUrl) + $request.Credentials = $Credentials + $request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f") + $request.Accept = "application/json;odata=verbose" + [Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get + $request.Method=$Method + $response = $request.GetResponse() + $requestStream = $response.GetResponseStream() + $read = New-Object System.IO.StreamReader $requestStream + $data=$read.ReadToEnd() + $results = $data | ConvertFrom-Json + + return ($results.d.userprofileproperties.results) +} #Paths to SDK Add-Type -Path "H:\Libraries\Microsoft.SharePoint.Client.dll" Add-Type -Path "H:\Libraries\Microsoft.SharePoint.Client.Runtime.dll" - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="Admin@t321.onmicrosoft.com" $Url="https://t321.sharepoint.com" $userLogin="user2@t321.onmicrosoft.com" - - - Get-SPOUserProperty -Username $username -Url $Url -password $AdminPassword -userLogin $userLogin | select key, value From 0159f7ba446468edcda0b4a9df56f41673ef0552 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:54:21 +0100 Subject: [PATCH 089/114] Update description.md --- .../description.md | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/User Profiles/Get user work email using Powershell and REST/description.md b/User Profiles/Get user work email using Powershell and REST/description.md index e3f5f0a9..5f4c1d34 100644 --- a/User Profiles/Get user work email using Powershell and REST/description.md +++ b/User Profiles/Get user work email using Powershell and REST/description.md @@ -1,24 +1,15 @@ The script retrieves a WorkEmail property for a single SharePoint Online user. - - The script uses the following endpoint to retrieve a user property: -/getuserprofilepropertyfor(accountname=@v, propertyname='')?@v='' - - +```/getuserprofilepropertyfor(accountname=@v, propertyname='')?@v=''``` For more details, please consult: -User profiles REST API reference - - +[User profiles REST API reference](https://docs.microsoft.com/en-us/previous-versions/office/developer/sharepoint-rest-reference/dn790354(v=office.15)?redirectedfrom=MSDN) +## How to use? - -### How to use? - - Download, open the script and enter correct values in the following lines: ```PowerShell @@ -28,8 +19,7 @@ $username="t@t321.onmicrosoft.com" $Url="https://t321.sharepoint.com/polski" $userLogin="t@t321.onmicrosoft.com" ``` -Expected result +## Expected result - - + From 957d0ff8c6d998aeff2113eaf193d005b5cf408d Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:54:58 +0100 Subject: [PATCH 090/114] Update GetSPOUserEmailWithREST.ps1 --- .../GetSPOUserEmailWithREST.ps1 | 77 +++++++------------ 1 file changed, 26 insertions(+), 51 deletions(-) diff --git a/User Profiles/Get user work email using Powershell and REST/GetSPOUserEmailWithREST.ps1 b/User Profiles/Get user work email using Powershell and REST/GetSPOUserEmailWithREST.ps1 index 2ea7506d..ae023415 100644 --- a/User Profiles/Get user work email using Powershell and REST/GetSPOUserEmailWithREST.ps1 +++ b/User Profiles/Get user work email using Powershell and REST/GetSPOUserEmailWithREST.ps1 @@ -1,67 +1,42 @@ -function Get-SPOUserProperty -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SPOUserProperty{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, - [Parameter(Mandatory=$true,Position=2)] + [Parameter(Mandatory=$true,Position=2)] $password, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] [string] $url, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [string] $userLogin - ) - - - - $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $RestUrl=$url+"/_api/sp.userprofiles.peoplemanager/getuserprofilepropertyfor(accountname=@v, propertyname='WorkEmail')?@v='i%3A0%23.f%7Cmembership%7C"+$userLogin+"'" - - $request = [System.Net.WebRequest]::Create($RESTUrl) - $request.Credentials = $Credentials - $request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f") - $request.Accept = "application/json;odata=verbose" - [Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get - $request.Method=$Method - $response = $request.GetResponse() - $requestStream = $response.GetResponseStream() - $read = New-Object System.IO.StreamReader $requestStream - $data=$read.ReadToEnd() - # Because the string contains duplicate 'ID' keys. - $results = $data | ConvertFrom-Json - - - - return ($results.d) - - - - - - - - - } - - - - - - - - + ) + + $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $RestUrl=$url+"/_api/sp.userprofiles.peoplemanager/getuserprofilepropertyfor(accountname=@v, propertyname='WorkEmail')?@v='i%3A0%23.f%7Cmembership%7C"+$userLogin+"'" + + $request = [System.Net.WebRequest]::Create($RESTUrl) + $request.Credentials = $Credentials + $request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f") + $request.Accept = "application/json;odata=verbose" + [Microsoft.PowerShell.Commands.WebRequestMethod]$Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get + $request.Method=$Method + $response = $request.GetResponse() + $requestStream = $response.GetResponseStream() + $read = New-Object System.IO.StreamReader $requestStream + $data=$read.ReadToEnd() + # Because the string contains duplicate 'ID' keys. + $results = $data | ConvertFrom-Json + + return ($results.d) +} #Paths to SDK Add-Type -Path "H:\Libraries\Microsoft.SharePoint.Client.dll" Add-Type -Path "H:\Libraries\Microsoft.SharePoint.Client.Runtime.dll" - #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString $username="t@t321.onmicrosoft.com" $Url="https://t321.sharepoint.com/polski" $userLogin="t@t321.onmicrosoft.com" - - - Get-SPOUserProperty -Username $username -Url $Url -password $AdminPassword -userLogin $userLogin From c4b855bc0f36f5d5cab6b8db841e20507fc68922 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 18:59:38 +0100 Subject: [PATCH 091/114] Update description.md --- .../description.md | 36 +++---------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/Versioning/Enable minor versions for all lists/description.md b/Versioning/Enable minor versions for all lists/description.md index e6a01b6e..f502d868 100644 --- a/Versioning/Enable minor versions for all lists/description.md +++ b/Versioning/Enable minor versions for all lists/description.md @@ -6,15 +6,7 @@ http://technet.microsoft.com/en-us/library/fp161372(v=office.15).aspx http://www.microsoft.com/en-us/download/details.aspx?id=30722 - - - - - - - - - + It uses recurrence to find all sites in all site collections and then goes through all the lists. @@ -28,29 +20,11 @@ As the script runs you will see green lists' titles for which the enabling succe Versioning will always fail for public site. - - - - - - - - - - - - - - - + If you need to enable versioning in general and minor versioning for those lists that support it, first run this script for enabling versioning in general and then the one here for minor versions. - - - - -PowerShell +```PowerShell function getall($urelek) { $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($urelek) @@ -132,7 +106,7 @@ foreach($sitecoll in $sitecollections) # Specify the path where the log file will be published $Global:csv | Export-Csv -Path C:\Users\Public\Versioning.csv - + ``` -If you think, I could have improved on anything, please let me know in the Q&A section! +### If you think, I could have improved on anything, please let me know in the Q&A section! From 434a30ce11106255f1851b5b460718af9515da94 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:02:09 +0100 Subject: [PATCH 092/114] Update MinorVersioning.ps1 --- .../MinorVersioning.ps1 | 62 +++++++------------ 1 file changed, 24 insertions(+), 38 deletions(-) diff --git a/Versioning/Enable minor versions for all lists/MinorVersioning.ps1 b/Versioning/Enable minor versions for all lists/MinorVersioning.ps1 index 08424c8f..19e1d9c6 100644 --- a/Versioning/Enable minor versions for all lists/MinorVersioning.ps1 +++ b/Versioning/Enable minor versions for all lists/MinorVersioning.ps1 @@ -1,5 +1,4 @@ -function getall($urelek) -{ +function getall($urelek){ $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($urelek) $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password) $ctx.Load($ctx.Web.Lists) @@ -8,52 +7,40 @@ $ctx.ExecuteQuery() Write-Host Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen - - foreach( $ll in $ctx.Web.Lists) - { - $ctx.Load($ll.RootFolder) - $ctx.ExecuteQuery() - $ll.EnableMinorVersions = $versioning - $ll.Update() - $csvvalue= new-object PSObject - $listurl=$null - if($ctx.Url.EndsWith("/")) {$listurl= $ctx.Url.Remove(($ctx.Url.Length-1),1)+$ll.RootFolder.ServerRelativeUrl} - else { + + foreach( $ll in $ctx.Web.Lists){ + $ctx.Load($ll.RootFolder) + $ctx.ExecuteQuery() + $ll.EnableMinorVersions = $versioning + $ll.Update() + $csvvalue= new-object PSObject + $listurl=$null + + if($ctx.Url.EndsWith("/")) {$listurl= $ctx.Url.Remove(($ctx.Url.Length-1),1)+$ll.RootFolder.ServerRelativeUrl} + else { $index=$ctx.Url.LastIndexOf(".com") $listurl=$ctx.Url.Remove($index+4)+$ll.RootFolder.ServerRelativeUrl} $csvvalue | Add-Member -MemberType NoteProperty -Name "Url" -Value ($listurl) $csvvalue | Add-Member -MemberType NoteProperty -Name "Status" -Value "Failed" - try - { + try{ $ErrorActionPreference="Stop" $ctx.ExecuteQuery() Write-Host $listurl -ForegroundColor DarkGreen $csvvalue.Status="Success" $Global:csv+= $csvvalue - } - - catch - { - $Global:csv+= $csvvalue - Write-Host $listurl -ForegroundColor Red - } - finally - {$ErrorActionPreference="Continue"} - - - } + } + catch{ + $Global:csv+= $csvvalue + Write-Host $listurl -ForegroundColor Red + } + finally{$ErrorActionPreference="Continue"} + } - if($ctx.Web.Webs.Count -gt 0) - { - for($i=0; $i -lt $ctx.Web.Webs.Count ; $i++) - { + if($ctx.Web.Webs.Count -gt 0){ + for($i=0; $i -lt $ctx.Web.Webs.Count ; $i++){ getall($ctx.Web.Webs[$i].Url) + } } - - } - - - } # Paths to SDK. Please verify location on your computer. @@ -73,8 +60,7 @@ Connect-SPOService -Credential $credy -Url $siteUrl $sitecollections=get-SPOSite $Global:csv=@() -foreach($sitecoll in $sitecollections) -{ +foreach($sitecoll in $sitecollections){ getall($sitecoll.Url) } From 3c890323e283ffa01b01bef75b98046cffe9829a Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:04:26 +0100 Subject: [PATCH 093/114] Update description.md --- .../description.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Versioning/Enable versioning for all SharePoint Online lists/description.md b/Versioning/Enable versioning for all SharePoint Online lists/description.md index 72534dac..f57a20af 100644 --- a/Versioning/Enable versioning for all SharePoint Online lists/description.md +++ b/Versioning/Enable versioning for all SharePoint Online lists/description.md @@ -19,11 +19,11 @@ At the end, a csv file is generated with the lists' urls and the status whether As the script runs you will see green lists' titles for which the enabling succeeded and red for those which failed (not all lists support versioning). - + - + - + You can customize the script by using the commented out tips. From 9ec876f532cdad9489763f5aac456142c951053f Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:06:14 +0100 Subject: [PATCH 094/114] Update Versioning.ps1 --- .../Versioning.ps1 | 81 ++++++++----------- 1 file changed, 35 insertions(+), 46 deletions(-) diff --git a/Versioning/Enable versioning for all SharePoint Online lists/Versioning.ps1 b/Versioning/Enable versioning for all SharePoint Online lists/Versioning.ps1 index d2b4fcf1..68f646e4 100644 --- a/Versioning/Enable versioning for all SharePoint Online lists/Versioning.ps1 +++ b/Versioning/Enable versioning for all SharePoint Online lists/Versioning.ps1 @@ -1,54 +1,44 @@ -function getall($urelek) -{ - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($urelek) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password) - $ctx.Load($ctx.Web.Lists) - $ctx.Load($ctx.Web) - $ctx.Load($ctx.Web.Webs) - $ctx.ExecuteQuery() - Write-Host - Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen - foreach( $ll in $ctx.Web.Lists) - { - $ll.EnableVersioning = $versioning - $ll.Update() - $csvvalue= new-object PSObject - $listurl=$null - if($ctx.Url.EndsWith("/")) {$listurl= $ctx.Url+$ll.Title} - else {$listurl=$ctx.Url+"/"+$ll.Title} - $csvvalue | Add-Member -MemberType NoteProperty -Name "Url" -Value ($listurl) - $csvvalue | Add-Member -MemberType NoteProperty -Name "Status" -Value "Failed" - try - { +function getall($urelek){ + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($urelek) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $password) + $ctx.Load($ctx.Web.Lists) + $ctx.Load($ctx.Web) + $ctx.Load($ctx.Web.Webs) + $ctx.ExecuteQuery() + Write-Host + Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen + + foreach( $ll in $ctx.Web.Lists){ + $ll.EnableVersioning = $versioning + $ll.Update() + $csvvalue= new-object PSObject + $listurl=$null + + if($ctx.Url.EndsWith("/")) {$listurl= $ctx.Url+$ll.Title} + else {$listurl=$ctx.Url+"/"+$ll.Title} + + $csvvalue | Add-Member -MemberType NoteProperty -Name "Url" -Value ($listurl) + $csvvalue | Add-Member -MemberType NoteProperty -Name "Status" -Value "Failed" + + try{ $ErrorActionPreference="Stop" $ctx.ExecuteQuery() Write-Host $listurl -ForegroundColor DarkGreen $csvvalue.Status="Success" $Global:csv+= $csvvalue - } - - catch - { - $Global:csv+= $csvvalue - Write-Host $listurl -ForegroundColor Red - } - finally - {$ErrorActionPreference="Continue"} - - - } + } + catch{ + $Global:csv+= $csvvalue + Write-Host $listurl -ForegroundColor Red + } + finally{$ErrorActionPreference="Continue"} + } - if($ctx.Web.Webs.Count -gt 0) - { - for($i=0; $i -lt $ctx.Web.Webs.Count ; $i++) - { + if($ctx.Web.Webs.Count -gt 0){ + for($i=0; $i -lt $ctx.Web.Webs.Count ; $i++){ getall($ctx.Web.Webs[$i].Url) + } } - - } - - - } # Paths to SDK. Please verify location on your computer. @@ -68,9 +58,8 @@ Connect-SPOService -Credential $credy -Url $siteUrl $sitecollections=get-SPOSite $Global:csv=@() -foreach($sitecoll in $sitecollections) -{ - getall($sitecoll.Url) +foreach($sitecoll in $sitecollections){ + getall($sitecoll.Url) } # Specify the path where the log file will be published From 68f1aba7a9f55dda1ef63a3eb99271e2fb0b6291 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:08:55 +0100 Subject: [PATCH 095/114] Update Enable versioning in ODB lists.ps1 --- .../Enable versioning in ODB lists.ps1 | 65 +++++++------------ 1 file changed, 23 insertions(+), 42 deletions(-) diff --git a/Versioning/Enable versioning for all lists in OneDrive sites/Enable versioning in ODB lists.ps1 b/Versioning/Enable versioning for all lists in OneDrive sites/Enable versioning in ODB lists.ps1 index eb9532c5..74a111e8 100644 --- a/Versioning/Enable versioning for all lists in OneDrive sites/Enable versioning in ODB lists.ps1 +++ b/Versioning/Enable versioning for all lists in OneDrive sites/Enable versioning in ODB lists.ps1 @@ -1,5 +1,4 @@ -function Set-SPOListVersioning($EnableVersioning, $Urelek) -{ +function Set-SPOListVersioning($EnableVersioning, $Urelek){ $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($urelek) $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($username, $Adminpassword) $ctx.Load($ctx.Web.Lists) @@ -8,54 +7,40 @@ $ctx.ExecuteQuery() Write-Host Write-Host $ctx.Url -BackgroundColor White -ForegroundColor DarkGreen - foreach( $ll in $ctx.Web.Lists) - { + + foreach( $ll in $ctx.Web.Lists){ $ll.EnableVersioning = $EnableVersioning $ll.Update() $csvvalue= new-object PSObject - $listurl=$null - if($ctx.Url.EndsWith("/")) {$listurl= $ctx.Url+$ll.Title} - else {$listurl=$ctx.Url+"/"+$ll.Title} - $csvvalue | Add-Member -MemberType NoteProperty -Name "Url" -Value ($listurl) - $csvvalue | Add-Member -MemberType NoteProperty -Name "Status" -Value "Failed" - try - { + $listurl=$null + + if($ctx.Url.EndsWith("/")) {$listurl= $ctx.Url+$ll.Title} + else {$listurl=$ctx.Url+"/"+$ll.Title} + + $csvvalue | Add-Member -MemberType NoteProperty -Name "Url" -Value ($listurl) + $csvvalue | Add-Member -MemberType NoteProperty -Name "Status" -Value "Failed" + + try{ $ErrorActionPreference="Stop" $ctx.ExecuteQuery() Write-Host $listurl -ForegroundColor DarkGreen $csvvalue.Status="Success" $Global:csv+= $csvvalue - } - - catch - { - $Global:csv+= $csvvalue - Write-Host $listurl -ForegroundColor Red - } - finally - {$ErrorActionPreference="Continue"} - - + } + catch{ + $Global:csv+= $csvvalue + Write-Host $listurl -ForegroundColor Red + } + finally{$ErrorActionPreference="Continue"} } - if($ctx.Web.Webs.Count -gt 0) - { - for($i=0; $i -lt $ctx.Web.Webs.Count ; $i++) - { + if($ctx.Web.Webs.Count -gt 0){ + for($i=0; $i -lt $ctx.Web.Webs.Count ; $i++){ Set-SPOListVersioning -EnableVersioning $EnableVersioning -Urelek ($ctx.Web.Webs[$i].Url) } - } - - - } - - - - - # Paths to SDK. Please verify location on your computer. Add-Type -Path "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SharePoint.Client\v4.0_16.0.0.0__71e9bce111e9429c\Microsoft.SharePoint.Client.dll" Add-Type -Path "c:\Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.SharePoint.Client.Runtime\v4.0_16.0.0.0__71e9bce111e9429c\Microsoft.SharePoint.Client.Runtime.dll" @@ -71,12 +56,8 @@ $users=get-SPOUser -Site $myhost $EnableVersioning=$true $Global:csv=@() -foreach($user in $users) -{ - - - if($user.LoginName.Contains('@')) - { +foreach($user in $users){ + if($user.LoginName.Contains('@')){ $persweb=$user.LoginName.Replace(".","_").Replace("@","_") $persweb=$myhost+"/personal/"+$persweb Write-Host $persweb @@ -90,4 +71,4 @@ foreach($user in $users) } # Specify the path where the log file will be published -$Global:csv | Export-Csv -Path C:\Users\Public\Versioning.csv \ No newline at end of file +$Global:csv | Export-Csv -Path C:\Users\Public\Versioning.csv From f8525f77e1e76d4d3b585e6494f87aee54245d5e Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:10:46 +0100 Subject: [PATCH 096/114] Update description.md --- .../description.md | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/Versioning/Restore previous versions in selected files the entire library/description.md b/Versioning/Restore previous versions in selected files the entire library/description.md index b3d3567b..b9d7d1e2 100644 --- a/Versioning/Restore previous versions in selected files the entire library/description.md +++ b/Versioning/Restore previous versions in selected files the entire library/description.md @@ -4,7 +4,7 @@ Please test the script in test environment before using it in production. -The script is a modification of the existing Restore Previous Versions script created to show 2 ways on filtering the file results. The filters are only examples that need to be adjusted to your specific needs. +The script is a modification of the existing [Restore Previous Versions](https://gallery.technet.microsoft.com/Restore-previous-versions-bbcb0796) script created to show 2 ways on filtering the file results. The filters are only examples that need to be adjusted to your specific needs. The first filter uses CamlQuery to retrieve only files coming from a specific folder. @@ -20,21 +20,14 @@ When dealing with large number of files CamlQuery is the preferred and more effi -PowerShell +```PowerShell #Paths to SDK 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" + ``` - - - - - - The script needs to be edited before running. Enter the necessary data: - - ```PowerShell #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString @@ -43,13 +36,14 @@ $Url="https://testova365.sharepoint.com/sites/STS" $ListTitle="VersionTest" ``` The CamlQuery below chooses only files whose ServerRelativeUrl includes a certain path. In this way you can restore versions only from a specific folder. -PowerShell + +```PowerShell $spqQuery.ViewXml ="/VersionTest/Folder2/FolderWithinFolder"; - + ``` The following lines allow us to narrow the files only to those modified after 12/2/2017. -PowerShell +```PowerShell $date=Get-Date ("2/12/2017") if($file.TimeLastModified -gt $date) { - + ``` From 65a3e33db19ed9a5b13756b9c3572b97fe81f191 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:13:31 +0100 Subject: [PATCH 097/114] Update RestorePreviousVersionsInSelectedFiles.ps1 --- ...RestorePreviousVersionsInSelectedFiles.ps1 | 175 ++++++++---------- 1 file changed, 76 insertions(+), 99 deletions(-) diff --git a/Versioning/Restore previous versions in selected files the entire library/RestorePreviousVersionsInSelectedFiles.ps1 b/Versioning/Restore previous versions in selected files the entire library/RestorePreviousVersionsInSelectedFiles.ps1 index 67a8430b..7742d5ba 100644 --- a/Versioning/Restore previous versions in selected files the entire library/RestorePreviousVersionsInSelectedFiles.ps1 +++ b/Versioning/Restore previous versions in selected files the entire library/RestorePreviousVersionsInSelectedFiles.ps1 @@ -1,104 +1,83 @@ -function Get-SPOFolderFiles -{ -param ( - [Parameter(Mandatory=$true,Position=1)] +function Get-SPOFolderFiles{ + param ( + [Parameter(Mandatory=$true,Position=1)] [string]$Username, [Parameter(Mandatory=$true,Position=2)] [string]$Url, - [Parameter(Mandatory=$true,Position=3)] + [Parameter(Mandatory=$true,Position=3)] $password, - [Parameter(Mandatory=$true,Position=4)] + [Parameter(Mandatory=$true,Position=4)] [string]$ListTitle - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - $ll=$ctx.Web.Lists.GetByTitle($ListTitle) - $ctx.Load($ll) - $ctx.ExecuteQuery() - $spqQuery = New-Object Microsoft.SharePoint.Client.CamlQuery - $spqQuery.ViewXml ="/VersionTest/Folder2/FolderWithinFolder"; - $itemki=$ll.GetItems($spqQuery) - $ctx.Load($itemki) - $ctx.ExecuteQuery() - - foreach($item in $itemki) - { - - - # Write-Host $item["FileRef"] -ForegroundColor DarkGreen - $file = - $ctx.Web.GetFileByServerRelativeUrl($item["FileRef"]); - $ctx.Load($file) - $ctx.Load($file.Versions) - try{ - $ctx.ExecuteQuery() } - catch - { - continue; - } - - #$file.TimeLastModified - $date=Get-Date ("2/12/2017") - - if($file.TimeLastModified -gt $date) - { - - Write-host $file.Name -ForegroundColor Green - if ($file.Versions.Count -eq 0) - { - $obj=New-Object PSObject - $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) - $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) - $obj | Add-Member NoteProperty Versions("No Versions Available") - - #$obj | export-csv -Path $CSVPath -Append - - Write-Output $obj - } - elseif($file.TypedObject.ToString() -eq "Microsoft.SharePoint.Client.File") - { - - foreach ($vv in $file.Versions){ - Write-Host $vv.Created $vv.Size $vv.VersionLabel $vv.IsCurrentVersion $file.Versions.Count - - # Write-Output $vv - - } - if($file.Versions[($file.Versions.Count-1)].IsCurrentVersion) - { - $vLabel=$file.Versions[($file.Versions.Count-2)].VersionLabel - Write-Host "Version to be restored: " $vLabel - } - else{ $vLabel=$file.Versions[($file.Versions.Count-1)].VersionLabel - Write-Host "Version to be restored: " $vLabel } - $file.Versions.RestoreByLabel($vLabel) - $ctx.ExecuteQuery() - } - - else - { -$obj = New-Object PSObject -$obj| Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) - $obj | Add-Member NoteProperty Versions("No Versions Available") - Write-Output $obj - } - - - } - - - } - - - - - - - + ) + + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + $ll=$ctx.Web.Lists.GetByTitle($ListTitle) + $ctx.Load($ll) + $ctx.ExecuteQuery() + $spqQuery = New-Object Microsoft.SharePoint.Client.CamlQuery + $spqQuery.ViewXml ="/VersionTest/Folder2/FolderWithinFolder"; + $itemki=$ll.GetItems($spqQuery) + $ctx.Load($itemki) + $ctx.ExecuteQuery() + + foreach($item in $itemki){ + # Write-Host $item["FileRef"] -ForegroundColor DarkGreen + $file = + $ctx.Web.GetFileByServerRelativeUrl($item["FileRef"]); + $ctx.Load($file) + $ctx.Load($file.Versions) + + try{ + $ctx.ExecuteQuery() + } + catch{ + continue; + } + + #$file.TimeLastModified + $date=Get-Date ("2/12/2017") + + if($file.TimeLastModified -gt $date){ + Write-host $file.Name -ForegroundColor Green + if ($file.Versions.Count -eq 0){ + $obj=New-Object PSObject + $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) + $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) + $obj | Add-Member NoteProperty Versions("No Versions Available") + + #$obj | export-csv -Path $CSVPath -Append + + Write-Output $obj + } + elseif($file.TypedObject.ToString() -eq "Microsoft.SharePoint.Client.File"){ + foreach ($vv in $file.Versions){ + Write-Host $vv.Created $vv.Size $vv.VersionLabel $vv.IsCurrentVersion $file.Versions.Count + + # Write-Output $vv + } + + if($file.Versions[($file.Versions.Count-1)].IsCurrentVersion){ + $vLabel=$file.Versions[($file.Versions.Count-2)].VersionLabel + Write-Host "Version to be restored: " $vLabel + } + else{ $vLabel=$file.Versions[($file.Versions.Count-1)].VersionLabel + Write-Host "Version to be restored: " $vLabel + } + $file.Versions.RestoreByLabel($vLabel) + $ctx.ExecuteQuery() + } + else{ + $obj = New-Object PSObject + $obj| Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) + $obj | Add-Member NoteProperty Versions("No Versions Available") + Write-Output $obj + } + } + } } #Paths to SDK @@ -111,6 +90,4 @@ $username="t@testova365.onmicrosoft.com" $Url="https://testova365.sharepoint.com/sites/STS" $ListTitle="VersionTest" - - -Get-sPOFolderFiles -Username $username -Url $Url -password $AdminPassword -ListTitle $ListTitle \ No newline at end of file +Get-sPOFolderFiles -Username $username -Url $Url -password $AdminPassword -ListTitle $ListTitle From 8c2f0eb5bfab62aad25b32b86dcfa2fe41802a5e Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:14:35 +0100 Subject: [PATCH 098/114] Update description.md --- .../description.md | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Versioning/Restore previous versions in the entire library/description.md b/Versioning/Restore previous versions in the entire library/description.md index d177fd80..602e5d33 100644 --- a/Versioning/Restore previous versions in the entire library/description.md +++ b/Versioning/Restore previous versions in the entire library/description.md @@ -1,22 +1,17 @@ The script retrieves all files and restores the LAST NOT CURRENT version of the file. Please test the script in test environment before using it in production. - - The script requires SharePoint Online SDK. Make sure that the paths below point to locations on your computer: + ```PowerShell #Paths to SDK 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" ``` - - The script needs to be edited before running. Enter the necessary data: - - ```PowerShell #Enter the data $AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString @@ -26,7 +21,7 @@ $ListTitle="uyyu" ``` - +

Enjoy and please share feedback! From 5cf3c71728acfa7fcabb656ea71aaf8419e69142 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:17:17 +0100 Subject: [PATCH 099/114] Update Restore previous versions.ps1 --- .../Restore previous versions.ps1 | 196 ++++++++---------- 1 file changed, 88 insertions(+), 108 deletions(-) diff --git a/Versioning/Restore previous versions in the entire library/Restore previous versions.ps1 b/Versioning/Restore previous versions in the entire library/Restore previous versions.ps1 index b4efa5b5..eb28e14c 100644 --- a/Versioning/Restore previous versions in the entire library/Restore previous versions.ps1 +++ b/Versioning/Restore previous versions in the entire library/Restore previous versions.ps1 @@ -1,113 +1,93 @@ -function Get-SPOFolderFiles -{ +function Get-SPOFolderFiles{ param ( - [Parameter(Mandatory=$true,Position=1)] - [string]$Username, - [Parameter(Mandatory=$true,Position=2)] - [string]$Url, + [Parameter(Mandatory=$true,Position=1)] + [string]$Username, + [Parameter(Mandatory=$true,Position=2)] + [string]$Url, [Parameter(Mandatory=$true,Position=3)] - $password, + $password, [Parameter(Mandatory=$true,Position=4)] - [string]$ListTitle - ) - - - $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) - $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) - $ctx.Load($ctx.Web) - $ctx.ExecuteQuery() - $ll=$ctx.Web.Lists.GetByTitle($ListTitle) - $ctx.Load($ll) - $ctx.ExecuteQuery() - $spqQuery = New-Object Microsoft.SharePoint.Client.CamlQuery - $spqQuery.ViewXml =""; - $itemki=$ll.GetItems($spqQuery) - $ctx.Load($itemki) - $ctx.ExecuteQuery() - - foreach($item in $itemki) - { - - Write-Host $item["FileRef"] -ForegroundColor DarkGreen - $file = - $ctx.Web.GetFileByServerRelativeUrl($item["FileRef"]); - $ctx.Load($file) - $ctx.Load($file.Versions) - try{ - $ctx.ExecuteQuery() } - catch - { - continue; - } - if ($file.Versions.Count -eq 0) - { - $obj=New-Object PSObject - $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) - $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) - $obj | Add-Member NoteProperty Versions("No Versions Available") - - #$obj | export-csv -Path $CSVPath -Append - - Write-Output $obj - } - elseif($file.TypedObject.ToString() -eq "Microsoft.SharePoint.Client.File") - { - - foreach ($vv in $file.Versions){ - Write-Host $vv.Created $vv.Size $vv.VersionLabel $vv.IsCurrentVersion $file.Versions.Count - - # Write-Output $vv - - } - if($file.Versions[($file.Versions.Count-1)].IsCurrentVersion) - { - $vLabel=$file.Versions[($file.Versions.Count-2)].VersionLabel - Write-Host "Version to be restored: " $vLabel - } - else{ - $vLabel=$file.Versions[($file.Versions.Count-1)].VersionLabel - Write-Host "Version to be restored: " $vLabel } - $file.Versions.RestoreByLabel($vLabel) - $ctx.ExecuteQuery() - } - -else -{ -$obj = New-Object PSObject -$obj| Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) - $obj | Add-Member NoteProperty Versions("No Versions Available") - Write-Output $obj - } - <# - try { $ctx.ExecuteQuery() - $obj=New-Object PSObject - $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) - $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) - $obj | Add-Member NoteProperty Versions($file.Versions.Count + " versions were deleted") - - $obj | export-csv -Path $CSVPath -Append - } - catch { - $obj=New-Object PSObject - $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) - $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) - $obj | Add-Member NoteProperty Versions($file.Versions.Count + " versions. Failed to delete") - - $obj | export-csv -Path $CSVPath -Append - - }#> - - - - - } - - - - - - - + [string]$ListTitle +) + +$ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) +$ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) +$ctx.Load($ctx.Web) +$ctx.ExecuteQuery() +$ll=$ctx.Web.Lists.GetByTitle($ListTitle) +$ctx.Load($ll) +$ctx.ExecuteQuery() +$spqQuery = New-Object Microsoft.SharePoint.Client.CamlQuery +$spqQuery.ViewXml =""; +$itemki=$ll.GetItems($spqQuery) +$ctx.Load($itemki) +$ctx.ExecuteQuery() + +foreach($item in $itemki){ + Write-Host $item["FileRef"] -ForegroundColor DarkGreen + $file = + $ctx.Web.GetFileByServerRelativeUrl($item["FileRef"]); + $ctx.Load($file) + $ctx.Load($file.Versions) + + try{ + $ctx.ExecuteQuery() } + catch{ + continue; + } + + if ($file.Versions.Count -eq 0){ + $obj=New-Object PSObject + $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) + $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) + $obj | Add-Member NoteProperty Versions("No Versions Available") + + #$obj | export-csv -Path $CSVPath -Append + + Write-Output $obj + } + elseif($file.TypedObject.ToString() -eq "Microsoft.SharePoint.Client.File"){ + foreach ($vv in $file.Versions){ + Write-Host $vv.Created $vv.Size $vv.VersionLabel $vv.IsCurrentVersion $file.Versions.Count + + # Write-Output $vv + } + + if($file.Versions[($file.Versions.Count-1)].IsCurrentVersion){ + $vLabel=$file.Versions[($file.Versions.Count-2)].VersionLabel + Write-Host "Version to be restored: " $vLabel + } + else{ + $vLabel=$file.Versions[($file.Versions.Count-1)].VersionLabel + Write-Host "Version to be restored: " $vLabel } + $file.Versions.RestoreByLabel($vLabel) + $ctx.ExecuteQuery() + } + else{ + $obj = New-Object PSObject + $obj| Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) + $obj | Add-Member NoteProperty Versions("No Versions Available") + Write-Output $obj + } + <# + try { $ctx.ExecuteQuery() + $obj=New-Object PSObject + $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) + $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) + $obj | Add-Member NoteProperty Versions($file.Versions.Count + " versions were deleted") + + $obj | export-csv -Path $CSVPath -Append + } + catch { + $obj=New-Object PSObject + $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) + $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) + $obj | Add-Member NoteProperty Versions($file.Versions.Count + " versions. Failed to delete") + + $obj | export-csv -Path $CSVPath -Append + + }#> + } } #Paths to SDK @@ -122,4 +102,4 @@ $ListTitle="uyyu" -Get-sPOFolderFiles -Username $username -Url $Url -password $AdminPassword -ListTitle $ListTitle \ No newline at end of file +Get-sPOFolderFiles -Username $username -Url $Url -password $AdminPassword -ListTitle $ListTitle From eaec6344021552f801a579316fd211fe33181264 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:19:42 +0100 Subject: [PATCH 100/114] Update Restore previous versions.ps1 --- .../Restore previous versions.ps1 | 157 +++++++++--------- 1 file changed, 79 insertions(+), 78 deletions(-) diff --git a/Versioning/Restore previous versions in the entire library/Restore previous versions.ps1 b/Versioning/Restore previous versions in the entire library/Restore previous versions.ps1 index eb28e14c..376d8c6f 100644 --- a/Versioning/Restore previous versions in the entire library/Restore previous versions.ps1 +++ b/Versioning/Restore previous versions in the entire library/Restore previous versions.ps1 @@ -1,95 +1,96 @@ function Get-SPOFolderFiles{ -param ( - [Parameter(Mandatory=$true,Position=1)] - [string]$Username, - [Parameter(Mandatory=$true,Position=2)] - [string]$Url, - [Parameter(Mandatory=$true,Position=3)] - $password, - [Parameter(Mandatory=$true,Position=4)] - [string]$ListTitle -) + param ( + [Parameter(Mandatory=$true,Position=1)] + [string]$Username, + [Parameter(Mandatory=$true,Position=2)] + [string]$Url, + [Parameter(Mandatory=$true,Position=3)] + $password, + [Parameter(Mandatory=$true,Position=4)] + [string]$ListTitle + ) -$ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) -$ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) -$ctx.Load($ctx.Web) -$ctx.ExecuteQuery() -$ll=$ctx.Web.Lists.GetByTitle($ListTitle) -$ctx.Load($ll) -$ctx.ExecuteQuery() -$spqQuery = New-Object Microsoft.SharePoint.Client.CamlQuery -$spqQuery.ViewXml =""; -$itemki=$ll.GetItems($spqQuery) -$ctx.Load($itemki) -$ctx.ExecuteQuery() + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $password) + $ctx.Load($ctx.Web) + $ctx.ExecuteQuery() + $ll=$ctx.Web.Lists.GetByTitle($ListTitle) + $ctx.Load($ll) + $ctx.ExecuteQuery() + $spqQuery = New-Object Microsoft.SharePoint.Client.CamlQuery + $spqQuery.ViewXml =""; + $itemki=$ll.GetItems($spqQuery) + $ctx.Load($itemki) + $ctx.ExecuteQuery() -foreach($item in $itemki){ - Write-Host $item["FileRef"] -ForegroundColor DarkGreen - $file = - $ctx.Web.GetFileByServerRelativeUrl($item["FileRef"]); - $ctx.Load($file) - $ctx.Load($file.Versions) + foreach($item in $itemki){ + Write-Host $item["FileRef"] -ForegroundColor DarkGreen + $file = + $ctx.Web.GetFileByServerRelativeUrl($item["FileRef"]); + $ctx.Load($file) + $ctx.Load($file.Versions) - try{ - $ctx.ExecuteQuery() } - catch{ - continue; - } - - if ($file.Versions.Count -eq 0){ - $obj=New-Object PSObject - $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) - $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) - $obj | Add-Member NoteProperty Versions("No Versions Available") - - #$obj | export-csv -Path $CSVPath -Append - - Write-Output $obj - } - elseif($file.TypedObject.ToString() -eq "Microsoft.SharePoint.Client.File"){ - foreach ($vv in $file.Versions){ - Write-Host $vv.Created $vv.Size $vv.VersionLabel $vv.IsCurrentVersion $file.Versions.Count - - # Write-Output $vv - } - - if($file.Versions[($file.Versions.Count-1)].IsCurrentVersion){ - $vLabel=$file.Versions[($file.Versions.Count-2)].VersionLabel - Write-Host "Version to be restored: " $vLabel - } - else{ - $vLabel=$file.Versions[($file.Versions.Count-1)].VersionLabel - Write-Host "Version to be restored: " $vLabel } - $file.Versions.RestoreByLabel($vLabel) + try{ $ctx.ExecuteQuery() } - else{ - $obj = New-Object PSObject - $obj| Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) + catch{ + continue; + } + + if ($file.Versions.Count -eq 0){ + $obj=New-Object PSObject + $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) + $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) $obj | Add-Member NoteProperty Versions("No Versions Available") + + #$obj | export-csv -Path $CSVPath -Append + Write-Output $obj } - <# - try { $ctx.ExecuteQuery() - $obj=New-Object PSObject - $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) - $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) - $obj | Add-Member NoteProperty Versions($file.Versions.Count + " versions were deleted") + elseif($file.TypedObject.ToString() -eq "Microsoft.SharePoint.Client.File"){ + foreach ($vv in $file.Versions){ + Write-Host $vv.Created $vv.Size $vv.VersionLabel $vv.IsCurrentVersion $file.Versions.Count - $obj | export-csv -Path $CSVPath -Append - } - catch { - $obj=New-Object PSObject - $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) - $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) - $obj | Add-Member NoteProperty Versions($file.Versions.Count + " versions. Failed to delete") + # Write-Output $vv + } - $obj | export-csv -Path $CSVPath -Append + if($file.Versions[($file.Versions.Count-1)].IsCurrentVersion){ + $vLabel=$file.Versions[($file.Versions.Count-2)].VersionLabel + Write-Host "Version to be restored: " $vLabel + } + else{ + $vLabel=$file.Versions[($file.Versions.Count-1)].VersionLabel + Write-Host "Version to be restored: " $vLabel } + $file.Versions.RestoreByLabel($vLabel) + $ctx.ExecuteQuery() + } + else{ + $obj = New-Object PSObject + $obj| Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) + $obj | Add-Member NoteProperty Versions("No Versions Available") + Write-Output $obj + } + <# + try { $ctx.ExecuteQuery() + $obj=New-Object PSObject + $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) + $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) + $obj | Add-Member NoteProperty Versions($file.Versions.Count + " versions were deleted") - }#> + $obj | export-csv -Path $CSVPath -Append + } + catch { + $obj=New-Object PSObject + $obj | Add-Member NoteProperty ServerRelativeUrl($file.ServerRelativeUrl) + $obj | Add-Member NoteProperty FileLeafRef($item["FileLeafRef"]) + $obj | Add-Member NoteProperty Versions($file.Versions.Count + " versions. Failed to delete") + + $obj | export-csv -Path $CSVPath -Append + + }#> + } } } - #Paths to SDK 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" From 3881065f3ec3daaef29e148ffd6f4474039ae95e Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:49:03 +0100 Subject: [PATCH 101/114] Update and rename Description.txt to Description.md --- .../{Description.txt => Description.md} | 87 ++++++++----------- 1 file changed, 34 insertions(+), 53 deletions(-) rename OTHER/CreativeDestruction/{Description.txt => Description.md} (81%) diff --git a/OTHER/CreativeDestruction/Description.txt b/OTHER/CreativeDestruction/Description.md similarity index 81% rename from OTHER/CreativeDestruction/Description.txt rename to OTHER/CreativeDestruction/Description.md index 2389df3d..cbec2c89 100644 --- a/OTHER/CreativeDestruction/Description.txt +++ b/OTHER/CreativeDestruction/Description.md @@ -1,21 +1,19 @@ -What does it do? - - +### *What does it do?* The program has 2 basic functions: creation and destruction. -Godly Creation: +**Godly Creation:** -- it creates the following site collections, all named after the templates they have been created from: +- it creates the following site collections, all named after the templates they have been created from: -TeamsiteWithLibraries -TeamsiteWithLists -Empty Teamsite -"WikiSite" -"BlogSite" -"CommunitySite" -"PublishingPortal" -- it creates 2 subsites : subsite1 and subsite2 to the TeamsiteWithLibraries +- TeamsiteWithLibraries +- TeamsiteWithLists +- Empty Teamsite +- "WikiSite" +- "BlogSite" +- "CommunitySite" +- "PublishingPortal" +- it creates 2 subsites : subsite1 and subsite2 to the TeamsiteWithLibraries - it creates 2 document libraries, 2 picture libraries, Wiki Page library, XML Form library and Data Connection library to the TeamsiteWithLibraries @@ -27,51 +25,44 @@ Empty Teamsite - it populates Custom, Anouncements list, Contacts list, Events list, and Tasks list with sample data (ca. 50 items - if you need more please look https://gallery.technet.microsoft.com/scriptcenter/Create-various-lists-with-0e714f70 and https://gallery.technet.microsoft.com/scriptcenter/Create-a-list-with-3f19ba11 ) -- it adds all the available lists and libraries to the Quick Launch Menu. Also added are the lists that were previously accessible only via direct links, like Workflow History. - - +- it adds all the available lists and libraries to the Quick Launch Menu. Also added are the lists that were previously accessible only via direct links, like Workflow History. Watch out! The process of creating 5000 items in a list takes time. You will be informed on the progress as the application runs. - - -Total Destruction: - +### Total Destruction: + - it retrieves all your site collections and deletes them, apart from the search, mysite (which cannot be recreated in SharePoint Online) and rootsite - it checks the recycle bin for the deleted sites and removes them from the recycle bin + Watch out! Deleting a site collection takes a while and depends on SharePoint Online backend processes. The application waits for the site collections to be deleted and informs you about its attempts with status updates "Trying to delete site XYZ". However, after 6 unsuccessful attempts it may mean that SharePoint is not going to be very cooperative at the moment and the application will ask you whether it should close or keep trying. - - -Only Recycle Bin: - +### Only Recycle Bin: + - as the name suggests, permanently removes the content of the recycle bin - cannot be reversed - can be used instead of Powershell Get-SpoDeletedSite | Remove-SpoDeletedSite + - - -Only Created - +### Only Created + - removes only the site collections created by the program + +- TeamsiteWithLibraries +- TeamsiteWithLists +- Empty Teamsite +- "WikiSite" +- "BlogSite" +- "CommunitySite" +- "PublishingPortal" -TeamsiteWithLibraries -TeamsiteWithLists -Empty Teamsite -"WikiSite" -"BlogSite" -"CommunitySite" -"PublishingPortal" Watch out! If you added some of your own data to those site collections (other libraries, site mailbox or items) it will also be deleted! - - -What doesn't it do? - +### *What doesn't it do?* + -Despite the name Non-Empty libraries are still empty -The list with Geolocation column doesn't contain Geolocation column @@ -79,26 +70,19 @@ What doesn't it do? -It doesn't verify your credentials. Change the examples in the fields into your own credentials, following the same pattern (don't put in a teamsite domain.sharepoint.com where it asks you to type admin site url preceded by https://). If you make a mistake, you will get an error at an early stage of the application. - It's not perfect. I have made it as failsafe as the time allowed with a lot of try and catches and bugs handled. However, if it still stops at some point, just run it again. The program will detect the work already done and simply continue. + - - - - -How do I use it? +### *How do I use it?* The zip file contains an .exe which installs the program. You can open it like any other program from Start Menu or a Desktop shortcut. Type in your user credentials in the three available fields following the given example. After that, choose one of the buttons to create or delete data in your tenant. You can perform multiple operations during one run, so if you find it to your liking, you can alternate between creating and destroying content just to test SharePoint Online's behaviour. -When you have finished working with the program, a log will be created at C:\Users\Public\ where you can analyze what has been done. +When you have finished working with the program, a **log will be created at C:\Users\Public\** where you can analyze what has been done. If you need to uninstall the program you can find it in Control Panel>Programs and Features. - - - - -Technicalities +### *Technicalities* The program relies on static classes. @@ -110,6 +94,3 @@ CheckForIllegalCrossThreadCalls is set to false, which may generate some random Updating the status window may slow down or even temporarily hang the execution. Just let it run its course and it should fix itself. This part also forced me to set CheckForIllegalCrossThreadCalls = false; so if anyone knows how to fix it, please post a comment. That part of the code is available in the snippet. - - - From 5c9ae6d5f0c5cbbd5457a1c5547952d255256c48 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:55:08 +0100 Subject: [PATCH 102/114] Update Description.md --- OTHER/CreativeDestruction/Description.md | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/OTHER/CreativeDestruction/Description.md b/OTHER/CreativeDestruction/Description.md index cbec2c89..264269e6 100644 --- a/OTHER/CreativeDestruction/Description.md +++ b/OTHER/CreativeDestruction/Description.md @@ -4,8 +4,9 @@ The program has 2 basic functions: creation and destruction. **Godly Creation:** -- it creates the following site collections, all named after the templates they have been created from: - + + - it creates the following site collections, all named after the templates they have been created from: + - TeamsiteWithLibraries - TeamsiteWithLists - Empty Teamsite @@ -13,19 +14,34 @@ The program has 2 basic functions: creation and destruction. - "BlogSite" - "CommunitySite" - "PublishingPortal" -- it creates 2 subsites : subsite1 and subsite2 to the TeamsiteWithLibraries + +- it creates 2 subsites : subsite1 and subsite2 to the TeamsiteWithLibraries + +
+ - it creates 2 document libraries, 2 picture libraries, Wiki Page library, XML Form library and Data Connection library to the TeamsiteWithLibraries + + - it creates 3 Custom lists in the TeamsiteWithLists: one empty, one with sample data, one with over 5000 items + + - it creates a default view limited to 70 items for 5000 items list. You can switch between the views using GUI + + - it creates Links list, Anouncements list, Contacts list, Events list, Tasks list to the TeamsiteWithLists + + - it populates Custom, Anouncements list, Contacts list, Events list, and Tasks list with sample data (ca. 50 items - if you need more please look https://gallery.technet.microsoft.com/scriptcenter/Create-various-lists-with-0e714f70 and https://gallery.technet.microsoft.com/scriptcenter/Create-a-list-with-3f19ba11 ) + -- it adds all the available lists and libraries to the Quick Launch Menu. Also added are the lists that were previously accessible only via direct links, like Workflow History.
+ +- it adds all the available lists and libraries to the Quick Launch Menu. Also added are the lists that were previously accessible only via direct links, like Workflow History. + Watch out! The process of creating 5000 items in a list takes time. You will be informed on the progress as the application runs. From 6b0582577444be380d7c7c4fb50a15dd99775886 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:56:05 +0100 Subject: [PATCH 103/114] Update Description.md --- OTHER/CreativeDestruction/Description.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/OTHER/CreativeDestruction/Description.md b/OTHER/CreativeDestruction/Description.md index 264269e6..a388582d 100644 --- a/OTHER/CreativeDestruction/Description.md +++ b/OTHER/CreativeDestruction/Description.md @@ -7,6 +7,7 @@ The program has 2 basic functions: creation and destruction. - it creates the following site collections, all named after the templates they have been created from: + - TeamsiteWithLibraries - TeamsiteWithLists - Empty Teamsite @@ -22,27 +23,27 @@ The program has 2 basic functions: creation and destruction. - it creates 2 document libraries, 2 picture libraries, Wiki Page library, XML Form library and Data Connection library to the TeamsiteWithLibraries - +
- it creates 3 Custom lists in the TeamsiteWithLists: one empty, one with sample data, one with over 5000 items - +
- it creates a default view limited to 70 items for 5000 items list. You can switch between the views using GUI - +
- it creates Links list, Anouncements list, Contacts list, Events list, Tasks list to the TeamsiteWithLists - +
-- it populates Custom, Anouncements list, Contacts list, Events list, and Tasks list with sample data (ca. 50 items - if you need more please look https://gallery.technet.microsoft.com/scriptcenter/Create-various-lists-with-0e714f70 and https://gallery.technet.microsoft.com/scriptcenter/Create-a-list-with-3f19ba11 ) +- it populates Custom, Anouncements list, Contacts list, Events list, and Tasks list with sample data (ca. 50 items - if you need more please look https://gallery.technet.microsoft.com/scriptcenter/Create-various-lists-with-0e714f70
and
https://gallery.technet.microsoft.com/scriptcenter/Create-a-list-with-3f19ba11 )
- +
- it adds all the available lists and libraries to the Quick Launch Menu. Also added are the lists that were previously accessible only via direct links, like Workflow History. - +
Watch out! The process of creating 5000 items in a list takes time. You will be informed on the progress as the application runs. ### Total Destruction: From 270f28bb15ed3ac1e13fbe090c0b4c3e2a03d7bc Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 19:59:56 +0100 Subject: [PATCH 104/114] Update Description.md --- OTHER/CreativeDestruction/Description.md | 28 ++++++++++++++++++------ 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/OTHER/CreativeDestruction/Description.md b/OTHER/CreativeDestruction/Description.md index a388582d..05a4dc2b 100644 --- a/OTHER/CreativeDestruction/Description.md +++ b/OTHER/CreativeDestruction/Description.md @@ -49,25 +49,33 @@ Watch out! The process of creating 5000 items in a list takes time. You will be ### Total Destruction: - it retrieves all your site collections and deletes them, apart from the search, mysite (which cannot be recreated in SharePoint Online) and rootsite - + +
+ - it checks the recycle bin for the deleted sites and removes them from the recycle bin +
Watch out! Deleting a site collection takes a while and depends on SharePoint Online backend processes. The application waits for the site collections to be deleted and informs you about its attempts with status updates "Trying to delete site XYZ". However, after 6 unsuccessful attempts it may mean that SharePoint is not going to be very cooperative at the moment and the application will ask you whether it should close or keep trying. ### Only Recycle Bin: - as the name suggests, permanently removes the content of the recycle bin - + +
+ - cannot be reversed - + +
+ - can be used instead of Powershell Get-SpoDeletedSite | Remove-SpoDeletedSite ### Only Created -
+ - removes only the site collections created by the program + - TeamsiteWithLibraries - TeamsiteWithLists - Empty Teamsite @@ -81,11 +89,17 @@ Watch out! If you added some of your own data to those site collections (other l ### *What doesn't it do?* -Despite the name Non-Empty libraries are still empty - + +
+ -The list with Geolocation column doesn't contain Geolocation column - + +
+ -It doesn't verify your credentials. Change the examples in the fields into your own credentials, following the same pattern (don't put in a teamsite domain.sharepoint.com where it asks you to type admin site url preceded by https://). If you make a mistake, you will get an error at an early stage of the application. - + +
+ - It's not perfect. I have made it as failsafe as the time allowed with a lot of try and catches and bugs handled. However, if it still stops at some point, just run it again. The program will detect the work already done and simply continue. From a9c10f43c4ad86d74c4f8e211b927f9496ba9e2e Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 20:03:22 +0100 Subject: [PATCH 105/114] Update excerpt.cs --- OTHER/CreativeDestruction/excerpt.cs | 144 ++++++++++++--------------- 1 file changed, 61 insertions(+), 83 deletions(-) diff --git a/OTHER/CreativeDestruction/excerpt.cs b/OTHER/CreativeDestruction/excerpt.cs index f1c358a0..02954a46 100644 --- a/OTHER/CreativeDestruction/excerpt.cs +++ b/OTHER/CreativeDestruction/excerpt.cs @@ -1,104 +1,82 @@ -public Form1() - { - InitializeComponent(); - CheckForIllegalCrossThreadCalls = false; - - label4.Text = Status.StatusText; - RefreshStatusThread = new Thread(RefreshStupidStatus); - RefreshStatusThread.Start(); - } - -private void RefreshStupidStatus() - { - label4.Text = Status.StatusText; - Thread.Sleep(1000); - RefreshStupidStatus(); - } +public Form1() { + InitializeComponent(); + CheckForIllegalCrossThreadCalls = false; + + label4.Text = Status.StatusText; + RefreshStatusThread = new Thread(RefreshStupidStatus); + RefreshStatusThread.Start(); +} -private void button1_Click(object sender, EventArgs e) - { +private void RefreshStupidStatus() { + label4.Text = Status.StatusText; + Thread.Sleep(1000); + RefreshStupidStatus(); +} - if (CredentialVerificationForAllButtons()) - { - +private void button1_Click(object sender, EventArgs e) { + if (CredentialVerificationForAllButtons()) { TotalDestructionFunction.TotalThem(); TotalDestructionFunction.RemoveRecycleBinContent(); - - } - - } +} - private void myshitbtn_Click(object sender, EventArgs e) - { - if (CredentialVerificationForAllButtons()) - { - - +private void myshitbtn_Click(object sender, EventArgs e) { + if (CredentialVerificationForAllButtons()) { TotalDestructionFunction.JustMyShit(); TotalDestructionFunction.RemoveRecycleBinContent(); - - } } +} - -public static void CreateSiteColls(string siteurll, string root, string credUsername, SecureString password) - { - ClientContext tenantContext = new ClientContext(siteurll); - tenantContext.Credentials = new SharePointOnlineCredentials(credUsername, password); - var tenant = new Tenant(tenantContext); - tenantContext.Load(tenant); - Status.StatusText = DateTime.Now.ToString() + " Sending request to create site collections. This may take a while...\r\n" + Status.StatusText; - string[] TeamSiteColls = { "TeamsiteWithLibraries", "TeamsiteWithLists", "Empty Teamsite" }; - foreach (string tsc in TeamSiteColls) - { +public static void CreateSiteColls(string siteurll, string root, string credUsername, SecureString password) { + ClientContext tenantContext = new ClientContext(siteurll); + tenantContext.Credentials = new SharePointOnlineCredentials(credUsername, password); + var tenant = new Tenant(tenantContext); + tenantContext.Load(tenant); + Status.StatusText = DateTime.Now.ToString() + " Sending request to create site collections. This may take a while...\r\n" + Status.StatusText; + string[] TeamSiteColls = { "TeamsiteWithLibraries", "TeamsiteWithLists", "Empty Teamsite" }; + + foreach (string tsc in TeamSiteColls) { var siteCreationProperties = CreateSite(tsc, tsc, credUsername, root); SpoOperation spo = tenant.CreateSite(siteCreationProperties); tenantContext.Load(spo, i => i.IsComplete); - try - { - tenantContext.ExecuteQuery(); + + try{ + tenantContext.ExecuteQuery(); } - catch (Exception e) - { - Status.StatusText = DateTime.Now.ToString() + " " + e.Message + "\r\n" + Status.StatusText; - + catch (Exception e){ + Status.StatusText = DateTime.Now.ToString() + " " + e.Message + "\r\n" + Status.StatusText; } - - - } + } } -public static void CreateLis(string rootsite, string credUsername, SecureString password) - { - string strona = rootsite + "Sites/TeamsiteWithLists"; - var context = new ClientContext(strona); - context.Credentials = new SharePointOnlineCredentials(credUsername, password); - context.Load(context.Web.Webs, wc => wc.Include(w => w.Url, w => w.Lists)); - SiteProperties collprops = new SiteProperties(context, strona); - collprops.StorageMaximumLevel = 700; - context.Web.Lists.Add(CreateList("Generic List", 100)); - context.Web.Lists.Add(CreateList("Empty Generic List", 100)); - context.Web.Lists.Add(CreateList("Custom List With 5005items", 100)); - context.Web.Lists.Add(CreateList("Generic List With GeolocationColumn", 100)); - context.Web.Lists.Add(CreateList("Links list", 103)); - context.Web.Lists.Add(CreateList("Announcements list", 104)); - context.Web.Lists.Add(CreateList("Contacts list", 105)); - context.Web.Lists.Add(CreateList("Events list", 106)); - context.Web.Lists.Add(CreateList("Tasks list", 107)); - //context.Web.Lists.Add(CreateList("User Information list", 112)); - context.Web.QuickLaunchEnabled = true; - try - { +public static void CreateLis(string rootsite, string credUsername, SecureString password) { + string strona = rootsite + "Sites/TeamsiteWithLists"; + var context = new ClientContext(strona); + context.Credentials = new SharePointOnlineCredentials(credUsername, password); + context.Load(context.Web.Webs, wc => wc.Include(w => w.Url, w => w.Lists)); + SiteProperties collprops = new SiteProperties(context, strona); + collprops.StorageMaximumLevel = 700; + context.Web.Lists.Add(CreateList("Generic List", 100)); + context.Web.Lists.Add(CreateList("Empty Generic List", 100)); + context.Web.Lists.Add(CreateList("Custom List With 5005items", 100)); + context.Web.Lists.Add(CreateList("Generic List With GeolocationColumn", 100)); + context.Web.Lists.Add(CreateList("Links list", 103)); + context.Web.Lists.Add(CreateList("Announcements list", 104)); + context.Web.Lists.Add(CreateList("Contacts list", 105)); + context.Web.Lists.Add(CreateList("Events list", 106)); + context.Web.Lists.Add(CreateList("Tasks list", 107)); + //context.Web.Lists.Add(CreateList("User Information list", 112)); + context.Web.QuickLaunchEnabled = true; + + try { context.ExecuteQuery(); - } - catch(Exception e) - { + } + catch(Exception e) { Status.StatusText = DateTime.Now + " Couldn't create list. " + e.Message + Environment.NewLine + Status.StatusText; - } - context.Dispose(); - - Status.StatusText = DateTime.Now + " Lists are created. Proceeding to fill them with content" + Environment.NewLine + Status.StatusText; - + } + + context.Dispose(); + + Status.StatusText = DateTime.Now + " Lists are created. Proceeding to fill them with content" + Environment.NewLine + Status.StatusText; } } From 01fb2a253d77d2ddce7bfa2c7d5b72cade046ed4 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 20:15:40 +0100 Subject: [PATCH 106/114] Update description.md --- .../description.md | 265 +----------------- 1 file changed, 4 insertions(+), 261 deletions(-) diff --git a/User Profiles/Retrieve all user profiles and their properties using C# and CSOM/description.md b/User Profiles/Retrieve all user profiles and their properties using C# and CSOM/description.md index 221ec711..9991cf47 100644 --- a/User Profiles/Retrieve all user profiles and their properties using C# and CSOM/description.md +++ b/User Profiles/Retrieve all user profiles and their properties using C# and CSOM/description.md @@ -6,9 +6,9 @@ That means that users having access to more than one site will appear more than -The .zip contains: +The ```.zip``` contains: -.exe file with a console application. Install to run. Enter global administrator credentials, the the admin Center url, and the report's path. +```.exe``` file with a console application. Install to run. Enter global administrator credentials, the the admin Center url, and the report's path. sample report @@ -25,354 +25,97 @@ The following properties are retrieved: - +``` "SPS-UserPrincipalName","UserProfile_GUID","SID","ADGuid","AccountName","FirstName","SPS-PhoneticFirstName", "LastName", - - - "SPS-PhoneticLastName", - - - "PreferredName", - - - "SPS-PhoneticDisplayName", - - - "WorkPhone", - - - "Department", - - - "Title", - - - "SPS-JobTitle", - - - "SPS-Department", - - - "Manager", - - - "AboutMe", - - - "PersonalSpace", - - - "PictureURL", - - - "UserName", - - - "QuickLinks", - - - "WebSite", - - - "SPS-DataSource", - - - "SPS-MemberOf", - - - "SPS-Dotted-line", - - - "SPS-Peers", - - - "SPS-Responsibility", - - - "SPS-SipAddress", - - - "SPS-MySiteUpgrade", - - - "SPS-DontSuggestList", - - - "SPS-ProxyAddresses", - - - "SPS-HireDate", - - - "SPS-DisplayOrder", - - - "SPS-ClaimID", - - - "SPS-ClaimProviderID", - - - "SPS-ClaimProviderType", - - - "SPS-LastColleagueAdded", - - - "SPS-OWAUrl", - - - "SPS-SavedAccountName", - - - "SPS-SavedSID", - - - "SPS-ResourceSID", - - - "SPS-ResourceAccountName", - - - "SPS-ObjectExists", - - - "SPS-MasterAccountName", - - - "SPS-UserPrincipalName", - - - "SPS-PersonalSiteCapabilities", - - - "SPS-O15FirstRunExperience", - - - "SPS-PersonalSiteFirstCreationTime", - - - "SPS-PersonalSiteLastCreationTime", - - - "SPS-PersonalSiteNumberOfRetries", - - - "SPS-PersonalSiteFirstCreationError", - - - "SPS-LastKeywordAdded", - - - "SPS-FeedIdentifier", - - - "SPS-PersonalSiteInstantiationState", - - - "WorkEmail", - - - "CellPhone", - - - "Fax", - - - "HomePhone", - - - "Office", - - - "SPS-Location", - - - "Assistant", - - - "SPS-PastProjects", - - - "SPS-Skills", - - - "SPS-School", - - - "SPS-Birthday", - - - "SPS-StatusNotes", - - - "SPS-Interests", - - - "SPS-HashTags", - - - "SPS-PictureTimestamp", - - - "SPS-EmailOptin", - - - "SPS-PicturePlaceholderState", - - - "SPS-PrivacyPeople", - - - "SPS-PrivacyActivity", - - - "SPS-PictureExchangeSyncState", - - - "SPS-MUILanguages", - - - "SPS-ContentLanguages", - - - "SPS-TimeZone", - - - "SPS-RegionalSettings-FollowWeb", - - - "SPS-Locale", - - - "SPS-CalendarType", - - - "SPS-AltCalendarType", - - - "SPS-AdjustHijriDays", - - - "SPS-ShowWeeks", - - - "SPS-WorkDays", - - - "SPS-WorkDayStartHour", - - - "SPS-WorkDayEndHour", - - - "SPS-Time24", - - - "SPS-FirstDayOfWeek", - - - "SPS-FirstWeekOfYear", - - - "SPS-RegionalSettings-Initialized", - - - "OfficeGraphEnabled" - - - - - - +``` ```C# static void Main(string[] args) From fc9891ed80487eedac8e32785bb8bdcfb5b799f5 Mon Sep 17 00:00:00 2001 From: JakubPiegza <45433779+JakubPiegza@users.noreply.github.com> Date: Sun, 1 Mar 2020 20:16:06 +0100 Subject: [PATCH 107/114] Update description.md --- .../description.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/User Profiles/Retrieve all user profiles and their properties using C# and CSOM/description.md b/User Profiles/Retrieve all user profiles and their properties using C# and CSOM/description.md index 9991cf47..4a2b7fe9 100644 --- a/User Profiles/Retrieve all user profiles and their properties using C# and CSOM/description.md +++ b/User Profiles/Retrieve all user profiles and their properties using C# and CSOM/description.md @@ -138,7 +138,7 @@ static void Main(string[] args) Console.ReadKey(); } ``` -It would not exist without Geetanjali's inspiring article: http://social.technet.microsoft.com/wiki/contents/articles/24627.sharepoint-online-export-user-profile-properties-using-csom.aspx +It would not exist without Geetanjali's inspiring [article](http://social.technet.microsoft.com/wiki/contents/articles/24627.sharepoint-online-export-user-profile-properties-using-csom.aspx).

From d8ff8a12cd7766624c75b2f5345146e8954bea6f Mon Sep 17 00:00:00 2001 From: PowershellScripts <42035526+PowershellScripts@users.noreply.github.com> Date: Fri, 6 Mar 2020 19:55:38 +0200 Subject: [PATCH 108/114] Create description.md --- .../description.md | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Tenant Settings/Globally set OneDrive for Business Access Requests and Members Can Share/description.md diff --git a/Tenant Settings/Globally set OneDrive for Business Access Requests and Members Can Share/description.md b/Tenant Settings/Globally set OneDrive for Business Access Requests and Members Can Share/description.md new file mode 100644 index 00000000..7a13599f --- /dev/null +++ b/Tenant Settings/Globally set OneDrive for Business Access Requests and Members Can Share/description.md @@ -0,0 +1,44 @@ +Short Powershell script that modifies the following settings on every user's OneDrive for Business: + + + + + +On- Users with edit permissions can re-share. + +Off- Only OneDrive for Business owner can share. The value of ODBAccessRequestsdefines whether a request to share gets sent to the owner. + +Unspecified- Let each OneDrive for Business owner enable or disable re-sharing behavior on their OneDrive. + + + + + +The script is part of Technet Wiki article OneDrive for Business sharing settings with Powershell. + +## How to use? +Download and open the .ps1 file. +Add correct SharePoint Online SDK libraries: + + +```PowerShell +#Paths to SDK +Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" +Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" +``` Enter the correct url, the setting for the sync button, and admin login. You will be additionally prompted for the password. Do not enter it in the file: +```PowerShell +#Enter the data +$AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString +$username="admin@TENANT.onmicrosoft.com" +$Url="https://TENANT-admin.sharepoint.com" +$ODBMembersCanShare="On" # On, Off, Unspecified +$ODBAccessRequests="Unspecified" #On, Off, Unspecified +``` + + + Run the script + + + + + From 55b585362e38fe1b1d2f8bc9d571fb6b01ba5b6a Mon Sep 17 00:00:00 2001 From: PowershellScripts <42035526+PowershellScripts@users.noreply.github.com> Date: Fri, 6 Mar 2020 19:56:04 +0200 Subject: [PATCH 109/114] Add files via upload --- .../ODBAccessRequests.PNG | Bin 0 -> 40859 bytes .../ODBAccessRequests.ps1 | 54 ++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 Tenant Settings/Globally set OneDrive for Business Access Requests and Members Can Share/ODBAccessRequests.PNG create mode 100644 Tenant Settings/Globally set OneDrive for Business Access Requests and Members Can Share/ODBAccessRequests.ps1 diff --git a/Tenant Settings/Globally set OneDrive for Business Access Requests and Members Can Share/ODBAccessRequests.PNG b/Tenant Settings/Globally set OneDrive for Business Access Requests and Members Can Share/ODBAccessRequests.PNG new file mode 100644 index 0000000000000000000000000000000000000000..7f7ba5260700576e891de2dae8cd1a5acb4d9ddd GIT binary patch literal 40859 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

))dcveQAi-W_yuEq4Pzm+Idt2yn? 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 Date: Fri, 6 Mar 2020 19:57:28 +0200 Subject: [PATCH 110/114] Create description.md --- .../description.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Tenant Settings/Block download of all files for guests in SharePoint with Powershell and CSOM/description.md diff --git a/Tenant Settings/Block download of all files for guests in SharePoint with Powershell and CSOM/description.md b/Tenant Settings/Block download of all files for guests in SharePoint with Powershell and CSOM/description.md new file mode 100644 index 00000000..f7154227 --- /dev/null +++ b/Tenant Settings/Block download of all files for guests in SharePoint with Powershell and CSOM/description.md @@ -0,0 +1,49 @@ +Short Powershell script that prevents external users from downloading the files that have been shared with them using guest link. The script uses CSOM and requires SharePoint Online SDK. The script is described in and is part of Wiki Technet article OneDrive for Business sharing settings with PowerShell . + +Modifying these settings is currently not possible with SharePoint Online Management Shell. + + + + + + +From August 2016 and the CSOM version 16.1.5626.1200 there is an option to prevent external users from downloading the files that have been shared with them using guest link: + + + + + + + + + + + + + + +How to use? +Download and open the .ps1 file. +Add correct SharePoint Online SDK libraries: + + +```PowerShell +#Paths to SDK +Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" +Add-Type -Path "C:\Program Files\SharePoint Client Components\16.0\Assemblies\Microsoft.Online.SharePoint.Client.Tenant.dll" +``` Enter the correct url, the setting for the sync button, and admin login. You will be additionally prompted for the password. Do not enter it in the file: + + +```PowerShell + #Enter the data +$AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString +$username="admin@TENANT.onmicrosoft.com" +$Url="https://TENANT-admin.sharepoint.com" +$BlockDownloadOfAllFilesForGuests=$false #Whether the download should be allowed +``` + Run the script + + + + + From a43e4742d468d7e758805ac1d1ae5a7797661749 Mon Sep 17 00:00:00 2001 From: PowershellScripts <42035526+PowershellScripts@users.noreply.github.com> Date: Fri, 6 Mar 2020 19:58:25 +0200 Subject: [PATCH 111/114] Add files via upload --- .../0882BlockDownload.png | Bin 0 -> 39577 bytes .../1462BlockDownload2.png | Bin 0 -> 49282 bytes .../BlockDownloadOfAllFilesForGuests.ps1 | 48 ++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 Tenant Settings/Block download of all files for guests in SharePoint with Powershell and CSOM/0882BlockDownload.png create mode 100644 Tenant Settings/Block download of all files for guests in SharePoint with Powershell and CSOM/1462BlockDownload2.png create mode 100644 Tenant Settings/Block download of all files for guests in SharePoint with Powershell and CSOM/BlockDownloadOfAllFilesForGuests.ps1 diff --git a/Tenant Settings/Block download of all files for guests in SharePoint with Powershell and CSOM/0882BlockDownload.png b/Tenant Settings/Block download of all files for guests in SharePoint with Powershell and CSOM/0882BlockDownload.png new file mode 100644 index 0000000000000000000000000000000000000000..68c46b097d4d71c1d7e660df7f8717de54e75b89 GIT binary patch literal 39577 zcmcG$S6EZc7ypaYgqF}G2-1s+KmetN7P=ycD2mk36+#sVy@ei%fD)t$*roR#2oR)5 zQIuXoQ6ThQPyGGg^PJmran1$LCdp*>>?v#3`mFCH?!KWe6a5u>3JMA)eLbxQ6cm)A z6cm?!18B+bXjZ}TIl761Qcnb<3k=dmSAe zt)=d>&S~X}5SCe+)`Ws<@wVGL^0=e#oly*&R!zR7@yofZZ_wk_jAbR4!T17f!gYk8>hp9ci?(rJC;7s6`wlj?;M$Tc`I3C)|5Pvi z|Dt+FLwYt$+h>!HYrB7cCY{TMCiAKB9$+Wc2_g;d-P2Mt(`jNx4I8>iJf0JWxml&! zI{)22(*!T<+C-E#!yp__^!&$@G>q(V&bp4{hK#vw=9ucox+xaVoD8|iQ{!}@8dRkQ2f%CCbS-I1-b*bE}M7fXr{Tw>%G zmIv}`&rS{|hCiE3;f6k{wYZZmaq{dPl3C z{VXDX+qA?&@$19SslmHLx~BDB4&tUo*x$_e zEcX^qf>N_D%Dw%=y)4(w*)~&LNbtzVcnyDJ{cDlk-NpvV5sG8hNRiXbaSymri`3TE5$^)T@0J_7*e*2Pc>-t zSMBp(Hzu0=cbZ8<4t$sY8|TU!2GAsM;n+tbKBrCSzY(jEFt1S%q;~AjerDP5qP!*e zM9Da;Eo_TXaVEHVE;yu7?KdBv>Sdjbtwk^w#Fd)xF)!pfo0#DX-pE~;7({-2rUq#) zZdUP*+|6sbpT=sCSvyL*8#6P%;xq^ea}!smXd%J8J<(i}y?#CXJhKrr3`LfWzWr1Y zF|-5J4tV1H#e-Zs7BLGdYO0AXdygEj2^Af46}d<~GX0<{X5!Ck(lm4XvOOd2Y~Os@ z_{-zcTsE~eyHkAEksaRNyl#3^v3;>{AXM$YY3=w3Yx75%S4am__T|x6CF6(@bnx}- z*OU5wd`>gFmCxfYtazC?mw0VApAF6o=_?zuRbB+PtHX8E3mLmK`Zb#&Nb95l*TS15 zf!zlUFP<&mn}zgv@Z_D7Mrv2?(yFZh)4avDlko zX*ODFt@ibPegvBdKz3jHb+&AfigO{K_X?9W!}#KWeolIukZi~)N-RL>#h=;!ds8g~ z=a3n-Z~kKhRW->LwQO07+?~T6Cv;Vu_uc=kZMdU0_I?tbnyeQ!5RX=ZxL`;KJdpSxFEWfk#Jpuby_9Rawux96eN-4f5s3-k;Ki0p{;Og*Q zW}4hfdf2EY`ti6q;VR=Ml;_Fm&VZ#PBXaf>5#FKrna#*3N6Dv1Ba*gXIRdg3{n`r? zE`OMv6$~-%k9yLssm1NQO15!1;8uu9(jXo3JrcmwWU!mKy?`!yQjX6dwuV!c%oIPZ z_KJuAbJa_rf)tXZZHqQdZ<^Qi5infD4)zJa8Nc&p&7kSARu*|s9ffq0s{a1`IFTZt zIVnfoi{X;B`1IXc^H?LdCspKb_G66d0}%3Q6RO;0hmgp%ciWk^(GWDI9XAiO9OcuFq8C;$XNaUu8{HBQj>uH>}6j(v<-!D7Q6Rmfsv)V z1acF@chWqxFKhkHX+N!Us5#J2%o#eH?!-sSC}hB^OC%)bKxScpON`2b;U31HAG|NJ zX^ZGj)8LX~hNeQ0`Qx<1c0|!iz zI)Ttl^33oQNnP>#URS}f3*Ya{^GY;5-%WIh%80M= zWMaWuun`ns=gV4`#~r1%DQYWWd|jJr!c|q5|yDjv;^{?W-gImEV4$L*hOKx2L0sf zq?4>yFc2czZ{1>-E!_e!cHD$Ko+(9Xc?jHT@FlHKn`Fr$Ev%tcC^0agDin_fmgHsA zwS}|jw(>vNq@M-0g~`(H(hblPG4eD+;rCk$@eo1qr@XCDQuWBBCqP@Pb-dbT%88Ij zvclTT&iF516$681Fk%HvEYUXMr~+p`JX$U=d@c%Tb%k&h5mRRG%AywwBP8s2stxH7 z2nk{(^1<^BUdYoYbIXX(8EbNcJ!Ql;cegcLjJ7qQgGYwfbrhn`lB zBmgx=ttzGa3nSB00c<}>uz#!9a*=<*wU;%23Ndvj0rXEJB* zoUBgHanm5e)j3OwO?2@yw}8&cH>x)A*2A(K82~#*QGlLN1=-aYk-vWg0mwDU49CQT z$q61pr!m)qH9qlgZz`Zl8RipJAD38+#nBzN`vbqel!Y7KdxD+y*MNDt!K6c6`FVv) zSn{P{`U@ZJwXlPZ1eeJ=&yuUC!fU+{@KV0vah&cqF-;Rt-ZLSqtNj{*e?TL=?!c3} zkDtT?CO35dk1yC)1Yl$2ioQxU5UBDkZc~x`@Qeb4%NrEaKrH|*YhgTeEBA8J0pY4$ z@6DXCCQeZl9RQJ%tp1J4h%z4n<3e$RVGAZ6ZWxtm)*d29tA`*f^xgDfbQBPoa9K13 z36aCd`y6t>wt9X%?g;>~&_YVloT5B2pXMwuEYZA1G0gS=Z)IQ@FxH5dTd)9z6)L5|T2gD?ye2 zU=tl)jRNL=Z17oa@J-W&`;YhUE%8`Lp_zlrw7$oIkOA~Ky)#xil8^t>g*@bF)yscVW;^+NC!epRObi2Zuq7= zJ1LBKz}cM|%j&q!lYnUdIqPlUHq%1VE1`+z)4Wp`zE81z6D)^%3@A;Bj2KmirL2ZS z_y^htW~IYgtb@8B55%H*HW&%4g>iESimZ?q7a^A&PlQY6hXj@*VOLgku*S?U)fM8U z-(G|~VveBP(1s!4d0bS4G$PR512%zI6wTbirrg53ealOT@w8PgpcOL2c9rtNA%mPv zmH@_neKQzeZ0EsD=nPPc&>Q#_;ttnHCx#SQY0>3Mcs)O@c2u*H+%~G42IzM%+Vur@ zposTg{x6J)?E3<3v$@Zk3@AZiSgpX0)2^B+HqKBbh`i%;P}k_81uG*o7uZCBX7xC# zWQPd#Z9!maY);&?tdV#8_k|dpsR*o6j6P*~J3pCMJ{qE_qLVoj5JA8=n=lqWo@9Zf zb-sw0ve^HljGzz6{6aST`kGW&k(uHV-AtZ_joF%(2V3xxMOEVYyhOfQto(T5a)j@FIxD*EXLvldJFAa}8yaX!kHDwebx`aLs-nSy zao(&w`MhYVf)u$2uOI1P1c>n?are1wsgi+69p{&Y_%A$owJJ^!V4fmeQ<;DHqtS5t z=o|+e{R5P0an##9|9C;~e=eT}+3!Wo`?rSKy_G&D`zbuUlzNf?SwF_xI}ky3M7AEz1;?&)!lQRguJ&Xp!J`m_N&(xW%^@==UbYn*hlk{O-pFN5hz{Y0 zfvo`4gc!L&&i=SV;+wL(3iOvx$(~CM0_Sz-7(T1(Xf9;O-A<<_{oMo?eRF4JV%P0= zJfzmu$k^6iolxM}?CqCb|3cqnnMOQyd$@oNZE`+-)^=0CiqUbj=tJ9+RGz#37ztUA zo)fQyEa)nsz4az{X;^92n0#+y=9r0^ux?~UdZAkr7XacVJZj{1{i~TXrw)DUMEI6S zI+~8I6#kTuOoBMU#84nT?EB)m9imTLySk#@A+2U_{dG;8LUavV!&}MmaA~pSh;!Sf zu`b{Kgm7Inzde}Sf~|uw4|p=$$o?A?PzZHWw7j1mkdRFANup zzfVtExZ(-&2uWI&BKAXO>-iZq&3Xh-5cwvx-CrZ$J%^L&V!hU!CLwHShAs~zgzXzd z08h3btbki3T+71lVw1UjgCk=93;h`~EfMo^0ihNo5Lm1<-5Y1th_kNs~YWD z$TzIrIM#LGVYUKDmO2?T3=O^-!gE&Nj(lfPcQt)Eu*u8S4t6?vyc2z5$TiMcB6d9e zwn$m}Is#t~p~6_-8soK;j~27Y9mri{$T0fqR&(UVlQtb< zZB%EWlW6_IT%~aJz(MwD5@`temS>_cdCvPq@La{5QjmX5%ql1^4L2vJQ`;`vz%!%L zPKq36k>s4_vjkyOo$Azve4L{H+awgp0kE{$|F=Zs|7YOx|5f$LD*IT8CuQnnBxL_z z2ORl@9{9-x?z=Vy?0vba=+(i@r+PEK{>?|DJYT^^?S#vIQQc%vk(sI%8p5V+%$}CV zA#PelCIzF3-17fWiCfL}`1;HYNz00zGl=^?|$mzc%Ud9iY2$8IY9ij}?WJjE~v9BXGf`rDr?J z&Besn>d&=V|0?5{tUD?ssd-M-@HN;fCtC#D*9q|lEBS1l4Cj)$1So}7lzdagNQTF5 zV+)Tyy0&Hu$py`o>qcvG@>GX=CyzF$sFmW#yBi-w#DM$|UbM?nGZp&cMrOD%T}rzo zjnG>PsB`00zS!dG#!xF^0W#Br-ocW)XMu4OYhW2XPWxT?xezB`sJ%kakfmouNGVKo zUh^$Fj@-lj>UiPE(^}Ru(n06R7>+KKNaEa)V-qk~pRBhVDY2~l`O#>C%r<|BIFwl9 z){|J!O%xX=3V!R^IWYepFGFR?{=AwPFMT%+9p>yZgqDpY2Ty;8U;a>!)<{mt#-ds%Wd_T8+FK}TNC zuM2PqAiVelwRi(-lbfG`ZOKz2+nk{~mjsKT z-K@SSjjL|7d<#gnwyVbF^2Mf?@7GpnuD=#%xj;#~Zy^}ic)!pw^LT)!$qwr{xd%)R zI_Al!uf(D`U~f{I9M#{M5`sCud-rbi$NRgauca*&WI8=y6>{Vd`1gIrS|_JB4m{|&zeEvox~02({nc~Ki+tdnN0sUh0_3)QRy_U)3qV;xw zBYsEpLO5EVM^G;0K=nwNYVFlZVezw>#otcDK`t}i=sn)b4y7au_xEq^`IQP}ENh`b z=2)=Q1)1THq(YApZa*LX<~CXPvO(Z8se}9OG zDM?y2IXm@dmrphNnGfWuS48p{O`mcRL-!IT#lY6R$iuh zY>q2WD4ydiE`FFv-!@Yt_hMe=oJ(sn70W%< zl7aXIviW)cO44#X>8kSU23^$sy5N%<@?7h+EabF8wJpkH_|&F<7n?gx)VkM_M|t8O zhP3NS`X3xQKUyw!=zZN^C}Ix+q>!O-9gbHxY#>|lCwV}Zw0cLZLrG0H$hOQ6akc3> ze4D(Sw5WkW4fy-wznvRylPV{p4b1E!2@+LC+%@!$D(>T1m$It<*r@1ARIebH$G!Oy zJ-Yav3sxg9w%VpRRB)0%CeHola`$lzdxx2A2cgV0Xp5hvHuotMNX_15%r|pEj12eeok^}DKHk`kU(;>1rrA56-V<`!Tk=)aLqr4~ zlhJn#8T=l2OyNRtY@FyzA>>3u10*1zvN3&pk56~=`+^<&K`{?HcTYJ$0srXCaG zNsX)7KkobJ%fs$C!uDcsBej?52B4b?nD$VR653$&2;%r?yst8sP0lROcxNp^PGxPi zg-BWrVJr4ZY%o16t}PBA9sdsgW8k8Kde3qEqCoaeEZQUZV1=pX;%|HSK75ho^#!rq z^zi4_zTsJ%sqpN?p6IB{ZJmj{yP$Y8QoCoUpK}{T3Qb4Ph|_K%wAF;Cv=ph2<)5+d+(M%Ujp!AXdHI# zq>Ax=Auj{-mx9_w7WG~=9&_;8hsqMr+`h?~pq+cQ0qBnJCzk~77}DGIRPT&*#E8~e zp*O)fD5{DqT*Rp0q{hrAWwX{Z?Z(ZNzC5*=IFM=HmdZ^zh}1SpFIF21{T-XC8hkw2 zd%K$+tbuYo-Jl#`M3}aiNR33#0Ma70!gg4vZ82UyS1E-JC~aRzZyK3Gp1+#tt8PiF zHNy?<6d5*u*moP6-$#ty`P~$3y$Z9bxPA1c(dV!1ctf(4L+2I4dY1(%jg;42)C05y z??yWA)%eVCO?WRvkdy<4_UR^lHk+7oTfPH9m^W(C4TtACBxyO1ak;E2`{YNiw`IZC zg^K*{5A0JpMasE(?rrBGw?-#}yY8$VZKcCbhCEgko);re_KOlTYk%f~T8MkGl3Bbg zJfX)PDX-k*R6f~dkW^osyQwA7oB>pmvn$)D8PS}i?u3m1{}enrr8R~x^U#TMTM zf}9WX1F1UBFC;>Lw#;}TdhWm0GSh;S^CskBic=7n&gBKGlD(Q58Hb*_<8N8~MiGnH zzj16@K$0#PQM5w|rX<@7KVS)}68z%tCA;v06;kbt@5tYf5lVh`^7i3KPE}Ns&Al>+ zVx-WvGhPyg_SBlKdj6}&-@d{w=n{cb1LoKV@!Jqd2ybuf7~L{g_wbNnD-lkPd1M5! z2f=Qjdjj@W7GbfIjewXn;gt`}PgzpFN60!w~)eEs>Xg$a;U{L?>N z#l#caJcEj_=4u#U@iAX$5{G;%Q=dCw)0lbglkIdCNqnWA7e(M(h(se7pCoeUz7oDnOQ+}pc*;df? zMoWLWxk`9D4Z_INCciR`W#M%LfMFCCAUG!-h_^~VO|;(P^+{aeNq8VZs!_z?)lED# zLL)+&S1k1@naq<26z%}TU5qE{bgL}I1g-}8xE2r!4jb-rPggp+cUj76QsUkR74%YF zDBIoxd6>m+nm!G#4O7(~BM9`IL*AqIf@3j&STKa3HfWx%lWC)TVUa8oWcU^HHB!cN z-zl1lRTOpQy!wfC;FnYA*Kua!3K6i#4v83Wuh=FZzrWHeH6bpAvoCEv{_^P4!zrbG zUOSbp;>sTqj*Z0g+X||=FX`Dplz9849(UwwOXcsP3;No#(93_;o4Bm>PPZb%OH>xp zPEA@bPMo~sp7wO{_y$Rv$HHqQYdxT`N6Ezd;w|jcE7i@U1x}2?!~#z zXwOToz)0!$%78cslw`Q!~_Gpq2i0Scbw~lve@fgld#w z{ULPPE^S~7#>J`oM#ZsRX`9&+Hym5|<%FEvCOeljCoDID`05wX_bhw}qBJ~LgOYA~ zKQ6Bi>jZyJZ z{ySDRWZ!1$PR7}{@dJosuvkeYeeu$0-d&~^Cwn5-XQ;FnAeu|O#b-M8LwM_KT_`|{ zGJ3BBT7S|I*rR5N!0x;~-D=k`E!biw$6#g1N$(zigLO%x^;L{S!JohJ?L}R6iT&o~ zHfI8yj%_wwchwgmUiS_Y%HNlC^)mY|WTX9Zi*HT(n~d_2wg3!iw`a1;w7Hq<@Bg?s zGEf$u@%n(A_9pln-l)wajko%rKXokoIxzD6=$T4#K{3WJgWg3$cuqu zbGB2&idr@E#x7U-qiH}W-cyLQQEOy!MY^5ZB6bX65v({Kw;VReW*aX9d&tJ|b%4=X zS^PcZF(X_dJLNKV47by-EO{Ux1n*;DGkpyfOps@DEV9|HBi?=svtzC|9qJxPcj#-* z7ftVaei^3TEo|UScfews6`0MXdT`^b+veu4QtJyVFZp1xzG!}dVSIA}cJ|4!KCX@# z#ZW=nPmBUiw?Gxta7^Q^N2l(Q8yFn!^5BJI7|wC`rAvQ#`kedW8)Ma=d;Y2(jG-)t zO|=edqva*c<1c?J3LJ^5m{vOaDIYA^C||ATb@% z_MxO++y*Raww3!%+<;Q^)%FP}TG{wP@mWxY3B151=h(V#!4xJUh1-n?EOh*=p8jG@ z5l?$>%6TvFCIe>tn}GyN(q++ml;Pp!rzi3aiki_H?H+;;_2Mnd)>Dcn{C}9bsyOz_ z@s%ew8qtL&KRt6xpe$6HymDamyjcuc^P0-^N#5+nzWc!V-iG_cQLnsfSGf0Y|J{JV z<|T;VdL!aXOFv-bZ&hn_-=y2Ulff7k)8;9QRmG6B-r%;03RMNM+!XzUgHdyzu0{^c zIg6LhhzclJ6tZaz8zT7YGxOl=Nzuig1#^qfg-E>`;>8nnOmYF!hK~=jf6?U(+IF%b zE$T^625U{+X1*Z1il0v??)TOPj5X%ntC*{7DVL%vd9iF?Bwqc-LDR{#cA8DT5j}Bn z?kGQ^3r7@3cx~Lq+FS3MFE!mAu1Abq&#GQA7oV_=KC2yRR4ToDGUwvDC*L*Ive#%h z-tjhX5tsc}%V;aw#3D=d<~UN;biMXf+bA2a=BfRyg*_WH#wH?+Y_V zZFRndAHywjYlk0zWG#AjY!;^YigMpFf}X(HyP0{{7B<WM&BO^cq)m2h|eTsZgO+hTqNJ?w9M1c>1;L7@a| zPzWx<40pd4ReNFze^spdlGVHB-9*0*@XCBh;dj&}Xk9GFw(%e31D=BwPV1n#*TZ(L zBc;}PPXm|K*O}b+L~yYS<{(1+#;KfM-y+ZCK+sZc8#Z;<;N+PUPCJBdQWo%;%)aVf z44%Z!NF(6mz3x9E^;ifahIM%@wdHp(qhT&3XjV9 zxUiUERTWg)?C2o=uzX)7dZP6@cd>EaBR3JujvF;WKG!o|7v1f0TX$l2@q~0Z_O<`( zp!@daRVByfY9`DK-MxE?)13#J3St9RmG{CGjSJd=xACJ@!Qjc%B`Y?$v6r$LQ;OR( zq_+EcN}=Bkt?L}ksoHM&?Oi%Jn199H&k#96`|{G~UWT-l&-jJG&v)fqfBT+1-@IYo z^fwkc5h@D4#kR(2R8tMlOR7BzZ*2g_zK;}>96PP1Lpt-vtCA`P_cGCASLp`E(%%On zpLwi}C5%`)0|bmKx*twdEmuh}Ch6V+kFT)CMrYNAyvWV}@%_Wt#m@GKVG$3^zk6{d zXxu^LIqGk0BGa+FlmcG_plutKDX?#L&`DmqHbv0`=LCY(B#HWJy;3Z}NLlKIzie&j zVRv<+-0hX>;k^@i4cu9^K{7}a3%)X|ZFw3@mQl#wgUge}7j@>{n*DL5Y@S|fh=@yuv7m(vP3u%ninyw4!b(`O+q z2($MGaw)RcE%^`1RNnI)>>~5oI@RqYRyaRGlY^ER-KKu6!XBd0UN;Sb0I6x`FA*aU z8VdqiU=9dBBWpbk)>-3*o4tD4UPgvGm(Fzz{Qy0CMaFSQdrhv0iFI z51UY0Jf2L>AiG3B+o+HN5ODK*UqMy`@Rc9r0spz7^ba`k`*PouFC1&oM1 ziO_NmajFXU_To7J`hYLDi}zHEv1ILUD=%4T-Yie9@wzD(H-qD>LEZPFC+B@p(wpf9 z=H7(g8>&t_870+*mVxFwrpV%hFhtFZ?{X8qo2lO?J=$IerP)p#xyTq{bNg18OUEtDsncXSewv5mx=tZ-?JM#WKxtfTmnFj6_|3#5Nm6=u3nji<4kznjj`mI0Jc&pEH zJ@tFCLU;J_Xpt6^3{s_dcvx$t=i#t}QchkGc8biN*Em~~ou=qsHgcYlMqmy8CpG}u1c-W0TB5c6gAP78Ln`|&#mg=LsGB&7 zcm!dcD?DgObnfI8yzIrHsgVo&uG7X4L-;iX;>uATO{22A;my--0Buq<89fouIUam>Mn5Z(ueRQstL?oRQD8Py}nnm3MYBzr=c8-{@KNSmb ztn3?oBH62%Nhie1X2p`^*)h2Fwvf?hyNuXoFje<@tjm+Ecl7lUNs#UXVEwl#oLpIW zf*cvowk_d+T`sD&x(7++?e`t1WBFhL7&QU@CgOp9f(C z?BbVc+PBA?@)R{9Jm-`=n6|!^<+=3UZiRRSr~Vc3sA3R`7dWUFuF5<~_tfPPd+A7w@_QTE6Q+Qeea@Lo=rEPEAuZa60w6%fR>-OHO2459xQ2LsskSWp9QjWW4K2 zo)zWa!;$8d8_MS8#DaTSwfGys4@I!p=GiAQDBh$@gzJk`Q3d{q<$GtV>#Kf+(=BwX z6bpM&=j9{D)PN<3t%WH4kH)LnVO&=L{HFc0e-%7nB4Bp9NoD=>jSQuFD6sy<%?s^K z8*Fn|YoI~UHK!e`j$ZhI+hx2a+V?e5@%f{t1Lg8A$v(L`n&CEoRedAxemZL$p^Ca% z6^?9=kmhIKIXG&pZ%GxCkpR0*P;P}$*j?ZKpz_gma2IL1)tmWS?Jz_J%(Pp%^M}bW z{kv6g>jxTJjI{94{N z*4yGB546D?J}PGj53v2z#Ii6KW&VbaA0+AM6-IXjq{>@>qQ(9-$p~#ddZ)e8S_k!R zkKOd>P;PI3y{YL&8Qjr2+uh1dlNoHA{)dlO5JLevC*v)}w%C08Z0wLDHAcMh35Ifx z$FU0{(m}T&twCX1RmTg^C1jkTYOnFhWs`G1FDRou9oI6E?Pd9dI&TTAh?vPWy7KUA znx_G?j|%e^?hEYKak4yy_)t>-yD{9vm}}|)?~9$lZ%GRJRdGv|->`jFb@?ES zE@nmyp0?WNPIW2azSi5HhOO0$kPs7;FpJbKur2Q3+RcE1sJNM~8_Lw+e4UU1bd7W5 z!DRtGu!jMZB7#=B<6ZR5tiA>{+qCwrp%zS2s952*c&I>?OyE!L314U@!6?i9)mPJ6 za>8IbH+bn;;7T{ntXRnh`Rg@R&Ca2OdHvbDJwB!W>EPN=DtjF>YkxoHdgSB!RgNbr zzQ-U>UT);XKKoJhN@Zu)q$FuMH+cNctLsjhI`=AyPX@*cNEwrgvc%i^kFmR1RoCCo z)QOljTBYT+%ZJc#`8pK}FV2Q5No{Jd!-B zS`2$tvoole)!38ZWyIx@1{fQVnP36qv8!-nTGW&7&phYs(! ze_A(BO`HpWSv>o@2L9A5BQ5T8;*s4SgyclPP_+H#%AnY` z*&pl3+`E&?PXU*X9Qt-w(+nB1N1k;Pgnm2CJ96r19)fxCLQ%_02`#-j(9C)-oC@1; z6tw%#bDjaZ>js;SDRdFx3<)4rwxqcnLD&oIkPQaqtf9JdUvQafqXTy~fvZPV(8=;_ zUjeLch8cnSwxJYtY1i*&fv;GFQDB5h9MS2anOA5p6|zVep!Dn*o5Jlb$6o66V3V8I z&{ODA3-V^ro87Clf&*2PV?3jSbZop-#$rY_KMgt&ZWO9xJ$RF}pLFyh5R>g>*-5k? zIt7GhhxV(char}D@pYbRQL769+Y}Cbxw-Z%qE$IiNCXhU_?IsNJwtb(43}Vp`9VU~ z5yyRy@(8-ZgtE8HQdrr@T{Mt3cZ*mXJ4%7Mjx!o(Zq}s(fpH)-JJP9-B~7&>2BrN_ zfIS#49+AFk0GBFAoe|(QSl8w2$&_)3XS1E;v~br8WVwyuv>n53M4xh^V>p8VJTSS1 z#lg!V#D%IdLCnq%wVBdvbkAJit<$h(~ z?3olDJj{cZ_ExTR4?qarJuUmYZa{{USK#_iD973yTI*cNE@w!j_MJ`6Ryg!8;)0au zW?D37Z(d7$w_^i-8YgA|{SuT{6O`9`HO@*hI~SU7#j5&jW`>3|7lgXMX+TCe^J&%> zKV?al%HQ@{T{PC|@zm1cPIQ{2DB#>Xp^s7%hcw|Dj6J8J;R+|#Q32F~4rmFB&~JNr zP<_aKQpYjk6aV^uGKt23}?1P>?^Zr5; zS!b!ZdUUJv#>LJZv6E1$^Nf)O>gA1jQ_wF`#ka++KFh$tIIfi)Vump}c?ZAw#*7J( z@i8}`XEA>EjNhHwxQ!}mkWN1YRtEJ-8G!KbZf^`&?QWE=0(#KzpP`Q4@Y+6%zr7{#O8lv5Y#MzQYML5b8sdnAJS z`gFKBdDrUtSgau&guGMkZGa4elmQeDfT4A7HEC><#o19QZIHQ3mjG;p91=umovVWZ zS*XSv@=W0*wc8G!=gdagalllF$zKlXbXinkKV=4wqD)ZNubv@3B-4e>Tw0VSxN5F# zO>E^SV`j;&TOftz`b1=_W^2XNg%wzEAyz$vEvTy(@3UJFzKRbmBD8BLx6eZQ2iEdt zIQP8x2AyEGvE1t_$A2`f4J0A5A!+9=vwlhHwq8_+Q}fbu*#;2aTNQ$2aVOC^@+LAshX>G&J4BIH4e&>V=LcJiY&V%O0GydxB8aAuEwVF zFfQ(1t>%C4->AC39w@T*>#hcwk30#h*HTIn*^M9kd*M89< zH(n??`2h`k&G=)_vTuXQf9CPq%bT zveo%HX;{EU*x@zk#dObWP?n*0cX?Gflo|L=wMq6_w^fGG4@Iz6tg`9k<^u)zb=QOL z_cW?p%T|3g$_iqFaoKEm)$b?8W#o{!?5n(+*^avKncW=kI*m5~s;=U;cRxS3#1cb8 z8TW4LHPzz=ExYM6_$Q~u8lr}^Nj9V~M9<%J>a=>-M$7=L#30Y(Td&nEYJjSJwv-Oh{wo?rzYypAEGrEjiR52P#mPrmz}GPM4n|H^Lw zX7Bre4L>rwfv2v8)`PQS=y()Gg)Lb#_VMT)w#x;ReW5#>vFchtU@;o(tfmuXCN6tl)!V|fwGNS8w-3lg;i-uc`nM=MVCzg@fG9Svjruaw?KdXkb0c6azqqzH{4TnfU3}7 zUi?7q;D&xXijCz4hRQBZW68=XTSn*#iwsZXmJZb4Bh+SAkirxkj0Qft6Y(;q^sV`k*5S%p;?&-vIIPK&gs|pH!9a_ z90v5WDpAdeSq-gAQZuZhn93TtQB}`JP~g;yeqWvzdzad)72TB?V;z|Z$j%SJH9H>h z=Jm1yV1=)~R#nIutFlg)mh!Eimq&Mxz9NbJg=9n}l2x@m+{~e#iDw$zQL9bVhGQk-P&7H?o|=Cjy-r;;RK*(6&R{>oK3HLaRPXS@`h+;Vh7m zm*MwO@5lANP6i}Rkcm>F4Iy+o_*@Rm>_k}}F;q0-lW+biQf$68j(s_pe=Y2fzza`5 zZT)yQeplk;?j=M7i>P!uQDra$ZbK ze8ekyXCCT!vsiSu`o{e}zUo|(ReH2j)Z;&u^Ko?o_G`+C7R%G-50w9~+4aYNe*7ib zcjRUelPsR>$3O`%3;)r%SNtFfKiN>v;_b3o0fHt?VUl`SkR$gApiRAICk$~pO2EM} zX5u)6HZMjg`g(C0JxCXGNmkZz!U}r`kzXdL+wx-4R08pBacGFGvyFf&Ca0+U?~q8&nDPyxSgqj=fa9>RE8hem_E3~la1 z{Lq3UaVMA-==wRws)hKv>~=iVx0}7^(q!YL8ssUX)B%LR4WhD3=6~lNs{^}c#Rygs zNY{i=v9xbc56!kiVmU&jxM-GbUF$(XssNiJFzcxtARL9jKM^_vhsO$yw*?zI$FD|z zd#i>DJzUq0Jb-UEI^p4pEAPJp{QHx?*}z-tHXG-TS@H9#v!$U()kQAO7NHkSe-f^OZxL_waRD-W%Gpn=HjlmadI|4p1O>ltUoYk4DiLvBT}`xPaZs} zP;&h(zpf(CB#-`eBjtU4QBRvUoEMnOwqF?^1J;R|b1Bx(b8uT4VECoS?BD|g<~5-i z?JVDa=W!ZUTp}wEv)h&?0pg4*Qldh0uZd7R%B80UyN+>gE=kDNrAem6$22iCNf%jY zU=Ka{4Ys?~ZBn}6=fGv53kP3*bp@&Et1BW}d+=8*lE7cJYzVlr-iuE2a52020+sbA z$9LTH;s_>|ZcOk9@6^M)6*n&oUW)ueH*I2|NlgRjUkbxfvHrLrcKH&F7(S{-VBtx% zRu0NlZ*b26_Nk5W@xzmQ;K#zRSuZcB7N`N7k7MN{ zPJTw7v+>%+Ngh1Y33qmMWzoP?)7f=a&)2rO56`qu&R`VrFFij<07N=yN2okIH)8j< zrxJ|NoRpMpZ5uCl1RAnP$HZ)^{HVdj+U}5$cEzY7dN!kjB$n6Abb^!`G7jIz)b&nJb)IN-4u&=T z^7&2Jk#izOHM++zCG9vID&JCwuEqCHc(pl}s5up8Oa_PQJ7xd_$*5(U^IFP-?e-tP zD=b0W%1#MP*z?3+f19rP=zA7&D5xjz?~h`PRJyY`9et4W}%+>+cuA1q#&Pi}>K z%$3e8^#&fd91~9uHWfEywk?Ky9HZk{MIlH>UC0$QpwhxoDP;f_hQe;zEFlCJU{GdZ zezmO*wtf@%VKgjj?VJb`IN>j)27xOBn^a<%L&Q-x4ucOxHbZXHx3;ogUVJ0CfR0IC zqi2KUoOt3kwrU&}uzgTV#Dhk+pXtmhy5pa?T#7G-k^3QOT>HyEBB$xcGs_rH(tm`BT*bp0Glke=!#(ux5$f7D37k$%F)ru z)b@GkibqqannjEl>FxJ9UwG0SYFjSIx?t6lm=%!phgdk!<^M-bEB5eWO0&6%>Gwh8 zj`}hVZ=jb~Ct>RkKta057#IeiJQnT}8~TJYeee({i%ohiLm`??kw{gd}Ta z%UHv~5d-UD7Lf^8wlk5ibhCmxMNhx^&ps8yg=H#gr31Pz!JnvJ&y;`fg#@^#nzW?` z;vb^eFMT!HOi5`Bmyb$`2O$9i+cEL_3K zhh97db@v9aOqjqLZO8ZZvYo#FpE5g%-{}8h?@Pm> z-2b@k#*&#aVT3VbFWXEyvW#Vh(1z+HB8)91doi+)!N`OtskG3hlZsNPDQ3u0LZt{X zV~8ZizVrO%)H(nE^}KstJlFGF&-J|Nyf|j=d+z&p|L*Vi^ZhK6d9U(}@6KF*R=4EX z2M)plGhestNu}U-+qHjD&@sAAd8|P|qqho``tN}(hUWfIIG2`un`u* zIIJ(+y=EffxYN7UDo`)`UF?|j z;IHG;53jEn-UX!3oq$ZvGa{Sty!@lbd%sr&bsFs3h-i7x6Wv9TyAu3);H>e{?|1Ca zJjp*%apA|a>h<>`i>i(_YqO8|SE5R4t(>#HKh77hfy;q8Le=_BwKG0G)uH{K<|n;t zR4f+)r)n#g#{fHWTy^JEf4^$%7><9IG(ZPP>>%kjeZth-6uZ#jz?z!)G zum61`+pG%!HKFdEC;06sE%ID1Ld$A(CJ&)SI;C~Sr%$aaX8O)_LEQ4s%JCOy2&+yY z;}Jeq1Gr`|?D+x$q8k6+`ACDihK6JS6^zaqoCu$duOY;jhBUw&zz@%X@I_QeoBx9! zFxB5<;PvVRAd;8y`N^QK3I6`!HlX5eb$@yKX>iZ8cYxX)04Ul=jvphyrnc~ZAsy2s zK_VXEQ}_YJy661n1Et^(=ib|^elee5_=dh(yff5xy&qUh1ORUmK5xDUXwH8&ol~C! zvxU2#fi}Q1<<}K4#q8nbNUNB2SS}7Cmf0!LQXn0l`>@;a%K;|~f4*DEScdksvZL2x z8u-L}ZI?Is`aygVJ70#sI6ZtI2rhy#Bmj}(Yb0e1lILC-@+ED9QYqlry8z38STOti zIoYUMDI_ZC`tMAR`pnIs5&xl|C;kACe&1#)-u+;Va()`2( z^(-0^BlYW6`5i3ieHGus=W%b?v@Ohso2uX$hT%H`JP&&Z7*;3N*H)vZ26tXO#4?3U zqyOA>VapIho4gMUIsAaR#W@o=6`zJAO>wiW%t$PmeH*8>1Y=NOj`$+#=VM?LV4gfV z_N483&Gq=XOZsk)>osfD$O#J^acysWXm1rs+p(}LoZH}*Dk)dkDMCmw`Tq4qC#jFzRwj|2_Wog^PfLG-j(td!DQ8JN@=r!qTzW z*-wX#6a;)Ob#shM0!|R-*>6VP-wXy)^k=7jxF{?M4qkwRX#=$FZbhV&f6yKs?2aAx$r~JK2 z&`qUSrqp9VGrl;ui=vClj_!}|G>aY|V_=fx%=jK4W~W9?CJAfJ!`Bl-G8GJ?t|4k8 ze4dpb9|qcllR~M3U*ebN{F}`QiLO6CKK9?OWD<4*I0bAu)pmsR80cPqv=^mJPx);- zaT3t}gE~siae<@C{z^$o4uZX1m;d;Q5CT%0!BTnPbluX?8Fq%*1I!UL-CxBmS`Y~F zKr>OJFhHnv&eCw3Xtu7O8U6J30h`e43}hm?#=Z^G+9$S3Ev4}IVu%fZk{#oK4^&t* z0L0rIkvvncFCH8i{0*${M zs1g~E$Qn%wghKQlbTMV{AXPN+Wf&>;>+@4rP1tyW6szFwZNmf!DP>v-p^0bL)xwH3 zB0rLps3f0q-7FIGQLjHn-?CVALcCZwTihr00)FtuiT+n#)1a#3cghXBe?DR1pc{!_S)R3CR9{cj-YI@p1YpSQ~ zcpPwX8nz(q*mri*AH7HMXtI?9OXZK_=MgFpz#=sfC#L%K1CGY6YhT6&UT21QT;3i! zZhJ=6odEkFR)hHWPPy((xu~vB8W0t~AKdhnSB)a8x)R5{c4tRxE}5_hqEhlFCv2Ma zMzY&*idG46Es0n=zZ_rIUn-1EWOEpf>Po zbXBwDb8hX|d4Cm-Tr4@~L}Bw-)LVxb7_!-i!=hBS^?54)FcJG$vxrT^8Qup|{N{uc zq67z}6~})M#6eEs7KUT{jAZq(FqP5@OlMuXIcyvGFidYOTRU(ieD+6Yw4v8qy+Eab zbZ4m;wf7UaqC~JHB2iH4&Rx6CEPDcnrTJ_KSCGV#J&NDVQAX5%1bW1Y7=M^;M+&cb z#NA&M^C;!N9!TUjpy)C2{b^(P9#~B<-*#gAs17`57>cwLH^fa%M91isHgOKllF?v~ zse7Z^4ZM_+szMWXR4i<-*`M(Gj9lw-GSX*uL%ljthlbx6VegQ2Ta`*FNgrxwgr?%< z`=WMxO6bNoOldZX!nHu<$qWTm^>+8v1YzCv}T9Md;7J42Sp4tL{Yd6{qI^5SkK8$mnc>< z^P)~@lnq?6_JeI@PP5l`HVH}Ej@DA^skxZC`s_^7r?a|#Ct{f!Ma_x0E1??yO?=m`ruTE=^C|01Z!R1@8?#tFtfK z!li?7Qzu9k0O9bsC0^4BT{ znpg(pvWBfTto1U|tkiBAFc|WSof`|^c?T#uE&kn|w5b{5*Px?5ZXtZVijW>LwTAKV z>iQuY1BnT^#5DrYSW;;(D?tLzr||A+kFd|@N@7l3UL%mT~}1K_>y}@QgS-9sWugTUMrBC;b8`o&*y>Y1@>PIqT)v*0PhHxECo(E#uHe59fYTh` z)9(KM+h;!AJJ9$FSPlWP_Z9xj@AJbWK|tIY?gQ#vhWJ0<<#(tcY=vL=199aXDENCW zdLv{+vXd3jpKDeDO}0# zDnN&z9j*q6k^c94{sM3EJy(q1jdnhoU}%sXwyGOE^n7{TD4-<_qngNInNf10|G7o{ zDGCDvoROXZ{pVrO8x$&N=%Tla68`3VwKX$S#3!EWzOY^>1oCK2E(_R1J}=By+8$ye zSl|ETXxnq!-YeTf@1QO`VdLqB!zKwU3ooO1+chc|zpAzOvTIGkY9X%40ILOz$s%L)H2PSe zC31Tb@b1Lq!0YkCnM;fUgCozo)>fAfWVg5he=twJ5)Sl>he40#Va}KO0#mQ^Mtx9O z(9oT_U&MDxvlTM60;;-7U>s(evU(#4J5;qSP~Wxk+T z_VAelh2d4Qy7JDz$D#eN+~mJz)V5qQdH`C5aZB!|j~D&K{@ENrm8xSEK45!)-_5kx zg-I2gu)!wyym#RrLHS0KEv`2SZn@rkCpLQO_AKNGP&if%egSv@S8P;9IxTOq~2UuLt7^{Gh=`aS}7=FL%whOnFOx%DNdPq2A}aA zjs)^fr66eo&xgRq&Z5jx7{3pKYcRigBVJ?QBey47J;B_B-j}hJKYoBEI}vfI%CI;& z>BzGamoDh+V@(aWP2^W`PjvxP$+s6T8y(F;7&Oa>Gy%`h-s2_>SC=#U;Wa@CdCix- zTmRXML1}!1wO?_AB)z-Yfhz{dJ~7C0yOEepW0@hG+#ALe#YsQ1JBziC?1w z>oe2$c?Ta!3@Za4uM37=Yu9ixDe2pN21$xa4f*&@wi3iKlCXN)DOO}S-#)XHhhCU~ zN_x});k~)drG4m)lVNCO_@gg^^PBrH<4-{^-o;l+jvGEpXCi0DzI^=pgsccVM?Dpx zRMiGMNEX7)8-Gbp>VNfbm(%i`m&+3<1Z0!QFTw!@c!BFN-xOnkb=lS7 z6iwE9Z!xcmzALX@8c02UMUm{mSInUtFYmv*7p!CcU z9XRVD;*~$WxGWfEFgm{+e<`pI^);m1UJ0hvE8MG%I&pVzhmxfNJB}(2*Q7}hw{U*c z$JE8o5AT%f$cF3~`Lo2CX}Q1_*3MsDl`P4N1^dD2*0=4i;$x#9e2{t+p4~3qFSA5c zGF4r!Qb0oAP9D7N?aLl@03FM%L1QXsf1OM5+?5)2E~Z-;oR-c=Gy(JOb%Yb11a`e!e9R-`LLiUbcG2)U0(;(fZai;> z?9C;RF0_Kp{Ohxpq;vyQLm+#d`QGv1SjrsdFYR@q_txYL#mFx5WLV=gaimT=;)5~W zU{RMUi6tM4@kY8E?jb9M9Ja=yo3ObZU+x{y9{$Pmro$9VJqLE2Dy6F7<@8?_V3t=s z)Ek7ulai-cx4;u%9JdhGsVyxuT&I&BnaZP<7b-#Jm+wvgcvKVBU`YqN!gCMVH`Y|G z&^iB=V>ZCIr->e9Gw#%-o>nxtRC=&v*MyB*z|ZnHAw=f1&xxMuHVMjOm7vb6Xh ztWAAaRsPDiJ^+)=@3)a{Hr2k~pRgRP%`myP7U85VRVDv>&$KJxIs1yW*8Q<^I3{8j zR^IUCOzz96H@f3YWScKjxa#<)zYNB`fW5&y<&S_w6fz5x+~(X1Ztce1Nu1euF4M6F z>w}aD$RhiiXs01l=*f+FbtkThYuLef?TuBiG!DioF;F!vUE?s_pn+-zvBKq@6$>Wn zVS|Q|csbb3bo-1*GQ76RX9eSrizt0)?Ob~J>6@q7@fD))35xVQFMpdvm@M+t9L6Wm zyn!C+Q;&;cM2h*+!|S?y%dj4UT(n3af+V*@E&o>7vD<>0wDRT-K>w=a>58YU8*+a_ z5VrEwmNYkM-67szoMTey=U`ei2p!iTm%Q6l)~VT@SkW#sN2)S~Cf-xEQ8FBBoW1MV zUFX^!@=%UDmRzEyAbhj6E5ZVPm1a%dGH+76QBb%#izaKkc^T=IsM36(C?29aPH0G- zHtM4ru{L7r$Trvm$`w-#C47iI)|&j?P*<@^XD` zdE5+h0u&Jp;C&f_uYTp(q9Ik~`1{_t6!30n7i~R3!&$D8T5Zl>(n93~q65eU)39%x zpGPmCkQlm#(NYUV+yEtns(lq&k*RS&dK)w_LIOKRHZf6vhS3GYd;s-zyeKPtfZTnC zVDE>K=9PIDU{Oe^fKRZLbk5|WF{xcEfTOuP|D@3&TbnPB{lD(XH^co^dYRN>a`91K zCD(_|+v+ScA(%!B_qXbSInWek?Y^XSvAe_cC4^zQY?CQnSQ0sI#KDq^Lb{4wUJzBV-iUJUb(b0v=I0SQw|E*xK^|Bd+Mq#%VP03MAJ$P&ab%mv*WPEw zz&3Qewn+14FNMdC2sa+c|G`@1rZ!b2K!jB{4V<35G&zOYAd>5Ku)(7FXuUX#I(a+c zp~STfOSEwNKumX>mnrmmbtCcs!<6iRG|#%ZKDeLrbD+}3?b-A)!2?4x)%Mv0m;3qs zraoPzSU5Z#eM`nRv!-v5yRb})RXu0B9;iAGo!`Vclr>wE=_mM;@3Hm^8A)j_)jv#j zZUf#h%3lh+ZkLG zO*8+annzfhZ_`4ScJlnQvWDUU7%7P`-20x35F4H? z0v`xWNo?Hf3i0);zDAegBH|x~qeiWfVQ259Pg#l(-I4Bdc|kTN+3_B_^#Yxn)Z54r zs%U54;A{6yZPm!cxk$ss*z6zluA=o7EqtJEuw5AY0#Rf#cHnemLLz>4>BkOLR?T*X zA9<&V%=`M#GtVN{(|ShgvMLM}395WYW;!35cBeH(3DNO8RcF>TUd18d=0lxqiuP8S4pr zXH(nW*X9iP*Xj~g-VghoXvQ&3yvK@@C+oYo1Qz;$YJDv{YCuJYo~n>?p2L9EQOk$A z-y7Q=I*F3vW|Xr6aR;yPeVL>7}`4DCK z;!;=Z%SIEl%YXzzL_#PfXpcD~P)a!bEN6I=(L>aUY0gdFF4gX=f*bmDRSYq~ruPbc zyAT{I6F>Z1?bdf+B%sgfd$0v`XFV4*_QCCh%vQ}n`P8r49stAd4-&Mu zcQT;;{SB0~+>_%0+^Ubb1f;XA;Hd!7mO!`?@*t`gDJQ+jZ-*o_Vstoe=29EdM)k9I zz`H${xRcIQ#2=eeDn;5vCKIHQtBqZE{!sEip=cvX5fIyML$Z5lj3jQhn$|PZ43t`z#>jZ3RYPH4A$h(H-Xbn5!pSS7nv{pgv~lgGo9)sT~WtrlCzxNme7p)|7*CAIXZ zkBPSMK170gN3u6(Q^eJ(^g#8_f>#j_Ru(=OB>3(@E$D|`qpw)1%Kz8Z2Ng+va~&WE zG-Rh68Jv(->={1<9UfwyDN3O!qJWAB^%*H0>abNxL}+*z^R7-=z1}99rQD2YowcR-6Bp?xZ7GumsESC0d zGKst{`;D*?K7nD3h2L(krVDe^%9}&*g^K14$f6W@ zEsca+mED_EGJwhI>5JVFD8;QUugIGqdE?>84$*rG!lSPpw~dIWrB17jd=L^7s~hOa z*r)L**;t5fmxvAi z!Wow!P-&%|4`;5py_h!;q;Gi=HCps_1^^0J6+6olE4X^(frpVMirb{=I8P&@RpG~U zYnU6is%X;as495%_3XU7LzAISx@n)929VXV3ii64r-%)z>%v``dFvJ9 zx_`SrHfJq@mi61hCsxmfHRRQNQMz94rdBYj?h!P6sUfISA5BNU#;J9)mp|H*;y}1RZB+&^| zL5Q3zBs?_F+F?zYBTSS}_^uIhqIZbAi&sX?n-d|BXa0p!0Y59L2|b==g8AmyDja^= z(6X50yIwy4*QLp>&$W(yy8u`NFaAZ0#vlmm{hBOFA;M)t4kO*V$kBzK6HDxaNTh14 zo{Oa*G5hj0?5K3xjQ@srfm3POmZVSOdPYMp(bOoIDtW)_G2zuKHqARpuO)PiT~|3h z7znXXs3!gwq7TSGWZs&{DCvvZ?hv;-O;ZkiD$Fy=5&Ow*2M@p90jQhi|6Vu{*8$in zbjts;DD4@TmemR`1)-H}4GPw5SzwuM!w06*W%w7%7xD|<{<{sw`~s!HzdLYgztC&& zFQ6*?hPnT*{Q!yz%0rt~W~3J7#EZyb$K#s;_haj?-_*2|6!GJ;{-HK73OUhLM*93T z=ulAqtCy$7y556n?=jy7dN~+Xe*x9|{%k;EdPMxi&M1Uwb(8~o&lP~)@NFNCca)GO z7}HrVc`T{9dW2IKpYidCF?ELDr@1`xv;Z!P>F?IE}TyKq_Cogi;v49Id%5$j@i^XOK0shA`fWr0%<$=w@^7jdV`Beb`+z#{E9aYwTXk!Mu)_s4mt%SnBB!-MGc6kW(6&c2YqeS2#dfT&>tbqGirPLi{vAy{^Rvk>+3{=xhCd@x@^1HT!V z%{p4B&8Pe@2H7STPwtV$VV;cmcMbmJOfg*li7P|uM z?tWlz2sllx85zLo183()E)tx){O2RjuM#p;A&RDFjDtf7NWw7osi*11>}8=(B#V=P zDd;_Slm)u)@5}@Vv&6Ny(a#R-dzS&ki3kK&Z|~P7Bfg{CsnL#dj7=I~hCx;SJthx* zX?y53@IV1qyD6K23~7-jVAb%Q2;mcG`2L8#I&I;TS(w6bbWPEkq20)!6W3g4lB zt_qAWbZrtuugOQ~VF!}JnGWh%Y+zk_wVeRr%>#Tq3h-vkLC_TNt~5zok*PV$Me0IF z8{F#_!60U^b??Gvedm5~la9nI3-iNP+VZH{e)HpB0pNPw4LHJiWJwIq#Pgcy*do=W zDB#*U)z{S?!tg`QT(?|^3inJjlpqHDepUeUqS3p)@AQuc1s-rGLs!X-I&2Y%H0hgP z|2n9vZTZ10i?MO;!sY{7A(plQ)w~uWPt3!T?CBgUkl_W`e~}nvs`4!;V6{azrk+zI5iKQyuYx%M zuqSN?*K2rGb3$8hqXZY&RTEezD;oQqC^`Fn?@FNmqpR4=0)ta?3|!v;U7Vs>3&{)f z6efuit-ecan)40BWqlzWW>LRbyv@Ze#V^f-KWa*cNZ4*15H=LFt8p$OerCi(9*P1} zlh)nNV7z-VaF9 zOgdN5N#t9hX{1N1Gk<|^3V|I zlC25tw5b9sIa1xR$tpvfD&Z-^Faw8KvN$>79DTOw?me%XS3$Z!Z%+-9k+3hns@bn$ zWE7RNp7AFD3o1vO`wviZ;Qv`oxT?vWCw6$(28N$INMadBIAc#vvScoS6(sUV3`(Gi zzokv)Sm!HpSJ@^Ff~2JPM^E5^CseS@Qcm2NGV22L#v6&ribcpbXm8i7Op_aqOSYzr zKgd^M*6-0BwpS(}wxcE<2-4)UY-Yj?9L(Vs73L^1j|<-wRE?cDMN*x>2|{4?k|eby zC)eZcHwdkn^~=spMI>`>YA3avyCb&Z!n3!&YJOtB_bQhH?+P9ktuc@q`FP77hIrZ+ zlPA-EFA>(}`w3mwTwFyT5i;fV3z?0+Y!Fdns!i4%u+-@uu}kEb6DNq#TXR zbm7Szl;CZyKkK4exvweqCaNNWgdT|LZS6e*#T1-o=<7^v>ouv)bdgS;(rF7=xJK{R zEOJ?s6=!8I4?=YORb%mKFenWwGHg9o5b%D$DRtSiHmAv_TvtIG@I+uyk|}t2uG!1v zMy?>((|)kj*LDQc6kJ-V{Xdy!6e6q~=4>}&<&p7tNc(V%bC&X1uqm223H8a1-f{{9 zxUI|6;|CQ!XNdL55!D7?upiWNS-2B6uyU0)QETOWX;B~gE3AozjgLQwz328YpAx!q zJa%8Hwu7kW#wkKu_o8Gl`V2K{CU4N&c4e1FgAB%QtAWo>*jC|RW#Lx!Jpy*H6ek0S zDdxS9`h6Bvp>*;(4X{B+r2V3j#09z8)(~M%GUs&=Q`VziD&tC=mMsN-H<6}JkE&>- zDkB*Bq-+Txku(b}WGr3_Nw$@s6a!}CcpOa$uSd2nCg_Mbi4g@tMNO3lPx1OM?cDWR zn47mBzLy*oc=R+1u|y9XxLjULGq!Hn^q#QnaBKF_?6B7cEUHk!NlHj^LY9@nLl8^& zSi040*)2sw$+xAV|NY>p+r1J=J6o6&cn&VFrQs|jZO~w@50>&ACxa=)6xKCIGdHU5 zer1aF(r&ipJg+O# z8ntnlye3Oc3)M9>LiHMvlX=FtkdC^oK@FNO6&fUn_}|YS=o%pz*dN+6to14hsk3ER z46_3;yn_{w)_|4vb>bGQ~4niBI(EV%91H(LKxL+dz)8;GZ}+4mD0HKI9Gd2pJNo7GxQRv z*RR20iWXyjU%=QHWBBB!aSDAEt9^mu6h9YackQxWFk4AM)Z^dp2~R2YCe}F_ND&% zdqC!9vExyC>HZR%*RQ9pZ*1|(pLmSFa4{y;%R}ow-wQbBfK|R#Q(C$01qKe0gisp?cEpoc?(fub*dGdKf)0e?Rzn*6qLfk)!=Iu3$**)wi( z$MVPPYkrA~Z@rXN6Ia4@oo^)ZSsd~P9)X)TkHa+}MAUy47RU_XvbOO#LVOmv=jrd7 z{J=|aT5bH)Qa%A^(;vr8NK>FFbO$67FuV1iDg@t<_V3bc+U!;xar@K5BR%|wB^HDW z1lQBxQ6ue`Va00lWO4A<=br#$;pn56bC>xe+0TH$YaYfOv*@xm z(1Kg8uSCvUT+F>#^qI9%tbCyXR}4hQxLGA{TCn) zaHUUr)`4>lo*8-n`OaP?_i~>dqn}-|X|yVEwlCUMxGR9)d$>Acs1#f($1d-%2w8Bw z{*JD_K}hjfFx;fKyK%R@&n%!j52e1<{JrqBsS>-B;KHS>@8Bvuk5Na~g4(<%G;!Ho zTP*@aHstW30faf9wWXVg4dlCTH9xD+y|!=K+a)W|#~ z8sKAmiM=LcZLuve3Y9(+2Ji{(jVK^CIw}&mW${9~ve*S)J5>TPu4vENirn9KlXBmS z25peYZa(A{Kg6(~v~KbP0jw@}9aXe<6<>^tga!llfkbMd2Vl~R zU=v^L0+2!x(aD6Yx*O+amIm{j%%aV9K1AvSyeB;lURzmo0rSk^Bb<0`s#n2-y9#T~ z5C--;&`Y?(sj;f;bNrrC3U{ubvYqO-{YlW;RweCy^FXB2>dp#Z@wf8asJd2^;E8I) zowr{=HvzNgF=0 z9O=~Eup*jdE8*(Q)u{Iuu|OUMjO`wt@<(@4mF1xgZBmGFxiG+X=S!1*=n`oOPtM|| z*h}Sy>1%`rneZXzAN^&dl%B>I#YcrLF|r@h|9x{J1L&Y_)_Y7Qs9*~nUn#KG`39KFQ7blTeyZhpVbcxAfG7TGr(@O$B+{yqJ zxcx)=f2UJ^mkX6Nl^xV!%hg6=fpFkxuK*>D=M0n{CqR^`fnPgF>eTgQRPh6Lhu&f3 zBfqs&YX@K>I?krkA_jePH0XyUgq_^$h+;Q)uQD*(%>*w3flTlBEYc3dutvHVhQ=8_ zjsA=0=e#|wFkxw04F#8kAV-T0$(AKIZ8Ky;@FP}@q?Vh^@|i2j8)eU|uI9>R3WkmtL9_=~rBV!G7NGDgz1-N9w}d>1+v8Ee|V)z^um}K_X(S!1(>{iw1%6 ztsrnX+A%Q!e-c8P+c$q}XI}3t8|7!kP1D(klKEZkfCRL#gvFtYbD+=dF>1qeZJYVR z4$m8NGasE^$eB^2))pGA%z!>G@f7L;xa6NN#81E5{x!3UJRxx%q%>bT9Qm1@DluWt zbXdG(XqR({n-@KB^b^t&kB5lhQDg&{hDJ?K_U(!gI8r-5m{;@J76Cp{iQ`bh5I5|Yhf|<&HZb0+lSvb$&i~!6<8|L3S`wm z83GUiX)rGvbnkxWeylFzJZ+P-+z_|cPMzcEvlHQ@`eR0Ra+CGDG(uXnVmAYH-FUqsDIgf3doNC zU1g;FH&(-SK(Mh5^3xk%qOhR2O)TRvWAW3)#yU!)s9>H7d#cgfXAEaq^(}nXw--z7 zqmgF#8Obb7l6NV#4dudw|*XxCef;gHpO|06Erq+;U`4KuQmGVlB z0n;ak!lK9pRUy=Di*X8bla?Drc2xCOWG*Kw ztB&uk7rt(q^=ja@8tL<+Z3Cx)%C()XPoS$EAMv$gZS$~c$Zv;Y?#!_MB)0w*uNKN{ zF^*rWtj%>s8hcQ6o1AWprA!rg|5@PXJBZ7gOe*mfbvQXfgKdC1xIBWL5ugcDg^7~B zBb6W!$>&%LoKKS| zi3Ty>O!$nQ3O0(0!Ip&9tUjBrMeDhKA}%z#8#Oi)rZhdSo!O!kCx*W5fLTn-0$k0pRQl@=h7vX zKRg#Bwo-nmV)jt3yp=$NY~_oGlfC9HA7D}2G-@A<6qG^O9vV@Wplfg}puQbGk7X9H zakW(ld5E@sT5=b9zP_g9t*}iR^R<%fH5_6I-NKZ%8XK7Brn%OtCll(EWbM4Ki*s$W z#D{p0oWk!fO)KES847}RmtC$1uG)~p90S%No0bSov>aID2g{|`(bqd!b=SFF^5aHg zNGHLc#g^SpUJ|DkZ8&B_fF161kQUe!?;!#vz zaJY%$zt1!@9u4{`6i#EODRzw zPS!Z$axP~Yh)O`J+uu{Qg9SN(Z??!!?c`B;YqD$hjs>)Qs}&A3iw4E3b5@nb7w;xm zs_p=)7Qx>e{+2!DaD^uc`In|tQ`}f@KD1z06A@`~S$%C02lLN8uFnrk1KL}Pi!#;M2mTXNP9v1HxzleZN97YuZeAKmxQobP`b9Qgkq_}^me@Y`Mhpv!*z zm_RVV^rM~U=coZjyZ%%8|8iaU3k#GvjHe(bfj{&H1;bldCQxsHEWI**j3AhB?GKU# zSi|p$d#Pj|Kn+~MaQp!%{f+(KoR=;KMgsiO-5uylgIfztqh?1xb#wzzC+K%?eV;YB zFv$f-&L2uxZ|l+gWnX~2%+2+Lx&y@sUtMK^;wy&u7QK znxA^RiUWwlFv+dlCv`7S!2q>!2#B?L0(398^Z9gu-x%naWFF`o?}Sua0fC9XYW&Q( z-AQ|Q?kopg;R{|Xm^P1rY`4GhCaGVi#wJPT;d~ohfq1`^RG0R-GSq7s^u1%ZFM2)( zAzEFmRH*~I{Z&hm-9QgB{YLL_MN`Pv=NF!9SBFo3+gllN4D{EndG({Wfo`fBeD~Ks zo`-YojyF4mZRiBf4q#6F42(KoOn`8ulZ`kTP%%RY4W`-_e`?@>6sIA>(ZzFhft!6V zR*f(HIursxjlak47Ut}=udm`?=pT9BA#tR^vFXTv&KHb|5A%^RAb&Dwy9N5$kPEFr zAP>PSarM;kdt)hDzX0Hk%1jbT7&iobM+-3%$Y38tcR4N9S|Kyft& zTsNY?A9TF55>D>8wG;97x>d~!AfPkNd#)X1O`|KDewd8`b`Xb$E=c{_7nyY%wU7w< z58#`ig3D{ z1Bb84pm-kkS#@t&!{95-FblAI{9(Fu*?_m_ zkon^ew=(Z!ewHHNHUntw-af-})^_-n`&}IxKFqnW{A>H=pWLLiIj^_^Sd`dP0V3bs zsFMf=(tH|<(zd`Hgmv`>`Uci5@bDOuSXAj)W7swbBJ0YwWBWaBzKod;7`{CUMu5*i zqK+)X98e(m-XJD$Im457WXVZNrS!Q}>^lP_LPWn0BazoD{`;kphTZ8DhJ68|%wK{> zMi(5}Q&jpOcwP%DlN48gfyFq>;r)#XjXs}k=^K>3MeLs&`;zy3K4d{qxXm(Pm?lD0 z6*y;2ruyPqsLnbQ$pvL2T425O%Ze{GW(9&A>+JB?4o{#dV?P2^cNUXr4oj)ZnF2m> zNO6V?U)ebTY_-4C8r2FjB8J|~jlY=a2BI>u;d?pXmPMZIVxcThhxh?BbliN|{NxCm zAx#$z9=^JjPdSoeZUgb7iZQLpC6l~r`?+FCSyfX1Yke1oX25IND-rh0jb0!)4v@~)M-WSBg zq=ers!mW^jeU-9vfowr$6-i)H)_Y+Nj3=q0*I&Y4mrcimhq*P9eO5L2=(n~mj7z~& z5Z;tc-;k!7%nZ+oJg{Bt(p(PvjCfK!Ab~`Q^|sCJ9Jv(_IRjvc7q%q2UQg7|?o);Y z0M6fWtYVuI$T@Mlt_(;Z@M;~II>0q#RJq@-I}7HkY~r+VJ7xxYF1<6Ya@9^aC40Mg zvh^#;Ye-9@{G?^c_bKV=OUKlSVv~)3*f+6v5Ly<>2QPO3Kt3iNgif7lk}Gbb0R@pU zcam^&D+*#s-8As_5v315ikvSUrn9oH zEFu&VN8b*;UrLEC!YbK2li|epmJ-|tq|qyN8Eiz$9q!OI?|K}4@QydK&O0FM=pYzG zMEmnZu)-bL}W^KTfNJE>9WIEaUufTL?l5=D`vy9bH5*D0lniz{}W}={W#@4st`gCMA zT4TX6wpxpPwd%8n@KRbOE!@tPjP59bVs?-v4WX2b^2r-**DI`x1ccNO5Qb>c;T%YER!C=`wQlSIh1zVB5*q;wd|l>szhh< zG>62Ls(+)&K#(Z{^Fn>P3>mr-Mbrr~6c?zq34(a2KFqq3LMC>xPZ6BkEl1hUw~j+Z z8x#l*J;ysAs;Kwz^v+deCe?i;#)u$Jk;6hctIXZ07wI_b!0_v&5!hLfN^huEpnQXj zQpJS-^I)V!U<0ZaCv&Ymrjc7cCXn89=eRt+Et0~6a|%hAH>2*}rui!(t*K$?O5t3a zqJNRLP#O4b(${hIW1F5wI;SD_vl3n&|LXbV6L?-iPRVfuGZ+I+L}oVedwSDMIXb)*H*aHy2t_#M4eII@QY& zGv~q*+oRrWm7&Q}WnwlX4Mn8Y=w;F<|h1 z#r`+5kAGn}gSXuW<*@DzCbEZ_-Xv+9L4sWt6X2Vb0=|Wc-UYZhONA71&uuVuq~(q6q^T-$Gc9LeRT(0Pmx1V5C&FOL>B$<>ucM#&hDjj!9NPK(8nyj_ z!jz;otM3`4Bl@IoGy#sQK($S(BV)VhJtg6pHJG;%VEYN*78tU&aM zx@aoGTM4CKuRgo1EX~q`Y{k3HPlM1t&rKqE^T6ylT$!`kHmi-x+?`fMv`vk40b-(L zMct*ec{+F1V%L6br)2nWWGw6g9mi2#8hs6AtqclJxAlBFwTDkz7y^-zUbk57zVV|1h&I;NE<0gL89^_jBfcEUo-7_mB83um6(S@#3{# zYk|d1*pikX@kJ!8!C3oSns^4@D)(ov%cj61LwRs{V_au z-uzKr-td9%r_>Yqmgz^i_}N=3BRE~0^tFrr2*o>A1VD;p1>kDArSnvZma#wjyJo_J zqv0*3AErF8ReUHI=M&OUViE8JH5`NrkW?J6GH~bzHbk!F zV=-?JiwpZ{!;`WfpX|Ob7RTj%j_J6-Iz^Eq@hpAu`+$dmA+4tY9!ql*y1Hf%9?gi$ zNe@~t8JpL)cvcdQz?;NKcJ^dM_lbOg8@U#Dx)ixb8Vfvd{5{hghkbM(~JZPn-HzS}OZ z_;Z9adVk^M+FzMqo0K~pb{0SH1G%P3#=i2@wRQJX#Dn#g=AD!*X!DKU7X7y09=z{& zlKsCQi#32Jw9VYm@L1i?DzWI{qRG6LZSu{(KpR#?Tm#Pt2&zB0@ln`s#+>~H7i-UJ z{t>vM4|LulpsqI1>24s#CC~|2u7M&)mn;NzQh-99&LAHHg(kOw#^HcMYP|Bh41ins zw+X8qj0Z~{bXpDsbF?&Ze)@+ix75;{C4L@8NQXFF7~29kyHddF9{J`~RH2 z6aPb)3z*596qdARU*Eso_BY?HxmVs>b~d;7-+az1_0TZ#YqtZh?+)OA$sORfiB50= zar*#V=~Vpw&zH-0l->K!$L`I0e5d%i{ux*ECn78BA1`}boPBkj@%N3#<+8v2XRg}# VOz2GC85ss3@O1TaS?83{1OP%P>^=Yh literal 0 HcmV?d00001 diff --git a/Tenant Settings/Block download of all files for guests in SharePoint with Powershell and CSOM/1462BlockDownload2.png b/Tenant Settings/Block download of all files for guests in SharePoint with Powershell and CSOM/1462BlockDownload2.png new file mode 100644 index 0000000000000000000000000000000000000000..2be6bac5b162a621fe31551a187c735cd5530d03 GIT binary patch literal 49282 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 Date: Fri, 6 Mar 2020 20:02:50 +0200 Subject: [PATCH 112/114] Create description.md --- .../description.md | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Lists and Libraries Management/Delete unique permissions in all items in a large list (5000+ items)/description.md diff --git a/Lists and Libraries Management/Delete unique permissions in all items in a large list (5000+ items)/description.md b/Lists and Libraries Management/Delete unique permissions in all items in a large list (5000+ items)/description.md new file mode 100644 index 00000000..f301226c --- /dev/null +++ b/Lists and Libraries Management/Delete unique permissions in all items in a large list (5000+ items)/description.md @@ -0,0 +1,59 @@ +Powershell script to restore inherited permissions for all items in a SharePoint Online list. + + + +The script works with large (5000+) lists. + +In order to make it possible script uses a solution published here: http://www.sptrenches.com/2016/06/get-all-items-in-5000-large-list-with.html and commented by Sharath Aluri here: https://gallery.technet.microsoft.com/office/Delete-unique-permissions-c6ea2b57/view/Discussions#content. + + + +The script is a variation of Delete unique permissions in all items in one single list using Powershell script available on the Technet Gallery. + + + +Before you run it, you have to modify the last lines of the script! + + + + + +PowerShell +# Paths to SDK. Please verify location on your computer. +Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" +Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" + +#Enter the data +$AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString +$username="arleta@TENANT.onmicrosoft.com" +$Url="https://TENANT.sharepoint.com/sites/testID1de" +$ListTitle="testitems" + + +Enter your credentials and the site where you want to modify the inheritance. +Verify if the SharePoint Online SDK is installed in the same location on your computer + + + + + + + + + + +Related scripts: + +Delete unique permissions in all items in one single list using Powershell + +Delete unique permissions for all lists + +Break inheritance for all lists + +Modify inherited permissions for a SharePoint Online site (module) + +Modify list permissions with Powershell cmdlets (module) + +Delete unique permissions (C# program) + +Get lists with unique permissions (C# program) From a8a06627b8c6e44328868faf651473d03f39cd93 Mon Sep 17 00:00:00 2001 From: PowershellScripts <42035526+PowershellScripts@users.noreply.github.com> Date: Fri, 6 Mar 2020 20:03:04 +0200 Subject: [PATCH 113/114] Add files via upload --- .../ResetPermissionInheritanceLargeLists.ps1 | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 Lists and Libraries Management/Delete unique permissions in all items in a large list (5000+ items)/ResetPermissionInheritanceLargeLists.ps1 diff --git a/Lists and Libraries Management/Delete unique permissions in all items in a large list (5000+ items)/ResetPermissionInheritanceLargeLists.ps1 b/Lists and Libraries Management/Delete unique permissions in all items in a large list (5000+ items)/ResetPermissionInheritanceLargeLists.ps1 new file mode 100644 index 00000000..da8f3d5b --- /dev/null +++ b/Lists and Libraries Management/Delete unique permissions in all items in a large list (5000+ items)/ResetPermissionInheritanceLargeLists.ps1 @@ -0,0 +1,93 @@ +function Restore-SPOListAllItemsInheritance +{ + + param ( + [Parameter(Mandatory=$true,Position=1)] + [string]$Username, + [Parameter(Mandatory=$true,Position=2)] + [string]$Url, + [Parameter(Mandatory=$true,Position=3)] + [SecureString]$AdminPassword, + [Parameter(Mandatory=$true,Position=4)] + [string]$ListTitle + ) + + + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) + $ctx.Load($ctx.Web.Lists) + $ctx.Load($ctx.Web) + $ctx.Load($ctx.Web.Webs) + $ctx.ExecuteQuery() + $ll=$ctx.Web.Lists.GetByTitle($ListTitle) + $ctx.Load($ll) + $ctx.ExecuteQuery() + + ## View XML +$qCommand = @" + + + + + 5000 + +"@ +## Page Position +$position = $null + +## All Items +$allItems = @() +Do{ + $camlQuery = New-Object Microsoft.SharePoint.Client.CamlQuery + $camlQuery.ListItemCollectionPosition = $position + $camlQuery.ViewXml = $qCommand + ## Executing the query + $currentCollection = $ll.GetItems($camlQuery) + $ctx.Load($currentCollection) + $ctx.ExecuteQuery() + + ## Getting the position of the previous page + $position = $currentCollection.ListItemCollectionPosition + + # Adding current collection to the allItems collection + $allItems += $currentCollection + + Write-Host "Collecting items. Current number of items: " $allItems.Count + + +} + while($position -ne $null) + + + Write-Host "Total number of items: " $allItems.Count + + for($j=0;$j -lt $allItems.Count ;$j++) + { + + Write-Host "Resetting permissions for " $allItems[$j]["Title"] ".." $allItems[$j]["FileRef"] + $allItems[$j].ResetRoleInheritance() + $ctx.ExecuteQuery() + + } + + + + + + + } + + +# Paths to SDK. Please verify location on your computer. +Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" +Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" + +#Enter the data +$AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString +$username="arleta@TENANT.onmicrosoft.com" +$Url="https://TENANT.sharepoint.com/sites/testID1de" +$ListTitle="testitems" + + +Restore-SPOListAllItemsInheritance -Username $username -Url $Url -AdminPassword $AdminPassword -ListTitle $ListTitle From fa8c13551cdfe2db4a288afa1ec84968a348fe1e Mon Sep 17 00:00:00 2001 From: LocalGitty <42035526+lgitty@users.noreply.github.com> Date: Fri, 6 Mar 2020 20:05:06 +0200 Subject: [PATCH 114/114] copied unique permissions in large lists --- .../ResetPermissionInheritanceLargeLists.ps1 | 93 +++++++++++++++++++ .../description.md | 59 ++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 Permissions/Powershell/Delete unique permissions in all items in a large list (5000+ items)/ResetPermissionInheritanceLargeLists.ps1 create mode 100644 Permissions/Powershell/Delete unique permissions in all items in a large list (5000+ items)/description.md diff --git a/Permissions/Powershell/Delete unique permissions in all items in a large list (5000+ items)/ResetPermissionInheritanceLargeLists.ps1 b/Permissions/Powershell/Delete unique permissions in all items in a large list (5000+ items)/ResetPermissionInheritanceLargeLists.ps1 new file mode 100644 index 00000000..da8f3d5b --- /dev/null +++ b/Permissions/Powershell/Delete unique permissions in all items in a large list (5000+ items)/ResetPermissionInheritanceLargeLists.ps1 @@ -0,0 +1,93 @@ +function Restore-SPOListAllItemsInheritance +{ + + param ( + [Parameter(Mandatory=$true,Position=1)] + [string]$Username, + [Parameter(Mandatory=$true,Position=2)] + [string]$Url, + [Parameter(Mandatory=$true,Position=3)] + [SecureString]$AdminPassword, + [Parameter(Mandatory=$true,Position=4)] + [string]$ListTitle + ) + + + + $ctx=New-Object Microsoft.SharePoint.Client.ClientContext($Url) + $ctx.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Username, $AdminPassword) + $ctx.Load($ctx.Web.Lists) + $ctx.Load($ctx.Web) + $ctx.Load($ctx.Web.Webs) + $ctx.ExecuteQuery() + $ll=$ctx.Web.Lists.GetByTitle($ListTitle) + $ctx.Load($ll) + $ctx.ExecuteQuery() + + ## View XML +$qCommand = @" + + + + + 5000 + +"@ +## Page Position +$position = $null + +## All Items +$allItems = @() +Do{ + $camlQuery = New-Object Microsoft.SharePoint.Client.CamlQuery + $camlQuery.ListItemCollectionPosition = $position + $camlQuery.ViewXml = $qCommand + ## Executing the query + $currentCollection = $ll.GetItems($camlQuery) + $ctx.Load($currentCollection) + $ctx.ExecuteQuery() + + ## Getting the position of the previous page + $position = $currentCollection.ListItemCollectionPosition + + # Adding current collection to the allItems collection + $allItems += $currentCollection + + Write-Host "Collecting items. Current number of items: " $allItems.Count + + +} + while($position -ne $null) + + + Write-Host "Total number of items: " $allItems.Count + + for($j=0;$j -lt $allItems.Count ;$j++) + { + + Write-Host "Resetting permissions for " $allItems[$j]["Title"] ".." $allItems[$j]["FileRef"] + $allItems[$j].ResetRoleInheritance() + $ctx.ExecuteQuery() + + } + + + + + + + } + + +# Paths to SDK. Please verify location on your computer. +Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" +Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" + +#Enter the data +$AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString +$username="arleta@TENANT.onmicrosoft.com" +$Url="https://TENANT.sharepoint.com/sites/testID1de" +$ListTitle="testitems" + + +Restore-SPOListAllItemsInheritance -Username $username -Url $Url -AdminPassword $AdminPassword -ListTitle $ListTitle diff --git a/Permissions/Powershell/Delete unique permissions in all items in a large list (5000+ items)/description.md b/Permissions/Powershell/Delete unique permissions in all items in a large list (5000+ items)/description.md new file mode 100644 index 00000000..f301226c --- /dev/null +++ b/Permissions/Powershell/Delete unique permissions in all items in a large list (5000+ items)/description.md @@ -0,0 +1,59 @@ +Powershell script to restore inherited permissions for all items in a SharePoint Online list. + + + +The script works with large (5000+) lists. + +In order to make it possible script uses a solution published here: http://www.sptrenches.com/2016/06/get-all-items-in-5000-large-list-with.html and commented by Sharath Aluri here: https://gallery.technet.microsoft.com/office/Delete-unique-permissions-c6ea2b57/view/Discussions#content. + + + +The script is a variation of Delete unique permissions in all items in one single list using Powershell script available on the Technet Gallery. + + + +Before you run it, you have to modify the last lines of the script! + + + + + +PowerShell +# Paths to SDK. Please verify location on your computer. +Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll" +Add-Type -Path "c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll" + +#Enter the data +$AdminPassword=Read-Host -Prompt "Enter password" -AsSecureString +$username="arleta@TENANT.onmicrosoft.com" +$Url="https://TENANT.sharepoint.com/sites/testID1de" +$ListTitle="testitems" + + +Enter your credentials and the site where you want to modify the inheritance. +Verify if the SharePoint Online SDK is installed in the same location on your computer + + + + + + + + + + +Related scripts: + +Delete unique permissions in all items in one single list using Powershell + +Delete unique permissions for all lists + +Break inheritance for all lists + +Modify inherited permissions for a SharePoint Online site (module) + +Modify list permissions with Powershell cmdlets (module) + +Delete unique permissions (C# program) + +Get lists with unique permissions (C# program)