As you are all aware, the old Orchestrator console was built on Silverlight and Silverlight has been completely discontinued. Read more about the Silverlight announcement here. So, Microsoft built a brand-new web console for System Center Orchestrator 2019. The new web console works well on modern browsers without Silverlight dependency. This console will only work SCORCH 2019 onwards.

Here is the complete process on how to install the console on SCORCH 2019.

  1. Installed the following 2 prerequisites as recommended.

URL Rewrite : The Official Microsoft IIS Site

Please install the ASP.NET Core Hosting bundle for IIS (.NET Core v5.x.y).

https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-aspnetcore-5.0.17-windows-hosting-bundle-installerhttps://dotnet.microsoft.com/permalink/dotnetcore-current-windows-runtime-bundle-installer

2. Now download the Zip file from the following link.


Download System Center Orchestrator 2019 Web Console & Web API from Official Microsoft Download Center

 

3. Now will configure the WebAPI first.

 

a. Created a Directory as C:\inetpub\Orchestrator.

b. Copied all the items which are present in the folder Orchestrator.WebApi.

c. Open PowerShell and run the following command.

.\new_iis_site.ps1 -SiteName NewOrchConsole -AppPool SCOMWEB -Port 4201 -PhysicalPath "C:\inetpub\NewOrchConsole" -PoolIdentityType SpecificUser

d. Now run the following command to test the connection. Here my Orchestrator server is scorch2019.

invoke-RestMethod -Uri http://localhost:4202/api/login -UseDefaultCredentials

Output would like below.

$id
username   version

— ——–   ——-

1  
LAB\sourav 0.1.0

 

3. Now will configure Web console

 

a. Created a Directory as C:\inetpub\Webconsole.

b. Copied all the items which are present in the folder Orchestrator.WebConsole.

c. Open PowerShell and run the following command.

.\new_iis_site.ps1 -SiteName NewWebConsole -AppPool Webconsolepool -Port 4202 -PhysicalPath C:\inetpub\We\NewWebConsole -PoolIdentityType SpecificUser

d. Now open the web.config file from C:\inetpub\Orchestrator.


Change from:

<add name="Access-Control-Allow-Origin" value=" http://localhost:4202" />

Change To:

<add name="Access-Control-Allow-Origin" value=" http://localhost:4201" />

 

N:B: Please provide the Web console port number. Here my web console port is 4201.

 

Change from:

<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
</environmentVariables>

Change To:

<environmentVariables>
<environmentVariable name="Database__Database" value="Orchestrator2019" />
<environmentVariable name="Database__Trusted_Connection" value="true" />
<environmentVariable name="Database__Address" value="sql2017\scom2019" />
</environmentVariables>
  • Another method is to use IIS CORS module. Here is the example and how to use it.

The sample WebApi `web.config` makes use of `<customHeaders>`, which as you rightly point out, limits the use of just one domain name for the WebConsole. I’d like to add another method of enabling CORS without relying on `customHeaders` or wildcard rewrite rules to replace the Allow-Origin header:

 

Install the IIS CORS module and use this as a sample `web.config`:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <!-- Setting failUnlistedOrigin=true will serve 403 when the request origin does not match the ones listed here.
      Setting it to false will also fail such requests but silently -->
      <cors enabled="true" failUnlistedOrigins="true">
        <!-- origin is the address used to access the WebConsole (not WebApi!) using a browser -->
        <!-- Here we are allowing user to browse the WebConsole on http://localhost:5001 -->
        <add origin="http://localhost:5001" allowCredentials="true" maxAge="7200">
          <allowMethods>
            <add method="GET" />
            <add method="PUT" />
            <add method="POST" />
            <add method="PATCH" />
            <add method="DELETE" />
          </allowMethods>
          <allowHeaders allowAllRequestedHeaders="true" />
        </add>
        <!-- Here we are allowing user to browse the WebConsole on http://test-machine.test.domain:5001 -->
        <add origin="http://test-machine.test.domain:5001" allowCredentials="true" maxAge="7200">
          <allowMethods>
            <add method="GET" />
            <add method="PUT" />
            <add method="POST" />
            <add method="PATCH" />
            <add method="DELETE" />
          </allowMethods>
          <allowHeaders allowAllRequestedHeaders="true" />
        </add>
        <!-- Add any number of "allowed" origins -->
      </cors>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\Orchestrator.WebApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Debug" />
          <environmentVariable name="Database__Database" value="Orchestrator" />
          <environmentVariable name="Database__Trusted_Connection" value="true" />
          <environmentVariable name="Database__Address" value="localhost" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: 2b28e03a-bff3-4fa9-98ee-fd2db7d151d6-->

Hope this helps.

Web console for Orchestrator 2019 without Silverlight (microsoft.com)

– Now access the Web console.

– You can test the following command as well if they are returning any result output or not.

Invoke-RestMethod http://localhost:4202/api/folders -UseDefaultCredentials -Outfile folders.json

Invoke-RestMethod http://localhost:4202/api/runbooks -UseDefaultCredentials -Outfile runbooks.json