# PowerShell Installation

## Overview <a href="#workflowgen-setup-powershell" id="workflowgen-setup-powershell"></a>

The following procedure applies to the WorkflowGen PowerShell installation, which is only compatible with:

* Azure SQL Database&#x20;
* MS SQL Server with SQL Server authentication enabled
* Windows Server 2012 R2, Windows Server 2016, and Windows 10 x64

For other versions of Windows, use the [manual installation procedure](https://docs.workflowgen.com/tech/9.2/setup/manual-installation).

## Prerequisites

* You'll need an active internet connection to perform this installation, unless all of the dependencies have already been downloaded by running the script with the `-DownloadOnly` script flag.<br>
* **If you're using Azure SQL database**, you'll need to create and configure the database manually; see the [Azure SQL database configuration](https://docs.workflowgen.com/azure/azure-sql-database-configuration) section in the [WorkflowGen for Azure](https://docs.advantys.com/docs/azure/) guide for instructions on how to do this.<br>
* **If you're using MS SQL Server** with the WorkflowGen database creation, the installation will require the [SQL Server PowerShell module](https://docs.microsoft.com/en-us/sql/powershell/download-sql-server-ps-module).<br>

  * **If your Windows has SQL Server and SQL Server Management Studio installed**, the SQL Server PowerShell module comes pre-installed.<br>
  * **If your Windows has PowerShell version 5 or later installed** (e.g. Windows Server 2016/Windows 10), the installation script will auto-detect and install the SQL Server module from the [PowerShell Gallery](https://www.powershellgallery.com/).<br>
  * **If your Windows has PowerShell version 4 or earlier installed** (e.g. Windows Server 2012 R2), you'll need to manually install the PowerShell Extensions from the SQL Server Feature Pack according to your SQL Server version below:

    * [SQL Server 2016 Service Pack 2 Feature Pack](https://www.microsoft.com/en-us/download/details.aspx?id=56833)
    * [SQL Server 2014 Feature Pack](https://www.microsoft.com/en-us/download/details.aspx?id=42295)<br>

    Download and install the following packages from the feature pack:

    * `ENU\x64\SQLSysClrTypes.msi`
    * `ENU\x64\SharedManagementObjects.msi`
    * `ENU\x64\PowerShellTools.msi`<br>

  ✏️ **Note:** If the PowerShell Extensions aren't available for your SQL Server version or the installation script still doesn't detect the SQL Server PowerShell module, then try installing the **PowerShell Extensions** from the SQL Server 2016 Feature Pack, or try installing **SQL Server 2016 Management Studio**.

## Important notes

* Ensure that the PowerShell Execution Policy is correctly set (see <https://technet.microsoft.com/en-us/library/ee176961.aspx>). To do this, run `Set-ExecutionPolicy Unrestricted` in the PowerShell command window.<br>

  ✏️ **Note:** If you want to avoid modifying the Execution Policy, you can bypass it by running the WorkflowGen installation script as follows: `PowerShell.exe -ExecutionPolicy Bypass -File .\install.ps1`.<br>

* Clicking on the shell while it's running will pause the output; you can change this option in the PowerShell options, or press `ENTER` to resume the output (this won't pause the script, which will continue to run in the background).<br>

* In JSON format, backslashes (`\`) must be escaped as follows:<br>

  ```json
  {
      "param" : "C:\\valid\\windows\\path"
  }

  ```

* You can abort the script at any point by pressing **`CTRL+C`**. If this is done during a download or extraction process, the folders created might need to be deleted (e.g. `\package\`); otherwise, the script will detect their presence and assume that they're complete.<br>

* The PowerShell installation will also install [Node.js v18.20.7 LTS](https://nodejs.org/download/release/v18.20.7/), [iisnode](https://github.com/Azure/iisnode/releases/tag/v0.2.21), and [IIS URL Rewrite](https://www.iis.net/downloads/microsoft/url-rewrite).\
  \
  ✏️ **Note:** [Visual C++ Redistributable](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) is required in some particular Windows Server versions and/or configurations, otherwise you might encounter the error `The specified module could not be found` regarding the `edge` and `edge-js` libraries when accessing the `/wfgen/graphql`, `/wfgen/hooks`, or `/wfgen/scim` web apps. You'll need to download and install this manually.

* To install a previous version of WorkflowGen, use that version's PowerShell installation, available in the [Release Notes & Downloads](https://discuss.workflowgen.com/c/announcements/release-notes) section of the [WorkflowGen Forum & Knowledge Base](https://discuss.workflowgen.com/).

## Installation

1. Open `config.json` in a text editor and configure the parameters for your installation of WorkflowGen (see [PowerShell installation configuration parameters](#powershell-installation-configuration-parameters) below for information on each parameter).<br>
2. Open a PowerShell instance **as Administrator**.<br>
3. Run `.\install.ps1` (with the optional script flags listed below, if desired).

### **Optional PowerShell script flags**

<table data-header-hidden><thead><tr><th valign="top">Parameter</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><strong>Parameter</strong></td><td valign="top"><strong>Description</strong></td></tr><tr><td valign="top"><code>DownloadOnly</code></td><td valign="top"><p>This option will terminate the scripts after all necessary packages have been downloaded. This is useful if you want to install WorkflowGen on a network that's not connected to the internet.</p><p>📌 <strong>Example:</strong> <code>.\install.ps1 -DownloadOnly</code></p></td></tr><tr><td valign="top"><code>SkipParamInput</code></td><td valign="top"><p>This option will skip the prompts to review the parameters before launching the installation script, for example if you want to run the <code>install.ps1</code> script via another script.</p><p>📌 <strong>Example:</strong> <code>.\install.ps1 -SkipParamInput</code></p></td></tr></tbody></table>

### PowerShell installation configuration parameters

<table data-header-hidden><thead><tr><th valign="top">Parameter</th><th valign="top">Description</th></tr></thead><tbody><tr><td valign="top"><strong>Parameter</strong></td><td valign="top"><strong>Description</strong></td></tr><tr><td valign="top"><code>LicenseType</code></td><td valign="top">Possible values: <code>trial</code> or <code>full</code> (default: <code>trial</code>)<br><br>Describes the type of license under which you're installing WorkflowGen: <code>full</code> will populate the <code>SerialNumber</code> parameter in the <code>web.config</code> file; <code>trial</code> will include the trial license (6 months).<br><br>✏️ <strong>Note:</strong> If you're installing under the full WorkflowGen license, you'll need to manually copy your license file to the WorkflowGen <code>\bin</code> folder (e.g. <code>C:\Inetpub\wwwroot\wfgen\bin</code>).</td></tr><tr><td valign="top"><code>SerialNumber</code></td><td valign="top">If you're installing under the full license, enter the serial number you were provided with</td></tr><tr><td valign="top"><code>WebAppPath</code></td><td valign="top">The physical location where the WorkflowGen site will be located (default: <code>C:\Inetpub\wwwroot\wfgen</code>)</td></tr><tr><td valign="top"><code>ServicesPath</code></td><td valign="top">The physical location where the WorkflowGen services will be installed (default: <code>C:\Program Files\Advantys\WorkflowGen\Services</code>)</td></tr><tr><td valign="top"><code>NodeJSPath</code></td><td valign="top">The physical location where Node.js will be installed; this package is required for WorkflowGen features such as GraphQL and webhooks</td></tr><tr><td valign="top"><code>SQLServerInstance</code></td><td valign="top">The name or location (IP) of the SQL Server database instance<br><br>✏️ <strong>Note:</strong> If the database server is the same as the WorkflowGen application server, you can use <code>(local)</code>.</td></tr><tr><td valign="top"><code>SQLLoginID</code> &#x26; <code>SQLPassword</code></td><td valign="top">The login credentials used exclusively for the creation of the WorkflowGen database; these must have the appropriate access level<br><br>✏️ <strong>Note:</strong> These parameters can be left empty if the <code>SQLServerInstance</code> provided already has a fully-functional (including SQL login users) and up-to-date WorkflowGen database.</td></tr><tr><td valign="top"><code>DBName</code></td><td valign="top">The name of the WorkflowGen database to use or create (default: <code>WFGEN</code>)<br><br>✏️ <strong>Note:</strong> If the database name is already in use, no database will be created, and the installation will assume that the database provided is fully functional (including SQL login users) and up-to-date.</td></tr><tr><td valign="top"><code>DBFilePath</code> &#x26; <code>DBLogPath</code></td><td valign="top">The physical location where the new database will be created (only applicable when creating a new database); leaving this path empty will create the database in the default path in the environment<br><br>✏️ <strong>Note:</strong> If these parameters are specified, the identity for SQL Server must also have permission for this folder.</td></tr><tr><td valign="top"><code>DBLoginID</code> &#x26; <code>DBPassword</code></td><td valign="top"><p>Standard database user (with read and write permissions) used by the WorkflowGen application (default: <code>WFGEN_USER</code>); the database user is created only if a new database is created<br><br>✏️ <strong>Notes:</strong> </p><ul><li>Make sure the <code>DBPassword</code> matches the password policy of the SQL Server when creating a new database user.</li><li>If you're creating a new database, make sure that this login is not already used (by another database, for example).</li></ul></td></tr><tr><td valign="top"><code>IISSiteName</code></td><td valign="top">The name of the IIS website under which the WorkflowGen application will exist; an IIS website will be created if it doesn't already exist (default: <code>WorkflowGen</code>)</td></tr><tr><td valign="top"><code>IISAppPoolName</code></td><td valign="top">The name of the IIS application pool for WorkflowGen; an application pool will be created if it doesn't already exist (default: <code>WorkflowGenAppPool</code>)</td></tr><tr><td valign="top"><code>IISBinding</code></td><td valign="top">The IP address to be bound to WorkflowGen; the <code>*</code> value represents all unassigned IP addresses (default: <code>*</code>)<br><br>✏️ <strong>Note:</strong> This option is not supported on Windows Server 2012 R2.</td></tr><tr><td valign="top"><code>IISPort</code></td><td valign="top">The TCP/IP port for WorkflowGen (default: <code>80</code>)</td></tr><tr><td valign="top"><code>IISAuthentication</code></td><td valign="top"><p>Specifies which IIS authentication mode to use for the initial WorkflowGen installation; the possible values are <code>Windows</code>, <code>WorkflowGen</code>, and <code>Basic</code></p><ul><li><strong>WorkflowGen</strong> uses WorkflowGen's custom authentication module, which stores the credentials in the WorkflowGen database. If this option is selected, the initial password for the account specified in <code>WFGAdminUsername</code> will be set to <code>Passw0rd!</code> and should be changed immediately.</li><li><strong>Basic</strong> uses IIS authentication based on the current Windows setup. With this option, you can create a new Windows user (<code>WFGAdminUsername</code>) with a specific password, or use an existing Windows account.</li><li><strong>Windows</strong> uses IIS authentication based on the current Windows setup, similar to <strong>Basic</strong>; however, you'll need to be logged in as the account specified in <code>WFGAdminUsername</code>.</li></ul></td></tr><tr><td valign="top"><code>WFGAdminUsername</code> &#x26; <code>WFGAdminPassword</code> &#x26; <code>WFGAdminDomain</code></td><td valign="top">The first WorkflowGen administrator account (default: <code>wfgen_admin</code>); depending on the authentication method, this may require a corresponding Windows account. A password is only required if the account is being created.<br><br>✏️ <strong>Note:</strong> Make sure the <code>WFGAdminPassword</code> matches the password policy of the Windows Server when creating a new account.</td></tr><tr><td valign="top"><code>WebsiteURL</code></td><td valign="top">The URL where WorkflowGen will be accessible; this value is populated in the <code>web.config</code> (default: <code>http://localhost/wfgen</code>)</td></tr><tr><td valign="top"><code>SMTPServer</code></td><td valign="top">The location of the SMTP server for WorkflowGen; this value is populated in the <code>web.config</code> (default: <code>smtp.mycompany.com</code>)</td></tr><tr><td valign="top"><code>DefaultEmailSender</code></td><td valign="top">The default email used as the sender for WorkflowGen notifications; this value is populated in the <code>web.config</code> (default: <code>workflowgen@mycompany.com</code>)</td></tr></tbody></table>
