SIF/1000/Prerequisites/Prerequisites.json

{
    "Parameters": {
        "TempLocation": {
            "Type": "String",
            "Description": "Alternative location to save downloads. If left on the default $Env:Temp will be used.",
            "DefaultValue": "",
            "Validate": "[TestPath(variable('Temp.Location'))]"
        },
        "PSRepositoryPSGallery" : {
            "Type": "String",
            "Description": "Default PS Repository",
            "DefaultValue": "PSGallery"
        },
        "WebPlatformDownload": {
            "Type": "String",
            "Description": "Download location of Microsoft Web Platform Installer 5.x",
            "DefaultValue": "https://download.microsoft.com/download/8/4/9/849DBCF2-DFD9-49F5-9A19-9AEE5B29341A/WebPlatformInstaller_x64_en-US.msi"
        },
        "SQLClrTypesx86Download": {
            "Type": "String",
            "Description": "Download location of SQL CLR Types x86",
            "DefaultValue": "https://download.microsoft.com/download/C/1/9/C1917410-8976-4AE0-98BF-1104349EA1E6/x86/SQLSysClrTypes.msi"
        },
        "SQLClrTypesx64Download": {
            "Type": "String",
            "Description": "Download location of SQL CLR Types x64",
            "DefaultValue": "https://download.microsoft.com/download/C/1/9/C1917410-8976-4AE0-98BF-1104349EA1E6/x64/SQLSysClrTypes.msi"
        },
        "SQLDacFrameworkx86Download": {
            "Type": "String",
            "Description": "Download location of SQL DAC Framework x86",
            "DefaultValue": "https://download.microsoft.com/download/6/E/4/6E406E38-0A01-4DD1-B85E-6CA7CF79C8F7/EN/x86/DacFramework.msi"
        },
        "SQLDacFrameworkx64Download": {
            "Type": "String",
            "Description": "Download location of SQL DAC Framework x64",
            "DefaultValue": "https://download.microsoft.com/download/6/E/4/6E406E38-0A01-4DD1-B85E-6CA7CF79C8F7/EN/x64/DacFramework.msi"
        },
        "VisualC++2015x86Download": {
            "Type": "String",
            "Description": "Download location of Visual C++ 2015 x86",
            "DefaultValue": "https://download.microsoft.com/download/6/D/F/6DF3FF94-F7F9-4F0B-838C-A328D1A7D0EE/vc_redist.x86.exe"
        },
        "VisualC++2015x64Download": {
            "Type": "String",
            "Description": "Download location of Visual C++ 2015 x64",
            "DefaultValue": "https://download.microsoft.com/download/6/D/F/6DF3FF94-F7F9-4F0B-838C-A328D1A7D0EE/vc_redist.x64.exe"
        },
        "SQLODBCDriversx64": {
            "Type": "String",
            "Description": "Download location of SQL ODBC Drivers 13.1",
            "DefaultValue" : "https://download.microsoft.com/download/D/5/E/D5EEF288-A277-45C8-855B-8E2CB7E25B96/x64/msodbcsql.msi"
        },
        "DotNetFrameworkDownload": {
            "Type": "String",
            "Description": "Download location of .net framework",
            "DefaultValue": "https://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/0fd66638cde16859462a6243a4629a50/ndp48-x86-x64-allos-enu.exe"
        },
        "DotNetHostingDownload": {
            "Type": "String",
            "Description": "Download location of .net core 3.1.x Hosting Bundle",
            "DefaultValue": "https://download.visualstudio.microsoft.com/download/pr/8bc07709-5179-4e00-97c1-7ba838a17896/e509eaa80062bb3cfc94d64a7bf70afb/dotnet-hosting-3.1.16-win.exe"
        },
        "DotNet4RegistryLocation": {
            "Type": "String",
            "Description": "Registry location of .net4 release key",
            "DefaultValue": "HKLM:SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full"
        },
        "ComponentBasedServicing": {
            "Type": "String",
            "Description": "Registry location of component based servicing reboot pending key.",
            "DefaultValue": "HKLM:SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Component Based Servicing\\RebootPending"
        }
    },
    "Variables": {
        "SQLServer.Module": "[GetModule(ListAvailable:True,Name:'SqlServer',ErrorAction:'SilentlyContinue')]",
        "SQLServer.Module.First": "[variable('SqlServer.Module')[0]]",
        "SQLServer.Module.Test": "[if(variable('SQLServer.Module'),variable('SQLServer.Module.First'),$null)]",
        "SQLServer.Module.Version": "[SelectObject(InputObject:variable('SQLServer.Module.Test'),ExpandProperty:'Version')]",
        "SQLServer.Module.Version.Compare": "[InvokeExpression(Command:variable('SQLServer.Module.Version.Command'))]",
        "SQLServer.Module.Version.Command": "[concat('[system.version]\"',variable('SQLServer.Module.Null.Version'),'\" -ge [system.version]\"',variable('SQLServer.Module.Minimum.Version'),'\"')]",
        "SQLServer.Module.Null.Version": "[if(variable('SQLServer.Module.Version'),variable('SQLServer.Module.Version'),'0.0')]",
 
        "WebPlatform.Package": "[GetPackage(Name:'Microsoft` Web` Platform` Installer*',ErrorAction:'SilentlyContinue')]",
        "WebPlatform.Version": "[SelectObject(InputObject:variable('WebPlatform.Package'),ExpandProperty:'Version')]",
        "WebPlatform.Version.Compare": "[InvokeExpression(Command:variable('WebPlatform.Version.Command'))]",
        "WebPlatform.Version.Command": "[concat('[system.version]\"',variable('WebPlatform.Null.Version'),'\" -ge [system.version]\"',variable('WebPlatform.Minimum.Version'),'\"')]",
        "WebPlatform.Null.Version": "[if(variable('WebPlatform.Version'),variable('WebPlatform.Version'),'0.0')]",
 
        "WebDeploy.Package": "[GetPackage(Name:'Microsoft` Web` Deploy*',ErrorAction:'SilentlyContinue')]",
        "WebDeploy.Version": "[SelectObject(InputObject:variable('WebDeploy.Package'),ExpandProperty:'Version')]",
        "WebDeploy.Version.Compare": "[InvokeExpression(Command:variable('WebDeploy.Version.Command'))]",
        "WebDeploy.Version.Command": "[concat('[system.version]\"',variable('WebDeploy.Null.Version'),'\" -ge [system.version]\"',variable('WebDeploy.Minimum.Version'),'\"')]",
        "WebDeploy.Null.Version": "[if(variable('WebDeploy.Version'),variable('WebDeploy.Version'),'0.0')]",
 
        "IIS.URLRewrite.Package": "[GetPackage(Name:'IIS` URL` Rewrite` Module` 2',ErrorAction:'SilentlyContinue')]",
        "IIS.URLRewrite.Version": "[SelectObject(InputObject:variable('IIS.URLRewrite.Package'),ExpandProperty:'Version')]",
        "IIS.URLRewrite.Version.Compare": "[InvokeExpression(Command:variable('IIS.URLRewrite.Version.Command'))]",
        "IIS.URLRewrite.Version.Command": "[concat('[system.version]\"',variable('IIS.URLRewrite.Null.Version'),'\" -ge [system.version]\"',variable('IIS.URLRewrite.Minimum.Version'),'\"')]",
        "IIS.URLRewrite.Null.Version": "[if(variable('IIS.URLRewrite.Version'),variable('IIS.URLRewrite.Version'),'0.0')]",
 
        "SQL.CLR.Types.Package": "[GetPackage(Name:'Microsoft` System` CLR` Types` for` SQL` Server` 2017',ErrorAction:'SilentlyContinue')]",
        "SQL.CLR.Types.Version": "[SelectObject(InputObject:variable('SQL.CLR.Types.Package'),ExpandProperty:'Version')]",
        "SQL.CLR.Types.Version.Compare": "[InvokeExpression(Command:variable('SQL.CLR.Types.Version.Command'))]",
        "SQL.CLR.Types.Version.Command": "[concat('[system.version]\"',variable('SQL.CLR.Types.Null.Version'),'\" -ge [system.version]\"',variable('SQL.CLR.Types.Minimum.Version'),'\"')]",
        "SQL.CLR.Types.Null.Version": "[if(variable('SQL.CLR.Types.Version'),variable('SQL.CLR.Types.Version'),'0.0')]",
 
        "SQL.Dac.Framework.x86.Package": "[GetPackage(Name:'Microsoft` SQL` Server` Data-Tier` Application` Framework` `(x86`)',ErrorAction:'SilentlyContinue')]",
        "SQL.Dac.Framework.x86.Version": "[SelectObject(InputObject:variable('SQL.Dac.Framework.x86.Package'),ExpandProperty:'Version')]",
        "SQL.Dac.Framework.x86.Version.Compare": "[InvokeExpression(Command:variable('SQL.Dac.Framework.x86.Version.Command'))]",
        "SQL.Dac.Framework.x86.Version.Command": "[concat('[system.version]\"',variable('SQL.Dac.Framework.x86.Null.Version'),'\" -ge [system.version]\"',variable('SQL.Dac.Framework.x86.Minimum.Version'),'\"')]",
        "SQL.Dac.Framework.x86.Null.Version": "[if(variable('SQL.Dac.Framework.x86.Version'),variable('SQL.Dac.Framework.x86.Version'),'0.0')]",
 
        "SQL.Dac.Framework.x64.Package": "[GetPackage(Name:'Microsoft` SQL` Server` Data-Tier` Application` Framework` `(x64`)',ErrorAction:'SilentlyContinue')]",
        "SQL.Dac.Framework.x64.Version": "[SelectObject(InputObject:variable('SQL.Dac.Framework.x64.Package'),ExpandProperty:'Version')]",
        "SQL.Dac.Framework.x64.Version.Compare": "[InvokeExpression(Command:variable('SQL.Dac.Framework.x64.Version.Command'))]",
        "SQL.Dac.Framework.x64.Version.Command": "[concat('[system.version]\"',variable('SQL.Dac.Framework.x64.Null.Version'),'\" -ge [system.version]\"',variable('SQL.Dac.Framework.x64.Minimum.Version'),'\"')]",
        "SQL.Dac.Framework.x64.Null.Version": "[if(variable('SQL.Dac.Framework.x64.Version'),variable('SQL.Dac.Framework.x64.Version'),'0.0')]",
 
        "VisualC++.x86.Package": "[GetPackage(Name:'Microsoft` Visual` C++` 201*` Redistributable` `(x86`)` -` 14*',ErrorAction:'SilentlyContinue')]",
        "VisualC++.x86.Package.First": "[variable('VisualC++.x86.Package')[0]]",
        "VisualC++.x86.Package.Test": "[if(variable('VisualC++.x86.Package'),variable('VisualC++.x86.Package.First'),$null)]",
        "VisualC++.x86.Version": "[SelectObject(InputObject:variable('VisualC++.x86.Package.Test'),ExpandProperty:'Version')]",
        "VisualC++.x86.Version.Compare": "[InvokeExpression(Command:variable('VisualC++.x86.Version.Command'))]",
        "VisualC++.x86.Version.Command": "[concat('[system.version]\"',variable('VisualC++.x86.Null.Version'),'\" -ge [system.version]\"',variable('VisualC++.x86.Minimum.Version'),'\"')]",
        "VisualC++.x86.Null.Version": "[if(variable('VisualC++.x86.Version'),variable('VisualC++.x86.Version'),'0.0')]",
 
        "VisualC++.x86.Debug.Package": "[GetPackage(Name:'Microsoft` Visual` C++` 201*` x86` Debug` Runtime` -` 14*',ErrorAction:'SilentlyContinue'))]",
        "VisualC++.x86.Debug.Package.First": "[variable('VisualC++.x86.Debug.Package')[0]]",
        "VisualC++.x86.Debug.Package.Test": "[if(variable('VisualC++.x86.Debug.Package'),variable('VisualC++.x86.Debug.Package.First'),$null)]",
        "VisualC++.x86.Debug.Version": "[SelectObject(InputObject:variable('VisualC++.x86.Debug.Package'),ExpandProperty:'Version')]",
        "VisualC++.x86.Debug.Version.Compare": "[InvokeExpression(Command:variable('VisualC++.x86.Debug.Version.Command'))]",
        "VisualC++.x86.Debug.Version.Command": "[concat('[system.version]\"',variable('VisualC++.x86.Debug.Null.Version'),'\" -ge [system.version]\"',variable('VisualC++.x86.Debug.Minimum.Version'),'\"')]",
        "VisualC++.x86.Debug.Null.Version": "[if(variable('VisualC++.x86.Debug.Version'),variable('VisualC++.x86.Debug.Version'),'0.0')]",
 
        "VisualC++.x64.Package": "[GetPackage(Name:'Microsoft` Visual` C++` 201*` Redistributable` `(x64`)` -` 14*',ErrorAction:'SilentlyContinue')]",
        "VisualC++.x64.Package.First": "[variable('VisualC++.x64.Package')[0]]",
        "VisualC++.x64.Package.Test": "[if(variable('VisualC++.x64.Package'),variable('VisualC++.x64.Package.First'),$null)]",
        "VisualC++.x64.Version": "[SelectObject(InputObject:variable('VisualC++.x64.Package.Test'),ExpandProperty:'Version')]",
        "VisualC++.x64.Version.Compare": "[InvokeExpression(Command:variable('VisualC++.x64.Version.Command'))]",
        "VisualC++.x64.Version.Command": "[concat('[system.version]\"',variable('VisualC++.x64.Null.Version'),'\" -ge [system.version]\"',variable('VisualC++.x64.Minimum.Version'),'\"')]",
        "VisualC++.x64.Null.Version": "[if(variable('VisualC++.x64.Version'),variable('VisualC++.x64.Version'),'0.0')]",
 
        "VisualC++.x64.Debug.Package": "[GetPackage(Name:'Microsoft` Visual` C++` 201*` x64` Debug` Runtime` -` 14*',ErrorAction:'SilentlyContinue')]",
        "VisualC++.x64.Debug.Version": "[SelectObject(InputObject:variable('VisualC++.x64.Debug.Package'),ExpandProperty:'Version')]",
        "VisualC++.x64.Debug.Version.Compare": "[InvokeExpression(Command:variable('VisualC++.x64.Debug.Version.Command'))]",
        "VisualC++.x64.Debug.Version.Command": "[concat('[system.version]\"',variable('VisualC++.x64.Debug.Null.Version'),'\" -ge [system.version]\"',variable('VisualC++.x64.Debug.Minimum.Version'),'\"')]",
        "VisualC++.x64.Debug.Null.Version": "[if(variable('VisualC++.x64.Debug.Version'),variable('VisualC++.x64.Debug.Version'),'0.0')]",
 
        "SQL.ODBC.Package": "[GetPackage(Name:'Microsoft` ODBC` Driver` 13` for` SQL` Server',ErrorAction:'SilentlyContinue')]",
        "SQL.ODBC.Version": "[SelectObject(InputObject:variable('SQL.ODBC.Package'),ExpandProperty:'Version')]",
        "SQL.ODBC.Version.Compare": "[InvokeExpression(Command:variable('SQL.ODBC.Version.Command'))]",
        "SQL.ODBC.Version.Command": "[concat('[system.version]\"',variable('SQL.ODBC.Null.Version'),'\" -ge [system.version]\"',variable('SQL.ODBC.Minimum.Version'),'\"')]",
        "SQL.ODBC.Null.Version": "[if(variable('SQL.ODBC.Version'),variable('SQL.ODBC.Version'),'0.0')]",
 
        "Net.Hosting.Package": "[GetPackage(Name:'Microsoft` .NET` Core` 2.1.12` -` Windows` Server` Hosting',ErrorAction:'SilentlyContinue')]",
 
        "VisualC++.x86.Compare": "[or(variable('VisualC++.x86.Version.Compare'),variable('VisualC++.x86.Debug.Version.Compare'))]",
        "VisualC++.x64.Compare": "[or(variable('VisualC++.x64.Version.Compare'),variable('VisualC++.x64.Debug.Version.Compare'))]",
 
        "Check.DotNetFramework.Version" : "[ValidateRange(Min:0,Max:528039,Param:variable('Get.DotNet.Version'))]",
        "Check.Reboot.Pending": "[TestPath(Path:parameter('ComponentBasedServicing'))]",
 
        "IIS.URLRewrite.Minimum.Version": "7.2.1980",
        "SQL.CLR.Types.Minimum.Version": "14.0.1000.169",
        "SQL.Dac.Framework.x86.Minimum.Version": "14.0.4079.2",
        "SQL.Dac.Framework.x64.Minimum.Version": "14.0.4079.2",
        "SQL.ODBC.Minimum.Version": "13.1.4414.46",
        "SQLServer.Module.Minimum.Version": "21.1.18080",
        "VisualC++.x86.Minimum.Version": "14.0.24212.0",
        "VisualC++.x86.Debug.Minimum.Version": "14.0.0",
        "VisualC++.x64.Minimum.Version": "14.0.24212.0",
        "VisualC++.x64.Debug.Minimum.Version": "14.0.0",
        "WebPlatform.Minimum.Version": "5.0.50430.0",
        "WebDeploy.Minimum.Version": "10.0.1973",
 
        "WebPlatform.Download": "[JoinPath(variable('Temp.Location'),'WebPlatformInstaller_amd64_en-US.msi')]",
        "SQL.Clr.Types.x86.Download": "[JoinPath(variable('Temp.Location'),'SQLSysClrTypesx86.msi')]",
        "SQL.Clr.Types.x64.Download": "[JoinPath(variable('Temp.Location'),'SQLSysClrTypesx64.msi')]",
        "SQL.Dac.Framework.x86.Download": "[JoinPath(variable('Temp.Location'),'DacFrameworkx86.msi')]",
        "SQL.Dac.Framework.x64.Download": "[JoinPath(variable('Temp.Location'),'DacFrameworkx64.msi')]",
        "SQL.ODBC.Drivers.X64.Download": "[JoinPath(variable('Temp.Location'),'msodbcsql.msi')]",
        "DotNet.Framework.Download": "[JoinPath(variable('Temp.Location'),'DotNetFramework.exe')]",
        "DotNetHosting.Download": "[JoinPath(variable('Temp.Location'),'dotnet-hosting-win.exe')]",
        "VisualC++2015x86.Download": "[JoinPath(variable('Temp.Location'),'vc_redist.x86.exe')]",
        "VisualC++2015x64.Download": "[JoinPath(variable('Temp.Location'),'vc_redist.x64.exe')]",
 
        "WebPlatformCmd": "[JoinPath(Environment('ProgramFiles'),'Microsoft','Web Platform Installer','WebpiCmd-x64.exe')]",
        "Get.DotNet.Version" : "[GetItemPropertyValue(Path:parameter('DotNet4RegistryLocation'),Name:'Release')]",
 
        "Temp.Location": "[if(variable('Test.Temp.Location'),Environment('Temp'),parameter('TempLocation'))]",
        "Test.Temp.Location": "[equal(parameter('TempLocation'),'')]",
        "IISReset.Location": "[JoinPath(environment('windir'),'System32','IISReset.exe')]",
        "InstallArgs": "/passive /norestart",
        "ExitMessage": "[if(variable('Check.Reboot.Pending'),'Sitecore prerequisites are now installed, you must reboot your machine to allow prerequisite components installations to finish.','Sitecore prerequisites are now installed, YOU MUST launch a new PowerShell session to run further SIF configurations.')]"
    },
    "Register": {
        "Tasks": {
            "InstallModule": "Install-Module",
            "EnableWindowsOptionalFeature": "Enable-WindowsOptionalFeature",
            "StartProcess" : "Start-Process",
            "WriteInformation": "Write-Information"
        },
        "ConfigFunction": {
            "GetModule": "Get-Module",
            "GetPackage": "Get-Package",
            "GetItemPropertyValue" : "Get-ItemPropertyValue",
            "InvokeExpression": "Invoke-Expression",
            "SelectObject": "Select-Object",
            "TestPath": "Test-Path"
        }
    },
    "Tasks": {
        "DownloadVisualC++2015x86": {
            "Type": "DownloadFile",
            "Params": {
                "SourceUri": "[parameter('VisualC++2015x86Download')]",
                "DestinationPath": "[variable('VisualC++2015x86.Download')]"
            },
            "Skip": "[variable('VisualC++.x86.Compare')]"
        },
        "InstallC++2015x86": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('VisualC++2015x86.Download')]",
                "ArgumentList": "[variable('InstallArgs')]",
                "Wait": true
            },
            "Skip": "[variable('VisualC++.x86.Compare')]"
        },
        "DownloadVisualC++2015x64": {
            "Type": "DownloadFile",
            "Params": {
                "SourceUri": "[parameter('VisualC++2015x64Download')]",
                "DestinationPath": "[variable('VisualC++2015x64.Download')]"
            },
            "Skip": "[variable('VisualC++.x64.Compare')]"
        },
        "InstallC++2015x64": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('VisualC++2015x64.Download')]",
                "ArgumentList": "[variable('InstallArgs')]",
                "Wait": true
            },
            "Skip": "[variable('VisualC++.x64.Compare')]"
        },
        "SQLServerModule": {
            "Type": "InstallModule",
            "Params": {
                "Name": "SQLServer",
                "Repository" : "[parameter('PSRepositoryPSGallery')]",
                "MinimumVersion": "[variable('SQLServer.Module.Minimum.Version')]",
                "AllowClobber": true,
                "Force": true
            },
            "Skip": "[variable('SQLServer.Module.Version.Compare')]"
        },
        "WindowsFeatures": {
            "Type": "EnableWindowsOptionalFeature",
            "Params": {
                "Online": true,
                "FeatureName": [
                    "IIS-WebServer",
                    "IIS-WebServerManagementTools",
                    "IIS-ASPNET45",
                    "IIS-ApplicationInit",
                    "NetFx4Extended-ASPNET45",
                    "WAS-ProcessModel",
                    "WAS-WindowsActivationService"
                ],
                "All": true,
                "NoRestart": true
            }
        },
        "DownloadWebPlatformInstaller": {
            "Type": "DownloadFile",
            "Params": {
                "SourceUri": "[parameter('WebPlatformDownload')]",
                "DestinationPath": "[variable('WebPlatform.Download')]"
            },
            "Skip": "[variable('WebPlatform.Version.Compare')]"
        },
        "InstallWebPlatformInstaller": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('WebPlatform.Download')]",
                "ArgumentList": "[variable('InstallArgs')]",
                "Wait": true
            },
            "Skip": "[variable('WebPlatform.Version.Compare')]"
        },
        "InstallWebDeploy3.6": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('WebPlatformCmd')]",
                "ArgumentList": "/Install /AcceptEULA /SuppressReboot /Products:WDeploy36PS",
                "Wait": true
            },
            "Skip": "[variable('WebDeploy.Version.Compare')]"
        },
        "InstallURLRewrite2": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('WebPlatformCmd')]",
                "ArgumentList": "/Install /AcceptEULA /SuppressReboot /Products:UrlRewrite2",
                "Wait": true
            },
            "Skip": "[variable('IIS.UrlRewrite.Version.Compare')]"
        },
        "DownloadSQLClrTypesx86": {
            "Type": "DownloadFile",
            "Params": {
                "SourceUri": "[parameter('SQLClrTypesx86Download')]",
                "DestinationPath": "[variable('SQL.Clr.Types.x86.Download')]"
            },
            "Skip": "[variable('SQL.CLR.Types.Version.Compare')]"
        },
        "InstallSQLClrTypesx86": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('SQL.Clr.Types.x86.Download')]",
                "ArgumentList": "[variable('InstallArgs')]",
                "Wait": true
            },
            "Skip": "[variable('SQL.CLR.Types.Version.Compare')]"
        },
        "DownloadSQLClrTypesx64": {
            "Type": "DownloadFile",
            "Params": {
                "SourceUri": "[parameter('SQLClrTypesx64Download')]",
                "DestinationPath": "[variable('SQL.Clr.Types.x64.Download')]"
            },
            "Skip": "[variable('SQL.CLR.Types.Version.Compare')]"
        },
        "InstallSQLClrTypesx64": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('SQL.Clr.Types.x64.Download')]",
                "ArgumentList": "[variable('InstallArgs')]",
                "Wait": true
            },
            "Skip": "[variable('SQL.CLR.Types.Version.Compare')]"
        },
        "DownloadSQLDacFrameworkx86": {
            "Type": "DownloadFile",
            "Params": {
                "SourceUri": "[parameter('SQLDacFrameworkx86Download')]",
                "DestinationPath": "[variable('SQL.Dac.Framework.x86.Download')]"
            },
            "Skip": "[variable('SQL.Dac.Framework.x86.Version.Compare')]"
        },
        "InstallSQLDacFrameworkx86": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('SQL.Dac.Framework.x86.Download')]",
                "ArgumentList": "[variable('InstallArgs')]",
                "Wait": true
            },
            "Skip": "[variable('SQL.Dac.Framework.x86.Version.Compare')]"
        },
        "DownloadSQLDacFrameworkx64": {
            "Type": "DownloadFile",
            "Params": {
                "SourceUri": "[parameter('SQLDacFrameworkx64Download')]",
                "DestinationPath": "[variable('SQL.Dac.Framework.x64.Download')]"
            },
            "Skip": "[variable('SQL.Dac.Framework.x64.Version.Compare')]"
        },
        "InstallSQLDacFrameworkx64": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('SQL.Dac.Framework.x64.Download')]",
                "ArgumentList": "[variable('InstallArgs')]",
                "Wait": true
            },
            "Skip": "[variable('SQL.Dac.Framework.x64.Version.Compare')]"
        },
        "DownloadSQLODBC": {
            "Type": "DownloadFile",
            "Params": {
                "SourceUri": "[parameter('SQLODBCDriversx64')]",
                "DestinationPath": "[variable('SQL.ODBC.Drivers.X64.Download')]"
            },
            "Skip": "[variable('SQL.ODBC.Version.Compare')]"
        },
        "InstallSQLODBC": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('SQL.ODBC.Drivers.X64.Download')]",
                "ArgumentList": "/passive /norestart IACCEPTMSODBCSQLLICENSETERMS=YES",
                "Wait": true
            },
            "Skip": "[variable('SQL.ODBC.Version.Compare')]"
        },
        "DownloadDotNetMultiTargeting": {
            "Type": "DownloadFile",
            "Params": {
                "SourceUri": "[parameter('DotNetHostingDownload')]",
                "DestinationPath": "[variable('DotNetHosting.Download')]"
            },
            "Skip": "[variable('Net.Hosting.Package')]"
        },
        "InstallDotNetMultiTargeting": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('DotNetHosting.Download')]",
                "ArgumentList": "[variable('InstallArgs')]",
                "Wait": true
            },
            "Skip": "[variable('Net.Hosting.Package')]"
        },
        "DownloadDotNetFramework": {
            "Type" : "DownloadFile",
            "Params": {
                "SourceUri": "[parameter('DotNetFrameworkDownload')]",
                "DestinationPath": "[variable('DotNet.Framework.Download')]"
            },
            "Skip": "[not(variable('Check.DotNetFramework.Version'))]"
        },
        "InstallDotNetFramework": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('DotNet.Framework.Download')]",
                "ArgumentList": "[variable('InstallArgs')]",
                "Wait": true
            },
            "Skip": "[not(variable('Check.DotNetFramework.Version'))]"
        },
        "IISReset": {
            "Type": "StartProcess",
            "Params": {
                "FilePath": "[variable('IISReset.Location')]",
                "ArgumentList": "/Restart",
                "Wait": true
            },
            "Skip": "[variable('Net.Hosting.Package')]"
        },
        "InformUser": {
            "Type": "WriteInformation",
            "Params": {
                "MessageData": "[variable('ExitMessage')]",
                "InformationAction": "Continue"
            }
        }
    }
}