Skip to content

Commit 8849773

Browse files
committed
sharepoint / onedrive fixes
1 parent 8173fe7 commit 8849773

File tree

3 files changed

+80
-46
lines changed

3 files changed

+80
-46
lines changed

Modules/CIPPCore/Public/Add-CIPPGroupMember.ps1

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,16 @@ function Add-CIPPGroupMember(
1212
$addmemberbody = "{ `"[email protected]`": $(ConvertTo-Json @($MemberIDs)) }"
1313
if ($GroupType -eq 'Distribution list' -or $GroupType -eq 'Mail-Enabled Security') {
1414
$Params = @{ Identity = $GroupId; Member = $member; BypassSecurityGroupManagerCheck = $true }
15-
New-ExoRequest -tenantid $TenantFilter -cmdlet 'Add-DistributionGroupMember' -cmdParams $params -UseSystemMailbox $true
15+
$null = New-ExoRequest -tenantid $TenantFilter -cmdlet 'Add-DistributionGroupMember' -cmdParams $params -UseSystemMailbox $true
1616
} else {
17-
New-GraphPostRequest -uri "https://graph.microsoft.com/beta/groups/$($GroupId)" -tenantid $TenantFilter -type patch -body $addmemberbody -Verbose
17+
$null = New-GraphPostRequest -uri "https://graph.microsoft.com/beta/groups/$($GroupId)" -tenantid $TenantFilter -type patch -body $addmemberbody -Verbose
1818
}
1919
$Message = "Successfully added user $($Member) to $($GroupId)."
2020
Write-LogMessage -user $ExecutingUser -API $APIName -tenant $TenantFilter -message $Message -Sev 'Info'
2121
return $message
22-
return
2322
} catch {
24-
$message = "Failed to add user $($Member) to $($GroupId)"
23+
$message = "Failed to add user $($Member) to $($GroupId) - $($_.Exception.Message)"
2524
Write-LogMessage -user $ExecutingUser -API $APIName -tenant $TenantFilter -message $message -Sev 'error' -LogData (Get-CippException -Exception $_)
2625
return $message
2726
}
28-
2927
}

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-ExecSetSharePointMember.ps1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ Function Invoke-ExecSetSharePointMember {
1111
param($Request, $TriggerMetadata)
1212

1313
if ($Request.body.SharePointType -eq 'Group') {
14-
$GroupId = (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/groups?`$filter=mail eq '$($Request.Body.GroupID)'" -tenantid $Request.Body.TenantFilter).id
14+
$GroupId = (New-GraphGetRequest -uri "https://graph.microsoft.com/beta/groups?`$filter=mail eq '$($Request.Body.GroupID)' or proxyAddresses/any(x:endsWith(x,'$($Request.Body.GroupID)'))&`$count=true" -ComplexFilter -tenantid $Request.Body.TenantFilter).id
1515
if ($Request.body.Add -eq $true) {
16-
$Results = Add-CIPPGroupMember -GroupType 'Team' -GroupID $GroupID -Member $Request.Body.input -TenantFilter $Request.Body.TenantFilter -ExecutingUser $request.headers.'x-ms-client-principal'
16+
$Results = Add-CIPPGroupMember -GroupType 'Team' -GroupID $GroupID -Member $Request.Body.user.value -TenantFilter $Request.Body.TenantFilter -ExecutingUser $request.headers.'x-ms-client-principal'
1717
} else {
18-
$UserID = (New-GraphGetRequest -uri "https://graph.microsoft.com/v1.0/users/$($Request.Body.input)" -tenantid $Request.Body.TenantFilter).id
18+
$UserID = (New-GraphGetRequest -uri "https://graph.microsoft.com/v1.0/users/$($Request.Body.user.value)" -tenantid $Request.Body.TenantFilter).id
1919
$Results = Remove-CIPPGroupMember -GroupType 'Team' -GroupID $GroupID -Member $UserID -TenantFilter $Request.Body.TenantFilter -ExecutingUser $request.headers.'x-ms-client-principal'
2020
}
2121
} else {

Modules/CIPPCore/Public/Entrypoints/HTTP Functions/Teams-Sharepoint/Invoke-ListSites.ps1

Lines changed: 74 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -10,72 +10,108 @@ Function Invoke-ListSites {
1010
[CmdletBinding()]
1111
param($Request, $TriggerMetadata)
1212

13-
$APIName = $TriggerMetadata.FunctionName
14-
Write-LogMessage -user $request.headers.'x-ms-client-principal' -API $APINAME -message 'Accessed this API' -Sev 'Debug'
13+
$TenantFilter = $Request.Query.TenantFilter
14+
$Type = $request.query.Type
15+
$UserUPN = $request.query.UserUPN
1516

17+
if (!$TenantFilter) {
18+
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
19+
StatusCode = [HttpStatusCode]::BadRequest
20+
Body = 'TenantFilter is required'
21+
})
22+
return
23+
}
1624

17-
# Write to the Azure Functions log stream.
18-
Write-Host 'PowerShell HTTP trigger function processed a request.'
25+
if (!$Type) {
26+
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
27+
StatusCode = [HttpStatusCode]::BadRequest
28+
Body = 'Type is required'
29+
})
30+
return
31+
}
32+
33+
$Tenant = Get-Tenants -TenantFilter $TenantFilter
34+
$TenantId = $Tenant.customerId
35+
36+
if ($Type -eq 'SharePointSiteUsage') {
37+
$Filter = 'isPersonalSite eq false'
38+
} else {
39+
$Filter = 'isPersonalSite eq true'
40+
}
1941

20-
# Interact with query parameters or the body of the request.
21-
$TenantFilter = $Request.Query.TenantFilter
22-
$type = $request.query.Type
23-
$UserUPN = $request.query.UserUPN
2442
try {
25-
$Result = New-GraphGetRequest -uri "https://graph.microsoft.com/beta/reports/get$($type)Detail(period='D7')" -tenantid $TenantFilter | ConvertFrom-Csv
43+
$BulkRequests = @(
44+
@{
45+
id = 'listAllSites'
46+
method = 'GET'
47+
url = "sites/getAllSites?`$filter=$($Filter)&`$select=id,createdDateTime,description,name,displayName,isPersonalSite,lastModifiedDateTime,webUrl,siteCollection,sharepointIds"
48+
}
49+
@{
50+
id = 'usage'
51+
method = 'GET'
52+
url = "reports/get$($type)Detail(period='D7')?`$format=application/json"
53+
}
54+
)
2655

27-
if ($UserUPN) {
28-
$ParsedRequest = $Result | Where-Object { $_.'Owner Principal Name' -eq $UserUPN }
29-
} else {
30-
$ParsedRequest = $Result
56+
$Result = New-GraphBulkRequest -tenantid $TenantFilter -Requests @($BulkRequests) -asapp $true
57+
$Sites = ($Result | Where-Object { $_.id -eq 'listAllSites' }).body.value
58+
$UsageBase64 = ($Result | Where-Object { $_.id -eq 'usage' }).body
59+
$UsageJson = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($UsageBase64))
60+
$Usage = ($UsageJson | ConvertFrom-Json).value
61+
62+
$GraphRequest = foreach ($Site in $Sites) {
63+
$SiteUsage = $Usage | Where-Object { $_.siteId -eq $Site.sharepointIds.siteId }
64+
[PSCustomObject]@{
65+
siteId = $Site.sharepointIds.siteId
66+
webId = $Site.sharepointIds.webId
67+
createdDateTime = $Site.createdDateTime
68+
displayName = $Site.displayName
69+
webUrl = $Site.webUrl
70+
ownerDisplayName = $SiteUsage.ownerDisplayName
71+
ownerPrincipalName = $SiteUsage.ownerPrincipalName
72+
lastActivityDate = $SiteUsage.lastActivityDate
73+
fileCount = $SiteUsage.fileCount
74+
storageUsedInGigabytes = [math]::round($SiteUsage.storageUsedInBytes / 1GB, 2)
75+
storageAllocatedInGigabytes = [math]::round($SiteUsage.storageAllocatedInBytes / 1GB, 2)
76+
storageUsedInBytes = $SiteUsage.storageUsedInBytes
77+
storageAllocatedInBytes = $SiteUsage.storageAllocatedInBytes
78+
rootWebTemplate = $SiteUsage.rootWebTemplate
79+
reportRefreshDate = $SiteUsage.reportRefreshDate
80+
AutoMapUrl = ''
81+
}
3182
}
32-
$GraphRequest = $ParsedRequest | Select-Object AutoMapUrl, @{ Name = 'UPN'; Expression = { $_.'Owner Principal Name' } },
33-
@{ Name = 'displayName'; Expression = { $_.'Owner Display Name' } },
34-
@{ Name = 'LastActive'; Expression = { $_.'Last Activity Date' } },
35-
@{ Name = 'FileCount'; Expression = { [int]$_.'File Count' } },
36-
@{ Name = 'UsedGB'; Expression = { [math]::round($_.'Storage Used (Byte)' / 1GB, 2) } },
37-
@{ Name = 'URL'; Expression = { $_.'Site URL' } },
38-
@{ Name = 'Allocated'; Expression = { [math]::round($_.'Storage Allocated (Byte)' / 1GB, 2) } },
39-
@{ Name = 'Template'; Expression = { $_.'Root Web Template' } },
40-
@{ Name = 'siteid'; Expression = { $_.'site Id' } }
4183

42-
#Temporary workaround for url as report is broken.
43-
#This API is so stupid its great.
44-
$URLs = New-GraphGetRequest -uri 'https://graph.microsoft.com/beta/sites/getAllSites?$select=SharePointIds,name,webUrl,displayName,siteCollection' -asapp $true -tenantid $TenantFilter
4584
$int = 0
4685
if ($Type -eq 'SharePointSiteUsage') {
47-
$Requests = foreach ($url in $URLs) {
86+
$Requests = foreach ($Site in $GraphRequest) {
4887
@{
4988
id = $int++
5089
method = 'GET'
51-
url = "sites/$($url.sharepointIds.siteId)/lists?`$select=id,name,list,parentReference"
90+
url = "sites/$($Site.siteId)/lists?`$select=id,name,list,parentReference"
5291
}
5392
}
5493
$Requests = (New-GraphBulkRequest -tenantid $TenantFilter -scope 'https://graph.microsoft.com/.default' -Requests @($Requests) -asapp $true).body.value | Where-Object { $_.list.template -eq 'DocumentLibrary' }
94+
$GraphRequest = foreach ($Site in $GraphRequest) {
95+
$ListId = ($Requests | Where-Object { $_.parentReference.siteId -like "*$($Site.siteId)*" }).id
96+
$site.AutoMapUrl = "tenantId=$($TenantId)&webId={$($Site.webId)}&siteid={$($Site.siteId)}&webUrl=$($Site.webUrl)&listId={$($ListId)}"
97+
$site
98+
}
5599
}
56-
$GraphRequest = foreach ($site in $GraphRequest) {
57-
$SiteURLs = ($URLs.SharePointIds | Where-Object { $_.siteId -eq $site.SiteId })
58-
$site.URL = $SiteURLs.siteUrl
59-
$ListId = ($Requests | Where-Object { $_.parentReference.siteId -like "*$($SiteURLs.siteId)*" }).id
60-
$site.AutoMapUrl = "tenantId=$($SiteUrls.tenantId)&webId={$($SiteUrls.webId)}&siteid={$($SiteURLs.siteId)}&webUrl=$($SiteURLs.siteUrl)&listId={$($ListId)}"
61-
$site
62-
}
63-
64100
$StatusCode = [HttpStatusCode]::OK
65-
101+
66102
} catch {
67103
$ErrorMessage = Get-NormalizedError -Message $_.Exception.Message
68104
$StatusCode = [HttpStatusCode]::Forbidden
69105
$GraphRequest = $ErrorMessage
70106
}
71107
if ($Request.query.URLOnly -eq 'true') {
72-
$GraphRequest = $GraphRequest | Where-Object { $null -ne $_.URL }
108+
$GraphRequest = $GraphRequest | Where-Object { $null -ne $_.webUrl }
73109
}
74110

75111
# Associate values to output bindings by calling 'Push-OutputBinding'.
76112
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
77113
StatusCode = $StatusCode
78-
Body = @($GraphRequest | Sort-Object -Property UPN)
114+
Body = @($GraphRequest | Sort-Object -Property displayName)
79115
})
80116

81117
}

0 commit comments

Comments
 (0)