Instantly share code, notes, and snippets.
Created
November 8, 2016 15:09
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save ctkirkman/a575e1941ca79d2ade79c7724aa29939 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function Get-SPSiteList { | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[String]$WebAppUrl | |
) | |
process { | |
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($WebAppUrl) | |
$q = new-object Microsoft.SharePoint.Client.Search.Query.KeywordQuery($ctx) | |
$q.QueryText = "ContentClass=STS_Site" | |
$se = new-object Microsoft.SharePoint.Client.Search.Query.SearchExecutor($ctx) | |
$r = $se.ExecuteQuery($q) | |
$ctx.ExecuteQuery() | |
$ret = @() | |
$r.Value.ResultRows | %{ | |
$ret += New-Object PSObject -property @{ | |
Title = $_["Title"] | |
Description = $_["Description"] | |
Url = $_["Path"] | |
} | |
} | |
return $ret | |
} | |
} | |
function Get-SPWebList { | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[String]$SearchCenter | |
) | |
process { | |
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SearchCenter) | |
$q = new-object Microsoft.SharePoint.Client.Search.Query.KeywordQuery($ctx) | |
$q.QueryText = "ContentClass=STS_Web OR ContentClass=STS_Site" | |
$se = new-object Microsoft.SharePoint.Client.Search.Query.SearchExecutor($ctx) | |
$r = $se.ExecuteQuery($q) | |
$ctx.ExecuteQuery() | |
$ret = @() | |
$r.Value.ResultRows | %{ | |
$ret += New-Object PSObject -property @{ | |
Title = $_["Title"] | |
Description = $_["Description"] | |
Url = $_["Path"] | |
} | |
} | |
return $ret | |
} | |
} | |
function New-SPSearchQuery { | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[String]$SearchCenter, | |
[Parameter(Position=1, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[String]$KeywordQuery | |
) | |
process { | |
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SearchCenter) | |
$q = new-object Microsoft.SharePoint.Client.Search.Query.KeywordQuery($ctx) | |
$q.QueryText = $KeywordQuery | |
$se = new-object Microsoft.SharePoint.Client.Search.Query.SearchExecutor($ctx) | |
$r = $se.ExecuteQuery($q) | |
$ctx.ExecuteQuery() | |
return $r.Value.ResultRows | |
} | |
} | |
function Get-SPWeb { | |
[CmdletBinding()] | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[String]$Identity | |
) | |
process { | |
$ctx = New-Object Microsoft.SharePoint.Client.ClientContext($Identity) | |
$ctx.Credentials = [System.Net.CredentialCache]::DefaultCredentials | |
$web = $ctx.web | |
$ctx.Load($web) | |
$ctx.Load($web.lists) | |
$ctx.Load($web.contenttypes) | |
$ctx.Load($web.webs) | |
$ctx.Load($web.folders) | |
$ctx.ExecuteQuery() | |
return $web | |
} | |
} | |
function Get-SPList { | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[Microsoft.SharePoint.Client.Web]$Web, | |
[Parameter(Position=1, Mandatory=$true)][ValidateNotNullOrEmpty()] | |
[String]$Name | |
) | |
process { | |
$list = $null | |
try { | |
[System.Guid]::Parse($Name) | Out-Null | |
$list = $Web.Lists.GetById($Name) | |
} catch { | |
$list = $Web.Lists.GetByTitle($Name) | |
} | |
$web.Context.Load($list) | |
$web.Context.Load($list.ContentTypes) | |
$web.Context.Load($list.Fields) | |
$web.Context.ExecuteQuery() | |
return $list | |
} | |
} | |
function Get-SPListItems { | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[Microsoft.SharePoint.Client.List]$List, | |
[Parameter(Position=1, Mandatory=$false)] | |
[String]$Filter = "<View><Query></Query><RowLimit>5000</RowLimit></View>" | |
) | |
process { | |
$query = New-Object Microsoft.SharePoint.Client.CamlQuery | |
$query.ViewXml = $Filter | |
$items = $List.GetItems($query) | |
$List.Context.Load($items) | |
$List.Context.ExecuteQuery() | |
return $items | |
} | |
} | |
function Get-SPListItemsAll { | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[Microsoft.SharePoint.Client.List]$List, | |
[Parameter(Mandatory=$false)][ValidateNotNullOrEmpty()] | |
[String]$RowThreshold = 5000, | |
[Parameter(Mandatory=$false)] | |
[String]$Filter = "<View Scope='RecursiveAll'><Query><OrderBy><FieldRef Name='ID' Ascending='TRUE'/></OrderBy></Query><RowLimit Paged='TRUE'>$RowThreshold</RowLimit></View>" | |
) | |
process { | |
$results = @() | |
[Microsoft.SharePoint.Client.ListItemCollectionPosition]$position = $null | |
Do{ | |
$query = New-Object Microsoft.SharePoint.Client.CamlQuery | |
$query.ViewXml = $Filter | |
$query.ListItemCollectionPosition = $position | |
$items = $List.GetItems($query) | |
$List.Context.Load($items) | |
$List.Context.ExecuteQuery() | |
$position = $items.ListItemCollectionPosition | |
$results += $items | |
} Until ($position -eq $null) | |
return $results | |
} | |
} | |
function Remove-SPListItems { | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[System.Object[]]$Items, | |
[Parameter(Mandatory=$false)][ValidateNotNullOrEmpty()] | |
[String]$BatchSize = 250 | |
) | |
process { | |
$ctx = $Items[0].ParentList.ParentWeb.Context | |
$x = 0 | |
$Items | %{ | |
$x++ | |
$_.DeleteObject() | |
if($x -ge $BatchSize) { | |
$ctx.ExecuteQuery() | |
$x = 0 | |
} | |
} | |
$ctx.ExecuteQuery() | |
} | |
} | |
function New-SPListItem { | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[Microsoft.SharePoint.Client.List]$List, | |
[Parameter(Position=1, Mandatory=$false)][ValidateNotNullOrEmpty()] | |
[System.Collections.Hashtable]$Values | |
) | |
process{ | |
$info = new-object Microsoft.SharePoint.Client.ListItemCreationInformation | |
$item = $List.AddItem($info) | |
if ($Values -eq $null) { | |
return $item | |
} else { | |
$Values.Keys | %{ | |
$item[$_] = $Values[$_] | |
} | |
$item.update() | |
$List.Context.Load($item) | |
$List.Context.ExecuteQuery() | |
return $item | |
} | |
} | |
} | |
function Update-SPListItem { | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[Microsoft.SharePoint.Client.ListItem]$Item, | |
[Parameter(Position=1, Mandatory=$true)][ValidateNotNullOrEmpty()] | |
[System.Collections.Hashtable]$Values | |
) | |
process{ | |
$Values.Keys | %{ | |
$Item[$_] = $Values[$_] | |
} | |
$Item.update() | |
$List.Context.Load($Item) | |
$List.Context.ExecuteQuery() | |
return $Item | |
} | |
} | |
function Get-SPUser { | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[Microsoft.SharePoint.Client.Web]$Web, | |
[Parameter(Position=1, Mandatory=$true)][ValidateNotNullOrEmpty()] | |
[String]$Login | |
) | |
process{ | |
$User = $Web.EnsureUser($Login) | |
$Web.Context.Load($User) | |
$Web.Context.ExecuteQuery() | |
return $User | |
} | |
} | |
function Get-SPWebPermissions{ | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)][ValidateNotNullOrEmpty()] | |
[Microsoft.SharePoint.Client.Web]$Web | |
) | |
process { | |
$Web.Context.Load($Web.SiteGroups) | |
$Web.Context.ExecuteQuery() | |
$Web.SiteGroups | %{ $Web.Context.Load($_.Users) } | |
$Web.Context.ExecuteQuery() | |
$Web.SiteGroups | %{ | |
Write-Host $_.Title -ForegroundColor "Yellow" | |
Write-Host "============================================" -ForegroundColor "Yellow" | |
$_.Users | %{ Write-Host "$($_.Title) [$($_.LoginName)] : $($_.PrincipalType)" } | |
Write-Host "" | |
} | |
} | |
} | |
function Get-SPObjectPropertyRetrievals { | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)] | |
[System.Type]$Object, | |
[Parameter(Position=1, Mandatory=$true)][ValidateNotNullOrEmpty()] | |
[System.Array]$Properties | |
) | |
process { | |
$retrievals = @() | |
$lambda = [System.Linq.Expressions.Expression].GetMethods() | ?{ $_.Name -eq "Lambda" -and $_.IsGenericMethod -and $_.GetParameters()[0].ParameterType -eq [System.Linq.Expressions.Expression] -and $_.GetParameters()[1].ParameterType -eq [System.Linq.Expressions.ParameterExpression[]] } | |
$lambdaGM = $lambda.MakeGenericMethod($(Invoke-Expression "[System.Func``2[$($Object.FullName),System.Object]]")) | |
$Properties | %{ | |
$retrievals += $lambdaGM.Invoke( | |
$null, | |
[System.Object[]]@( | |
[System.Linq.Expressions.Expression]::Property([System.Linq.Expressions.Expression]::Parameter($($Object), "o" ), $_), | |
[System.Linq.Expressions.ParameterExpression[]] @([System.Linq.Expressions.Expression]::Parameter($($Object), "o" )) | |
) | |
) | |
} | |
return $retrievals | |
} | |
} | |
function Get-SPObjectIncludeRetrievals { | |
#[Microsoft.SharePoint.Client.ClientObject] | |
#[Microsoft.SharePoint.Client.ClientObjectCollection] | |
param( | |
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)] | |
[System.Type]$Object, | |
[Parameter(Position=1, Mandatory=$true)] | |
[System.Type]$Collection, | |
[Parameter(Position=2, Mandatory=$true)] | |
[System.String]$PropertyName, | |
[Parameter(Position=3, Mandatory=$true)][ValidateNotNullOrEmpty()] | |
[System.Array]$Properties | |
) | |
process { | |
#$include = [Microsoft.SharePoint.Client.ClientObjectQueryableExtension].GetMethod("Include") | |
#$includeGM = $include.MakeGenericMethod($($Collection.BaseType.GenericTypeArguments[0].FullName)) | |
#$lambda = [System.Linq.Expressions.Expression].GetMethods() | ?{ $_.Name -eq "Lambda" -and $_.IsGenericMethod -and $_.GetParameters()[0].ParameterType -eq [System.Linq.Expressions.Expression] -and $_.GetParameters()[1].ParameterType -eq [System.Linq.Expressions.ParameterExpression[]] } | |
#$lambdaGM = $lambda.MakeGenericMethod($(Invoke-Expression "[System.Func``2[$($Object.FullName),System.Object]]")) | |
#$retrievals = Get-SPObjectPropertyRetrievals -Object $Collection -Properties $Properties | |
#$callMethod = [System.Linq.Expressions.Expression]::Call($null, $include.MakeGenericMethod($($Collection.BaseType.GenericTypeArguments[0].FullName)), $retrievals) | |
#$return = $lambdaGM.Invoke($null, @($callMethod, [System.Linq.Expressions.ParameterExpression[]] @($collectionParam))) | |
$retrievals = Get-SPObjectPropertyRetrievals -Object $Collection.GetProperty("Item").PropertyType -Properties $Properties | |
$newArrayInitParam1 = Invoke-Expression "[System.Linq.Expressions.Expression``1[System.Func````2[$($Object.FullName),System.Object]]]" | |
$newArrayInit = [System.Linq.Expressions.Expression]::NewArrayInit($newArrayInitParam1, $retrievals) | |
$collectionParam = [System.Linq.Expressions.Expression]::Parameter($parentObject.GetType(), "cp") | |
$collectionProperty = [System.Linq.Expressions.Expression]::Property($collectionParam, $PropertyName) | |
$expressionArray = @($collectionProperty, $newArrayInit) | |
$includeMethod = [Microsoft.SharePoint.Client.ClientObjectQueryableExtension].GetMethod("Include") | |
$includeMethodGeneric = Invoke-Expression "`$includeMethod.MakeGenericMethod([$($Object.FullName)])" | |
$lambdaMethodGeneric2 = Invoke-Expression "`$lambdaMethod.MakeGenericMethod([System.Func``2[$($parentObject.GetType().FullName),System.Object]])" | |
$callMethod = [System.Linq.Expressions.Expression]::Call($null, $includeMethodGeneric, $expressionArray) | |
$expression2 = $lambdaMethodGeneric2.Invoke($null, @($callMethod, [System.Linq.Expressions.ParameterExpression[]] @($collectionParam))) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment