SetOnlineInstanceAdminMode.ps1

#
# OnlineInstanceAdminMode.ps1
#

param(
[string]$TenantId , #The tenant Id where your instance resides
[string]$ApplicationId , #The application Id used for the connection
[string]$ApplicationSecret, #The application secret used for connection
[string]$EnvironmentUrl,
[bool]$Enable = $true,
[string]$PowerAppsAdminModulePath,
[string]$CrmConnectorModulePath,
[bool]$AllowBackgroundOperations = $true,
[string]$NotificationText,
[bool]$WaitForCompletion = $false,
[int]$TimeoutInMinutes = 3
)

$ErrorActionPreference = "Stop"

Write-Verbose 'Entering OnlineInstanceAdminMode.ps1'

#Parameters
Write-Verbose "TenantId = $TenantId"
Write-Verbose "ApplicationId = $ApplicationId"
Write-Verbose "ApplicationSecret = $ApplicationSecret"
Write-Verbose "EnvironmentUrl = $EnvironmentUrl"
Write-Verbose "Enable = $Enable"
Write-Verbose "AllowBackgroundOperations = $AllowBackgroundOperations"
Write-Verbose "NotificationText = $NotificationText"
Write-Verbose "WaitForCompletion = $WaitForCompletion"
Write-Verbose "PowerAppsAdminModulePath = $PowerAppsAdminModulePath"

#Script Location
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
Write-Verbose "Script Path: $scriptPath"

#Import Modules

$xrmCIToolkit = $scriptPath + "\Xrm.Framework.CI.PowerShell.Cmdlets.dll"
Write-Verbose "Importing: $xrmCIToolkit"
Import-Module $xrmCIToolkit

Write-Verbose "Import Crm Connector: $CrmConnectorModulePath"
Import-module "$CrmConnectorModulePath\Microsoft.Xrm.Tooling.CrmConnector.PowerShell.psd1"

Write-Verbose "Importing PowerApps Admin Module: $PowerAppsAdminModulePath"
Import-module "$PowerAppsAdminModulePath\Microsoft.PowerApps.Administration.PowerShell.psd1"

#Connect

Write-Verbose "Connecting to PowerApps Endpoint"
Add-PowerAppsAccount -TenantID $TenantId -ApplicationId $ApplicationId -ClientSecret $ApplicationSecret -Endpoint prod

$CrmConnectionString = "AuthType=ClientSecret;url=$EnvironmentUrl;ClientId=$ApplicationId;ClientSecret=$ApplicationSecret"

$CRMConn = Get-CrmConnection -ConnectionString $CrmConnectionString
$EnvironmentId = $CRMConn.EnvironmentId

if ($Enable)
{
    $RuntimeState = "AdminMode"
}
else
{
    $RuntimeState = "Enabled"
}

Write-Output "Setting Environment $EnvironmentUrl Id:$EnvironmentId to State: $RuntimeState"

$response = Set-AdminPowerAppEnvironmentRuntimeState -EnvironmentName $EnvironmentId -RuntimeState $RuntimeState -WaitUntilFinished $WaitForCompletion -TimeoutInMinutes $TimeoutInMinutes

if ($response.Code -eq 200)
{
    Write-Output "Environment $EnvironmentUrl Id:$EnvironmentId set to State: $RuntimeState"
}
else
{
    throw "Error setting RuntimeState Code:$($response.Code) Error:$($response.Error)"
}

Write-Verbose 'Leaving OnlineInstanceAdminMode.ps1'