Load-Assemblies.ps1

# Copyright 2016 Cloudbase Solutions Srl
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#

$here = Split-Path -Parent $MyInvocation.MyCommand.Path
$libDir = Join-Path $here "lib"

function ServerLevelKey {
    <#
    .SYNOPSIS
    Returns the path to the registry location where information about the server levels is stored
    #>

    PROCESS {
        return "HKLM:Software\Microsoft\Windows NT\CurrentVersion\Server\ServerLevels"
    }
}

function IsNanoServer {
    <#
    .SYNOPSIS
    Return a boolean value of $true if we are running on a Nano server version.
    #>

    PROCESS {
        $serverLevelKey = ServerLevelKey
        if (!(Test-Path $serverLevelKey)){
            # We are most likely running on a workstation version
            return $false
        }
        $serverLevels = Get-ItemProperty $serverLevelKey
        return ($serverLevels.NanoServer -eq 1)
    }
}

function Initialize-Assemblies {
    $isNano = IsNanoServer
    $assemblyDir = Join-Path $libDir "net35"
    if($isNano){
        # Load the portable assembly
        $assemblyDir = Join-Path $libDir "net45"
    }
    $assemblyFile = Join-Path $assemblyDir "YamlDotNet.dll"
    try {
        [YamlDotNet.Serialization.Serializer] | Out-Null
    } catch [System.Management.Automation.RuntimeException] {
        if(!(Test-Path $assemblyFile)) {
            Throw "Could not find YamlDotNet assembly on the system"
        }
        if($isNano){
            return [Microsoft.PowerShell.CoreCLR.AssemblyExtensions]::LoadFrom($assemblyFile)
        }
        return [Reflection.Assembly]::LoadFrom($assemblyFile)
    }
}

Initialize-Assemblies | Out-Null