I don't understand why Set-SPOSite would not be an option if you are using PowerShell, install the components, you'd need to install the DLLs for the client side components anyway.
#The size in MB to set existing site collections
$newQuota = 10240
$sites = Get-SPOSite -Limit All
foreach($site in $sites){
#If the site has a storage quota of zero, it is managed internally, skip over it
if($site.StorageQuota -ne 0){
Set-SPOSite -Identity $site -StorageQuota $newQuota
}
}
Just last week I created these in our PowerShell module, again, there is no reason here that prevents you from using set-sposite to manage video channel quotas:
#region Office Video
function Get-SPOVideoChannels {
<#
.Synopsis
Pulls back all the video channels in Office 365 Video
.DESCRIPTION
Pulls back all the video channels in Office 365 Video
.EXAMPLE
$videos = Get-SPOVideoChannels
foreach($channel in $videos.GetEnumerator()){
$channel
}
.OUTPUTS
Returns a collection of channels
.NOTES
This operation takes a little time to complete, be patient
#>
$channelInventory = New-Object System.Collections.Specialized.OrderedDictionary
$SPOQueryUrl= "https://tenant.sharepoint.com/_api/search/query?querytext=%27contentclass:sts_site WebTemplate:POINTPUBLISHINGTOPIC%27&SelectProperties=%27Sitename%27&rowlimit=5000"
$request = [System.Net.WebRequest]::Create($SPOQueryUrl)
$request.Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($credential.UserName, $credential.Password)
$request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f")
$request.Accept = "application/json;odata=verbose"
$request.Method = [Microsoft.PowerShell.Commands.WebRequestMethod]::Get
$response = $request.GetResponse()
$requestStream = $response.GetResponseStream()
$readStream = New-Object System.IO.StreamReader $requestStream
$data = $readStream.ReadToEnd()
$results = $data | ConvertFrom-Json
$N4result = $results.d.query.PrimaryQueryResult.RelevantResults.Table.Rows.results.Cells.results
$Channels = @()
foreach($r in $N4result){
if($r.Key -eq "SiteName") {
$Channels += $r.Value
}
}
foreach($chname in $Channels){
$site = Get-SPOSite -Identity $chname -Detailed
$channelInventory.Add($site.Title, [PSCustomObject] @{
URL = $site.URL
StorageGB = [System.Math]::Round(($site.StorageUsageCurrent/1024),2)
QuotaGB = ($site.StorageQuota/1024)
WarningGB = [System.Math]::Round(($site.StorageQuotaWarningLevel/1024),2)
UsagePercentage = [System.Math]::Round(($site.StorageUsageCurrent/$site.StorageQuota)*100,0)
})
}
return $channelInventory
}
function Set-SPOChannelQuotas {
<#
.SYNOPSIS
Updates site quota settings.
.DESCRIPTION
Updates site quota settings.
.PARAMETER Url
The site collection Url
.PARAMETER GBs
The storage tier in GB.
.EXAMPLE
Updating a project space
Set-SPOChannelQuotas -Url "https://tenant.sharepoint.com/portals/communications" -GBs 5
#>
Param(
[Parameter(Mandatory=$true,HelpMessage="The channel URL",Position=0)][ValidateNotNull()]
[string]$Url,
[Parameter(Mandatory=$true,HelpMessage="The storage tier in GBs",Position=1)][ValidateSet("1","5","10","15","20","25")]
[string]$GBs
)
switch ($GBs){
"5" {
$storage = 5120
$warn = 4608
}
"10" {
$storage = 10240
$warn = 9216
}
"15" {
$storage = 15360
$warn = 13824
}
"20" {
$storage = 20480
$warn = 18432
}
"25" {
$storage = 25600
$warn = 23040
}
default {
$storage = 1024
$warn = 922
}
}
Set-SPOSite -Identity $Url -StorageQuotaWarningLevel $warn -StorageQuota $storage
}