Private/TenantUtil.ps1

$global:NameDelimiter = " "

function Get-ServiceNameFromTenant($Tenant) {
    return $TenantPrefix + $Tenant
}

function Get-ServiceDisplayNameFromTenant($Tenant) {
    return  $TenantPrefix + $NameDelimiter + $Tenant
}

function Get-ServicePath {
    return "$env:ProgramFiles\$TenantPrefix"
}

function Get-WebAppNameFromTenant($Tenant) {
    return $TenantPrefix + $Tenant
}

function Get-SiteNameFromTenant($Tenant) { 
    return $TenantPrefix + $NameDelimiter + $Tenant + " Site"
}

function Get-PoolNameFromTenant($Tenant) {
    return $TenantPrefix + $NameDelimiter + $Tenant + " Pool"
}

function Get-DatabaseNameFromTenant($Tenant) {
    return $TenantPrefix + $Tenant
}

function Get-ServerPathFromTenant($Tenant) {
    $servicePath = Get-ServicePath
    return "$servicePath\$Tenant"
}

function Get-TenantsPath {
    return "$env:ProgramData\$TenantPrefix\Tenants\"
}

function Get-NavPathFromTenant($Tenant) {
    return "$env:ProgramData\$TenantPrefix\$Tenant\Config\Adapter\"
}

function Register-Tenant($Tenant, $RemotingPort, $WebServicePort) {
    $serverPath = ServerPathFromTenant $Tenant
    $serviceName = Get-ServiceNameFromTenant $Tenant
    $webApp = Get-WebAppNameFromTenant $Tenant
    
    $tenantInfo = @{
        Role = $Tenant;
        Path = $serverPath;
        WebApplicationName = $webApp;
        RemotingPort = $RemotingPort;
        WebServicePort = $WebServicePort;
        WindowsServiceName = $serviceName;
    }
        
    $data = $tenantInfo | ConvertTo-Json

    $storePath = Get-TenantsPath
    if (!(Test-Path $storePath)) {
        mkdir $storePath
    }
    
    $storePath = $storePath + $Tenant + ".json"
    [System.IO.File]::WriteAllText($storePath, $data)
    Write-Output "Tenant registered in $storePath"
}

function Remove-Tenant($Tenant) {
    $storePath = Get-TenantsPath
    $storePath = $storePath + $Tenant + ".json"
    Write-Output "Removing tenant configuration $storePath"
    remove-item $storePath
}