bin/d365fo.tools-index.json

[
    {
        "CommandName": "Add-D365AzureStorageConfig",
        "Description": "Adds an Azure Storage Account config to the configuration store",
        "Tags": [
                     "Azure",
                     "Azure Storage",
                     "Config",
                     "Configuration",
                     "Token",
                     "Blob",
                     "Container"
                 ],
        "Params": [
                       [
                           "Name",
                           "The logical name of the Azure Storage Account you are about to registered in the configuration store",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "AccountId",
                           "The account id for the Azure Storage Account you want to register in the configuration store",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "AccessToken",
                           "The access token for the Azure Storage Account you want to register in the configuration store",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "SAS",
                           "The SAS key that you have created for the storage account or blob container",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Container",
                           "The name of the blob container inside the Azure Storage Account you want to register in the configuration store",
                           "Blobname,Blob",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Temporary",
                           "Instruct the cmdlet to only temporarily add the azure storage account configuration in the configuration store",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "Force",
                           "Switch to instruct the cmdlet to overwrite already registered Azure Storage Account entry",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Save an Azure Storage Account config",
        "Name": "Add-D365AzureStorageConfig",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eAdd-D365AzureStorageConfig -Name \"UAT-Exports\" -AccountId \"1234\" -AccessToken \"dafdfasdfasdf\" -Container \"testblob\"\nThis will add an entry into the list of Azure Storage Accounts that is stored with the name \"UAT-Exports\" with AccountId \"1234\", AccessToken \"dafdfasdfasdf\" and blob container \"testblob\".\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eAdd-D365AzureStorageConfig -Name UAT-Exports -SAS \"sv2018-03-28\u0026siunlisted\u0026src\u0026sigAUOpdsfpoWE976ASDhfjkasdf(5678sdfhk\" -AccountId \"1234\" -Container \"testblob\"\nThis will add an entry into the list of Azure Storage Accounts that is stored with the name \"UAT-Exports\" with AccountId \"1234\", SAS \r\n\"sv=2018-03-28\u0026si=unlisted\u0026sr=c\u0026sig=AUOpdsfpoWE976ASDhfjkasdf(5678sdfhk\" and blob container \"testblob\".\r\nThe SAS key enables you to provide explicit access to a given blob container inside an Azure Storage Account.\r\nThe SAS key can easily be revoked and that way you have control over the access to the container and its content.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eAdd-D365AzureStorageConfig -Name UAT-Exports -SAS \"sv2018-03-28\u0026siunlisted\u0026src\u0026sigAUOpdsfpoWE976ASDhfjkasdf(5678sdfhk\" -AccountId \"1234\" -Container \"testblob\" -Temporary\nThis will add an entry into the list of Azure Storage Accounts that is stored with the name \"UAT-Exports\" with AccountId \"1234\", SAS \r\n\"sv=2018-03-28\u0026si=unlisted\u0026sr=c\u0026sig=AUOpdsfpoWE976ASDhfjkasdf(5678sdfhk\" and blob container \"testblob\".\r\nThe SAS key enables you to provide explicit access to a given blob container inside an Azure Storage Account.\r\nThe SAS key can easily be revoked and that way you have control over the access to the container and its content.\nThe configuration will only last for the rest of this PowerShell console session.",
        "Syntax": "Add-D365AzureStorageConfig -Name \u003cString\u003e -AccountId \u003cString\u003e -AccessToken \u003cString\u003e -Container \u003cString\u003e [-Temporary] [-Force] [\u003cCommonParameters\u003e]\nAdd-D365AzureStorageConfig -Name \u003cString\u003e -AccountId \u003cString\u003e -SAS \u003cString\u003e -Container \u003cString\u003e [-Temporary] [-Force] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Add-D365BroadcastMessageConfig",
        "Description": "Adds a broadcast message config to the configuration store",
        "Tags": [
                     "Servicing",
                     "Broadcast",
                     "Message",
                     "Users",
                     "Environment",
                     "Config",
                     "Configuration",
                     "ClientId",
                     "ClientSecret"
                 ],
        "Params": [
                       [
                           "Name",
                           "The logical name of the broadcast configuration you are about to register in the configuration store",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Tenant",
                           "Azure Active Directory (AAD) tenant id (Guid) that the D365FO environment is connected to, that you want to send a message to",
                           "$AADGuid",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "URL",
                           "URL / URI for the D365FO environment you want to send a message to",
                           "URI",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "ClientId",
                           "The ClientId obtained from the Azure Portal when you created a Registered Application",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "ClientSecret",
                           "The ClientSecret obtained from the Azure Portal when you created a Registered Application",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "TimeZone",
                           "Id of the Time Zone your environment is running in\nYou might experience that the local VM running the D365FO is running another Time Zone than the computer you are running this cmdlet from\nAll available .NET Time Zones can be traversed with tab for this parameter\nThe default value is \"UTC\"",
                           "",
                           false,
                           "false",
                           "UTC"
                       ],
                       [
                           "EndingInMinutes",
                           "Specify how many minutes into the future you want this message / maintenance window to last\nDefault value is 60 minutes\nThe specified StartTime will always be based on local Time Zone. If you specify a different Time Zone than the local computer is running, the start and end time will be calculated based on your \r\nselection.",
                           "",
                           false,
                           "false",
                           "60"
                       ],
                       [
                           "OnPremise",
                           "Specify if environnement is an D365 OnPremise\nDefault value is \"Not set\" (= Cloud Environnement)",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "Temporary",
                           "Instruct the cmdlet to only temporarily add the broadcast message configuration in the configuration store",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "Force",
                           "Instruct the cmdlet to overwrite the broadcast message configuration with the same name",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Save a broadcast message config",
        "Name": "Add-D365BroadcastMessageConfig",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eAdd-D365BroadcastMessageConfig -Name \"UAT\" -Tenant \"e674da86-7ee5-40a7-b777-1111111111111\" -URL \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\" -ClientId \r\n\"dea8d7a9-1602-4429-b138-111111111111\" -ClientSecret \"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\"\nThis will create a new broadcast message configuration with the name \"UAT\".\r\nIt will save \"e674da86-7ee5-40a7-b777-1111111111111\" as the Azure Active Directory guid.\r\nIt will save \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\" as the D365FO environment.\r\nIt will save \"dea8d7a9-1602-4429-b138-111111111111\" as the ClientId.\r\nIt will save \"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\" as ClientSecret.\r\nIt will use the default value \"UTC\" Time Zone for converting the different time and dates.\r\nIt will use the default end time which is 60 minutes.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eAdd-D365BroadcastMessageConfig -Name \"UAT\" -OnPremise -Tenant \"https://adfs.local/adfs\" -URL \"https://ax-sandbox.d365fo.local\" -ClientId \"dea8d7a9-1602-4429-b138-111111111111\" -ClientSecret \r\n\"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\"\nThis will create a new broadcast message configuration with the name \"UAT\".\r\nIt will target an OnPremise environment.\r\nIt will save \"https://adfs.local/adfs\" as the OAuth Tenant Provider.\r\nIt will save \"https://ax-sandbox.d365fo.local\" as the D365FO environment.\r\nIt will save \"dea8d7a9-1602-4429-b138-111111111111\" as the ClientId.\r\nIt will save \"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\" as ClientSecret.\r\nIt will use the default value \"UTC\" Time Zone for converting the different time and dates.\r\nIt will use the default end time which is 60 minutes.",
        "Syntax": "Add-D365BroadcastMessageConfig [-Name] \u003cString\u003e [[-Tenant] \u003cString\u003e] [[-URL] \u003cString\u003e] [[-ClientId] \u003cString\u003e] [[-ClientSecret] \u003cString\u003e] [[-TimeZone] \u003cString\u003e] [[-EndingInMinutes] \u003cInt32\u003e] [-OnPremise] [-Temporary] [-Force] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Add-D365RsatWifConfigAuthorityThumbprint",
        "Description": "Register a certificate thumbprint in the wif.config file.\nThis can be useful for example when configuring RSAT on a local machine and add the used certificate thumbprint to that AOS.s",
        "Tags": [
                     "RSAT",
                     "Certificate",
                     "Testing",
                     "Regression Suite Automation Test",
                     "Regression",
                     "Test",
                     "Automation"
                 ],
        "Params": [
                       [
                           "CertificateThumbprint",
                           "The thumbprint value of the certificate that you want to register in the wif.config file",
                           "",
                           true,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "Add-D365WIFConfigAuthorityThumbprint",
        "Author": "Kenny Saelen (@kennysaelen)",
        "Synopsis": "Add a certificate thumbprint to the wif.config.",
        "Name": "Add-D365RsatWifConfigAuthorityThumbprint",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eAdd-D365RsatWifConfigAuthorityThumbprint -CertificateThumbprint \"12312323r424\"\nThis will open the wif.config file and insert the \"12312323r424\" thumbprint value into the file.",
        "Syntax": "Add-D365RsatWifConfigAuthorityThumbprint [-CertificateThumbprint] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Add-D365WindowsDefenderRules",
        "Description": "Add rules to the Windows Defender to exclude Visual Studio, D365 Batch process, D365 Sync process, XPP related processes and SQL Server processes from scans and monitoring.\nThis will lead to performance gains because the Windows Defender stops to scan every file accessed by e.g. the MSBuild process, the cache and things around Visual Studio.\nSupports rules for VS 2015 and VS 2019.",
        "Tags": [
                     "DevTools",
                     "Developer",
                     "Performance"
                 ],
        "Params": [
                       [
                           "Silent",
                           "Instruct the cmdlet to silence the output written to the console\nIf set the output will be silenced, if not set, the output will be written to the console",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Robin Kretzschmar (@darksmile92)",
        "Synopsis": "Add rules to Windows Defender to enhance performance during development.",
        "Name": "Add-D365WindowsDefenderRules",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eAdd-D365WindowsDefenderRules\nThis will add the most common rules to the Windows Defender as exceptions.\r\nAll output will be written to the console.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eAdd-D365WindowsDefenderRules -Silent\nThis will add the most common rules to the Windows Defender as exceptions.\r\nAll output will be silenced and not outputted to the console.",
        "Syntax": "Add-D365WindowsDefenderRules [-Silent] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Backup-D365MetaDataDir",
        "Description": "Creates a backup of all the files and folders from the Metadata directory",
        "Tags": [
                     "PackagesLocalDirectory",
                     "MetaData",
                     "MetaDataDir",
                     "MeteDataDirectory",
                     "Backup",
                     "Development"
                 ],
        "Params": [
                       [
                           "MetaDataDir",
                           "Path to the Metadata directory\nDefault value is the PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "\"$Script:MetaDataDir\""
                       ],
                       [
                           "BackupDir",
                           "Path where you want the backup to be place",
                           "",
                           false,
                           "false",
                           "\"$($Script:MetaDataDir)_backup\""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Create a backup of the Metadata directory",
        "Name": "Backup-D365MetaDataDir",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eBackup-D365MetaDataDir\nThis will backup the PackagesLocalDirectory and create an PackagesLocalDirectory_backup next to it",
        "Syntax": "Backup-D365MetaDataDir [[-MetaDataDir] \u003cString\u003e] [[-BackupDir] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Backup-D365Runbook",
        "Description": "Backup a runbook file for you to persist it for later analysis",
        "Tags": [
                     "Runbook",
                     "Backup",
                     "Analysis"
                 ],
        "Params": [
                       [
                           "File",
                           "Path to the file you want to backup",
                           "Path",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "DestinationPath",
                           "Path to the folder where you want the backup file to be placed",
                           "",
                           false,
                           "false",
                           "$(Join-Path $Script:DefaultTempPath \"RunbookBackups\")"
                       ],
                       [
                           "Force",
                           "Instructs the cmdlet to overwrite the destination file if it already exists",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Backup a runbook file",
        "Name": "Backup-D365Runbook",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eBackup-D365Runbook -File \"C:\\DynamicsAX\\InstallationRecords\\Runbooks\\Runbook_20190327.xml\"\nThis will backup the \"C:\\DynamicsAX\\InstallationRecords\\Runbooks\\Runbook_20190327.xml\".\r\nThe default destination folder is used, \"c:\\temp\\d365fo.tools\\runbookbackups\\\".\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eBackup-D365Runbook -File \"C:\\DynamicsAX\\InstallationRecords\\Runbooks\\Runbook_20190327.xml\" -Force\nThis will backup the \"C:\\DynamicsAX\\InstallationRecords\\Runbooks\\Runbook_20190327.xml\".\r\nThe default destination folder is used, \"c:\\temp\\d365fo.tools\\runbookbackups\\\".\r\nIf the file already exists in the destination folder, it will be overwritten.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365Runbook | Backup-D365Runbook\nThis will backup all runbook files found with the \"Get-D365Runbook\" cmdlet.\r\nThe default destination folder is used, \"c:\\temp\\d365fo.tools\\runbookbackups\\\".",
        "Syntax": "Backup-D365Runbook [-File] \u003cString\u003e [[-DestinationPath] \u003cString\u003e] [-Force] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Backup-D365WebConfig",
        "Description": "Will backup the web.config file located in the AOS / IIS folder",
        "Tags": [
                     "DEV",
                     "Tier2",
                     "DB",
                     "Database",
                     "Debug",
                     "JIT",
                     "LCS",
                     "Azure DB"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to the folder where you want the web.config file to be persisted\nDefault is: \"C:\\Temp\\d365fo.tools\\WebConfigBackup\"",
                           "",
                           false,
                           "false",
                           "$(Join-Path $Script:DefaultTempPath \"WebConfigBackup\")"
                       ],
                       [
                           "Force",
                           "Instructs the cmdlet to overwrite the destination file if it already exists",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Backup the web.config file",
        "Name": "Backup-D365WebConfig",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eBackup-D365WebConfig\nWill locate the web.config file, and backup it up.\r\nIt will look for the file in the AOS / IIS folder. E.g. K:\\AosService\\WebRoot\\web.config.\r\nIt will save the file to the default location: \"C:\\Temp\\d365fo.tools\\WebConfigBackup\".\nA result set example:\nFilename LastModified File\r\n-------- ------------ ----\r\nweb.config 6/29/2021 7:31:04 PM C:\\temp\\d365fo.tools\\WebConfigBackup\\web.config\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eBackup-D365WebConfig -Force\nWill locate the web.config file, backup it up, and overwrite if a previous backup file exists.\r\nIt will look for the file in the AOS / IIS folder. E.g. K:\\AosService\\WebRoot\\web.config.\r\nIt will save the file to the default location: \"C:\\Temp\\d365fo.tools\\WebConfigBackup\".\r\nIt will overwrite any file named web.config in the destination folder.\nA result set example:\nFilename LastModified File\r\n-------- ------------ ----\r\nweb.config 6/29/2021 7:31:04 PM C:\\temp\\d365fo.tools\\WebConfigBackup\\web.config",
        "Syntax": "Backup-D365WebConfig [[-OutputPath] \u003cString\u003e] [-Force] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Clear-D365ActiveBroadcastMessageConfig",
        "Description": "Clear the active broadcast message config from the configuration store",
        "Tags": [
                     "Servicing",
                     "Broadcast",
                     "Message",
                     "Users",
                     "Environment",
                     "Config",
                     "Configuration",
                     "ClientId",
                     "ClientSecret"
                 ],
        "Params": [
                       [
                           "Temporary",
                           "Instruct the cmdlet to only temporarily clear the active broadcast message configuration in the configuration store",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Clear the active broadcast message config",
        "Name": "Clear-D365ActiveBroadcastMessageConfig",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eClear-D365ActiveBroadcastMessageConfig\nThis will clear the active broadcast message configuration from the configuration store.",
        "Syntax": "Clear-D365ActiveBroadcastMessageConfig [-Temporary] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Clear-D365BacpacTableData",
        "Description": "Remove all data for a table inside a bacpac/dacpac or zip file, before restoring it into your SQL Server / Azure SQL DB\n\nIt will open the file as a zip archive, locate the desired table and remove the data that otherwise would have been loaded\n\nThe default behavior is that you get a copy of the file, where the desired data is removed",
        "Tags": [
                     "Bacpac",
                     "Servicing",
                     "Data",
                     "Deletion",
                     "SqlPackage"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the bacpac/dacpac or zip file that you want to work against",
                           "BacpacFile,File",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Table",
                           "Name of the table that you want to delete the data for\nSupports an array of table names\nIf a schema name isn\u0027t supplied as part of the table name, the cmdlet will prefix it with \"dbo.\"\nSupports wildcard searching e.g. \"Sales*\" will delete all \"dbo.Sales*\" tables in the bacpac file",
                           "TableName",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "OutputPath",
                           "Path to where you want the updated bacpac/dacpac or zip file to be saved",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "ClearFromSource",
                           "Instruct the cmdlet to delete tables directly from the source file\nIt will save disk space and time, because it doesn\u0027t have to create a copy of the bacpac file, before deleting tables from it",
                           "",
                           true,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "Clear-D365TableDataFromBacpac",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Clear out data for a table inside the bacpac/dacpac or zip file",
        "Name": "Clear-D365BacpacTableData",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eClear-D365BacpacTableData -Path \"C:\\Temp\\AxDB.bacpac\" -Table \"BATCHJOBHISTORY\" -OutputPath \"C:\\Temp\\AXBD_Cleaned.bacpac\"\nThis will remove the data from the BatchJobHistory table from inside the bacpac file.\nIt uses \"C:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses \"BATCHJOBHISTORY\" as the Table to delete data from.\r\nIt uses \"C:\\Temp\\AXBD_Cleaned.bacpac\" as the OutputPath to where it will store the updated bacpac file.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eClear-D365BacpacTableData -Path \"C:\\Temp\\AxDB.bacpac\" -Table \"dbo.BATCHHISTORY\",\"BATCHJOBHISTORY\" -OutputPath \"C:\\Temp\\AXBD_Cleaned.bacpac\"\nThis will remove the data from the dbo.BatchHistory and BatchJobHistory table from inside the bacpac file.\nIt uses \"C:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses \"dbo.BATCHHISTORY\",\"BATCHJOBHISTORY\" as the Table to delete data from.\r\nIt uses \"C:\\Temp\\AXBD_Cleaned.bacpac\" as the OutputPath to where it will store the updated bacpac file.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eClear-D365BacpacTableData -Path \"C:\\Temp\\AxDB.bacpac\" -Table \"dbo.BATCHHISTORY\",\"BATCHJOBHISTORY\" -ClearFromSource\nThis will remove the data from the dbo.BatchHistory and BatchJobHistory table from inside the bacpac file.\nIt uses \"C:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses \"dbo.BATCHHISTORY\",\"BATCHJOBHISTORY\" as the Table to delete data from.\nCaution:\r\nIt will remove from the source \"C:\\Temp\\AxDB.bacpac\" directly. So if the original file is important for further processing, please consider the risks carefully.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eClear-D365BacpacTableData -Path \"C:\\Temp\\AxDB.bacpac\" -Table \"CustomTableNameThatDoesNotExists\",\"BATCHJOBHISTORY\" -OutputPath \"C:\\Temp\\AXBD_Cleaned.bacpac\" -ErrorAction SilentlyContinue\nThis will remove the data from the BatchJobHistory table from inside the bacpac file.\nIt uses \"C:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses \"CustomTableNameThatDoesNotExists\",\"BATCHJOBHISTORY\" as the Table to delete data from.\r\nIt respects the respects the ErrorAction \"SilentlyContinue\", and will continue removing tables from the bacpac file, even when some tables are missing.\r\nIt uses \"C:\\Temp\\AXBD_Cleaned.bacpac\" as the OutputPath to where it will store the updated bacpac file.",
        "Syntax": "Clear-D365BacpacTableData -Path \u003cString\u003e -Table \u003cString[]\u003e -OutputPath \u003cString\u003e [\u003cCommonParameters\u003e]\nClear-D365BacpacTableData -Path \u003cString\u003e -Table \u003cString[]\u003e -ClearFromSource [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Clear-D365MonitorData",
        "Description": "Clear the monitoring data that is filling up the service drive on a Dynamics 365 for Finance \u0026 Operations",
        "Tags": [
                     "Monitor",
                     "MonitorData",
                     "MonitorAgent",
                     "CleanUp",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "Path",
                           "The path to where the monitoring data is located\nThe default value is the \"ServiceDrive\" (j:\\ | k:\\) and the \\MonAgentData\\SingleAgent\\Tables folder structure",
                           "",
                           false,
                           "true (ByValue, ByPropertyName)",
                           "(Join-Path $script:ServiceDrive \"\\MonAgentData\\SingleAgent\\Tables\")"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Clear the monitoring data from a Dynamics 365 for Finance \u0026 Operations machine",
        "Name": "Clear-D365MonitorData",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eClear-D365MonitorData\nThis will delete all the files that are located in the default path on the machine.\r\nSome files might be locked by a process, but the cmdlet will attemp to delete all files.",
        "Syntax": "Clear-D365MonitorData [[-Path] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Clear-D365TempDbTables",
        "Description": "This will cleanup X days of TempDB tables\n\nThe reason behind this process is that sp_updatestats takes significantly longer depending on the number of TempDB tables in the system",
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "Days",
                           "Temp tables older than this Days input will be dropped\nThe default value is 7 (days)",
                           "",
                           false,
                           "false",
                           "7"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Alex Kwitny (@AlexOnDAX)",
        "Synopsis": "Cleanup TempDB tables in Microsoft Dynamics 365 for Finance and Operations environment",
        "Name": "Clear-D365TempDbTables",
        "Links": [
                      "https://msdyn365fo.wordpress.com/2019/12/18/cleanup-tempdb-tables-in-a-msdyn365fo-sandbox-environment/",
                      "https://github.com/PaulHeisterkamp/d365fo.blog/blob/master/Tools/SQL/DropTempDBTables.sql"
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eClear-D365TempDbTables -Days 7\nThis will cleanup old tempdb tables.\r\nIt will use 7 as the Days parameter.\nThe remaining parameters will use their default values, which are provided by the tools.",
        "Syntax": "Clear-D365TempDbTables [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-Days] \u003cInt32\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "ConvertTo-D365Dacpac",
        "Description": "Convert bacpac file to dacpac\n\nIt will extract the origin.xml file from the file, and set the \u003cContainsExportedData\u003efalse\u003c/ContainsExportedData\u003e for the file to be valid to be used as a dacpac file",
        "Tags": [
                     "Bacpac",
                     "Servicing",
                     "Data",
                     "SqlPackage",
                     "Dacpac",
                     "Table"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the bacpac file that you want to work against\nIt can also be a zip file",
                           "BacpacFile,File",
                           true,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Convert bacpac file to dacpac",
        "Name": "ConvertTo-D365Dacpac",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eConvertTo-D365Dacpac -Path \"C:\\Temp\\AxDB.bacpac\"\nThis will convert the bacpac file into a dacpac file.\r\nIt will extract the origin.xml file, update it and apply it to the file.\r\nIt will rename the file into a dacpac.\nThe source file will be manipulated, so be careful to have an extra copy of the file.",
        "Syntax": "ConvertTo-D365Dacpac [-Path] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Disable-D365Flight",
        "Description": "Provides a method for disabling a flight in D365FO.",
        "Tags": [
                     "Flight",
                     "Flighting"
                 ],
        "Params": [
                       [
                           "FlightName",
                           "Name of the flight to disable",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ]
                   ],
        "Alias": "",
        "Author": "Frank Hüther (@FrankHuether)",
        "Synopsis": "Used to disable a flight",
        "Name": "Disable-D365Flight",
        "Links": "https://docs.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/data-entities/data-entities-data-packages#features-flighted-in-data-management-and-enabling-flighted-features",
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eDisable-D365Flight -FlightName DMFEnableAllCompanyExport\nDisables the flight DMFEnableAllCompanyExport",
        "Syntax": "Disable-D365Flight [-FlightName] \u003cString\u003e [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Disable-D365MaintenanceMode",
        "Description": "Sets the Dynamics 365 environment back into operating / running state after been in maintenance mode",
        "Tags": [
                     "MaintenanceMode",
                     "Maintenance",
                     "License",
                     "Configuration",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "\"$Script:MetaDataDir\""
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\""
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\MaintenanceMode\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Sets the environment back into operating state",
        "Name": "Disable-D365MaintenanceMode",
        "Links": [
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eDisable-D365MaintenanceMode\nThis will execute the Microsoft.Dynamics.AX.Deployment.Setup.exe with the default values that was pulled from the environment and put the environment into the operate / running state.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eDisable-D365MaintenanceMode -ShowOriginalProgress\nThis will execute the Microsoft.Dynamics.AX.Deployment.Setup.exe with the default values that was pulled from the environment and put the environment into the operate / running state.\r\nThe output from stopping the services will be written to the console / host.\r\nThe output from the \"deployment\" process will be written to the console / host.\r\nThe output from starting the services will be written to the console / host.",
        "Syntax": "Disable-D365MaintenanceMode [[-MetaDataDir] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Disable-D365SqlChangeTracking",
        "Description": "Disables the SQL Server Change Tracking for the environments database and all tables inside the database",
        "Tags": [
                     "MaintenanceMode",
                     "Maintenance",
                     "License",
                     "Configuration",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Disable Change Tracking for the environment",
        "Name": "Disable-D365SqlChangeTracking",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eDisable-D365SqlChangeTracking\nThis will disable the Change Tracking on the Sql Server.",
        "Syntax": "Disable-D365SqlChangeTracking [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Disable-D365User",
        "Description": "Sets the enabled to 0 in the userinfo table.",
        "Tags": [
                     "User",
                     "Users",
                     "Security",
                     "Configuration",
                     "Permission"
                 ],
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "Email",
                           "The search string to select which user(s) should be disabled.\nThe parameter supports wildcards. E.g. -Email \"*@contoso.com*\"",
                           "",
                           false,
                           "true (ByPropertyName)",
                           "*"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Disables the user in D365FO",
        "Name": "Disable-D365User",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eDisable-D365User\nThis will Disable all users for the environment\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eDisable-D365User -Email \"claire@contoso.com\"\nThis will Disable the user with the email address \"claire@contoso.com\"\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eDisable-D365User -Email \"*contoso.com\"\nThis will Disable all users that matches the search \"*contoso.com\" in their email address",
        "Syntax": "Disable-D365User [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-Email] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Enable-D365Exception",
        "Description": "Change the default exception behavior of the module to support throwing exceptions\n\nUseful when the module is used in an automated fashion, like inside Azure DevOps pipelines and large PowerShell scripts",
        "Tags": [
                     "Exception",
                     "Exceptions",
                     "Warning",
                     "Warnings"
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Enable exceptions to be thrown",
        "Name": "Enable-D365Exception",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eEnable-D365Exception\nThis will for the rest of the current PowerShell session make sure that exceptions will be thrown.",
        "Syntax": "Enable-D365Exception [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Enable-D365Flight",
        "Description": "Provides a method for enabling a flight in D365FO.",
        "Tags": [
                     "Flight",
                     "Flighting"
                 ],
        "Params": [
                       [
                           "FlightName",
                           "Name of the flight to enable",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ]
                   ],
        "Alias": "",
        "Author": "Frank Hüther (@FrankHuether)",
        "Synopsis": "Used to enable a flight",
        "Name": "Enable-D365Flight",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eEnable-D365Flight -FlightName DMFEnableAllCompanyExport\nEnables the flight DMFEnableAllCompanyExport",
        "Syntax": "Enable-D365Flight [-FlightName] \u003cString\u003e [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Enable-D365MaintenanceMode",
        "Description": "Sets the Dynamics 365 environment into maintenance mode to enable the user to update the license configuration",
        "Tags": [
                     "MaintenanceMode",
                     "Maintenance",
                     "License",
                     "Configuration",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "\"$Script:MetaDataDir\""
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\""
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\MaintenanceMode\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Sets the environment into maintenance mode",
        "Name": "Enable-D365MaintenanceMode",
        "Links": [
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eEnable-D365MaintenanceMode\nThis will execute the Microsoft.Dynamics.AX.Deployment.Setup.exe with the default values that was pulled from the environment and put the environment into the operate / running state\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eEnable-D365MaintenanceMode -ShowOriginalProgress\nThis will execute the Microsoft.Dynamics.AX.Deployment.Setup.exe with the default values that was pulled from the environment and put the environment into the operate / running state\r\nThe output from stopping the services will be written to the console / host.\r\nThe output from the \"deployment\" process will be written to the console / host.\r\nThe output from starting the services will be written to the console / host.",
        "Syntax": "Enable-D365MaintenanceMode [[-MetaDataDir] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Enable-D365SqlChangeTracking",
        "Description": "Enable the SQL Server Change Tracking for the environments database\n\nIt is a requirement for the Data Entities refresh to be able to complete correctly",
        "Tags": [
                     "MaintenanceMode",
                     "Maintenance",
                     "License",
                     "Configuration",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Enable Change Tracking for the environment",
        "Name": "Enable-D365SqlChangeTracking",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eEnable-D365SqlChangeTracking\nThis will enable the Change Tracking on the Sql Server.",
        "Syntax": "Enable-D365SqlChangeTracking [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Enable-D365User",
        "Description": "Sets the enabled to 1 in the userinfo table",
        "Tags": [
                     "User",
                     "Users",
                     "Security",
                     "Configuration",
                     "Permission"
                 ],
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "Email",
                           "The search string to select which user(s) should be enabled\nThe parameter supports wildcards. E.g. -Email \"*@contoso.com*\"\nDefault value is \"*\" to update all users",
                           "",
                           false,
                           "true (ByPropertyName)",
                           "*"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen",
        "Synopsis": "Enables the user in D365FO",
        "Name": "Enable-D365User",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eEnable-D365User\nThis will enable all users for the environment\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eEnable-D365User -Email \"claire@contoso.com\"\nThis will enable the user with the email address \"claire@contoso.com\"\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eEnable-D365User -Email \"*contoso.com\"\nThis will enable all users that matches the search \"*contoso.com\" in their email address",
        "Syntax": "Enable-D365User [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-Email] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Export-D365BacpacModelFile",
        "Description": "Extract the \"model.xml\" file from inside the bacpac file\n\nThis can be used to update SQL Server options for how the SqlPackage.exe should import the bacpac file into your SQL Server / Azure SQL DB",
        "Tags": [
                     "Bacpac",
                     "Servicing",
                     "Data",
                     "SqlPackage",
                     "Sql Server Options",
                     "Collation"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the bacpac file that you want to work against\nIt can also be a zip file",
                           "BacpacFile,File",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "OutputPath",
                           "Path to where you want the updated bacpac file to be saved\nDefault value is: \"c:\\temp\\d365fo.tools\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "Force",
                           "Switch to instruct the cmdlet to overwrite the \"model.xml\" specified in the OutputPath",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "Get-D365ModelFileFromBacpac",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Extract the \"model.xml\" from the bacpac file",
        "Name": "Export-D365BacpacModelFile",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eExport-D365BacpacModelFile -Path \"c:\\Temp\\AxDB.bacpac\"\nThis will extract the \"model.xml\" file from inside the bacpac file.\nIt uses \"c:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses the default value \"c:\\temp\\d365fo.tools\" as the OutputPath to where it will store the extracted \"bacpac.model.xml\" file.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eExport-D365BacpacModelFile -Path \"c:\\Temp\\AxDB.bacpac\" -OutputPath \"c:\\Temp\\model.xml\" -Force\nThis will extract the \"model.xml\" file from inside the bacpac file.\nIt uses \"c:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses \"c:\\Temp\\model.xml\" as the OutputPath to where it will store the extracted \"model.xml\" file.\nIt will override the \"c:\\Temp\\model.xml\" if already present.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eExport-D365BacpacModelFile -Path \"c:\\Temp\\AxDB.bacpac\" | Get-D365BacpacSqlOptions\nThis will display all the SQL Server options configured in the bacpac file.\r\nFirst it will export the bacpac.model.xml from the \"c:\\Temp\\AxDB.bacpac\" file, using the Export-D365BacpacModelFile function.\r\nThe output from Export-D365BacpacModelFile will be piped into the Get-D365BacpacSqlOptions function.",
        "Syntax": "Export-D365BacpacModelFile [-Path] \u003cString\u003e [[-OutputPath] \u003cString\u003e] [-Force] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Export-D365Model",
        "Description": "Export a model from a Dynamics 365 for Finance \u0026 Operations environment",
        "Tags": [
                     "ModelUtil",
                     "Axmodel",
                     "Model",
                     "Export"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the folder where you want to save the model file",
                           "File",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Model",
                           "Name of the model that you want to work against",
                           "Modelname",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "Force",
                           "Instruct the cmdlet to overwrite already existing file",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the AOS service PackagesLocalDirectory\\bin\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "\"$Script:PackageDirectory\\bin\""
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "\"$Script:MetaDataDir\""
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\ModelUtilExport\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Export a model from Dynamics 365 for Finance \u0026 Operations",
        "Name": "Export-D365Model",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eExport-D365Model -Path c:\\temp\\d365fo.tools -Model CustomModelName\nThis will export the \"CustomModelName\" model from the default PackagesLocalDirectory path.\r\nIt export the model to the \"c:\\temp\\d365fo.tools\" location.",
        "Syntax": "Export-D365Model [-Path] \u003cString\u003e [-Model] \u003cString\u003e [-Force] [[-BinDir] \u003cString\u003e] [[-MetaDataDir] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Export-D365SecurityDetails",
        "Description": "Extracts and partitions the security details from an User Interface Security file into the same structure as AOT security files",
        "Tags": [
                     "Security",
                     "Configuration",
                     "Permission",
                     "Development"
                 ],
        "Params": [
                       [
                           "FilePath",
                           "Path to the User Interface Security XML file you want to work against",
                           "Path",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "OutputDirectory",
                           "Path to the folder where the cmdlet will output and structure the details from the file.\r\nThe cmdlet will create a sub folder named like the input file.\nDefault value is: \"C:\\temp\\d365fo.tools\\security-extraction\"",
                           "Output",
                           false,
                           "false",
                           "C:\\temp\\d365fo.tools\\security-extraction"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Extract details from a User Interface Security file",
        "Name": "Export-D365SecurityDetails",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eExport-D365SecurityDetails -FilePath C:\\temp\\d365fo.tools\\SecurityDatabaseCustomizations.xml\nThis will grab all the details inside the \"C:\\temp\\d365fo.tools\\SecurityDatabaseCustomizations.xml\" file and extract that into the default path \"C:\\temp\\d365fo.tools\\security-extraction\"",
        "Syntax": "Export-D365SecurityDetails [-FilePath] \u003cString\u003e [[-OutputDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Find-D365Command",
        "Description": "Finds d365fo.tools commands searching through the inline help text, building a consolidated json index and querying it because Get-Help is too slow",
        "Tags": [
                     "Find",
                     "Help",
                     "Command"
                 ],
        "Params": [
                       [
                           "Pattern",
                           "Searches help for all commands in d365fo.tools for the specified pattern and displays all results",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "Tag",
                           "Finds all commands tagged with this auto-populated tag",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "Author",
                           "Finds all commands tagged with this author",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "MinimumVersion",
                           "Finds all commands tagged with this auto-populated minimum version",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "MaximumVersion",
                           "Finds all commands tagged with this auto-populated maximum version",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "Rebuild",
                           "Rebuilds the index",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "EnableException",
                           "By default, when something goes wrong we try to catch it, interpret it and give you a friendly warning message.\r\nThis avoids overwhelming you with \"sea of red\" exceptions, but is inconvenient because it basically disables advanced scripting.\r\nUsing this switch turns this \"nice by default\" feature off and enables you to catch exceptions with your own try/catch.",
                           "Silent",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "WhatIf",
                           "Displays what would happen if the command is run",
                           "wi",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "Confirm",
                           "Confirms overwrite of index",
                           "cf",
                           false,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Finds d365fo.tools commands searching through the inline help text",
        "Name": "Find-D365Command",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eFind-D365Command \"snapshot\"\nFor lazy typers: finds all commands searching the entire help for \"snapshot\"\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eFind-D365Command -Pattern \"snapshot\"\nFor rigorous typers: finds all commands searching the entire help for \"snapshot\"\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eFind-D365Command -Tag copy\nFinds all commands tagged with \"copy\"\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eFind-D365Command -Tag copy,user\nFinds all commands tagged with BOTH \"copy\" and \"user\"\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eFind-D365Command -Author Mötz\nFinds every command whose author contains \"Mötz\"\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eFind-D365Command -Author Mötz -Tag copy\nFinds every command whose author contains \"Mötz\" and it tagged as \"copy\"\n-------------------------- EXAMPLE 7 --------------------------\nPS C:\\\u003eFind-D365Command -Pattern snapshot -Rebuild\nFinds all commands searching the entire help for \"snapshot\", rebuilding the index (good for developers)",
        "Syntax": "Find-D365Command [[-Pattern] \u003cString\u003e] [[-Tag] \u003cString[]\u003e] [[-Author] \u003cString\u003e] [[-MinimumVersion] \u003cString\u003e] [[-MaximumVersion] \u003cString\u003e] [-Rebuild] [-EnableException] [-WhatIf] [-Confirm] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365ActiveAzureStorageConfig",
        "Description": "Get active Azure Storage Account configuration object from the configuration store",
        "Tags": [
                     "Azure",
                     "Azure Storage",
                     "Config",
                     "Configuration",
                     "Token",
                     "Blob",
                     "Container"
                 ],
        "Params": [
                       [
                           "OutputAsPsCustomObject",
                           "Instruct the cmdlet to return a PsCustomObject object",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get active Azure Storage Account configuration",
        "Name": "Get-D365ActiveAzureStorageConfig",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365ActiveAzureStorageConfig\nThis will get the active Azure Storage configuration.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365ActiveAzureStorageConfig -OutputAsPsCustomObject\nThis will get the active Azure Storage configuration.\r\nThe object will be output as a PsCustomObject, for you to utilize across your scripts.",
        "Syntax": "Get-D365ActiveAzureStorageConfig [-OutputAsPsCustomObject] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365ActiveBroadcastMessageConfig",
        "Description": "Get active broadcast message configuration from the configuration store",
        "Tags": [
                     "Servicing",
                     "Message",
                     "Users",
                     "Environment",
                     "Config",
                     "Configuration",
                     "ClientId",
                     "ClientSecret"
                 ],
        "Params": [
                       [
                           "OutputAsHashtable",
                           "Instruct the cmdlet to return a hastable object",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get active broadcast message configuration",
        "Name": "Get-D365ActiveBroadcastMessageConfig",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365ActiveBroadcastMessageConfig\nThis will get the active broadcast message configuration.",
        "Syntax": "Get-D365ActiveBroadcastMessageConfig [-OutputAsHashtable] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365AOTObject",
        "Description": "Enables you to search for different AOT objects",
        "Params": [
                       [
                           "Path",
                           "Path to the package that you want to work against",
                           "PackageDirectory",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "ObjectType",
                           "The type of AOT object you\u0027re searching for",
                           "Type",
                           false,
                           "false",
                           "@(\"AxClass\")"
                       ],
                       [
                           "Name",
                           "Name of the object that you\u0027re looking for\nAccepts wildcards for searching. E.g. -Name \"Work*status\"\nDefault value is \"*\" which will search for all objects",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "SearchInPackages",
                           "Switch to instruct the cmdlet to search in packages directly instead\r\nof searching in the XppMetaData directory under a given package",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "IncludePath",
                           "Switch to instruct the cmdlet to include the path for the object found",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Search for AOT object",
        "Name": "Get-D365AOTObject",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365AOTObject -Name *flush* -ObjectType AxClass -Path \"C:\\AOSService\\PackagesLocalDirectory\\ApplicationFoundation\"\nThis will search inside the ApplicationFoundation package for all AxClasses that matches the search *flush*.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365AOTObject -Name *flush* -ObjectType AxClass -IncludePath -Path \"C:\\AOSService\\PackagesLocalDirectory\\ApplicationFoundation\"\nThis will search inside the ApplicationFoundation package for all AxClasses that matches the search *flush* and include the full path to the files.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365InstalledPackage -Name Application* | Get-D365AOTObject -Name *flush* -ObjectType AxClass\nThis searches for all packages that matches Application* and pipes them into Get-D365AOTObject which will search for all AxClasses that matches the search *flush*.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365AOTObject -Path \"C:\\AOSService\\PackagesLocalDirectory\\*\" -Name *flush* -ObjectType AxClass -SearchInPackages\nThis is an advanced example and shouldn\u0027t be something you resolve to every time.\nThis will search across all packages and will look for the all AxClasses that matches the search *flush*.\r\nIt will NOT search in the XppMetaData directory for each package.\nThis can stress your system.",
        "Syntax": "Get-D365AOTObject [-Path] \u003cString\u003e [[-ObjectType] \u003cString[]\u003e] [[-Name] \u003cString\u003e] [-SearchInPackages] [-IncludePath] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365AzureDevOpsNuget",
        "Description": "Get Azure DevOps nugets from a feed, to list all available details",
        "Params": [
                       [
                           "Url",
                           "The Azure DevOps url that you want to work against\nIt needs to be the full url for the organization and project, e.g. \"https://dev.azure.com/Contoso/Financials\" - where Contoso is the organization and the Financials is the project.",
                           "Uri",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "FeedName",
                           "Name of the feed that you want to work against\nThe feed name is found under the Artifacts area in Azure DevOps",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "PeronalAccessToken",
                           "The Personal Access Token that you need to provide for the cmdlet to be able to communicate with the Azure DevOps REST services\nThe Personal Access Token is configured via the Azure DevOps portal, on your own account",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Name",
                           "Name of the package / nuget that you are searching for\nSupports wildcard searching e.g. \"*platform*\" will output all packages / nugets that matches the search pattern\nDefault value is \"*\" which will search for all packages / nugets",
                           "PackageName",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Latest",
                           "Instruct the cmdlet to only fetch the latest package / nuget based on the version (highest)",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get Azure DevOps nugets",
        "Name": "Get-D365AzureDevOpsNuget",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365AzureDevOpsNuget -Uri \"https://dev.azure.com/Contoso/Financials\" -FeedName \"AASBuild365\" -PeronalAccessToken \"m9o7jfuch0huJ0YP2W46tTB90TQrMv0rcoZNaueBs3TLy68vF4Ny\"\nThis will list all packages / nugets from the Azure DevOps feed. Foreach packacge, it will list all available versions.\r\nThe http request will be going to the Uri \"https://dev.azure.com/Contoso/Financials\".\r\nThe feed is identified by the FeedName \"AASBuild365\".\r\nThe request will authenticate with the PeronalAccessToken \"m9o7jfuch0huJ0YP2W46tTB90TQrMv0rcoZNaueBs3TLy68vF4Ny\"\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365AzureDevOpsNuget -Uri \"https://dev.azure.com/Contoso/Financials\" -FeedName \"AASBuild365\" -PeronalAccessToken \"m9o7jfuch0huJ0YP2W46tTB90TQrMv0rcoZNaueBs3TLy68vF4Ny\" -Latest\nThis will list all packages / nugets from the Azure DevOps feed. Foreach packacge, it will only list the latest version (highest).\r\nThe http request will be going to the Uri \"https://dev.azure.com/Contoso/Financials\".\r\nThe feed is identified by the FeedName \"AASBuild365\".\r\nThe request will authenticate with the PeronalAccessToken \"m9o7jfuch0huJ0YP2W46tTB90TQrMv0rcoZNaueBs3TLy68vF4Ny\"\r\nThe cmdlet will only output the latest version by the Latest switch.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003e$currentNugets = Get-D365AzureDevOpsNuget -Uri \"https://dev.azure.com/Contoso/Financials\" -FeedName \"AASBuild365\" -PeronalAccessToken \"m9o7jfuch0huJ0YP2W46tTB90TQrMv0rcoZNaueBs3TLy68vF4Ny\" \r\n-Latest\nPS C:\\\u003e foreach ($item in $currentNugets) {\r\nPS C:\\\u003e $lcsNugets = Get-D365LcsAssetFile -FileType NuGetPackage -AssetFilename \"$($item.Name)*\"\r\nPS C:\\\u003e foreach ($itemInner in $lcsNugets) {\r\nPS C:\\\u003e if ($itemInner.FileName -Match \"\\d+\\.\\d+\\.\\d+\\.\\d+\") {\r\nPS C:\\\u003e if ($([Version]$Matches[0]) -gt [Version]$item.Version) {\r\nPS C:\\\u003e $itemInner\r\nPS C:\\\u003e }\r\nPS C:\\\u003e }\r\nPS C:\\\u003e }\r\nPS C:\\\u003e }\nThis will fetch all latest nugets from the Azure DevOps artifacts feed (nuget).\r\nFor each nuget found, it will fetch matching nugets from the LCS Asset Library and return those that have a higher version.\nThis can be used to automatically download and push the latest nuget from LCS to Azure DevOps.\r\nNeeds to be put into work with Invoke-D365AzureDevOpsNugetPush",
        "Syntax": "Get-D365AzureDevOpsNuget [-Url] \u003cString\u003e [-FeedName] \u003cString\u003e [-PeronalAccessToken] \u003cString\u003e [[-Name] \u003cString\u003e] [-Latest] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365AzureStorageConfig",
        "Description": "Get all Azure Storage Account configuration objects from the configuration store",
        "Tags": [
                     "Azure",
                     "Azure Storage",
                     "Config",
                     "Configuration",
                     "Token",
                     "Blob",
                     "Container"
                 ],
        "Params": [
                       [
                           "Name",
                           "The name of the Azure Storage Account you are looking for\nDefault value is \"*\" to display all Azure Storage Account configs",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "OutputAsHashtable",
                           "Instruct the cmdlet to return a hastable object",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get Azure Storage Account configs",
        "Name": "Get-D365AzureStorageConfig",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365AzureStorageConfig\nThis will show all Azure Storage Account configs\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365AzureStorageConfig -OutputAsHashtable\nThis will show all Azure Storage Account configs.\r\nEvery object will be output as a hashtable, for you to utilize as parameters for other cmdlets.",
        "Syntax": "Get-D365AzureStorageConfig [[-Name] \u003cString\u003e] [-OutputAsHashtable] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365AzureStorageFile",
        "Description": "Get all files from an Azure Storage Account",
        "Tags": [
                     "Azure",
                     "Azure Storage",
                     "Token",
                     "Blob",
                     "File",
                     "Container"
                 ],
        "Params": [
                       [
                           "AccountId",
                           "Storage Account Name / Storage Account Id where you want to look for files",
                           "",
                           false,
                           "false",
                           "$Script:AzureStorageAccountId"
                       ],
                       [
                           "AccessToken",
                           "The token that has the needed permissions for the search action",
                           "",
                           false,
                           "false",
                           "$Script:AzureStorageAccessToken"
                       ],
                       [
                           "SAS",
                           "The SAS key that you have created for the storage account or blob container",
                           "",
                           false,
                           "false",
                           "$Script:AzureStorageSAS"
                       ],
                       [
                           "Container",
                           "Name of the blob container inside the storage account you want to look for files",
                           "Blobname,Blob",
                           false,
                           "false",
                           "$Script:AzureStorageContainer"
                       ],
                       [
                           "Name",
                           "Name of the file you are looking for\nAccepts wildcards for searching. E.g. -Name \"Application*Adaptor\"\nDefault value is \"*\" which will search for all packages",
                           "FileName",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Latest",
                           "Instruct the cmdlet to only fetch the latest file from the Azure Storage Account",
                           "GetLatest",
                           true,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get a file from Azure",
        "Name": "Get-D365AzureStorageFile",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365AzureStorageFile -AccountId \"miscfiles\" -AccessToken \"xx508xx63817x752xx74004x30705xx92x58349x5x78f5xx34xxxxx51\" -Container \"backupfiles\"\nThis will get all files in the blob container \"backupfiles\".\r\nIt will use the AccessToken \"xx508xx63817x752xx74004x30705xx92x58349x5x78f5xx34xxxxx51\" to gain access.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365AzureStorageFile -AccountId \"miscfiles\" -AccessToken \"xx508xx63817x752xx74004x30705xx92x58349x5x78f5xx34xxxxx51\" -Container \"backupfiles\" -Latest\nThis will get the latest (newest) file from the blob container \"backupfiles\".\r\nIt will use the AccessToken \"xx508xx63817x752xx74004x30705xx92x58349x5x78f5xx34xxxxx51\" to gain access to the container.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365AzureStorageFile -AccountId \"miscfiles\" -AccessToken \"xx508xx63817x752xx74004x30705xx92x58349x5x78f5xx34xxxxx51\" -Container \"backupfiles\" -Name \"*UAT*\"\nThis will get all files in the blob container \"backupfiles\" that fits the \"*UAT*\" search value.\r\nIt will use the AccessToken \"xx508xx63817x752xx74004x30705xx92x58349x5x78f5xx34xxxxx51\" to gain access to the container.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365AzureStorageFile -AccountId \"miscfiles\" -SAS \"sv2018-03-28\u0026siunlisted\u0026src\u0026sigAUOpdsfpoWE976ASDhfjkasdf(5678sdfhk\" -Container \"backupfiles\" -Latest\nThis will get the latest (newest) file from the blob container \"backupfiles\".\r\nIt will use the SAS key \"sv2018-03-28\u0026siunlisted\u0026src\u0026sigAUOpdsfpoWE976ASDhfjkasdf(5678sdfhk\" to gain access to the container.",
        "Syntax": "Get-D365AzureStorageFile [-AccountId \u003cString\u003e] [-AccessToken \u003cString\u003e] [-SAS \u003cString\u003e] [-Container \u003cString\u003e] [-Name \u003cString\u003e] [\u003cCommonParameters\u003e]\nGet-D365AzureStorageFile [-AccountId \u003cString\u003e] [-AccessToken \u003cString\u003e] [-SAS \u003cString\u003e] [-Container \u003cString\u003e] -Latest [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365AzureStorageUrl",
        "Description": "Get a valid blob container url from an Azure Storage Account",
        "Tags": [
                     "Azure",
                     "Azure Storage",
                     "Token",
                     "Blob",
                     "File",
                     "Container",
                     "LCS",
                     "Asset",
                     "Bacpac",
                     "Backup"
                 ],
        "Params": [
                       [
                           "AccountId",
                           "Storage Account Name / Storage Account Id you want to work against",
                           "",
                           false,
                           "false",
                           "$Script:AzureStorageAccountId"
                       ],
                       [
                           "SAS",
                           "The SAS key that you have created for the storage account or blob container",
                           "",
                           false,
                           "false",
                           "$Script:AzureStorageSAS"
                       ],
                       [
                           "Container",
                           "Name of the blob container inside the storage account you want to work against",
                           "Blobname,Blob",
                           false,
                           "false",
                           "$Script:AzureStorageContainer"
                       ],
                       [
                           "OutputAsHashtable",
                           "Instruct the cmdlet to return a hastable object",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get a blob Url from Azure Storage account",
        "Name": "Get-D365AzureStorageUrl",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365AzureStorageUrl -AccountId \"miscfiles\" -SAS \"sv2018-03-28\u0026siunlisted\u0026src\u0026sigAUOpdsfpoWE976ASDhfjkasdf(5678sdfhk\" -Container \"backupfiles\"\nThis will generate a valid Url for the blob container in the Azure Storage Account.\r\nIt will use the AccountId \"miscfiles\" as the name of the storage account.\r\nIt will use the SAS key \"sv2018-03-28\u0026siunlisted\u0026src\u0026sigAUOpdsfpoWE976ASDhfjkasdf(5678sdfhk\" to add the SAS token/key to the Url.\r\nIt will use the Container \"backupfiles\" as the container name in the Url.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365AzureStorageUrl\nThis will generate a valid Url for the blob container in the Azure Storage Account.\r\nIt will use the default values that are configured using the Set-D365ActiveAzureStorageConfig cmdlet and view using the Get-D365ActiveAzureStorageConfig cmdlet.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365AzureStorageUrl -OutputAsHashtable\nThis will generate a valid Url for the blob container in the Azure Storage Account.\r\nIt will use the default values that are configured using the Set-D365ActiveAzureStorageConfig cmdlet and view using the Get-D365ActiveAzureStorageConfig cmdlet.\nThe output object will be a Hashtable, which you can use as a parameter for other cmdlets.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003e$DestinationParms = Get-D365AzureStorageUrl -OutputAsHashtable\nPS C:\\\u003e $BlobFileDetails = Get-D365LcsDatabaseBackups -Latest | Invoke-D365AzCopyTransfer @DestinationParms\r\nPS C:\\\u003e $BlobFileDetails | Invoke-D365AzCopyTransfer -DestinationUri \"C:\\Temp\" -DeleteOnTransferComplete\nThis will transfer the lastest backup file from LCS Asset Library to your local \"C:\\Temp\".\r\nIt will get a destination Url, for it to transfer the backup file between the LCS storage account and your own.\r\nThe newly transfered file, that lives in your own storage account, will then be downloaded to your local \"c:\\Temp\".\nAfter the file has been downloaded to your local \"C:\\Temp\", it will be deleted from your own storage account.",
        "Syntax": "Get-D365AzureStorageUrl [[-AccountId] \u003cString\u003e] [[-SAS] \u003cString\u003e] [[-Container] \u003cString\u003e] [-OutputAsHashtable] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365BacpacSqlOptions",
        "Description": "Extract the SQL Server options that are listed inside the model.xml file originating from a bacpac file",
        "Tags": [
                     "Bacpac",
                     "Servicing",
                     "Data",
                     "SqlPackage",
                     "Sql Server Options",
                     "Collation"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the extracted model.xml file that you want to work against",
                           "File,ModelFile",
                           false,
                           "true (ByPropertyName)",
                           ""
                       ]
                   ],
        "Alias": "Get-D365SqlOptionsFromBacpacModelFile",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the SQL Server options from the bacpac model.xml file",
        "Name": "Get-D365BacpacSqlOptions",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365BacpacSqlOptions -Path \"c:\\temp\\d365fo.tools\\bacpac.model.xml\"\nThis will display all the SQL Server options configured in the bacpac model file.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eExport-D365BacpacModelFile -Path \"c:\\Temp\\AxDB.bacpac\" | Get-D365BacpacSqlOptions\nThis will display all the SQL Server options configured in the bacpac file.\r\nFirst it will export the model.xml from the \"c:\\Temp\\AxDB.bacpac\" file, using the Export-D365BacpacModelFile function.\r\nThe output from Export-D365BacpacModelFile will be piped into the Get-D365BacpacSqlOptions function.",
        "Syntax": "Get-D365BacpacSqlOptions [[-Path] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365BacpacTable",
        "Description": "Get tables and their metadata from the bacpac file\n\nMetadata as in original size and compressed size, which are what size the bulk files are and will only indicate what you can expect of the table size",
        "Tags": [
                     "Bacpac",
                     "Servicing",
                     "Data",
                     "SqlPackage",
                     "Table",
                     "Size",
                     "Troubleshooting"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the bacpac file that you want to work against\nIt can also be a zip file",
                           "BacpacFile,File",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Table",
                           "Name of the table that you want to delete the data for\nSupports an array of table names\nIf a schema name isn\u0027t supplied as part of the table name, the cmdlet will prefix it with \"dbo.\"\nSupports wildcard searching e.g. \"Sales*\" will locate all \"dbo.Sales*\" tables in the bacpac file",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Top",
                           "Instruct the cmdlet with how many tables you want returned\nDefault is [int]::max, which translates into all tables present inside the bapcac file",
                           "",
                           false,
                           "false",
                           "2147483647"
                       ],
                       [
                           "SortSizeAsc",
                           "Instruct the cmdlet to sort the output by size (original) ascending",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "SortSizeDesc",
                           "Instruct the cmdlet to sort the output by size (original) descending",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get tables from the bacpac file",
        "Name": "Get-D365BacpacTable",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365BacpacTable -Path \"c:\\Temp\\AxDB.bacpac\"\nThis will return all tables from inside the bacpac file.\nIt uses \"c:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses the default value \"*\" as the Table parameter, to output all tables.\r\nIt uses the default value \"[int]::max\" as the Top parameter, to output all tables.\r\nIt uses the default sort, which is by name acsending.\nA result set example:\nName OriginalSize CompressedSize BulkFiles\r\n---- ------------ -------------- ---------\r\nax.DBVERSION 62 B 52 B 1\r\ncrt.RETAILUPGRADEHISTORY 13,49 MB 13,41 MB 3\r\ndbo.__AOSMESSAGEREGISTRATION 1,80 KB 540 B 2\r\ndbo.__AOSSTARTUPVERSION 4 B 6 B 1\r\ndbo.ACCOUNTINGDISTRIBUTION 48,60 MB 4,50 MB 95\r\ndbo.ACCOUNTINGEVENT 11,16 MB 1,51 MB 128\r\ndbo.AGREEMENTPARAMETERS_RU 366 B 113 B 1\r\ndbo.AIFSQLCDCENABLEDTABLES 13,63 KB 2,19 KB 1\r\ndbo.AIFSQLCHANGETRACKINGENABLEDTABLES 9,89 KB 1,42 KB 1\r\ndbo.AIFSQLCTTRIGGERS 44,75 KB 6,29 KB 1\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365BacpacTable -Path \"c:\\Temp\\AxDB.bacpac\" -SortSizeAsc\nThis will return all tables from inside the bacpac file, sorted by the original size, ascending.\nIt uses \"c:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses the default value \"*\" as the Table parameter, to output all tables.\r\nIt uses the default value \"[int]::max\" as the Top parameter, to output all tables.\r\nIt uses the SortSizeAsc parameter, which is by original size acsending.\nA result set example:\nName OriginalSize CompressedSize BulkFiles\r\n---- ------------ -------------- ---------\r\ndbo.__AOSSTARTUPVERSION 4 B 6 B 1\r\ndbo.SYSSORTORDER 20 B 20 B 1\r\ndbo.SECURITYDATABASESETTINGS 20 B 12 B 1\r\ndbo.SYSPOLICYSEQUENCEGROUP 24 B 10 B 1\r\ndbo.SYSFILESTOREPARAMETERS 26 B 10 B 1\r\ndbo.SYSHELPCPSSETUP 28 B 15 B 1\r\ndbo.DATABASELOGPARAMETERS 28 B 10 B 1\r\ndbo.FEATUREMANAGEMENTPARAMETERS 28 B 10 B 1\r\ndbo.AIFSQLCTVERSION 28 B 24 B 1\r\ndbo.SYSHELPSETUP 28 B 15 B 1\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365BacpacTable -Path \"c:\\Temp\\AxDB.bacpac\" -SortSizeDesc\nThis will return all tables from inside the bacpac file, sorted by the original size, descending.\nIt uses \"c:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses the default value \"*\" as the Table parameter, to output all tables.\r\nIt uses the default value \"[int]::max\" as the Top parameter, to output all tables.\r\nIt uses the SortSizeDesc parameter, which is by original size descending.\nA result set example:\nName OriginalSize CompressedSize BulkFiles\r\n---- ------------ -------------- ---------\r\ndbo.TSTIMESHEETLINESTAGING 35,31 GB 2,44 GB 9077\r\ndbo.RESROLLUP 13,30 GB 367,19 MB 3450\r\ndbo.PROJECTSTAGING 11,31 GB 508,70 MB 2929\r\ndbo.TSTIMESHEETTABLESTAGING 5,93 GB 246,65 MB 1564\r\ndbo.BATCHHISTORY 5,80 GB 234,99 MB 1529\r\ndbo.HCMPOSITIONHIERARCHYSTAGING 5,16 GB 222,18 MB 1358\r\ndbo.ERLCSFILEASSETTABLE 3,15 GB 217,68 MB 302\r\ndbo.EVENTINBOX 2,92 GB 105,63 MB 747\r\ndbo.HCMPOSITIONV2STAGING 2,79 GB 200,27 MB 755\r\ndbo.HCMEMPLOYEESTAGING 2,49 GB 218,69 MB 677\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365BacpacTable -Path \"c:\\Temp\\AxDB.bacpac\" -SortSizeDesc -Top 5\nThis will return all tables from inside the bacpac file, sorted by the original size, descending.\nIt uses \"c:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses the default value \"*\" as the Table parameter, to output all tables.\r\nIt uses the value 5 as the Top parameter, to output only 5 tables, based on the sorting selected.\r\nIt uses the SortSizeDesc parameter, which is by original size descending.\nA result set example:\nName OriginalSize CompressedSize BulkFiles\r\n---- ------------ -------------- ---------\r\ndbo.TSTIMESHEETLINESTAGING 35,31 GB 2,44 GB 9077\r\ndbo.RESROLLUP 13,30 GB 367,19 MB 3450\r\ndbo.PROJECTSTAGING 11,31 GB 508,70 MB 2929\r\ndbo.TSTIMESHEETTABLESTAGING 5,93 GB 246,65 MB 1564\r\ndbo.BATCHHISTORY 5,80 GB 234,99 MB 1529\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eGet-D365BacpacTable -Path \"c:\\Temp\\AxDB.bacpac\" -Table \"Sales*\"\nThis will return all tables which matches the \"Sales*\" wildcard search from inside the bacpac file.\nIt uses \"c:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses the default value \"Sales*\" as the Table parameter, to output all tables that matches the wildcard pattern.\r\nIt uses the default value \"[int]::max\" as the Top parameter, to output all tables.\r\nIt uses the default sort, which is by name acsending.\nA result set example:\nName OriginalSize CompressedSize BulkFiles\r\n---- ------------ -------------- ---------\r\ndbo.SALESPARAMETERS 4,29 KB 310 B 1\r\ndbo.SALESPARMUPDATE 273,48 KB 24,21 KB 1\r\ndbo.SALESQUOTATIONTOLINEPARAMETERS 4,18 KB 596 B 1\r\ndbo.SALESSUMMARYPARAMETERS 2,95 KB 425 B 1\r\ndbo.SALESTABLE 1,20 KB 313 B 1\r\ndbo.SALESTABLE_W 224 B 60 B 1\r\ndbo.SALESTABLE2LINEPARAMETERS 4,46 KB 637 B 1\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eGet-D365BacpacTable -Path \"c:\\Temp\\AxDB.bacpac\" -Table \"Sales*\",\"CUSTINVOICE*\"\nThis will return all tables which matches the \"Sales*\" and \"CUSTINVOICE*\" wildcard searches from inside the bacpac file.\nIt uses \"c:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses the default value \"Sales*\" and \"CUSTINVOICE*\" as the Table parameter, to output all tables that matches the wildcard pattern.\r\nIt uses the default value \"[int]::max\" as the Top parameter, to output all tables.\r\nIt uses the default sort, which is by name acsending.\nA result set example:\nName OriginalSize CompressedSize BulkFiles\r\n---- ------------ -------------- ---------\r\ndbo.CUSTINVOICEJOUR 2,01 MB 118,87 KB 1\r\ndbo.CUSTINVOICELINE 14,64 MB 975,30 KB 4\r\ndbo.CUSTINVOICELINEINTERPROJ 6,58 MB 477,97 KB 2\r\ndbo.CUSTINVOICETABLE 1,06 MB 56,56 KB 1\r\ndbo.CUSTINVOICETRANS 32,34 MB 1,51 MB 54\r\ndbo.SALESPARAMETERS 4,29 KB 310 B 1\r\ndbo.SALESPARMUPDATE 273,48 KB 24,21 KB 1\r\ndbo.SALESQUOTATIONTOLINEPARAMETERS 4,18 KB 596 B 1\r\ndbo.SALESSUMMARYPARAMETERS 2,95 KB 425 B 1\r\ndbo.SALESTABLE 1,20 KB 313 B 1\r\ndbo.SALESTABLE_W 224 B 60 B 1\r\ndbo.SALESTABLE2LINEPARAMETERS 4,46 KB 637 B 1\n-------------------------- EXAMPLE 7 --------------------------\nPS C:\\\u003eGet-D365BacpacTable -Path \"c:\\Temp\\AxDB.bacpac\" -Table \"SalesTable\",\"CustTable\"\nThis will return the tables \"dbo.SalesTable\" and \"dbo.CustTable\" from inside the bacpac file.\nIt uses \"c:\\Temp\\AxDB.bacpac\" as the Path for the bacpac file.\r\nIt uses the default value \"SalesTable\" and \"CustTable\" as the Table parameter, to output the tables that matches the names.\r\nIt uses the default value \"[int]::max\" as the Top parameter, to output all tables.\r\nIt uses the default sort, which is by name acsending.\nA result set example:\nName OriginalSize CompressedSize BulkFiles\r\n---- ------------ -------------- ---------\r\ndbo.CUSTTABLE 154,91 KB 8,26 KB 1\r\ndbo.SALESTABLE 1,20 KB 313 B 1",
        "Syntax": "Get-D365BacpacTable -Path \u003cString\u003e [-Table \u003cString[]\u003e] [-Top \u003cInt32\u003e] [\u003cCommonParameters\u003e]\nGet-D365BacpacTable -Path \u003cString\u003e [-Table \u003cString[]\u003e] [-Top \u003cInt32\u003e] [-SortSizeAsc] [\u003cCommonParameters\u003e]\nGet-D365BacpacTable -Path \u003cString\u003e [-Table \u003cString[]\u003e] [-Top \u003cInt32\u003e] [-SortSizeDesc] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365BroadcastMessage",
        "Description": "Get broadcast message from the D365FO environment by looking into the database table",
        "Tags": [
                     "Broadcast",
                     "Message",
                     "SysBroadcastMessage",
                     "Servicing",
                     "Message",
                     "Users",
                     "Environment"
                 ],
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "ExcludeExpired",
                           "Exclude all the records that has already expired",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get broadcast message from the D365FO environment",
        "Name": "Get-D365BroadcastMessage",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365BroadcastMessage\nThis will display all the broadcast message records from the SysBroadcastMessage table.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365BroadcastMessage -ExcludeExpired\nThis will display all active the broadcast message records from the SysBroadcastMessage table.",
        "Syntax": "Get-D365BroadcastMessage [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [-ExcludeExpired] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365BroadcastMessageConfig",
        "Description": "Get all broadcast message configuration objects from the configuration store",
        "Tags": [
                     "Servicing",
                     "Message",
                     "Users",
                     "Environment",
                     "Config",
                     "Configuration",
                     "ClientId",
                     "ClientSecret"
                 ],
        "Params": [
                       [
                           "Name",
                           "The name of the broadcast message configuration you are looking for\nDefault value is \"*\" to display all broadcast message configs",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "OutputAsHashtable",
                           "Instruct the cmdlet to return a hastable object",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get broadcast message configs",
        "Name": "Get-D365BroadcastMessageConfig",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365BroadcastMessageConfig\nThis will display all broadcast message configurations on the machine.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365BroadcastMessageConfig -OutputAsHashtable\nThis will display all broadcast message configurations on the machine.\r\nEvery object will be output as a hashtable, for you to utilize as parameters for other cmdlets.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365BroadcastMessageConfig -Name \"UAT\"\nThis will display the broadcast message configuration that is saved with the name \"UAT\" on the machine.",
        "Syntax": "Get-D365BroadcastMessageConfig [[-Name] \u003cString\u003e] [-OutputAsHashtable] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365ClickOnceTrustPrompt",
        "Description": "Creates the needed registry keys and values for ClickOnce to work on the machine",
        "Tags": [
                     "ClickOnce",
                     "Registry",
                     "TrustPrompt"
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the ClickOnce configuration",
        "Name": "Get-D365ClickOnceTrustPrompt",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365ClickOnceTrustPrompt\nThis will get the current ClickOnce configuration",
        "Syntax": "Get-D365ClickOnceTrustPrompt [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365CompilerResult",
        "Description": "Get the compiler outputs presented in a structured manner on the screen\n\nIt could be a Visual Studio compiler log or it could be a Invoke-D365ModuleCompile log you want analyzed",
        "Tags": [
                     "Compiler",
                     "Build",
                     "Errors",
                     "Warnings",
                     "Tasks"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the compiler log file that you want to work against\nA BuildModelResult.log or a Dynamics.AX.*.xppc.log file will both work",
                           "LogFile",
                           true,
                           "true (ByValue, ByPropertyName)",
                           ""
                       ],
                       [
                           "ErrorsOnly",
                           "Instructs the cmdlet to only output compile results where there was errors detected",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputTotals",
                           "Instructs the cmdlet to output the total errors and warnings after the analysis",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputAsObjects",
                           "Instructs the cmdlet to output the objects instead of formatting them\nIf you don\u0027t assign the output, it will be formatted the same way as the original output, but without the coloring of the column values",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the compiler outputs presented",
        "Name": "Get-D365CompilerResult",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365CompilerResult -Path \"c:\\temp\\d365fo.tools\\Custom\\Dynamics.AX.Custom.xppc.log\"\nThis will analyze the compiler log file for warning and errors.\nA result set example:\nFile Warnings Errors\r\n---- -------- ------\r\nc:\\temp\\d365fo.tools\\Custom\\Dynamics.AX.Custom.xppc.log 2 1\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365CompilerResult -Path \"c:\\temp\\d365fo.tools\\Custom\\Dynamics.AX.Custom.xppc.log\" -ErrorsOnly\nThis will analyze the compiler log file for warning and errors, but only output if it has errors.\nA result set example:\nFile Warnings Errors\r\n---- -------- ------\r\nc:\\temp\\d365fo.tools\\Custom\\Dynamics.AX.Custom.xppc.log 2 1\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365CompilerResult -Path \"c:\\temp\\d365fo.tools\\Custom\\Dynamics.AX.Custom.xppc.log\" -ErrorsOnly -OutputAsObjects\nThis will analyze the compiler log file for warning and errors, but only output if it has errors.\r\nThe output will be PSObjects, which can be assigned to a variable and used for futher analysis.\nA result set example:\nFile Warnings Errors\r\n---- -------- ------\r\nc:\\temp\\d365fo.tools\\Custom\\Dynamics.AX.Custom.xppc.log 2 1\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365Module -Name *Custom* | Invoke-D365ModuleCompile | Get-D365CompilerResult -OutputTotals\nThis will find all modules with Custom in their name.\r\nIt will pass thoses modules into the Invoke-D365ModuleCompile, which will compile them.\r\nIt will pass the paths to each compile output log to Get-D365CompilerResult, which will analyze them for warning and errors.\r\nIt will output the total number of warning and errors found.\nFile Warnings Errors\r\n---- -------- ------\r\nc:\\temp\\d365fo.tools\\Custom\\Dynamics.AX.Custom.xppc.log 2 1\nTotal Errors: 1\r\nTotal Warnings: 2",
        "Syntax": "Get-D365CompilerResult [-Path] \u003cString\u003e [-ErrorsOnly] [-OutputTotals] [-OutputAsObjects] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365Database",
        "Description": "Get the names of databases on either SQL Server or in Azure SQL Database instance",
        "Tags": [
                     "Database",
                     "DB",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "Name",
                           "Name of the database that you are looking for\nDefault value is \"*\" which will show all databases",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get databases from the server",
        "Name": "Get-D365Database",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365Database\nThis will show all databases on the default SQL Server / Azure SQL Database instance.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365Database -Name AXDB_ORIGINAL\nThis will show if the AXDB_ORIGINAL database exists on the default SQL Server / Azure SQL Database instance.",
        "Syntax": "Get-D365Database [[-Name] \u003cString[]\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365DatabaseAccess",
        "Description": "Gets all database information from the D365 environment",
        "Tags": [
                     "Database",
                     "Connection",
                     "Sql",
                     "SqlUser",
                     "SqlPwd"
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Shows the Database Access information for the D365 Environment",
        "Name": "Get-D365DatabaseAccess",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365DatabaseAccess\nThis will get all relevant details, including connection details, for the database configured for the environment",
        "Syntax": "Get-D365DatabaseAccess [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365DecryptedWebConfig",
        "Description": "Function used for decrypting the config file used by the D365 Finance \u0026 Operations AOS service",
        "Tags": [
                     "Configuration",
                     "Service Account",
                     "Sql",
                     "SqlUser",
                     "SqlPwd",
                     "WebConfig",
                     "Web.Config",
                     "Decryption"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Place where the decrypted files should be placed\nDefault value is: \"c:\\temp\\d365fo.tools\\WebConfigDecrypted\"",
                           "",
                           false,
                           "false",
                           "c:\\temp\\d365fo.tools\\WebConfigDecrypted"
                       ],
                       [
                           "AosServiceWebRootPath",
                           "Location of the D365 webroot folder",
                           "",
                           false,
                           "false",
                           "$Script:AOSPath"
                       ]
                   ],
        "Alias": "Get-D365DecryptedConfigFile",
        "Synopsis": "Decrypts the AOS config file",
        "Name": "Get-D365DecryptedWebConfig",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365DecryptedWebConfig\nThis will get the config file from the instance, decrypt it and save it.\r\nIT will save the decrypted web.config file in the default location: \"c:\\temp\\d365fo.tools\\WebConfigDecrypted\".\nA result set example:\nFilename LastModified File\r\n-------- ------------ ----\r\nweb.config 7/1/2021 9:01:31 PM C:\\temp\\d365fo.tools\\WebConfigDecrypted\\web.config\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365DecryptedWebConfig -OutputPath \"c:\\temp\\d365fo.tools\"\nThis will get the config file from the instance, decrypt it and save it to \"c:\\temp\\d365fo.tools\"\nA result set example:\nFilename LastModified File\r\n-------- ------------ ----\r\nweb.config 7/1/2021 9:07:36 PM C:\\temp\\d365fo.tools\\web.config",
        "Syntax": "Get-D365DecryptedWebConfig [[-OutputPath] \u003cString\u003e] [[-AosServiceWebRootPath] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365DefaultModelForNewProjects",
        "Description": "Get the registered default model that is used across all new projects that are created inside Visual Studio when working with D365FO project types",
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the default model used creating new projects in Visual Studio",
        "Name": "Get-D365DefaultModelForNewProjects",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365DefaultModelForNewProjects\nThis will display the current default module registered in the \"DynamicsDevConfig.xml\" file.\r\nLocated in Documents\\Visual Studio Dynamics 365\\ or in Documents\\Visual Studio 2015\\Settings\\ depending on the version.",
        "Syntax": "Get-D365DefaultModelForNewProjects [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365DotNetClass",
        "Description": "Get a .NET class from an assembly file (dll) from the package directory",
        "Tags": [
                     ".Net",
                     "DotNet",
                     "Class",
                     "Development"
                 ],
        "Params": [
                       [
                           "Name",
                           "Name of the .NET class that you are looking for\nAccepts wildcards for searching. E.g. -Name \"ER*Excel*\"\nDefault value is \"*\" which will search for all classes",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Assembly",
                           "Name of the assembly file that you want to search for the .NET class\nAccepts wildcards for searching. E.g. -Name \"*AX*Framework*.dll\"\nDefault value is \"*.dll\" which will search for assembly files",
                           "",
                           false,
                           "false",
                           "*.dll"
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed packages\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get a .NET class from the Dynamics 365 for Finance and Operations installation",
        "Name": "Get-D365DotNetClass",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365DotNetClass -Name \"ERText*\"\nWill search across all assembly files (*.dll) that are located in the default package directory after\r\nany class that fits the search \"ERText*\"\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365DotNetClass -Name \"ERText*\" -Assembly \"*LocalizationFrameworkForAx.dll*\"\nWill search across all assembly files (*.dll) that are fits the search \"*LocalizationFrameworkForAx.dll*\",\r\nthat are located in the default package directory, after any class that fits the search \"ERText*\"\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365DotNetClass -Name \"ERText*\" | Export-Csv -Path c:\\temp\\results.txt -Delimiter \";\"\nWill search across all assembly files (*.dll) that are located in the default package directory after\r\nany class that fits the search \"ERText*\"\nThe output is saved to a file to make it easier to search inside the result set",
        "Syntax": "Get-D365DotNetClass [[-Name] \u003cString\u003e] [[-Assembly] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365DotNetMethod",
        "Description": "Get a .NET method from an assembly file (dll) from the package directory",
        "Tags": [
                     ".Net",
                     "DotNet",
                     "Class",
                     "Method",
                     "Methods",
                     "Development"
                 ],
        "Params": [
                       [
                           "Assembly",
                           "Name of the assembly file that you want to search for the .NET method\nProvide the full path for the assembly file you want to work against",
                           "File",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "Name",
                           "Name of the .NET method that you are looking for\nAccepts wildcards for searching. E.g. -Name \"parmER*Excel*\"\nDefault value is \"*\" which will search for all methods",
                           "MethodName",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "TypeName",
                           "Name of the .NET class that you want to work against\nAccepts wildcards for searching. E.g. -Name \"*ER*Excel*\"\nDefault value is \"*\" which will work against all classes",
                           "ClassName",
                           false,
                           "false",
                           "*"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get a .NET method from the Dynamics 365 for Finance and Operations installation",
        "Name": "Get-D365DotNetMethod",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365DotNetMethod -Assembly \"C:\\AOSService\\PackagesLocalDirectory\\ElectronicReporting\\bin\\Microsoft.Dynamics365.LocalizationFrameworkForAx.dll\"\nWill get all methods, across all classes, from the assembly file\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365DotNetMethod -Assembly \"C:\\AOSService\\PackagesLocalDirectory\\ElectronicReporting\\bin\\Microsoft.Dynamics365.LocalizationFrameworkForAx.dll\" -TypeName \"ERTextFormatExcelFileComponent\"\nWill get all methods, from the \"ERTextFormatExcelFileComponent\" class, from the assembly file\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365DotNetMethod -Assembly \"C:\\AOSService\\PackagesLocalDirectory\\ElectronicReporting\\bin\\Microsoft.Dynamics365.LocalizationFrameworkForAx.dll\" -TypeName \"ERTextFormatExcelFileComponent\" \r\n-Name \"*parm*\"\nWill get all methods that fits the search \"*parm*\", from the \"ERTextFormatExcelFileComponent\" class, from the assembly file\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365DotNetClass -Name \"ERTextFormatExcelFileComponent\" -Assembly \"*LocalizationFrameworkForAx.dll*\" | Get-D365DotNetMethod\nWill get all methods, from the \"ERTextFormatExcelFileComponent\" class, from any assembly file that fits the search \"*LocalizationFrameworkForAx.dll*\"",
        "Syntax": "Get-D365DotNetMethod [-Assembly] \u003cString\u003e [[-Name] \u003cString\u003e] [[-TypeName] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365Environment",
        "Description": "List status for all relevant services that is running in a D365FO environment",
        "Tags": [
                     "Environment",
                     "Service",
                     "Services",
                     "Aos",
                     "Batch",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "ComputerName",
                           "An array of computers that you want to query for the services status on.",
                           "",
                           false,
                           "false",
                           "@($env:computername)"
                       ],
                       [
                           "All",
                           "Set when you want to query all relevant services\nIncludes:\r\nAos\r\nBatch\r\nFinancial Reporter\r\nDMF",
                           "",
                           false,
                           "false",
                           "True"
                       ],
                       [
                           "Aos",
                           "Instruct the cmdlet to query the AOS (IIS) service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "Batch",
                           "Instruct the cmdlet query the batch service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "FinancialReporter",
                           "Instruct the cmdlet query the financial reporter (Management Reporter 2012)",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "DMF",
                           "Instruct the cmdlet query the DMF service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OnlyStartTypeAutomatic",
                           "Instruct the cmdlet to filter out services that are set to manual start or disabled",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputServiceDetailsOnly",
                           "Instruct the cmdlet to exclude the server name from the output",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Cmdlet to get the current status for the different services in a Dynamics 365 Finance \u0026 Operations environment",
        "Name": "Get-D365Environment",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365Environment\nWill query all D365FO service on the machine.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365Environment -All\nWill query all D365FO service on the machine.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365Environment -OnlyStartTypeAutomatic\nWill query all D365FO service on the machine.\r\nIt will filter out all services that are either configured as manual or disabled.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365Environment -ComputerName \"TEST-SB-AOS1\",\"TEST-SB-AOS2\",\"TEST-SB-BI1\" -All\nWill query all D365FO service on the different machines.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eGet-D365Environment -Aos -Batch\nWill query the Aos \u0026 Batch services on the machine.\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eGet-D365Environment -FinancialReporter -DMF\nWill query the FinancialReporter \u0026 DMF services on the machine.\n-------------------------- EXAMPLE 7 --------------------------\nPS C:\\\u003eGet-D365Environment -OutputServiceDetailsOnly\nWill query all D365FO service on the machine.\r\nWill omit the servername from the output.\n-------------------------- EXAMPLE 8 --------------------------\nPS C:\\\u003eGet-D365Environment -FinancialReporter | Set-Service -StartupType Manual\nThis will configure the Financial Reporter services to be start type manual.",
        "Syntax": "Get-D365Environment [[-ComputerName] \u003cString[]\u003e] [-All] [-OnlyStartTypeAutomatic] [-OutputServiceDetailsOnly] [\u003cCommonParameters\u003e]\nGet-D365Environment [[-ComputerName] \u003cString[]\u003e] [-Aos] [-Batch] [-FinancialReporter] [-DMF] [-OnlyStartTypeAutomatic] [-OutputServiceDetailsOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365EnvironmentSettings",
        "Description": "Gets all settings the Dynamics 365 for Finance \u0026 Operations environment uses.",
        "Tags": [
                     "Environment",
                     "Configuration",
                     "WebConfig",
                     "Web.Config",
                     "Decryption"
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Get the D365FO environment settings",
        "Name": "Get-D365EnvironmentSettings",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365EnvironmentSettings\nThis will get all details available for the environment\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365EnvironmentSettings | Format-Custom -Property *\nThis will get all details available for the environment and format it to show all details in a long custom object.",
        "Syntax": "Get-D365EnvironmentSettings [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365EventTraceProvider",
        "Description": "Get the full list of available Event Trace Providers for Dynamics 365 for Finance and Operations",
        "Tags": [
                     "ETL",
                     "EventTracing",
                     "EventTrace"
                 ],
        "Params": [
                       [
                           "Name",
                           "Name of the provider that you are looking for\nDefault value is \"*\" to show all Event Trace Providers\nAccepts an array of names, and will automatically add wildcard searching characters for each entry",
                           "",
                           false,
                           "false",
                           "@(\"*\")"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get D365FO Event Trace Provider",
        "Name": "Get-D365EventTraceProvider",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365EventTraceProvider\nWill list all available Event Trace Providers on a D365FO server.\r\nIt will use the default option for the \"Name\" parameter.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365EventTraceProvider -Name Tax\nWill list all available Event Trace Providers on a D365FO server which contains the keyvword \"Tax\".\r\nIt will use the Name parameter value \"Tax\" while searching for Event Trace Providers.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365EventTraceProvider -Name Tax,MR\nWill list all available Event Trace Providers on a D365FO server which contains the keyvword \"Tax\" or \"MR\".\r\nIt will use the Name parameter array value (\"Tax\",\"MR\") while searching for Event Trace Providers.",
        "Syntax": "Get-D365EventTraceProvider [[-Name] \u003cString[]\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365ExternalIP",
        "Description": "Get the external IP address by calling an external webpage and interpret the result from that",
        "Tags": [
                     "DEV",
                     "Tier2",
                     "DB",
                     "Database",
                     "Debug",
                     "JIT",
                     "LCS",
                     "Azure DB",
                     "IP"
                 ],
        "Params": [
                       [
                           "SaveToClipboard",
                           "Instruct the cmdlet to copy the IP address directly into the clipboard, to save you the trouble",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the external IP address",
        "Name": "Get-D365ExternalIP",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365ExternalIP\nWill call the external page, interpret the output and display it as output.\nA result set example:\nIpAddress\r\n---------\r\n40.113.130.229\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365ExternalIP -SaveToClipboard\nWill call the external page, interpret the output and display it as output.\r\nIt will save/copy the IP address into the clipboard.\nA result set example:\nIpAddress\r\n---------\r\n40.113.130.229",
        "Syntax": "Get-D365ExternalIP [-SaveToClipboard] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365InstalledHotfix",
        "Description": "Get all relevant details for installed hotfix",
        "Tags": [
                     "Hotfix",
                     "Servicing",
                     "Model",
                     "Models",
                     "KB",
                     "Patch",
                     "Patching",
                     "PackagesLocalDirectory"
                 ],
        "Params": [
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the AOS Service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the PackagesLocalDirectory\nDefault path is the same as the AOS Service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ],
                       [
                           "Model",
                           "Name of the model that you want to work against\nAccepts wildcards for searching. E.g. -Model \"*Retail*\"\nDefault value is \"*\" which will search for all models",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Name",
                           "Name of the hotfix that you are looking for\nAccepts wildcards for searching. E.g. -Name \"7045*\"\nDefault value is \"*\" which will search for all hotfixes",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "KB",
                           "KB number of the hotfix that you are looking for\nAccepts wildcards for searching. E.g. -KB \"4045*\"\nDefault value is \"*\" which will search for all KB\u0027s",
                           "",
                           false,
                           "false",
                           "*"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get installed hotfix",
        "Name": "Get-D365InstalledHotfix",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365InstalledHotfix\nThis will display all installed hotfixes found on this machine\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365InstalledHotfix -Model \"*retail*\"\nThis will display all installed hotfixes found for all models that matches the search for \"*retail*\" found on this machine\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365InstalledHotfix -Model \"*retail*\" -KB \"*43*\"\nThis will display all installed hotfixes found for all models that matches the search for \"*retail*\" and only with KB\u0027s that matches the search for \"*43*\" found on this machine",
        "Syntax": "Get-D365InstalledHotfix [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [[-Model] \u003cString\u003e] [[-Name] \u003cString\u003e] [[-KB] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365InstalledPackageOld",
        "Description": "Get installed package from the machine running the AOS service for Dynamics 365 Finance \u0026 Operations",
        "Tags": [
                     "PackagesLocalDirectory",
                     "Servicing",
                     "Model",
                     "Models",
                     "Package",
                     "Packages"
                 ],
        "Params": [
                       [
                           "Name",
                           "Name of the package that you are looking for\nAccepts wildcards for searching. E.g. -Name \"Application*Adaptor\"\nDefault value is \"*\" which will search for all packages",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed packages\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get installed package from Dynamics 365 Finance \u0026 Operations environment",
        "Name": "Get-D365InstalledPackageOld",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365InstalledPackage\nShows the entire list of installed packages located in the default location on the machine\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365InstalledPackage -Name \"Application*Adaptor\"\nShows the list of installed packages where the name fits the search \"Application*Adaptor\"\nA result set example:\r\nApplicationFoundationFormAdaptor\r\nApplicationPlatformFormAdaptor\r\nApplicationSuiteFormAdaptor\r\nApplicationWorkspacesFormAdaptor\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365InstalledPackage -PackageDirectory \"J:\\AOSService\\PackagesLocalDirectory\"\nShows the entire list of installed packages located in \"J:\\AOSService\\PackagesLocalDirectory\" on the machine",
        "Syntax": "Get-D365InstalledPackageOld [[-Name] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365InstalledService",
        "Description": "Get installed Dynamics 365 for Finance \u0026 Operations services that are installed on the machine",
        "Tags": [
                     "Services",
                     "Servicing",
                     "Topology"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the folder that contains the \"InstallationRecords\" folder",
                           "",
                           false,
                           "false",
                           "$Script:InstallationRecordsDir"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get installed D365 services",
        "Name": "Get-D365InstalledService",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365InstalledService\nThis will get all installed services on the machine.",
        "Syntax": "Get-D365InstalledService [[-Path] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365InstanceName",
        "Description": "Get the instance name that is registered in the environment",
        "Tags": [
                     "Instance",
                     "Servicing"
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Gets the instance name",
        "Name": "Get-D365InstanceName",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365InstanceName\nThis will get the service name that the environment has configured",
        "Syntax": "Get-D365InstanceName [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365JsonService",
        "Description": "Get Json based services that are available from a Dynamics 365 Finance \u0026 Operations environment",
        "Tags": [
                     "DMF",
                     "OData",
                     "RestApi",
                     "Data Management Framework"
                 ],
        "Params": [
                       [
                           "Name",
                           "The name of the json service that you are looking for\nDefault value is \"*\" to display all json services",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Url",
                           "URL / URI for the D365FO environment you want to access\nIf you are working against a D365FO instance, it will be the URL / URI for the instance itself\nIf you are working against a D365 Talent / HR instance, this will have to be \"http://hr.talent.dynamics.com\"",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Tenant",
                           "Azure Active Directory (AAD) tenant id (Guid) that the D365FO environment is connected to, that you want to access",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "ClientId",
                           "The ClientId obtained from the Azure Portal when you created a Registered Application",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "ClientSecret",
                           "The ClientSecret obtained from the Azure Portal when you created a Registered Application",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "RawOutput",
                           "Instructs the cmdlet to include the outer structure of the response received from the endpoint\nThe output will still be a PSCustomObject",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputAsJson",
                           "Instructs the cmdlet to convert the output to a Json string",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get Json based service",
        "Name": "Get-D365JsonService",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365JsonService -Url \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\" -Tenant \"e674da86-7ee5-40a7-b777-1111111111111\" -ClientId \"dea8d7a9-1602-4429-b138-111111111111\" -ClientSecret \r\n\"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\"\nThis will get all available service groups for the D365FO instance.\r\nIt will contact the D365FO instance specified in the Url parameter: \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\".\r\nIt will authenticate againt the \"https://login.microsoftonline.com/e674da86-7ee5-40a7-b777-1111111111111/oauth2/token\" url with the specified Tenant parameter: \"e674da86-7ee5-40a7-b777-1111111111111\".\r\nIt will authenticate with the specified ClientId parameter: \"dea8d7a9-1602-4429-b138-111111111111\".\r\nIt will authenticate with the specified ClientSecret parameter: \"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\".\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365JsonService -Name \"*TS*\" -Url \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\" -Tenant \"e674da86-7ee5-40a7-b777-1111111111111\" -ClientId \"dea8d7a9-1602-4429-b138-111111111111\" \r\n-ClientSecret \"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\"\nThis will get all available service groups for the D365FO instance, which matches the \"*TS*\" as a name.\r\nIt will contact the D365FO instance specified in the Url parameter: \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\".\r\nIt will authenticate againt the \"https://login.microsoftonline.com/e674da86-7ee5-40a7-b777-1111111111111/oauth2/token\" url with the specified Tenant parameter: \"e674da86-7ee5-40a7-b777-1111111111111\".\r\nIt will authenticate with the specified ClientId parameter: \"dea8d7a9-1602-4429-b138-111111111111\".\r\nIt will authenticate with the specified ClientSecret parameter: \"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\".\r\nIt will limit the output to only those matching the specified Name parameter: \"*TS*\"\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365JsonService -Url \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\" -Tenant \"e674da86-7ee5-40a7-b777-1111111111111\" -ClientId \"dea8d7a9-1602-4429-b138-111111111111\" -ClientSecret \r\n\"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\" -RawOutput\nThis will get all available service groups for the D365FO instance with the outer most hierarchy.\r\nIt will contact the D365FO instance specified in the Url parameter: \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\".\r\nIt will authenticate againt the \"https://login.microsoftonline.com/e674da86-7ee5-40a7-b777-1111111111111/oauth2/token\" url with the specified Tenant parameter: \"e674da86-7ee5-40a7-b777-1111111111111\".\r\nIt will authenticate with the specified ClientId parameter: \"dea8d7a9-1602-4429-b138-111111111111\".\r\nIt will authenticate with the specified ClientSecret parameter: \"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\".\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365JsonService -Url \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\" -Tenant \"e674da86-7ee5-40a7-b777-1111111111111\" -ClientId \"dea8d7a9-1602-4429-b138-111111111111\" -ClientSecret \r\n\"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\" -OutputAsJson\nThis will get all available service groups for the D365FO instance and display the result as json.\r\nIt will contact the D365FO instance specified in the Url parameter: \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\".\r\nIt will authenticate againt the \"https://login.microsoftonline.com/e674da86-7ee5-40a7-b777-1111111111111/oauth2/token\" url with the specified Tenant parameter: \"e674da86-7ee5-40a7-b777-1111111111111\".\r\nIt will authenticate with the specified ClientId parameter: \"dea8d7a9-1602-4429-b138-111111111111\".\r\nIt will authenticate with the specified ClientSecret parameter: \"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\".",
        "Syntax": "Get-D365JsonService [[-Name] \u003cString\u003e] [-Url] \u003cString\u003e [-Tenant] \u003cString\u003e [-ClientId] \u003cString\u003e [-ClientSecret] \u003cString\u003e [-RawOutput] [-OutputAsJson] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365Label",
        "Description": "Get label from the label file from the running the Dynamics 365 Finance \u0026 Operations instance",
        "Tags": [
                     "PackagesLocalDirectory",
                     "Servicing",
                     "Language",
                     "Labels",
                     "Label"
                 ],
        "Params": [
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the AOS service PackagesLocalDirectory\\bin\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "LabelFileId",
                           "Name / Id of the label \"file\" that you want to work against",
                           "",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "Language",
                           "Name / string representation of the language / culture you want to work against\nDefault value is \"en-US\"",
                           "",
                           false,
                           "true (ByPropertyName)",
                           "en-US"
                       ],
                       [
                           "Name",
                           "Name of the label that you are looking for\nAccepts wildcards for searching. E.g. -Name \"@PRO59*\"\nDefault value is \"*\" which will search for all labels",
                           "",
                           false,
                           "false",
                           "*"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get label from the label file from Dynamics 365 Finance \u0026 Operations environment",
        "Name": "Get-D365Label",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365Label -LabelFileId PRO\nShows the entire list of labels that are available from the PRO label file.\r\nThe language is defaulted to \"en-US\".\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365Label -LabelFileId PRO -Language da\nShows the entire list of labels that are available from the PRO label file.\r\nShows only all \"da\" (Danish) labels.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365Label -LabelFileId PRO -Name \"@PRO59*\"\nShows the labels available from the PRO label file where the name fits the search \"@PRO59*\"\nA result set example:\nName Value Language\r\n---- ----- --------\r\n@PRO59 Indicates if the type of the rebate value. en-US\r\n@PRO594 Pack consumption en-US\r\n@PRO595 Pack qty now being released to production in the BOM unit. en-US\r\n@PRO596 Pack unit. en-US\r\n@PRO597 Pack proposal for release in the packing unit. en-US\r\n@PRO590 Constant pack qty en-US\r\n@PRO593 Pack proposal release in BOM unit. en-US\r\n@PRO598 Pack quantity now being released for the production in the packing unit. en-US\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365Label -LabelFileId PRO -Name \"@PRO59*\" -Language da,en-us\nShows the labels available from the PRO label file where the name fits the search \"@PRO59*\".\r\nShows for both \"da\" (Danish) and en-US (English)",
        "Syntax": "Get-D365Label [[-BinDir] \u003cString\u003e] [-LabelFileId] \u003cString\u003e [[-Language] \u003cString[]\u003e] [[-Name] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365LabelFile",
        "Description": "Get label file (ids) for packages / modules from the machine running the AOS service for Dynamics 365 Finance \u0026 Operations",
        "Tags": [
                     "PackagesLocalDirectory",
                     "Servicing",
                     "Language",
                     "Labels",
                     "Label"
                 ],
        "Params": [
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the AOS service PackagesLocalDirectory\\bin\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ],
                       [
                           "Module",
                           "Name of the module that you want to work against\nDefault value is \"*\" which will search for all modules",
                           "ModuleName",
                           false,
                           "true (ByPropertyName)",
                           "*"
                       ],
                       [
                           "Name",
                           "Name of the label file (id) that you are looking for\nAccepts wildcards for searching. E.g. -Name \"Acc*Receivable*\"\nDefault value is \"*\" which will search for all label file (ids)",
                           "",
                           false,
                           "false",
                           "*"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get label file (ids) for packages / modules from Dynamics 365 Finance \u0026 Operations environment",
        "Name": "Get-D365LabelFile",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365LabelFile\nShows the entire list of label file (ids) for all installed packages / modules located in the default location on the machine\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365LabelFile -Name \"Acc*Receivable*\"\nShows the list of label file (ids) for all installed packages / modules where the label file (ids) name fits the search \"Acc*Receivable*\"\nA result set example:\nLabelFileId Languages Module\r\n----------- --------- ------\r\nAccountsReceivable {ar-AE, ar, cs, da...} ApplicationSuite\r\nAccountsReceivable_SalesTaxCodesSA {en-US} ApplicationSuite\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365LabelFile -PackageDirectory \"J:\\AOSService\\PackagesLocalDirectory\"\nShows the list of label file (ids) for all installed packages / modules located in \"J:\\AOSService\\PackagesLocalDirectory\" on the machine",
        "Syntax": "Get-D365LabelFile [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [[-Module] \u003cString\u003e] [[-Name] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365LabelOld",
        "Description": "Get label details from the resource file",
        "Tags": [
                     "PackagesLocalDirectory",
                     "Label",
                     "Labels",
                     "Language",
                     "Development",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "FilePath",
                           "The path to resource file that you want to get label details from",
                           "Path",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "Name",
                           "Name of the label you are looking for\nAccepts wildcards for searching. E.g. -Name \"@PRO*\"\nDefault value is \"*\" which will search for all labels in the resource file",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Value",
                           "Value of the label you are looking for\nAccepts wildcards for searching. E.g. -Name \"*Qty*\"\nDefault value is \"*\" which will search for all values in the resource file",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "IncludePath",
                           "Switch to indicate whether you want the result set to include the path to the resource file or not\nDefault is OFF - path details will not be part of the output",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get label from the resource file",
        "Name": "Get-D365LabelOld",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365Label -Path \"C:\\AOSService\\PackagesLocalDirectory\\ApplicationSuite\\Resources\\en-US\\PRO.resources.dll\"\nWill get all labels from the \"PRO.resouce.dll\" file\nThe language is determined by the path to the resource file and nothing else\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365Label -Path \"C:\\AOSService\\PackagesLocalDirectory\\ApplicationSuite\\Resources\\en-US\\PRO.resources.dll\" -Name \"@PRO505\"\nWill get the label with the name \"@PRO505\" from the \"PRO.resouce.dll\" file\nThe language is determined by the path to the resource file and nothing else\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365Label -Path \"C:\\AOSService\\PackagesLocalDirectory\\ApplicationSuite\\Resources\\en-US\\PRO.resources.dll\" -Value \"*qty*\"\nWill get all the labels where the value fits the search \"*qty*\" from the \"PRO.resouce.dll\" file\nThe language is determined by the path to the resource file and nothing else\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365InstalledPackage -Name \"ApplicationSuite\" | Get-D365PackageLabelFile -Language \"da\" | Get-D365Label -value \"*batch*\" -IncludePath\nWill get all the labels, across all label files, for the \"ApplicationSuite\", where the language is \"da\" and where the label value fits the search \"*batch*\".\nThe path to the label file is included in the output.",
        "Syntax": "Get-D365LabelOld [-FilePath] \u003cString\u003e [[-Name] \u003cString\u003e] [[-Value] \u003cString\u003e] [-IncludePath] [\u003cCommonParameters\u003e]\nGet-D365LabelOld [-FilePath] \u003cString\u003e [[-Name] \u003cString\u003e] [[-Value] \u003cString\u003e] [-IncludePath] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365Language",
        "Description": "Get installed languages from the running the Dynamics 365 Finance \u0026 Operations instance",
        "Tags": [
                     "PackagesLocalDirectory",
                     "Servicing",
                     "Language",
                     "Labels",
                     "Label"
                 ],
        "Params": [
                       [
                           "BinDir",
                           "Path to the directory containing the BinDir and its assemblies\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "Name",
                           "Name of the language that you are looking for\nAccepts wildcards for searching. E.g. -Name \"fr*\"\nDefault value is \"*\" which will search for all languages",
                           "",
                           false,
                           "false",
                           "*"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get installed languages from Dynamics 365 Finance \u0026 Operations environment",
        "Name": "Get-D365Language",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365Language\nShows the entire list of installed languages that are available from the running instance\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365Language -Name \"fr*\"\nShows the list of installed languages where the name fits the search \"fr*\"\nA result set example:\r\nfr French\r\nfr-BE French (Belgium)\r\nfr-CA French (Canada)\r\nfr-CH French (Switzerland)",
        "Syntax": "Get-D365Language [[-BinDir] \u003cString\u003e] [[-Name] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365LcsApiConfig",
        "Description": "Get the LCS configuration details from the configuration store\n\nAll settings retrieved from this cmdlets is to be considered the default parameter values across the different cmdlets",
        "Tags": [
                     "Environment",
                     "Url",
                     "Config",
                     "Configuration",
                     "LCS",
                     "Upload",
                     "ClientId"
                 ],
        "Params": [
                       [
                           "OutputAsHashtable",
                           "Instruct the cmdlet to return a hashtable object",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the LCS configuration details",
        "Name": "Get-D365LcsApiConfig",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365LcsApiConfig\nThis will output the current LCS API configuration.\r\nThe object returned will be a PSCustomObject.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365LcsApiConfig -OutputAsHashtable\nThis will output the current LCS API configuration.\r\nThe object returned will be a Hashtable.",
        "Syntax": "Get-D365LcsApiConfig [-OutputAsHashtable] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365LcsApiToken",
        "Description": "Upload a file to a LCS project using the API provided by Microsoft",
        "Tags": [
                     "Environment",
                     "Url",
                     "Config",
                     "Configuration",
                     "LCS",
                     "Upload",
                     "Api",
                     "AAD",
                     "Token"
                 ],
        "Params": [
                       [
                           "ClientId",
                           "The Azure Registered Application Id / Client Id obtained while creating a Registered App inside the Azure Portal\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiClientId"
                       ],
                       [
                           "Username",
                           "The username of the account that you want to impersonate\nIt can either be your personal account or a service account",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Password",
                           "The password of the account that you want to impersonate",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiApiUri"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Upload a file to a LCS project",
        "Name": "Get-D365LcsApiToken",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365LcsApiToken -ClientId \"9b4f4503-b970-4ade-abc6-2c086e4c4929\" -Username \"serviceaccount@domain.com\" -Password \"TopSecretPassword\" -LcsApiUri \"https://lcsapi.lcs.dynamics.com\"\nThis will obtain a valid OAuth 2.0 access token from Azure Active Directory.\r\nThe ClientId \"9b4f4503-b970-4ade-abc6-2c086e4c4929\" is used in the OAuth 2.0 Grant Flow to authenticate.\r\nThe Username \"serviceaccount@domain.com\" and Password \"TopSecretPassword\" is used in the OAuth 2.0 Grant Flow, to approved that the application should impersonate like \"serviceaccount@domain.com\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\" (NON-EUROPE).\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365LcsApiToken -ClientId \"9b4f4503-b970-4ade-abc6-2c086e4c4929\" -Username \"serviceaccount@domain.com\" -Password \"TopSecretPassword\" -LcsApiUri \"https://lcsapi.lcs.dynamics.com\" | \r\nSet-D365LcsApiConfig -ProjectId 123456789\nThis will obtain a valid OAuth 2.0 access token from Azure Active Directory.\r\nThe ClientId \"9b4f4503-b970-4ade-abc6-2c086e4c4929\" is used in the OAuth 2.0 Grant Flow to authenticate.\r\nThe Username \"serviceaccount@domain.com\" and Password \"TopSecretPassword\" is used in the OAuth 2.0 Grant Flow, to approved that the application should impersonate like \"serviceaccount@domain.com\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\" (NON-EUROPE).\nThe output object received from Get-D365LcsApiToken is piped directly to Set-D365LcsApiConfig.\nSet-D365LcsApiConfig will save the ClientId, LcsApiUri, ProjectId, access_token(BearerToken), refresh_token(RefreshToken), expires_on(ActiveTokenExpiresOn) details for the module to use them across \r\nother LCS cmdlets.\nThis should be your default approach in using and leveraging the module, so you don\u0027t have to supply the same parameters for every single cmdlet.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365LcsApiToken -Username \"serviceaccount@domain.com\" -Password \"TopSecretPassword\"\nThis will obtain a valid OAuth 2.0 access token from Azure Active Directory.\r\nThe Username \"serviceaccount@domain.com\" and Password \"TopSecretPassword\" is used in the OAuth 2.0 Grant Flow, to approved that the application should impersonate like \"serviceaccount@domain.com\".\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365LcsApiToken -Username \"serviceaccount@domain.com\" -Password \"TopSecretPassword\" | Set-D365LcsApiConfig\nThis will obtain a valid OAuth 2.0 access token from Azure Active Directory and save the needed details.\r\nThe Username \"serviceaccount@domain.com\" and Password \"TopSecretPassword\" is used in the OAuth 2.0 Grant Flow, to approved that the application should impersonate like \"serviceaccount@domain.com\".\r\nThe output object received from Get-D365LcsApiToken is piped directly to Set-D365LcsApiConfig.\r\nSet-D365LcsApiConfig will save the access_token(BearerToken), refresh_token(RefreshToken) and expires_on(ActiveTokenExpiresOn).\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.",
        "Syntax": "Get-D365LcsApiToken [[-ClientId] \u003cString\u003e] [-Username] \u003cString\u003e [-Password] \u003cString\u003e [[-LcsApiUri] \u003cString\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365LcsAssetFile",
        "Description": "Get the available files from the Asset Library in LCS project",
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "FileType",
                           "Type of file you want to list from the LCS Asset Library\nValid options:\r\n\"Model\"\r\n\"Process Data Package\"\r\n\"Software Deployable Package\"\r\n\"GER Configuration\"\r\n\"Data Package\"\r\n\"PowerBI Report Model\"\r\n\"E-Commerce Package\"\r\n\"NuGet Package\"\r\n\"Retail Self-Service Package\"\r\n\"Commerce Cloud Scale Unit Extension\"\nDefault value is \"Software Deployable Package\"",
                           "",
                           false,
                           "false",
                           "SoftwareDeployablePackage"
                       ],
                       [
                           "AssetName",
                           "Name of the asset that you are looking for\nAccepts wildcards for searching. E.g. -AssetName \"*ISV*\"\nDefault value is \"*\" which will search for all assets via the Name property",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "AssetVersion",
                           "Version of the Asset file that you are looking for\nIt does a simple compare against the response from LCS and only lists the ones that matches\nAccepts wildcards for searching. E.g. -AssetVersion \"*ISV*\"\nDefault value is \"*\" which will search for all files",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "AssetFilename",
                           "Name of the file that you are looking for\nAccepts wildcards for searching. E.g. -AssetFilename \"*ISV*\"\nDefault value is \"*\" which will search for all files via the FileName property",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "AssetDescription",
                           "Name of the file that you are looking for\nAccepts wildcards for searching. E.g. -AssetDescription \"*ISV*\"\nDefault value is \"*\" which will search for all files via the FileDescription property",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "AssetId",
                           "Id of the file that you are looking for\nAccepts wildcards for searching. E.g. -AssetId \"*ISV*\"\nDefault value is \"*\" which will search for all files via the AssetId property",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "Latest",
                           "Instruct the cmdlet to only fetch the latest file from the Asset Library from LCS",
                           "GetLatest",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get file from the Asset library inside the LCS project",
        "Name": "Get-D365LcsAssetFile",
        "Links": [
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365LcsAssetFile -ProjectId 123456789 -FileType SoftwareDeployablePackage -BearerToken \"JldjfafLJdfjlfsalfd...\" -LcsApiUri \"https://lcsapi.lcs.dynamics.com\"\nThis will list all Software Deployable Packages.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe request will authenticate with the BearerToken \"JldjfafLJdfjlfsalfd...\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\" (NON-EUROPE).\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365LcsAssetFile -FileType SoftwareDeployablePackage\nThis will list all Software Deployable Packages.\r\nIt will search for SoftwareDeployablePackage by using the FileType parameter.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365LcsAssetFile -FileType SoftwareDeployablePackage -AssetFilename \"*MAIN*\"\nThis will list all Software Deployable Packages, that matches the \"*MAIN*\" search pattern in the AssetFilename.\r\nIt will search for SoftwareDeployablePackage by using the FileType parameter.\r\nIt will filter the output to match the AssetFilename \"*MAIN*\" search pattern.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365LcsAssetFile -FileType SoftwareDeployablePackage -AssetName \"*MAIN*\"\nThis will list all Software Deployable Packages, that matches the \"*MAIN*\" search pattern in the AssetName.\r\nIt will search for SoftwareDeployablePackage by using the FileType parameter.\r\nIt will filter the output to match the AssetName \"*MAIN*\" search pattern.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eGet-D365LcsAssetFile -FileType SoftwareDeployablePackage -AssetDescription \"*TEST*\"\nThis will list all Software Deployable Packages, that matches the \"*TEST*\" search pattern in the AssetDescription.\r\nIt will search for SoftwareDeployablePackage by using the FileType parameter.\r\nIt will filter the output to match the AssetDescription \"*TEST*\" search pattern.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eGet-D365LcsAssetFile -FileType SoftwareDeployablePackage -AssetId \"500dd860-eacf-4e04-9f18-f9c8fe1d8e03\"\nThis will list all Software Deployable Packages, that matches the \"500dd860-eacf-4e04-9f18-f9c8fe1d8e03\" search pattern in the AssetId.\r\nIt will search for SoftwareDeployablePackage by using the FileType parameter.\r\nIt will filter the output to match the AssetId \"500dd860-eacf-4e04-9f18-f9c8fe1d8e03\" search pattern.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 7 --------------------------\nPS C:\\\u003eGet-D365LcsAssetFile -FileType SoftwareDeployablePackage -Latest | Invoke-D365AzCopyTransfer -DestinationUri C:\\Temp\\d365fo.tools -FileName \"Main.zip\" -ShowOriginalProgress\nThis will download the latest Software Deployable Package from the Asset Library in LCS onto your on machine.\r\nIt will list Software Deployable Packages based on the FileType parameter.\r\nIt will list the latest (newest) Software Deployable Package.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 8 --------------------------\nPS C:\\\u003eGet-D365LcsAssetFile -FileType SoftwareDeployablePackage -RetryTimeout \"00:01:00\"\nThis will list all Software Deployable Packages, and allow for the cmdlet to retry for no more than 1 minute.\r\nIt will search for SoftwareDeployablePackage by using the FileType parameter.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.",
        "Syntax": "Get-D365LcsAssetFile [[-ProjectId] \u003cInt32\u003e] [[-FileType] {Model | ProcessDataPackage | SoftwareDeployablePackage | GERConfiguration | DataPackage | PowerBIReportModel | ECommercePackage | NuGetPackage | RetailSelfServicePackage | CommerceCloudScaleUnitExtension}] [[-AssetName] \u003cString\u003e] [[-AssetVersion] \u003cString\u003e] [[-AssetFilename] \u003cString\u003e] [[-AssetDescription] \u003cString\u003e] [[-AssetId] \u003cString\u003e] [[-BearerToken] \u003cString\u003e] [[-LcsApiUri] \u003cString\u003e] [-Latest] [[-RetryTimeout] \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365LcsAssetValidationStatus",
        "Description": "Get the validation status for a given file in the Asset Library in LCS",
        "Params": [
                       [
                           "AssetId",
                           "The unique id of the asset / file that you are trying to deploy from LCS",
                           "",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "WaitForValidation",
                           "Instruct the cmdlet to wait for the validation process to complete\nThe cmdlet will sleep for 60 seconds, before requesting the status of the validation process from LCS",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "SleepInSeconds",
                           "Time in seconds that you want the cmdlet to use as the sleep timer between each request against the LCS endpoint\nDefault value is 60",
                           "",
                           false,
                           "false",
                           "60"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the validation status from LCS",
        "Name": "Get-D365LcsAssetValidationStatus",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365LcsAssetValidationStatus -ProjectId 123456789 -BearerToken \"JldjfafLJdfjlfsalfd...\" -AssetId \"958ae597-f089-4811-abbd-c1190917eaae\" -LcsApiUri \"https://lcsapi.lcs.dynamics.com\"\nThis will check the validation status for the file in the Asset Library.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe file is identified by the AssetId \"958ae597-f089-4811-abbd-c1190917eaae\", which is obtained either by earlier upload or simply looking in the LCS portal.\r\nThe request will authenticate with the BearerToken \"Bearer JldjfafLJdfjlfsalfd...\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\" (NON-EUROPE).\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365LcsAssetValidationStatus -AssetId \"958ae597-f089-4811-abbd-c1190917eaae\"\nThis will check the validation status for the file in the Asset Library.\r\nThe file is identified by the AssetId \"958ae597-f089-4811-abbd-c1190917eaae\", which is obtained either by earlier upload or simply looking in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365LcsAssetValidationStatus -AssetId \"958ae597-f089-4811-abbd-c1190917eaae\" -WaitForValidation\nThis will check the validation status for the file in the Asset Library.\r\nThe file is identified by the AssetId \"958ae597-f089-4811-abbd-c1190917eaae\", which is obtained either by earlier upload or simply looking in the LCS portal.\r\nThe cmdlet will every 60 seconds contact the LCS API endpoint and check if the status of the validation is either success or failure.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eInvoke-D365LcsUpload -FilePath \"C:\\temp\\d365fo.tools\\Release-2019-05-05.zip\" | Get-D365LcsAssetValidationStatus -WaitForValidation\nThis will start the upload of a file to the Asset Library and check the validation status for the file in the Asset Library.\r\nThe file that will be uploaded is based on the FilePath \"C:\\temp\\d365fo.tools\\Release-2019-05-05.zip\".\r\nThe output object received from Invoke-D365LcsUpload is piped directly to Get-D365LcsAssetValidationStatus.\r\nThe cmdlet will every 60 seconds contact the LCS API endpoint and check if the status of the validation is either success or failure.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eGet-D365LcsAssetValidationStatus -AssetId \"958ae597-f089-4811-abbd-c1190917eaae\" -RetryTimeout \"00:01:00\"\nThis will check the validation status for the file in the Asset Library, and allow for the cmdlet to retry for no more than 1 minute.\r\nThe file is identified by the AssetId \"958ae597-f089-4811-abbd-c1190917eaae\", which is obtained either by earlier upload or simply looking in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.",
        "Syntax": "Get-D365LcsAssetValidationStatus [-AssetId] \u003cString\u003e [[-ProjectId] \u003cInt32\u003e] [[-BearerToken] \u003cString\u003e] [[-LcsApiUri] \u003cString\u003e] [-WaitForValidation] [[-SleepInSeconds] \u003cInt32\u003e] [[-RetryTimeout] \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365LcsDatabaseBackups",
        "Description": "Get the available database backups from the Asset Library in LCS project",
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "Latest",
                           "Instruct the cmdlet to only fetch the latest file from the Azure Storage Account",
                           "GetLatest",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get database backups from LCS project",
        "Name": "Get-D365LcsDatabaseBackups",
        "Links": [
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365LcsDatabaseBackups -ProjectId 123456789 -BearerToken \"JldjfafLJdfjlfsalfd...\" -LcsApiUri \"https://lcsapi.lcs.dynamics.com\"\nThis will get all available database backups from the Asset Library inside LCS.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe request will authenticate with the BearerToken \"Bearer JldjfafLJdfjlfsalfd...\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\" (NON-EUROPE).\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365LcsDatabaseBackups\nThis will get all available database backups from the Asset Library inside LCS.\r\nIt will use default values for all parameters.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365LcsDatabaseBackups -Latest\nThis will get the latest available database backup from the Asset Library inside LCS.\r\nIt will use default values for all parameters.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365LcsDatabaseBackups -Latest -RetryTimeout \"00:01:00\"\nThis will get the latest available database backup from the Asset Library inside LCS, and allow for the cmdlet to retry for no more than 1 minute.\r\nIt will use default values for all parameters.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.",
        "Syntax": "Get-D365LcsDatabaseBackups [[-ProjectId] \u003cInt32\u003e] [[-BearerToken] \u003cString\u003e] [[-LcsApiUri] \u003cString\u003e] [-Latest] [[-RetryTimeout] \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365LcsDatabaseOperationStatus",
        "Description": "Get the current status of a database operation against an environment from a LCS project",
        "Tags": [
                     "Environment",
                     "Config",
                     "Configuration",
                     "LCS",
                     "Database backup",
                     "Api",
                     "Backup",
                     "Restore",
                     "Refresh"
                 ],
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "OperationActivityId",
                           "The unique id of the operaction activity that identitfies the database operation\nIt will be part of the output from the different Invoke-D365LcsDatabaseExport or Invoke-D365LcsDatabaseRefresh cmdlets",
                           "ActivityId",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "EnvironmentId",
                           "The unique id of the environment that you want to work against\nThe Id can be located inside the LCS portal",
                           "SourceEnvironmentId",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "WaitForCompletion",
                           "Instruct the cmdlet to wait for the deployment process to complete\nThe cmdlet will sleep for 300 seconds, before requesting the status of the deployment process from LCS",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "SleepInSeconds",
                           "Time in seconds that you want the cmdlet to use as the sleep timer between each request against the LCS endpoint\nDefault value is 300",
                           "",
                           false,
                           "false",
                           "300"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the status of a database operation from LCS",
        "Name": "Get-D365LcsDatabaseOperationStatus",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365LcsDatabaseOperationStatus -ProjectId 123456789 -OperationActivityId 123456789 -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -BearerToken \"JldjfafLJdfjlfsalfd...\" -LcsApiUri \r\n\"https://lcsapi.lcs.dynamics.com\"\nThis will check the database operation status of a specific OperationActivityId against an environment.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe OperationActivityId is identified by the OperationActivityId 123456789, which is obtained from executing either the Invoke-D365LcsDatabaseExport or Invoke-D365LcsDatabaseRefresh cmdlets.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\r\nThe request will authenticate with the BearerToken \"JldjfafLJdfjlfsalfd...\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\" (NON-EUROPE).\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365LcsDatabaseOperationStatus -OperationActivityId 123456789 -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\"\nThis will check the database operation status of a specific OperationActivityId against an environment.\r\nThe OperationActivityId is identified by the OperationActivityId 123456789, which is obtained from executing either the Invoke-D365LcsDatabaseExport or Invoke-D365LcsDatabaseRefresh cmdlets.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365LcsDatabaseOperationStatus -OperationActivityId 123456789 -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -WaitForCompletion\nThis will check the database operation status of a specific OperationActivityId against an environment.\r\nThe OperationActivityId is identified by the OperationActivityId 123456789, which is obtained from executing either the Invoke-D365LcsDatabaseExport or Invoke-D365LcsDatabaseRefresh cmdlets.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\r\nThe cmdlet will every 300 seconds contact the LCS API endpoint and check if the status of the database operation status is either success or failure.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365LcsDatabaseOperationStatus -OperationActivityId 123456789 -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -RetryTimeout \"00:01:00\"\nThis will check the database operation status of a specific OperationActivityId against an environment, and allow for the cmdlet to retry for no more than 1 minute.\r\nThe OperationActivityId is identified by the OperationActivityId 123456789, which is obtained from executing either the Invoke-D365LcsDatabaseExport or Invoke-D365LcsDatabaseRefresh cmdlets.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.",
        "Syntax": "Get-D365LcsDatabaseOperationStatus [[-ProjectId] \u003cInt32\u003e] [[-BearerToken] \u003cString\u003e] [-OperationActivityId] \u003cString\u003e [-EnvironmentId] \u003cString\u003e [[-LcsApiUri] \u003cString\u003e] [-WaitForCompletion] [[-SleepInSeconds] \u003cInt32\u003e] [[-RetryTimeout] \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365LcsDeploymentStatus",
        "Description": "Get the Deployment status for activity against an environment from the Dynamics LCS Portal",
        "Tags": [
                     "Environment",
                     "Url",
                     "Config",
                     "Configuration",
                     "LCS",
                     "Upload",
                     "Api",
                     "AAD",
                     "Token",
                     "Deployment",
                     "Deploy"
                 ],
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "ActivityId",
                           "The unique id of the action that you started from the Invoke-D365LcsDeployment cmdlet",
                           "ActionHistoryId",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "EnvironmentId",
                           "The unique id of the environment that you want to work against\nThe Id can be located inside the LCS portal",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "WaitForCompletion",
                           "Instruct the cmdlet to wait for the deployment process to complete\nThe cmdlet will sleep for 300 seconds, before requesting the status of the deployment process from LCS",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "SleepInSeconds",
                           "Time in secounds that you want the cmdlet to use as the sleep timer between each request against the LCS endpoint\nDefault value is 300",
                           "",
                           false,
                           "false",
                           "300"
                       ],
                       [
                           "FailOnErrorMessage",
                           "Instruct the cmdlet to write logging information to the console, if there is an error message in the response from the LCS endpoint\nUsed in combination with either Enable-D365Exception cmdlet, or the -EnableException directly on this cmdlet, it will throw an exception and break/stop execution of the script\r\nThis allows you to implement custom retry / error handling logic",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the Deployment status from LCS",
        "Name": "Get-D365LcsDeploymentStatus",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365LcsDeploymentStatus -ProjectId 123456789 -ActivityId 123456789 -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -BearerToken \"Bearer JldjfafLJdfjlfsalfd...\" -LcsApiUri \r\n\"https://lcsapi.lcs.dynamics.com\"\nThis will check the deployment status of specific activity against an environment.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe activity is identified by the ActivityId 123456789, which is obtained from the Invoke-D365LcsDeployment execution.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\r\nThe request will authenticate with the BearerToken \"Bearer JldjfafLJdfjlfsalfd...\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\" (NON-EUROPE).\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365LcsDeploymentStatus -ActivityId 123456789 -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\"\nThis will check the deployment status of specific activity against an environment.\r\nThe activity is identified by the ActivityId 123456789, which is obtained from the Invoke-D365LcsDeployment execution.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365LcsDeploymentStatus -ActivityId 123456789 -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -WaitForCompletion\nThis will check the deployment status of specific activity against an environment.\r\nThe activity is identified by the ActivityId 123456789, which is obtained from the Invoke-D365LcsDeployment execution.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\r\nThe cmdlet will every 300 seconds contact the LCS API endpoint and check if the status of the deployment is either success or failure.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365LcsDeploymentStatus -ActivityId 123456789 -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -RetryTimeout \"00:01:00\"\nThis will check the deployment status of specific activity against an environment, and allow for the cmdlet to retry for no more than 1 minute.\r\nThe activity is identified by the ActivityId 123456789, which is obtained from the Invoke-D365LcsDeployment execution.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.",
        "Syntax": "Get-D365LcsDeploymentStatus [[-ProjectId] \u003cInt32\u003e] [[-BearerToken] \u003cString\u003e] [-ActivityId] \u003cString\u003e [-EnvironmentId] \u003cString\u003e [[-LcsApiUri] \u003cString\u003e] [-WaitForCompletion] [[-SleepInSeconds] \u003cInt32\u003e] [-FailOnErrorMessage] [[-RetryTimeout] \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365LcsEnvironmentHistory",
        "Description": "Get history details for a given environment from within a LCS project\n\nThere can be multiple pages of data, which requires you to use the TraverseAllPages parameter, if you want all data to be shown",
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "EnvironmentId",
                           "Id of the environment that you want to be working against",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "TraverseAllPages",
                           "Instruct the cmdlet to fetch all pages, until there isn\u0027t more data available\nThis can be a slow operation, as it has to call the LCS API multiple times, fetching a single page per call",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "FailOnErrorMessage",
                           "Instruct the cmdlet to write logging information to the console, if there is an error message in the response from the LCS endpoint\nUsed in combination with either Enable-D365Exception cmdlet, or the -EnableException directly on this cmdlet, it will throw an exception and break/stop execution of the script\r\nThis allows you to implement custom retry / error handling logic",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get history for a given environment within a LCS project",
        "Name": "Get-D365LcsEnvironmentHistory",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365LcsEnvironmentHistory -ProjectId \"123456789\" -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\"\nThis will list the first page of Environment History Data from the LCS API.\r\nThe LCS project is identified by the ProjectId \"123456789\", which can be obtained in the LCS portal.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nA result set example:\nName : Service Update - 10.0.19\r\nType : SFBinaryHotfix\r\nTypeDisplay : Binary hotfix\r\nStartDateTimeUTC : 2021-07-11T00:01:57.423\r\nEndDateTimeUTC : 2021-07-11T05:01:12.97\r\nStatus : Completed\r\nActivityId : e3509860-61d4-4003-9b45-6ea7d89aea30\r\nEnvironmentId : 13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\r\nProjectId : 123456789\nName : Refresh database\r\nType : SFSourceDbToSandbox\r\nTypeDisplay : Refresh database\r\nStartDateTimeUTC : 2021-06-06T15:17:48.87\r\nEndDateTimeUTC : 2021-06-06T16:33:40.367\r\nStatus : Completed\r\nActivityId : e3509860-61d4-4003-9b45-6ea7d89aea31\r\nEnvironmentId : 13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\r\nProjectId : 123456789\nName : Export database\r\nType : SFExportSandboxDb\r\nTypeDisplay : Export database\r\nStartDateTimeUTC : 2021-04-27T22:08:01.103\r\nEndDateTimeUTC : 2021-04-28T23:30:06.623\r\nStatus : RollbackCompleted\r\nActivityId : e3509860-61d4-4003-9b45-6ea7d89aea32\r\nEnvironmentId : 13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\r\nProjectId : 123456789\nName : Main_2021.1.1.1\r\nType : SFApplicationHotfix\r\nTypeDisplay : Application deployable package\r\nStartDateTimeUTC : 2021-03-04T21:44:20.793\r\nEndDateTimeUTC : 2021-03-04T22:48:17.303\r\nStatus : Completed\r\nActivityId : e3509860-61d4-4003-9b45-6ea7d89aea33\r\nEnvironmentId : 13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\r\nProjectId : 123456789\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365LcsEnvironmentHistory -ProjectId \"123456789\" -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -TraverseAllPages\nThis will list the all the pages of Environment History Data from the LCS API.\r\nThe LCS project is identified by the ProjectId \"123456789\", which can be obtained in the LCS portal.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\r\nThe cmdlet will TraverseAllPages from the LCS API.\nTraverseAllPages will increase the request time for completion, based on how many entries there is in the history.\r\nPlease be patient and let the system work for you.",
        "Syntax": "Get-D365LcsEnvironmentHistory [-ProjectId \u003cInt32\u003e] [-BearerToken \u003cString\u003e] -EnvironmentId \u003cString\u003e [-LcsApiUri \u003cString\u003e] [-FailOnErrorMessage] [-RetryTimeout \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]\nGet-D365LcsEnvironmentHistory [-ProjectId \u003cInt32\u003e] [-BearerToken \u003cString\u003e] -EnvironmentId \u003cString\u003e [-TraverseAllPages] [-LcsApiUri \u003cString\u003e] [-FailOnErrorMessage] [-RetryTimeout \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365LcsEnvironmentMetadata",
        "Description": "Get all meta data details for environments from within a LCS project\n\nIt supports listing all environments, but also supports single / specific environments by searching based on EnvironmentId or EnvironmentName",
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "EnvironmentId",
                           "Id of the environment that you want to be working against",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "EnvironmentName",
                           "Name of the environment that you want to be working against",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "TraverseAllPages",
                           "Instruct the cmdlet to fetch all pages, until there isn\u0027t more data available\nThis can be a slow operation, as it has to call the LCS API multiple times, fetching a single page per call",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "FailOnErrorMessage",
                           "Instruct the cmdlet to write logging information to the console, if there is an error message in the response from the LCS endpoint\nUsed in combination with either Enable-D365Exception cmdlet, or the -EnableException directly on this cmdlet, it will throw an exception and break/stop execution of the script\r\nThis allows you to implement custom retry / error handling logic",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get LCS environment meta data from within a project",
        "Name": "Get-D365LcsEnvironmentMetadata",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365LcsEnvironmentMetadata -ProjectId \"123456789\"\nThis will show metadata for every available environment from the LCS project.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\nThe request time for completion is directly impacted by the number of environments within the LCS project.\r\nPlease be patient and let the system work for you.\nYou might experience that not all environments are listed with this request, that would indicate that the LCS project has many environments. Please use the -TraverseAllPages parameter to ensure that \r\nall environments are outputted.\nA result set example (Tier1):\nEnvironmentId : c6566087-23bd-4561-8247-4d7f4efd3172\r\nEnvironmentName : DevBox-01\r\nProjectId : 123456789\r\nEnvironmentInfrastructure : CustomerManaged\r\nEnvironmentType : DevTestDev\r\nEnvironmentGroup : Primary\r\nEnvironmentProduct : Finance and Operations\r\nEnvironmentEndpointBaseUrl : https://devbox-4d7f4efd3172devaos.cloudax.dynamics.com/\r\nDeploymentState : Stopped\r\nTopologyDisplayName : Finance and Operations - Develop (10.0.18 with Platform update 42)\r\nCurrentApplicationBuildVersion : 10.0.793.41\r\nCurrentApplicationReleaseName : 10.0.18\r\nCurrentPlatformReleaseName : Update42\r\nCurrentPlatformVersion : 7.0.5968.16999\r\nDeployedOnUTC : 7/5/2021 11:19 AM\r\nCloudStorageLocation : West Europe\r\nDisasterRecoveryLocation : North Europe\r\nDeploymentStatusDisplay : Stopped\r\nCanStart : True\r\nCanStop : False\nA result set example (Tier2+):\nEnvironmentId : e7c53b85-8b6a-4ab9-8985-1e1ea89a0f0a\r\nEnvironmentName : Contoso-SIT\r\nProjectId : 123456789\r\nEnvironmentInfrastructure : SelfService\r\nEnvironmentType : Sandbox\r\nEnvironmentGroup : Primary\r\nEnvironmentProduct : Finance and Operations\r\nEnvironmentEndpointBaseUrl : https://Contoso-SIT.sandbox.operations.dynamics.com/\r\nDeploymentState : Finished\r\nTopologyDisplayName : AXHA\r\nCurrentApplicationBuildVersion : 10.0.761.10019\r\nCurrentApplicationReleaseName : 10.0.17\r\nCurrentPlatformReleaseName : PU41\r\nCurrentPlatformVersion : 7.0.5934.35741\r\nDeployedOnUTC : 4/1/2020 9:35 PM\r\nCloudStorageLocation : West Europe\r\nDisasterRecoveryLocation :\r\nDeploymentStatusDisplay : Deployed\r\nCanStart : False\r\nCanStop : False\nA result set example (PROD):\nEnvironmentId : a8aab4f4-d4f3-41f0-af80-54cea83b50d2\r\nEnvironmentName : Contoso-PROD\r\nProjectId : 123456789\r\nEnvironmentInfrastructure : SelfService\r\nEnvironmentType : Production\r\nEnvironmentGroup : Primary\r\nEnvironmentProduct : Finance and Operations\r\nEnvironmentEndpointBaseUrl : https://Contoso-PROD.operations.dynamics.com/\r\nDeploymentState : Finished\r\nTopologyDisplayName : AXHA\r\nCurrentApplicationBuildVersion : 10.0.886.48\r\nCurrentApplicationReleaseName : 10.0.20\r\nCurrentPlatformReleaseName : PU44\r\nCurrentPlatformVersion : 7.0.6060.45\r\nDeployedOnUTC : 4/9/2020 12:11 PM\r\nCloudStorageLocation : West Europe\r\nDisasterRecoveryLocation :\r\nDeploymentStatusDisplay : Deployed\r\nCanStart : False\r\nCanStop : False\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365LcsEnvironmentMetadata -ProjectId \"123456789\" -TraverseAllPages\nThis will show metadata for every available environment from the LCS project, across multiple pages.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\nTraverseAllPages will increase the request time for completion, based on how many entries there is in the history.\r\nPlease be patient and let the system work for you.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365LcsEnvironmentMetadata -ProjectId \"123456789\" -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\"\nThis will show metadata for every available environment from the LCS project.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365LcsEnvironmentMetadata -ProjectId \"123456789\" -EnvironmentName \"Contoso-SIT\"\nThis will show metadata for every available environment from the LCS project.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe environment is identified by the EnvironmentName \"Contoso-SIT\", which can be obtained in the LCS portal.",
        "Syntax": "Get-D365LcsEnvironmentMetadata [-ProjectId \u003cInt32\u003e] [-BearerToken \u003cString\u003e] [-LcsApiUri \u003cString\u003e] [-FailOnErrorMessage] [-RetryTimeout \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]\nGet-D365LcsEnvironmentMetadata [-ProjectId \u003cInt32\u003e] [-BearerToken \u003cString\u003e] [-EnvironmentId \u003cString\u003e] [-LcsApiUri \u003cString\u003e] [-FailOnErrorMessage] [-RetryTimeout \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]\nGet-D365LcsEnvironmentMetadata [-ProjectId \u003cInt32\u003e] [-BearerToken \u003cString\u003e] [-EnvironmentName \u003cString\u003e] [-LcsApiUri \u003cString\u003e] [-FailOnErrorMessage] [-RetryTimeout \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]\nGet-D365LcsEnvironmentMetadata [-ProjectId \u003cInt32\u003e] [-BearerToken \u003cString\u003e] [-TraverseAllPages] [-LcsApiUri \u003cString\u003e] [-FailOnErrorMessage] [-RetryTimeout \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365LogicAppConfig",
        "Description": "Get the details that are stored for the module when\nit has to invoke the Azure Logic App",
        "Tags": [
                     "LogicApp",
                     "Logic App",
                     "Configuration",
                     "Url",
                     "Email"
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the registered details for Azure Logic App",
        "Name": "Get-D365LogicAppConfig",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365LogicAppConfig\nThis will fetch the current registered Azure Logic App details on the machine.",
        "Syntax": "Get-D365LogicAppConfig [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365MaintenanceMode",
        "Description": "Get the maintenance mode status of the Dynamics 365 environment to make sure that things are in the correct state",
        "Tags": [
                     "MaintenanceMode",
                     "Maintenance",
                     "License",
                     "Configuration",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Get the maintenance mode status of the environment",
        "Name": "Get-D365MaintenanceMode",
        "Links": [
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365MaintenanceMode\nThis will get the current state of the maintenance mode of the environment",
        "Syntax": "Get-D365MaintenanceMode [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365Model",
        "Description": "Get available model from the machine running the AOS service for Dynamics 365 Finance \u0026 Operations",
        "Tags": [
                     "PackagesLocalDirectory",
                     "Servicing",
                     "Model",
                     "Models",
                     "Module",
                     "Modules"
                 ],
        "Params": [
                       [
                           "Name",
                           "Name of the model that you are looking for\nAccepts wildcards for searching. E.g. -Name \"Application*Adaptor\"\nDefault value is \"*\" which will search for all models",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Module",
                           "Name of the module that you want to list models from\nAccepts wildcards for searchinf. E.g. -Module \"Application*Adaptor\"\nDefault value is \"*\" which will search across all modules",
                           "ModuleName",
                           false,
                           "true (ByPropertyName)",
                           "*"
                       ],
                       [
                           "CustomizableOnly",
                           "Instructs the cmdlet to filter out all models that cannot be customized",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "ExcludeMicrosoftModels",
                           "Instructs the cmdlet to exclude all models that has Microsoft as the publisher from the output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "ExcludeBinaryModels",
                           "Instruct the cmdlet to exclude binary models from the output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the AOS service PackagesLocalDirectory\\bin\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nDefault path is the same as the AOS service \"PackagesLocalDirectory\" directory\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get available model from Dynamics 365 Finance \u0026 Operations environment",
        "Name": "Get-D365Model",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365Model\nShows the entire list of installed models located in the default location on the machine.\nA result set example:\nModelName Module IsBinary Customization Id Publisher\r\n--------- ------ -------- ------------- -- ---------\r\nAccountsPayableMobile AccountsPayableMobile False DoNotAllow 895571380 Microsoft Corporation\r\nApplicationCommon ApplicationCommon False DoNotAllow 8956718 Microsoft\r\nApplicationFoundation ApplicationFoundation False Allow 450 Microsoft Corporation\r\nIsvFoundation IsvFoundation True Allow 895972027 Isv Corp\r\nIsvLicense IsvLicense True DoNotAllow 895972028 Isv Corp\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365Model -CustomizableOnly\nShows only the models that are marked as customizable.\r\nWill only include models that is Customization = \"Allow\".\nA result set example:\nModelName Module IsBinary Customization Id Publisher\r\n--------- ------ -------- ------------- -- ---------\r\nApplicationFoundation ApplicationFoundation False Allow 450 Microsoft Corporation\r\nApplicationPlatform ApplicationPlatform False Allow 400 Microsoft Corporation\r\nApplicationPlatformFormAdaptor ApplicationPlatformFormAdaptor False Allow 855030 Microsoft Corporation\r\nIsvFoundation IsvFoundation True Allow 895972027 Isv Corp\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365Model -ExcludeMicrosoftModels\nShows only the models that doesn\u0027t have \"Microsoft\" in the publisher.\r\nWill only include models that is Publisher -NotLike \"Microsoft*\".\nA result set example:\nModelName Module IsBinary Customization Id Publisher\r\n--------- ------ -------- ------------- -- ---------\r\nIsvFoundation IsvFoundation True Allow 895972027 Isv Corp\r\nIsvLicense IsvLicense True DoNotAllow 895972028 Isv Corp\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365Model -ExcludeBinaryModels\nShows only the models that are NOT binary.\r\nWill only include models that is IsBinary = \"False\".\nA result set example:\nModelName Module IsBinary Customization Id Publisher\r\n--------- ------ -------- ------------- -- ---------\r\nAccountsPayableMobile AccountsPayableMobile False DoNotAllow 895571380 Microsoft Corporation\r\nApplicationCommon ApplicationCommon False DoNotAllow 8956718 Microsoft\r\nApplicationFoundation ApplicationFoundation False Allow 450 Microsoft Corporation\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eGet-D365Model -CustomizableOnly -ExcludeMicrosoftModels\nShows only the models that are marked as customizable and NOT from Microsoft.\r\nWill only include models that is Customization = \"Allow\".\r\nWill only include models that is Publisher -NotLike \"Microsoft*\".\nA result set example:\nModelName Module IsBinary Customization Id Publisher\r\n--------- ------ -------- ------------- -- ---------\r\nIsvFoundation IsvFoundation True Allow 895972027 Isv Corp\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eGet-D365Model -Name \"Application*Adaptor\"\nShows the list of models where the name fits the search \"Application*Adaptor\".\nA result set example:\nModelName Module IsBinary Customization Id Publisher\r\n--------- ------ -------- ------------- -- ---------\r\nApplicationFoundationFormAd... ApplicationFoundationFormAd... False DoNotAllow 855029 Microsoft Corporation\r\nApplicationPlatformFormAdaptor ApplicationPlatformFormAdaptor False Allow 855030 Microsoft Corporation\r\nApplicationSuiteFormAdaptor ApplicationSuiteFormAdaptor False DoNotAllow 855028 Microsoft Corporation\r\nApplicationWorkspacesFormAd... ApplicationWorkspacesFormAd... False DoNotAllow 855066 Microsoft Corporation\n-------------------------- EXAMPLE 7 --------------------------\nPS C:\\\u003eGet-D365Model -Module ApplicationSuite\nShows only the models that are inside the ApplicationSuite module.\nA result set example:\nModelName Module IsBinary Customization Id Publisher\r\n--------- ------ -------- ------------- -- ---------\r\nElectronic Reporting Applic... ApplicationSuite False DoNotAllow 855009 Microsoft Corporation\r\nFoundation ApplicationSuite False DoNotAllow 17 Microsoft Corporation\r\nSCMControls ApplicationSuite False DoNotAllow 855891 Microsoft Corporation\r\nTax Books Application Suite... ApplicationSuite False DoNotAllow 895570102 Microsoft Corporation\r\nTax Engine Application Suit... ApplicationSuite False DoNotAllow 8957001 Microsoft Corporation\n-------------------------- EXAMPLE 8 --------------------------\nPS C:\\\u003eGet-D365Model -Name \"*Application*\" -Module \"*Suite*\"\nShows the list of models where the name fits the search \"*Application*\" and the module name fits the search \"*Suite*\".\nA result set example:\nModelName Module IsBinary Customization Id Publisher\r\n--------- ------ -------- ------------- -- ---------\r\nApplicationSuiteFormAdaptor ApplicationSuiteFormAdaptor False DoNotAllow 855028 Microsoft Corporation\r\nAtlApplicationSuite AtlApplicationSuite False DoNotAllow 895972466 Microsoft Corporation\r\nElectronic Reporting Applic... ApplicationSuite False DoNotAllow 855009 Microsoft Corporation\r\nTax Books Application Suite... ApplicationSuite False DoNotAllow 895570102 Microsoft Corporation\r\nTax Engine Application Suit... ApplicationSuite False DoNotAllow 8957001 Microsoft Corporation",
        "Syntax": "Get-D365Model [[-Name] \u003cString\u003e] [[-Module] \u003cString\u003e] [-CustomizableOnly] [-ExcludeMicrosoftModels] [-ExcludeBinaryModels] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365Module",
        "Description": "Get installed package / module from the machine running the AOS service for Dynamics 365 Finance \u0026 Operations",
        "Tags": [
                     "PackagesLocalDirectory",
                     "Servicing",
                     "Model",
                     "Models",
                     "Package",
                     "Packages"
                 ],
        "Params": [
                       [
                           "Name",
                           "Name of the package / module that you are looking for\nAccepts wildcards for searching. E.g. -Name \"Application*Adaptor\"\nDefault value is \"*\" which will search for all packages / modules",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "ExcludeBinaryModules",
                           "Instruct the cmdlet to exclude binary modules from the output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the AOS service PackagesLocalDirectory\\bin\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get installed package / module from Dynamics 365 Finance \u0026 Operations environment",
        "Name": "Get-D365Module",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365Module\nShows the entire list of installed packages / modules located in the default location on the machine.\nA result set example:\nModuleName IsBinary Version References\r\n---------- -------- ------- ----------\r\nAccountsPayableMobile False 10.0.9107.14827 {ApplicationFoundation, ApplicationPlatform, Appli...\r\nApplicationCommon False 10.0.8008.26462 {ApplicationFoundation, ApplicationPlatform}\r\nApplicationFoundation False 7.0.5493.35504 {ApplicationPlatform}\r\nApplicationFoundationFormAdaptor False 7.0.4841.35227 {ApplicationPlatform, ApplicationFoundation, TestE...\r\nCustom True 10.0.0.0 {ApplicationPlatform}\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365Module -ExcludeBinaryModules\nOutputs the all packages / modules that are NOT binary.\r\nWill only include modules that is IsBinary = \"False\".\nA result set example:\nModuleName IsBinary Version References\r\n---------- -------- ------- ----------\r\nAccountsPayableMobile False 10.0.9107.14827 {ApplicationFoundation, ApplicationPlatform, Appli...\r\nApplicationCommon False 10.0.8008.26462 {ApplicationFoundation, ApplicationPlatform}\r\nApplicationFoundation False 7.0.5493.35504 {ApplicationPlatform}\r\nApplicationFoundationFormAdaptor False 7.0.4841.35227 {ApplicationPlatform, ApplicationFoundation, TestE...\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365Module -Name \"Application*Adaptor\"\nShows the list of installed packages / modules where the name fits the search \"Application*Adaptor\".\nA result set example:\nModuleName IsBinary Version References\r\n---------- -------- ------- ----------\r\nApplicationFoundationFormAdaptor False 7.0.4841.35227 {ApplicationPlatform, ApplicationFoundation, TestE...\r\nApplicationPlatformFormAdaptor False 7.0.4841.35227 {ApplicationPlatform, TestEssentials}\r\nApplicationSuiteFormAdaptor False 10.0.9107.14827 {ApplicationFoundation, ApplicationPlatform, Appli...\r\nApplicationWorkspacesFormAdaptor False 10.0.9107.14827 {ApplicationFoundation, ApplicationPlatform, Appli...",
        "Syntax": "Get-D365Module [[-Name] \u003cString\u003e] [-ExcludeBinaryModules] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365OfflineAuthenticationAdminEmail",
        "Description": "Get the registered offline administrator from the \"DynamicsDevConfig.xml\" file located in the default Package Directory",
        "Tags": [
                     "Development",
                     "Email",
                     "DynamicsDevConfig",
                     "Offline",
                     "Authentication"
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Synopsis": "Gets the registered offline administrator e-mail configured",
        "Name": "Get-D365OfflineAuthenticationAdminEmail",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365OfflineAuthenticationAdminEmail\nWill read the DynamicsDevConfig.xml and display the registered Offline Administrator E-mail address.",
        "Syntax": "Get-D365OfflineAuthenticationAdminEmail [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365PackageBundleDetail",
        "Description": "Get the details from an axscdppkg file by extracting it like a zip file.\n\nCapable of extracting the manifest details from the inner packages as well",
        "Tags": [
                     "Hotfix",
                     "KB",
                     "Manifest",
                     "HotfixPackageBundle",
                     "axscdppkg",
                     "Package",
                     "Bundle",
                     "Deployable"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the axscdppkg file you want to analyze",
                           "File",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "ExtractionPath",
                           "Path where you want the cmdlet to work with extraction of all the files\nDefault value is: C:\\Users\\Username\\AppData\\Local\\Temp",
                           "",
                           false,
                           "false",
                           "([System.IO.Path]::GetTempPath())"
                       ],
                       [
                           "KB",
                           "KB number of the hotfix that you are looking for\nAccepts wildcards for searching. E.g. -KB \"4045*\"\nDefault value is \"*\" which will search for all KB\u0027s",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Hotfix",
                           "Package Id / Hotfix number the hotfix that you are looking for\nAccepts wildcards for searching. E.g. -Hotfix \"7045*\"\nDefault value is \"*\" which will search for all hotfixes",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Traverse",
                           "Switch to instruct the cmdlet to traverse the inner packages and extract their details",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "KeepFiles",
                           "Switch to instruct the cmdlet to keep the files for further manual analyze",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "IncludeRawManifest",
                           "Switch to instruct the cmdlet to include the raw content of the manifest file\nOnly works with the -Traverse option",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the details from an axscdppkg file",
        "Name": "Get-D365PackageBundleDetail",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365PackageBundleDetail -Path \"c:\\temp\\HotfixPackageBundle.axscdppkg\" -Traverse\nThis will extract all the content from the \"HotfixPackageBundle.axscdppkg\" file and extract all inner packages. For each inner package it will find the manifest file and fetch the KB numbers. The raw \r\nmanifest file content is included to be analyzed.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365PackageBundleDetail -Path \"c:\\temp\\HotfixPackageBundle.axscdppkg\" -ExtractionPath C:\\Temp\\20180905 -Traverse -KeepFiles\nThis will extract all the content from the \"HotfixPackageBundle.axscdppkg\" file and extract all inner packages. It will extract the content into C:\\Temp\\20180905 and keep the files after completion.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365PackageBundleDetail -Path C:\\temp\\HotfixPackageBundle.axscdppkg -Traverse -IncludeRawManifest\nThis is an advanced scenario.\nThis will traverse the \"HotfixPackageBundle.axscdppkg\" file and will include the raw manifest file details in the output.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365PackageBundleDetail -Path C:\\temp\\HotfixPackageBundle.axscdppkg -Traverse -IncludeRawManifest | ForEach-Object {$_.RawManifest | Out-File \"C:\\temp\\$($_.PackageId).txt\"}\nThis is an advanced scenario.\nThis will traverse the \"HotfixPackageBundle.axscdppkg\" file and save the manifest files into c:\\temp. Everything else is omitted and cleaned up.",
        "Syntax": "Get-D365PackageBundleDetail [-Path] \u003cString\u003e [[-ExtractionPath] \u003cString\u003e] [[-KB] \u003cString\u003e] [[-Hotfix] \u003cString\u003e] [-Traverse] [-KeepFiles] [-IncludeRawManifest] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365PackageLabelFileOld",
        "Description": "Get label file (resource file) from the package directory",
        "Tags": [
                     "PackagesLocalDirectory",
                     "Label",
                     "Labels",
                     "Language",
                     "Development",
                     "Servicing",
                     "Module",
                     "Package",
                     "Packages"
                 ],
        "Params": [
                       [
                           "PackageDirectory",
                           "Path to the package that you want to get a label file from",
                           "Path",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "Name",
                           "Name of the label file you are looking for\nAccepts wildcards for searching. E.g. -Name \"Fixed*Accounting\"\nDefault value is \"*\" which will search for all label files",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Language",
                           "The language of the label file you are looking for\nAccepts wildcards for searching. E.g. -Language \"en*\"\nDefault value is \"en-US\" which will search for en-US language files",
                           "",
                           false,
                           "false",
                           "en-US"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get label file from a package",
        "Name": "Get-D365PackageLabelFileOld",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365PackageLabelFile -PackageDirectory \"C:\\AOSService\\PackagesLocalDirectory\\ApplicationSuite\"\nShows all the label files for ApplicationSuite package\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365PackageLabelFile -PackageDirectory \"C:\\AOSService\\PackagesLocalDirectory\\ApplicationSuite\" -Name \"Fixed*Accounting\"\nShows the label files for ApplicationSuite package where the name fits the search \"Fixed*Accounting\"\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365InstalledPackage -Name \"ApplicationSuite\" | Get-D365PackageLabelFile\nShows all label files (en-US) for the ApplicationSuite package",
        "Syntax": "Get-D365PackageLabelFileOld [-PackageDirectory] \u003cString\u003e [[-Name] \u003cString\u003e] [[-Language] \u003cString\u003e] [\u003cCommonParameters\u003e]\nGet-D365PackageLabelFileOld [-PackageDirectory] \u003cString\u003e [[-Name] \u003cString\u003e] [[-Language] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365ProductInformation",
        "Description": "Gets detailed information about application and platform",
        "Tags": [
                     "Build",
                     "Version",
                     "Reference",
                     "ProductVersion",
                     "ProductDetails",
                     "Product"
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Returns information about D365FO",
        "Name": "Get-D365ProductInformation",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365ProductInformation\nThis will get product, platform and application version details for the environment",
        "Syntax": "Get-D365ProductInformation [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365RsatCertificateThumbprint",
        "Description": "Locate the thumbprint for the certificate created during the RSAT installation",
        "Tags": [
                     "RSAT",
                     "Certificate",
                     "Testing",
                     "Regression Suite Automation Test",
                     "Regression",
                     "Test",
                     "Automation."
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the thumbprint from the RSAT certificate",
        "Name": "Get-D365RsatCertificateThumbprint",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365RsatCertificateThumbprint\nThis will locate any certificates that has 127.0.0.1 in its name.\r\nIt will show the subject and the thumbprint values.",
        "Syntax": "Get-D365RsatCertificateThumbprint [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365RsatPlaybackFile",
        "Description": "Get all the RSAT playback files from the last executions",
        "Tags": [
                     "RSAT",
                     "Testing",
                     "Regression Suite Automation Test",
                     "Regression",
                     "Test",
                     "Automation",
                     "Playback"
                 ],
        "Params": [
                       [
                           "Path",
                           "The path where the RSAT tool will be writing the files\nThe default path is:\r\n\"C:\\Users\\USERNAME\\AppData\\Roaming\\regressionTool\\playback\"",
                           "",
                           false,
                           "false",
                           "$Script:RsatplaybackPath"
                       ],
                       [
                           "Name",
                           "Name of Test Case that you are looking for\nDefault value is \"*\" which will search for all Test Cases and their corresponding files",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "ExecutionUsername",
                           "Name of the user account has been running the RSAT tests on a machine that isn\u0027t the same as the current user\nWill enable you to log on to RSAT server that is running the tests from a console, automated, and is other account than the current user",
                           "",
                           false,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the RSAT playback files",
        "Name": "Get-D365RsatPlaybackFile",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365RsatPlaybackFile\nThis will get all the RSAT playback files.\r\nIt will search for the files in the current user AppData system folder.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365RsatPlaybackFile -Name *4080*\nThis will get all the RSAT playback files which has \"4080\" as part of its name.\r\nIt will search for the files in the current user AppData system folder.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365RsatPlaybackFile -ExecutionUsername RSAT-ServiceAccount\nThis will get all the RSAT playback files that were executed by the RSAT-ServiceAccount user.\r\nIt will search for the files in the RSAT-ServiceAccount user AppData system folder.",
        "Syntax": "Get-D365RsatPlaybackFile [-Path \u003cString\u003e] [-Name \u003cString\u003e] [\u003cCommonParameters\u003e]\nGet-D365RsatPlaybackFile [-Name \u003cString\u003e] [-ExecutionUsername \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365RsatSoapHostname",
        "Description": "Get the SOAP hostname from the IIS configuration, to be used during the Rsat configuration",
        "Tags": [
                     "RSAT",
                     "Testing",
                     "Regression Suite Automation Test",
                     "Regression",
                     "Test",
                     "Automation",
                     "SOAP"
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the SOAP hostname for the D365FO environment",
        "Name": "Get-D365RsatSoapHostname",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365RsatSoapHostname\nThis will get the SOAP hostname from IIS.\r\nIt will display the SOAP URL / URI correctly formatted, to be used during the configuration of Rsat.",
        "Syntax": "Get-D365RsatSoapHostname [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365Runbook",
        "Description": "Get the full path and filename of a Dynamics 365 Runbook",
        "Tags": [
                     "Runbook",
                     "Servicing",
                     "Hotfix",
                     "DeployablePackage",
                     "Deployable Package",
                     "InstallationRecordsDirectory",
                     "Installation Records Directory"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the folder containing the runbook files\nThe default path is \"InstallationRecord\" which is normally located on the \"C:\\DynamicsAX\\InstallationRecords\"",
                           "",
                           false,
                           "true (ByValue, ByPropertyName)",
                           "(Join-Path $Script:InstallationRecordsDir \"Runbooks\")"
                       ],
                       [
                           "Name",
                           "Name of the runbook file that you are looking for\nThe parameter accepts wildcards. E.g. -Name *hotfix-20181024*",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Latest",
                           "Instruct the cmdlet to only get the latest runbook file, based on the last written attribute",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get a Dynamics 365 Runbook",
        "Name": "Get-D365Runbook",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365Runbook\nThis will list all runbooks that are available in the default location.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365Runbook -Latest\nThis will get the latest runbook file from the default InstallationRecords directory on the machine.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365Runbook -Latest | Invoke-D365RunbookAnalyzer\nThis will find the latest runbook file and have it analyzed by the Invoke-D365RunbookAnalyzer cmdlet to output any error details.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365Runbook -Latest | Invoke-D365RunbookAnalyzer | Out-File \"C:\\Temp\\d365fo.tools\\runbook-analyze-results.xml\"\nThis will find the latest runbook file and have it analyzed by the Invoke-D365RunbookAnalyzer cmdlet to output any error details.\r\nThe output will be saved into the \"C:\\Temp\\d365fo.tools\\runbook-analyze-results.xml\" file.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eGet-D365Runbook | Backup-D365Runbook\nThis will save a copy of all runbooks from the default location and save them to \"c:\\temp\\d365fo.tools\\runbookbackups\"\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003enotepad.exe (Get-D365Runbook -Latest).File\nThis will find the latest runbook file and open it with notepad.",
        "Syntax": "Get-D365Runbook [[-Path] \u003cString\u003e] [[-Name] \u003cString\u003e] [-Latest] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365RunbookId",
        "Description": "Get the runbook id from inside a runbook file",
        "Tags": [
                     "Runbook",
                     "Analyze",
                     "RunbookId",
                     "Runbooks"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the runbook file that you want to analyse\nAccepts value from pipeline, also by property",
                           "File",
                           true,
                           "true (ByValue, ByPropertyName)",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get runbook id",
        "Name": "Get-D365RunbookId",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365RunbookId -Path \"C:\\DynamicsAX\\InstallationRecords\\Runbooks\\Runbook.xml\"\nThis will inspect the Runbook.xml file and output the runbookid from inside the XML document.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365Runbook | Get-D365RunbookId\nThis will find all runbook file(s) and have them analyzed by the Get-D365RunbookId cmdlet to output the runbookid(s).\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365Runbook -Latest | Get-D365RunbookId\nThis will find the latest runbook file and have it analyzed by the Get-D365RunbookId cmdlet to output the runbookid.",
        "Syntax": "Get-D365RunbookId [-Path] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365RunbookLogFile",
        "Description": "Get the log files for a specific Runbook step",
        "Tags": [
                     "Runbook",
                     "Servicing",
                     "Hotfix",
                     "DeployablePackage",
                     "Deployable Package",
                     "InstallationRecordsDirectory",
                     "Installation Records Directory"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to Software Deployable Package that was run in connection with the runbook",
                           "File",
                           true,
                           "true (ByValue, ByPropertyName)",
                           ""
                       ],
                       [
                           "Step",
                           "Step id for the step that you want to locate the log files for",
                           "StepId",
                           true,
                           "true (ByValue, ByPropertyName)",
                           ""
                       ],
                       [
                           "Latest",
                           "Instruct the cmdlet to only work with the latest log file\nIs based on the last written attribute on the log file",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OpenInEditor",
                           "Instruct the cmdlet to open the log file in the default text editor",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get log file from a Runbook step",
        "Name": "Get-D365RunbookLogFile",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365RunbookLogFile -Path \"C:\\Temp\\PU35\" -Step 34\nThis will locate all logfiles that has been outputted from the Step 34 from the PU35 installation.\r\nThe output will list the complete path to the log files.\nAn output example:\nFilename : AutoUpdateDIXFService.ps1-2020-07-8--12-40-34.log\r\nLastModified : 8/7/2020 12:40:34 PM\r\nFile : C:\\Temp\\PU35\\RunbookWorkingFolder\\Runbook\\MININT-F36S5EH\\DIXFService\\34\\Log\\AutoUpdateDIXFService.ps1-2020-07-8--12-40-34.log\nFilename : AutoUpdateDIXFService.ps1-2020-07-8--12-36-22.log\r\nLastModified : 8/7/2020 12:36:22 PM\r\nFile : C:\\Temp\\PU35\\RunbookWorkingFolder\\Runbook\\MININT-F36S5EH\\DIXFService\\34\\Log\\AutoUpdateDIXFService.ps1-2020-07-8--12-36-22.log\nFilename : AutoUpdateDIXFService.ps1-2020-05-8--19-15-07.log\r\nLastModified : 8/5/2020 7:15:07 PM\r\nFile : C:\\Temp\\PU35\\RunbookWorkingFolder\\Runbook\\MININT-F36S5EH\\DIXFService\\34\\Log\\AutoUpdateDIXFService.ps1-2020-05-8--19-15-07.log\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365RunbookLogFile -Path \"C:\\Temp\\PU35\" -Step 34 -Latest\nThis will locate all logfiles that has been outputted from the Step 34 from the PU35 installation.\r\nThe output will be limited to the latest log, based on last write time.\r\nThe output will list the complete path to the log file.\nAn output example:\nFilename : AutoUpdateDIXFService.ps1-2020-07-8--12-40-34.log\r\nLastModified : 8/7/2020 12:40:34 PM\r\nFile : C:\\Temp\\PU35\\RunbookWorkingFolder\\Runbook\\MININT-F36S5EH\\DIXFService\\34\\Log\\AutoUpdateDIXFService.ps1-2020-07-8--12-40-34.log\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365RunbookLogFile -Path \"C:\\Temp\\PU35\" -Step 34 -OpenInEditor\nThis will locate all logfiles that has been outputted from the Step 34 from the PU35 installation.\r\nThe Get-D365RunbookLogFile will open all log files in the default text editor.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365RunbookLogFile -Path \"C:\\Temp\\PU35\" -Step 34 -Latest -OpenInEditor\nThis will locate all logfiles that has been outputted from the Step 34 from the PU35 installation.\r\nThe output will be limited to the latest log, based on last write time.\r\nThe Get-D365RunbookLogFile will open the log file in the default text editor.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eGet-D365Runbook -Latest | Invoke-D365RunbookAnalyzer -FailedOnlyAsObjects | Get-D365RunbookLogFile -Path \"C:\\Temp\\PU35\" -OpenInEditor\nThis will find the latest runbook file and have it analyzed by the Invoke-D365RunbookAnalyzer cmdlet to output any error details.\r\nThe output from Invoke-D365RunbookAnalyzer will only contain failed steps.\r\nThe Get-D365RunbookLogFile will open all log files for the failed step.",
        "Syntax": "Get-D365RunbookLogFile [-Path] \u003cString\u003e [-Step] \u003cString\u003e [-Latest] [-OpenInEditor] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365SDPCleanUp",
        "Description": "Gets the configured retention period before updates are deleted",
        "Tags": [
                     "CleanUp",
                     "Retention",
                     "Servicing",
                     "Cut Off",
                     "DeployablePackage",
                     "Deployable Package"
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the cleanup retention period",
        "Name": "Get-D365SDPCleanUp",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365SDPCleanUp\nThis will get the configured retention period from the registry",
        "Syntax": "Get-D365SDPCleanUp [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365Table",
        "Description": "Get a table either by TableName (wildcard search allowed) or by TableId",
        "Tags": [
                     "Table",
                     "Tables",
                     "AOT",
                     "TableId",
                     "Development"
                 ],
        "Params": [
                       [
                           "Name",
                           "Name of the table that you are looking for\nAccepts wildcards for searching. E.g. -Name \"Cust*\"\nDefault value is \"*\" which will search for all tables",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "Id",
                           "The specific id for the table you are looking for",
                           "",
                           true,
                           "false",
                           "0"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Get a table",
        "Name": "Get-D365Table",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365Table -Name CustTable\nWill get the details for the CustTable\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365Table -Id 10347\nWill get the details for the table with the id 10347.",
        "Syntax": "Get-D365Table [[-Name] \u003cString[]\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [\u003cCommonParameters\u003e]\nGet-D365Table [-Id] \u003cInt32\u003e [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365TableField",
        "Description": "Get a field either by FieldName (wildcard search allowed) or by FieldId",
        "Tags": [
                     "Table",
                     "Tables",
                     "Fields",
                     "TableField",
                     "Table Field",
                     "TableName",
                     "TableId"
                 ],
        "Params": [
                       [
                           "TableId",
                           "The id of the table that the field belongs to",
                           "",
                           true,
                           "true (ByPropertyName)",
                           "0"
                       ],
                       [
                           "Name",
                           "Name of the field that you are looking for\nAccepts wildcards for searching. E.g. -Name \"Account*\"\nDefault value is \"*\" which will search for all fields",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "FieldId",
                           "Id of the field that you are looking for\nType is integer",
                           "",
                           false,
                           "true (ByPropertyName)",
                           "0"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "TableName",
                           "Name of the table that the field belongs to\nSearch will only return the first hit (unordered) and work against that hit",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "IncludeTableDetails",
                           "Switch options to enable the result set to include extended details",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "SearchAcrossTables",
                           "Switch options to force the cmdlet to search across all tables when looking for the field",
                           "",
                           true,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Get a field from table",
        "Name": "Get-D365TableField",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365TableField -TableId 10347\nWill get all field details for the table with id 10347.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365TableField -TableName CustTable\nWill get all field details for the CustTable table.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365TableField -TableId 10347 -FieldId 175\nWill get the details for the field with id 175 that belongs to the table with id 10347.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365TableField -TableId 10347 -Name \"VATNUM\"\nWill get the details for the \"VATNUM\" that belongs to the table with id 10347.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eGet-D365TableField -TableId 10347 -Name \"VAT*\"\nWill get the details for all fields that fits the search \"VAT*\" that belongs to the table with id 10347.\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eGet-D365TableField -Name AccountNum -SearchAcrossTables\nWill search for the AccountNum field across all tables.\n-------------------------- EXAMPLE 7 --------------------------\nPS C:\\\u003eGet-D365TableField -TableName CustTable -IncludeTableDetails\nWill get all field details for the CustTable table.\r\nWill include table details in the output.",
        "Syntax": "Get-D365TableField [-TableId] \u003cInt32\u003e [[-Name] \u003cString\u003e] [[-FieldId] \u003cInt32\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [-IncludeTableDetails] [\u003cCommonParameters\u003e]\nGet-D365TableField [[-Name] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [-SearchAcrossTables] [\u003cCommonParameters\u003e]\nGet-D365TableField [[-Name] \u003cString\u003e] [[-FieldId] \u003cInt32\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [-TableName] \u003cString\u003e [-IncludeTableDetails] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365TableSequence",
        "Description": "Get the sequence details for tables",
        "Tags": [
                     "Table",
                     "RecId",
                     "Sequence",
                     "Record Id"
                 ],
        "Params": [
                       [
                           "TableName",
                           "Name of the table that you want to work against\nAccepts wildcards for searching. E.g. -TableName \"Cust*\"\nDefault value is \"*\" which will search for all tables",
                           "Name",
                           false,
                           "true (ByPropertyName)",
                           "*"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the sequence object for table",
        "Name": "Get-D365TableSequence",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365TableSequence | Format-Table\nThis will get all the sequence details for all tables inside the database.\r\nIt will format the output as a table for better overview.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365TableSequence -TableName \"Custtable\" | Format-Table\nThis will get the sequence details for the CustTable in the database.\r\nIt will format the output as a table for better overview.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365TableSequence -TableName \"Cust*\" | Format-Table\nThis will get the sequence details for all tables that matches the search \"Cust*\" in the database.\r\nIt will format the output as a table for better overview.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365Table -Name CustTable | Get-D365TableSequence | Format-Table\nThis will get the table details from the Get-D365Table cmdlet and pipe that into Get-D365TableSequence.\r\nThis will get the sequence details for the CustTable in the database.\r\nIt will format the output as a table for better overview.",
        "Syntax": "Get-D365TableSequence [[-TableName] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365TablesInChangedTracking",
        "Description": "Get table(s) that is taking part of the SQL Server Change Tracking mechanism",
        "Tags": [
                     "Table",
                     "Change Tracking",
                     "Tablename",
                     "DMF",
                     "DIXF"
                 ],
        "Params": [
                       [
                           "Name",
                           "Name of the table that you are looking for\nAccepts wildcards for searching. E.g. -Name \"Cust*\"\nDefault value is \"*\" which will search for all tables",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Get table that is taking part of Change Tracking",
        "Name": "Get-D365TablesInChangedTracking",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365TablesInChangedTracking\nThis will list all tables that are taking part in the SQL Server Change Tracking.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365TablesInChangedTracking -Name CustTable\nThis will search for a table in the list of tables that are taking part in the SQL Server Change Tracking.\r\nIt will use the CustTable as the search pattern while searching for the table.",
        "Syntax": "Get-D365TablesInChangedTracking [[-Name] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365TfsUri",
        "Description": "Gets the URI from the configuration of the local tfs connection in visual studio",
        "Tags": [
                     "TFS",
                     "VSTS",
                     "URL",
                     "URI",
                     "Servicing",
                     "Development"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the tf.exe file that the cmdlet will invoke",
                           "",
                           false,
                           "false",
                           "$Script:TfDir"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the TFS / VSTS registered URL / URI",
        "Name": "Get-D365TfsUri",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365TfsUri\nThis will invoke the default tf.exe client located in the Visual Studio 2015 directory\r\nand fetch the configured URI.",
        "Syntax": "Get-D365TfsUri [[-Path] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365TfsWorkspace",
        "Description": "Gets the workspace path from the configuration of the local tfs in visual studio",
        "Tags": [
                     "TFS",
                     "VSTS",
                     "URL",
                     "URI",
                     "Servicing",
                     "Development"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the directory where the Team Foundation Client executable is located",
                           "",
                           false,
                           "false",
                           "$Script:TfDir"
                       ],
                       [
                           "TfsUri",
                           "Uri to the TFS / VSTS that the workspace is connected to",
                           "",
                           false,
                           "true (ByPropertyName)",
                           "$Script:TfsUri"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the TFS / VSTS registered workspace path",
        "Name": "Get-D365TfsWorkspace",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365TfsWorkspace -TfsUri https://PROJECT.visualstudio.com\nThis will invoke the default tf.exe client located in the Visual Studio 2015 directory\r\nand fetch the configured URI.",
        "Syntax": "Get-D365TfsWorkspace [[-Path] \u003cString\u003e] [[-TfsUri] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365Tier2Params",
        "Description": "Gets a hashtable with all the stored parameters to be used with Import-D365Bacpac or New-D365Bacpac for Tier 2 environments",
        "Params": [
                       [
                           "OutputType",
                           "Used to specify the desired object type of the output\nThe default value is: HashTable\nValid options are:\r\nHashTable\r\nPSCustomObject",
                           "",
                           false,
                           "false",
                           "HashTable"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get a hashtable with all the stored parameters",
        "Name": "Get-D365Tier2Params",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003e$params = Get-D365Tier2Params\nThis will extract the stored parameters and create a hashtable object.\r\nThe hashtable is assigned to the $params variable.",
        "Syntax": "Get-D365Tier2Params [[-OutputType] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365Url",
        "Description": "Get the complete URL for accessing the Dynamics 365 Finance \u0026 Operations instance running on this machine",
        "Tags": [
                     "URL",
                     "URI",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "Force",
                           "Switch to instruct the cmdlet to retrieve the name from the system files\r\ninstead of the name stored in memory after loading this module.",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Get the url for accessing the instance",
        "Name": "Get-D365Url",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365Url\nThis will get the correct URL to access the environment",
        "Syntax": "Get-D365Url [-Force] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365User",
        "Description": "Get all relevant user details from the Dynamics 365 for Finance \u0026 Operations",
        "Tags": [
                     "User",
                     "Users"
                 ],
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "Email",
                           "The search string to select which user(s) should be updated\nThe parameter supports wildcards. E.g. -Email \"*@contoso.com*\"\nDefault value is \"*\" to get all users",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "ExcludeSystemUsers",
                           "Instructs the cmdlet to filter out all known system users",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get users from the environment",
        "Name": "Get-D365User",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365User\nThis will get all users from the environment.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365User -ExcludeSystemUsers\nThis will get all users from the environment, but filter out all known system user accounts.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365User -Email \"*contoso.com\"\nThis will search for all users with an e-mail address containing \u0027contoso.com\u0027 from the environment.",
        "Syntax": "Get-D365User [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-Email] \u003cString\u003e] [-ExcludeSystemUsers] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365UserAuthenticationDetail",
        "Description": "The cmdlet will take the e-mail parameter and use it to lookup all the needed details for configuring authentication against Dynamics 365 Finance \u0026 Operations",
        "Tags": [
                     "User",
                     "Users",
                     "Security",
                     "Configuration",
                     "Authentication"
                 ],
        "Params": [
                       [
                           "Email",
                           "The e-mail address / login name of the user that the cmdlet must gather details about",
                           "",
                           true,
                           "true (ByValue)",
                           ""
                       ]
                   ],
        "Alias": "",
        "Synopsis": "Cmdlet used to get authentication details about a user",
        "Name": "Get-D365UserAuthenticationDetail",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365UserAuthenticationDetail -Email \"Claire@contoso.com\"\nThis will get all the authentication details for the user account with the email address \"Claire@contoso.com\"",
        "Syntax": "Get-D365UserAuthenticationDetail [-Email] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365VisualStudioCompilerResult",
        "Description": "Get the Visual Studio compiler outputs presented in a structured manner on the screen",
        "Tags": [
                     "Compiler",
                     "Build",
                     "Errors",
                     "Warnings",
                     "Tasks"
                 ],
        "Params": [
                       [
                           "Module",
                           "Name of the module that you want to work against\nDefault value is \"*\" which will search for all modules",
                           "ModuleName",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "ErrorsOnly",
                           "Instructs the cmdlet to only output compile results where there was errors detected",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputTotals",
                           "Instructs the cmdlet to output the total errors and warnings after the analysis",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputAsObjects",
                           "Instructs the cmdlet to output the objects instead of formatting them\nIf you don\u0027t assign the output, it will be formatted the same way as the original output, but without the coloring of the column values",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nDefault path is the same as the AOS service \"PackagesLocalDirectory\" directory\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get the compiler outputs presented",
        "Name": "Get-D365VisualStudioCompilerResult",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365VisualStudioCompilerResult\nThis will return the compiler output for all modules.\nA result set example:\nFile Warnings Errors\r\n---- -------- ------\r\nK:\\AosService\\PackagesLocalDirectory\\ApplicationCommon\\BuildModelResult.log 55 0\r\nK:\\AosService\\PackagesLocalDirectory\\ApplicationFoundation\\BuildModelResult.log 692 0\r\nK:\\AosService\\PackagesLocalDirectory\\ApplicationPlatform\\BuildModelResult.log 155 0\r\nK:\\AosService\\PackagesLocalDirectory\\ApplicationSuite\\BuildModelResult.log 10916 0\r\nK:\\AosService\\PackagesLocalDirectory\\CustomModule\\BuildModelResult.log 1 2\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365VisualStudioCompilerResult -ErrorsOnly\nThis will return the compiler output for all modules where there was errors in.\nA result set example:\nFile Warnings Errors\r\n---- -------- ------\r\nK:\\AosService\\PackagesLocalDirectory\\CustomModule\\BuildModelResult.log 1 2\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365VisualStudioCompilerResult -ErrorsOnly -OutputAsObjects\nThis will return the compiler output for all modules where there was errors in.\r\nThe output will be PSObjects, which can be assigned to a variable and used for futher analysis.\nA result set example:\nFile Warnings Errors\r\n---- -------- ------\r\nK:\\AosService\\PackagesLocalDirectory\\CustomModule\\BuildModelResult.log 1 2\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365VisualStudioCompilerResult -OutputTotals\nThis will return the compiler output for all modules and write a total overview to the console.\nA result set example:\nFile Warnings Errors\r\n---- -------- ------\r\nK:\\AosService\\PackagesLocalDirectory\\ApplicationCommon\\BuildModelResult.log 55 0\r\nK:\\AosService\\PackagesLocalDirectory\\ApplicationFoundation\\BuildModelResult.log 692 0\r\nK:\\AosService\\PackagesLocalDirectory\\ApplicationPlatform\\BuildModelResult.log 155 0\r\nK:\\AosService\\PackagesLocalDirectory\\ApplicationSuite\\BuildModelResult.log 10916 0\r\nK:\\AosService\\PackagesLocalDirectory\\CustomModule\\BuildModelResult.log 1 2\nTotal Errors: 2\r\nTotal Warnings: 11819",
        "Syntax": "Get-D365VisualStudioCompilerResult [[-Module] \u003cString\u003e] [-ErrorsOnly] [-OutputTotals] [-OutputAsObjects] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Get-D365WindowsActivationStatus",
        "Description": "Get all the important license and activation information from the machine",
        "Tags": [
                     "Windows",
                     "License",
                     "Activation",
                     "Arm",
                     "Rearm"
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Get activation status",
        "Name": "Get-D365WindowsActivationStatus",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eGet-D365WindowsActivationStatus\nThis will get the remaining grace and rearm activation information for the machine",
        "Syntax": "Get-D365WindowsActivationStatus [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Import-D365AadApplication",
        "Description": "Provides a method for importing a AAD application into D365FO.",
        "Tags": [
                     "User",
                     "Users",
                     "Security",
                     "Configuration",
                     "Permission",
                     "AAD",
                     "Azure Active Directory",
                     "Group",
                     "Groups"
                 ],
        "Params": [
                       [
                           "Name",
                           "The name that the imported application should have inside the D365FO environment",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "UserId",
                           "The id of the user linked to the application inside the D365FO environment",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "ClientId",
                           "The Client ID that the imported application should use inside the D365FO environment",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ]
                   ],
        "Alias": "",
        "Author": "Gert Van Der Heyden (@gertvdheyden)",
        "Synopsis": "Used to import Aad applications into D365FO",
        "Name": "Import-D365AadApplication",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eImport-D365AadApplication -Name \"Application1\" -UserId \"admin\" -ClientId \"aef2e67c-64a3-4c72-9294-d288c5bf503d\"\nImports Application1 as an application linked to user admin into the D365FO environment.",
        "Syntax": "Import-D365AadApplication [-Name] \u003cString\u003e [-UserId] \u003cString\u003e [-ClientId] \u003cString\u003e [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Import-D365AadUser",
        "Description": "Provides a method for importing a AAD UserGroup or a comma separated list of AadUsers into D365FO.",
        "Tags": [
                     "User",
                     "Users",
                     "Security",
                     "Configuration",
                     "Permission",
                     "AAD",
                     "Azure Active Directory",
                     "Group",
                     "Groups"
                 ],
        "Params": [
                       [
                           "AadGroupName",
                           "Azure Active directory user group containing users to be imported",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Users",
                           "Array of users that you want to import into the D365FO environment",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "StartupCompany",
                           "Startup company of users imported.\nDefault is DAT",
                           "",
                           false,
                           "false",
                           "DAT"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "IdPrefix",
                           "A text that will be prefixed into the ID field. E.g. -IdPrefix \"EXT-\" will import users and set ID starting with \"EXT-...\"",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "NameSuffix",
                           "A text that will be suffixed into the NAME field. E.g. -NameSuffix \"(Contoso)\" will import users and append \"(Contoso)\"\" to the NAME",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "IdValue",
                           "Specify which field to use as ID value when importing the users.\r\nAvailable options \u0027Login\u0027 / \u0027FirstName\u0027\nDefault is \u0027Login\u0027",
                           "",
                           false,
                           "false",
                           "Login"
                       ],
                       [
                           "NameValue",
                           "Specify which field to use as NAME value when importing the users.\r\nAvailable options \u0027FirstName\u0027 / \u0027DisplayName\u0027\nDefault is \u0027DisplayName\u0027",
                           "",
                           false,
                           "false",
                           "DisplayName"
                       ],
                       [
                           "AzureAdCredential",
                           "Use a PSCredential object for connecting with AzureAd",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "SkipAzureAd",
                           "Switch to instruct the cmdlet to skip validating against the Azure Active Directory",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "ForceExactAadGroupName",
                           "Force to find the exact name of the Azure Active Directory Group",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "AadGroupId",
                           "Azure Active directory user group ID containing users to be imported",
                           "",
                           true,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Used to import Aad users into D365FO",
        "Name": "Import-D365AadUser",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eImport-D365AadUser -Users \"Claire@contoso.com\",\"Allen@contoso.com\"\nImports Claire and Allen as users\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003e$myPassword = ConvertTo-SecureString \"MyPasswordIsSecret\" -AsPlainText -Force\nPS C:\\\u003e $myCredentials = New-Object System.Management.Automation.PSCredential (\"MyEmailIsAlso\", $myPassword)\nPS C:\\\u003e Import-D365AadUser -Users \"Claire@contoso.com\",\"Allen@contoso.com\" -AzureAdCredential $myCredentials\nThis will import Claire and Allen as users.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eImport-D365AadUser -AadGroupName \"CustomerTeam1\"\nif more than one group match the AadGroupName, you can use the ExactAadGroupName parameter\r\nImport-D365AadUser -AadGroupName \"CustomerTeam1\" -ForceExactAadGroupName\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eImport-D365AadUser -AadGroupName \"CustomerTeam1\" -ForceExactAadGroupName\nThis is used to force the cmdlet to find the exact named group in Azure Active Directory.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eImport-D365AadUser -AadGroupId \"99999999-aaaa-bbbb-cccc-9999999999\"\nImports all the users that is present in the AAD Group called CustomerTeam1\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eImport-D365AadUser -Users \"Claire@contoso.com\",\"Allen@contoso.com\" -SkipAzureAd\nImports Claire and Allen as users.\r\nWill NOT make you connect to the Azure Active Directory(AAD).\r\nThe needed details will be based on the e-mail address only, and the rest will be blanked.",
        "Syntax": "Import-D365AadUser [-Users] \u003cString[]\u003e [[-StartupCompany] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-IdPrefix] \u003cString\u003e] [[-NameSuffix] \u003cString\u003e] [[-IdValue] \u003cString\u003e] [[-NameValue] \u003cString\u003e] [[-AzureAdCredential] \u003cPSCredential\u003e] [[-SkipAzureAd]] [\u003cCommonParameters\u003e]\nImport-D365AadUser [-AadGroupName] \u003cString\u003e [[-StartupCompany] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-IdPrefix] \u003cString\u003e] [[-NameSuffix] \u003cString\u003e] [[-IdValue] \u003cString\u003e] [[-NameValue] \u003cString\u003e] [[-AzureAdCredential] \u003cPSCredential\u003e] [[-ForceExactAadGroupName]] [\u003cCommonParameters\u003e]\nImport-D365AadUser [[-StartupCompany] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-IdPrefix] \u003cString\u003e] [[-NameSuffix] \u003cString\u003e] [[-IdValue] \u003cString\u003e] [[-NameValue] \u003cString\u003e] [[-AzureAdCredential] \u003cPSCredential\u003e] [-AadGroupId] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Import-D365Bacpac",
        "Description": "Import a bacpac file to either a Tier1 or Tier2 environment",
        "Tags": [
                     "Database",
                     "Bacpac",
                     "Tier1",
                     "Tier2",
                     "Golden Config",
                     "Config",
                     "Configuration"
                 ],
        "Params": [
                       [
                           "ImportModeTier1",
                           "Switch to instruct the cmdlet that it will import into a Tier1 environment\nThe cmdlet will expect to work against a SQL Server instance",
                           "",
                           true,
                           "false",
                           "False"
                       ],
                       [
                           "ImportModeTier2",
                           "Switch to instruct the cmdlet that it will import into a Tier2 environment\nThe cmdlet will expect to work against an Azure DB instance",
                           "",
                           true,
                           "false",
                           "False"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "BacpacFile",
                           "Path to the bacpac file you want to import into the database server",
                           "File",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "NewDatabaseName",
                           "Name of the new database that will be created while importing the bacpac file\nThis will create a new database on the database server and import the content of the bacpac into",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "AxDeployExtUserPwd",
                           "Password that is obtained from LCS",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "AxDbAdminPwd",
                           "Password that is obtained from LCS",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "AxRuntimeUserPwd",
                           "Password that is obtained from LCS",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "AxMrRuntimeUserPwd",
                           "Password that is obtained from LCS",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "AxRetailRuntimeUserPwd",
                           "Password that is obtained from LCS",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "AxRetailDataSyncUserPwd",
                           "Password that is obtained from LCS",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "AxDbReadonlyUserPwd",
                           "Password that is obtained from LCS",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "CustomSqlFile",
                           "Path to the sql script file that you want the cmdlet to execute against your data after it has been imported",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "ModelFile",
                           "Path to the model file that you want the SqlPackage.exe to use instead the one being part of the bacpac file\nThis is used to override SQL Server options, like collation and etc",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "DiagnosticFile",
                           "Path to where you want the import to output a diagnostics file to assist you in troubleshooting the import",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "ImportOnly",
                           "Switch to instruct the cmdlet to only import the bacpac into the new database\nThe cmdlet will create a new database and import the content of the bacpac file into this\nNothing else will be executed",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "MaxParallelism",
                           "Sets SqlPackage.exe\u0027s degree of parallelism for concurrent operations running against a database\nThe default value is 8",
                           "",
                           false,
                           "false",
                           "8"
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\ImportBacpac\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Import a bacpac file",
        "Name": "Import-D365Bacpac",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365InstallSqlPackage\nYou should always install the latest version of the SqlPackage.exe, which is used by New-D365Bacpac.\nThis will fetch the latest .Net Core Version of SqlPackage.exe and install it at \"C:\\temp\\d365fo.tools\\SqlPackage\".\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eImport-D365Bacpac -ImportModeTier1 -BacpacFile \"C:\\temp\\uat.bacpac\" -NewDatabaseName \"ImportedDatabase\"\nPS C:\\\u003e Switch-D365ActiveDatabase -NewDatabaseName \"ImportedDatabase\"\nThis will instruct the cmdlet that the import will be working against a SQL Server instance.\r\nIt will import the \"C:\\temp\\uat.bacpac\" file into a new database named \"ImportedDatabase\".\r\nThe next thing to do is to switch the active database out with the new one you just imported.\r\n\"ImportedDatabase\" will be switched in as the active database, while the old one will be named \"AXDB_original\".\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eImport-D365Bacpac -ImportModeTier2 -SqlUser \"sqladmin\" -SqlPwd \"XyzXyz\" -BacpacFile \"C:\\temp\\uat.bacpac\" -AxDeployExtUserPwd \"XxXx\" -AxDbAdminPwd \"XxXx\" -AxRuntimeUserPwd \"XxXx\" \r\n-AxMrRuntimeUserPwd \"XxXx\" -AxRetailRuntimeUserPwd \"XxXx\" -AxRetailDataSyncUserPwd \"XxXx\" -AxDbReadonlyUserPwd \"XxXx\" -NewDatabaseName \"ImportedDatabase\"\nPS C:\\\u003e Switch-D365ActiveDatabase -NewDatabaseName \"ImportedDatabase\" -SqlUser \"sqladmin\" -SqlPwd \"XyzXyz\"\nThis will instruct the cmdlet that the import will be working against an Azure DB instance.\r\nIt requires all relevant passwords from LCS for all the builtin user accounts used in a Tier 2 environment.\r\nIt will import the \"C:\\temp\\uat.bacpac\" file into a new database named \"ImportedDatabase\".\r\nThe next thing to do is to switch the active database out with the new one you just imported.\r\n\"ImportedDatabase\" will be switched in as the active database, while the old one will be named \"AXDB_original\".\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eImport-D365Bacpac -ImportModeTier1 -BacpacFile \"C:\\temp\\uat.bacpac\" -NewDatabaseName \"ImportedDatabase\" -DiagnosticFile \"C:\\temp\\ImportLog.txt\"\nThis will instruct the cmdlet that the import will be working against a SQL Server instance.\r\nIt will import the \"C:\\temp\\uat.bacpac\" file into a new database named \"ImportedDatabase\".\r\nIt will output a diagnostic file to \"C:\\temp\\ImportLog.txt\".\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eImport-D365Bacpac -ImportModeTier1 -BacpacFile \"C:\\temp\\uat.bacpac\" -NewDatabaseName \"ImportedDatabase\" -DiagnosticFile \"C:\\temp\\ImportLog.txt\" -MaxParallelism 32\nThis will instruct the cmdlet that the import will be working against a SQL Server instance.\r\nIt will import the \"C:\\temp\\uat.bacpac\" file into a new database named \"ImportedDatabase\".\r\nIt will output a diagnostic file to \"C:\\temp\\ImportLog.txt\".\nIt will use 32 connections against the database server while importing the bacpac file.\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eImport-D365Bacpac -ImportModeTier1 -BacpacFile \"C:\\temp\\uat.bacpac\" -NewDatabaseName \"ImportedDatabase\" -ImportOnly\nThis will instruct the cmdlet that the import will be working against a SQL Server instance.\r\nIt will import the \"C:\\temp\\uat.bacpac\" file into a new database named \"ImportedDatabase\".\r\nNo cleanup or prepping jobs will be executed, because this is for importing only.\nThis would be something that you can use when extract a bacpac file from a Tier1 and want to import it into a Tier1.\r\nYou would still need to execute the Switch-D365ActiveDatabase cmdlet, to get the newly imported database to be the AXDB database.",
        "Syntax": "Import-D365Bacpac [-ImportModeTier1] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [-BacpacFile] \u003cString\u003e [-NewDatabaseName] \u003cString\u003e [-CustomSqlFile \u003cString\u003e] [-ModelFile \u003cString\u003e] [-DiagnosticFile \u003cString\u003e] [-ImportOnly] [-MaxParallelism \u003cInt32\u003e] [-LogPath \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [-EnableException] [\u003cCommonParameters\u003e]\nImport-D365Bacpac [-ImportModeTier2] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [-SqlUser] \u003cString\u003e [-SqlPwd] \u003cString\u003e [-BacpacFile] \u003cString\u003e [-NewDatabaseName] \u003cString\u003e [[-AxDeployExtUserPwd] \u003cString\u003e] [[-AxDbAdminPwd] \u003cString\u003e] [[-AxRuntimeUserPwd] \u003cString\u003e] [[-AxMrRuntimeUserPwd] \u003cString\u003e] [[-AxRetailRuntimeUserPwd] \u003cString\u003e] [[-AxRetailDataSyncUserPwd] \u003cString\u003e] [[-AxDbReadonlyUserPwd] \u003cString\u003e] [-CustomSqlFile \u003cString\u003e] [-ModelFile \u003cString\u003e] [-DiagnosticFile \u003cString\u003e] -ImportOnly [-MaxParallelism \u003cInt32\u003e] [-LogPath \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] \r\n[-EnableException] [\u003cCommonParameters\u003e]\nImport-D365Bacpac [-ImportModeTier2] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [-SqlUser] \u003cString\u003e [-SqlPwd] \u003cString\u003e [-BacpacFile] \u003cString\u003e [-NewDatabaseName] \u003cString\u003e [-AxDeployExtUserPwd] \u003cString\u003e [-AxDbAdminPwd] \u003cString\u003e [-AxRuntimeUserPwd] \u003cString\u003e [-AxMrRuntimeUserPwd] \u003cString\u003e [-AxRetailRuntimeUserPwd] \u003cString\u003e [-AxRetailDataSyncUserPwd] \u003cString\u003e [-AxDbReadonlyUserPwd] \u003cString\u003e [-CustomSqlFile \u003cString\u003e] [-ModelFile \u003cString\u003e] [-DiagnosticFile \u003cString\u003e] [-MaxParallelism \u003cInt32\u003e] [-LogPath \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [-EnableException] \r\n[\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Import-D365Dacpac",
        "Description": "Import a dacpac file into a database, using the publish feature of SqlPackage.exe\n\nIf the database doesn\u0027t exists, it will be created\n\nIf the database exists, the publish process from the dacpac file will make sure to align the different tables inside the database",
        "Tags": [
                     "Database",
                     "Dacpac",
                     "Tier1",
                     "Tier2",
                     "Golden Config",
                     "Config",
                     "Configuration"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the dacpac file that you want to import",
                           "File,Dacpac",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "ModelFile",
                           "Path to the model file that you want the SqlPackage.exe to use instead the one being part of the dacpac file\nThis is used to override SQL Server options, like collation and etc\nThis is also used to support single table import / restore from a dacpac file",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "PublishFile",
                           "Path to the publish / profile file that contains extended parameters for the SqlPackage.exe assembly",
                           "ProfileFile",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "DiagnosticFile",
                           "Path to where you want the import to output a diagnostics file to assist you in troubleshooting the import",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "MaxParallelism",
                           "Sets SqlPackage.exe\u0027s degree of parallelism for concurrent operations running against a database\nThe default value is 8",
                           "",
                           false,
                           "false",
                           "8"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\ImportDacpac\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Import dacpac file to a database",
        "Name": "Import-D365Dacpac",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eImport-D365Dacpac -Path \"c:\\Temp\\AxDB.dacpac\" -ModelFile \"c:\\Temp\\dbo.salestable.model.xml\"\nThis will import the dacpac file and use the modified model file while doing so.\r\nIt will use the \"c:\\Temp\\AxDB.dacpac\" as the Path parameter.\r\nIt will use the \"c:\\Temp\\dbo.salestable.model.xml\" as the ModelFile parameter.\nThis is used to enable single table restore / publish.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eImport-D365Dacpac -Path \"c:\\Temp\\AxDB.dacpac\" -ModelFile \"c:\\Temp\\dbo.salestable.model.xml\" -DiagnosticFile \"C:\\temp\\ImportLog.txt\" -MaxParallelism 32\nThis will import the dacpac file and use the modified model file while doing so.\r\nIt will use the \"c:\\Temp\\AxDB.dacpac\" as the Path parameter.\r\nIt will use the \"c:\\Temp\\dbo.salestable.model.xml\" as the ModelFile parameter.\r\nIt will use the \"C:\\temp\\ImportLog.txt\" as the DiagnosticFile parameter, where the diagnostic file will be stored.\nIt will use 32 connections against the database server while importing the bacpac file.\nThis is used to enable single table restore / publish.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eImport-D365Dacpac -Path \"c:\\Temp\\AxDB.dacpac\" -PublishFile \"c:\\Temp\\publish.xml\"\nThis will import the dacpac file and use the Publish file which contains advanced configuration instructions for SqlPackage.exe.\r\nIt will use the \"c:\\Temp\\AxDB.dacpac\" as the Path parameter.\r\nIt will use the \"c:\\Temp\\publish.xml\" as the PublishFile parameter, which contains advanced configuration instructions for SqlPackage.exe.\nThis is used to enable full restore / publish, but to avoid some of the common pitfalls.",
        "Syntax": "Import-D365Dacpac [-Path] \u003cString\u003e [[-ModelFile] \u003cString\u003e] [[-PublishFile] \u003cString\u003e] [[-DiagnosticFile] \u003cString\u003e] [[-MaxParallelism] \u003cInt32\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Import-D365ExternalUser",
        "Description": "Imports an user from an AAD that is NOT the same as the AAD tenant that the D365FO environment is running under",
        "Tags": [
                     "User",
                     "Users",
                     "Security",
                     "Configuration",
                     "Permission",
                     "AAD",
                     "Azure Active Directory"
                 ],
        "Params": [
                       [
                           "Id",
                           "The internal Id that the user must be imported with\nThe Id has to unique across the entire user base",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Name",
                           "The display name of the user inside the D365FO environment",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Email",
                           "The email address of the user that you want to import\nThis is also the sign-in user name / e-mail address to gain access to the system\nIf the external AAD tenant has multiple custom domain names, you have to use the domain that they have configured as default",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Enabled",
                           "Should the imported user be enabled or not?\nDefault value is 1, which equals true / yes",
                           "",
                           false,
                           "false",
                           "1"
                       ],
                       [
                           "Company",
                           "Default company that should be configured for the user, for when they sign-in to the D365 environment\nDefault value is \"DAT\"",
                           "",
                           false,
                           "false",
                           "DAT"
                       ],
                       [
                           "Language",
                           "Language that should be configured for the user, for when they sign-in to the D365 environment\nDefault value is \"en-US\"",
                           "",
                           false,
                           "false",
                           "en-us"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ]
                   ],
        "Alias": "",
        "Author": "Anderson Joyle (@AndersonJoyle)",
        "Synopsis": "Import an user from an external Azure Active Directory (AAD)",
        "Name": "Import-D365ExternalUser",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eImport-D365ExternalUser -Id \"John\" -Name \"John Doe\" -Email \"John@contoso.com\"\nThis will import an user from an external Azure Active Directory.\r\nThe new user will get the system wide Id \"John\".\r\nThe name of the new user will be \"John Doe\".\r\nThe e-mail address / sign-in e-mail address will be registered as \"John@contoso.com\".",
        "Syntax": "Import-D365ExternalUser [-Id] \u003cString\u003e [-Name] \u003cString\u003e [-Email] \u003cString\u003e [[-Enabled] \u003cInt32\u003e] [[-Company] \u003cString\u003e] [[-Language] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Import-D365Model",
        "Description": "Import a model into a Dynamics 365 for Finance \u0026 Operations environment",
        "Tags": [
                     "ModelUtil",
                     "Axmodel",
                     "Model",
                     "Import",
                     "Replace",
                     "Source Control",
                     "Vsts",
                     "Azure DevOps"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the axmodel file that you want to import",
                           "File",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the AOS service PackagesLocalDirectory\\bin\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "\"$Script:PackageDirectory\\bin\""
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "\"$Script:MetaDataDir\""
                       ],
                       [
                           "Replace",
                           "Instruct the cmdlet to replace an already existing model",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\ModelUtilImport\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Import a model into Dynamics 365 for Finance \u0026 Operations",
        "Name": "Import-D365Model",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eImport-D365Model -Path c:\\temp\\d365fo.tools\\CustomModel.axmodel\nThis will import the \"c:\\temp\\d365fo.tools\\CustomModel.axmodel\" model into the PackagesLocalDirectory location.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eImport-D365Model -Path c:\\temp\\d365fo.tools\\CustomModel.axmodel -Replace\nThis will import the \"c:\\temp\\d365fo.tools\\CustomModel.axmodel\" model into the PackagesLocalDirectory location.\r\nIf the model already exists it will replace it.",
        "Syntax": "Import-D365Model [-Path] \u003cString\u003e [[-BinDir] \u003cString\u003e] [[-MetaDataDir] \u003cString\u003e] [-Replace] [-LogPath \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Import-D365RsatSelfServiceCertificates",
        "Description": "Import the certificates for RSAT into the correct stores and display the thumbprint\n\nWhen working with self-service environments you need to download a zip file from LCS. The zip file needs to be unblocked and then extracted into a folder, with only the .cer and the .pxf files inside",
        "Params": [
                       [
                           "Path",
                           "Path to the folder where the .cer and .pxf files are located\nThe files needs to be extracted from the zip archive",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Password",
                           "Password for the .pxf file\nWorking with self-service environments, the password will be displayed during the download of the zip archive",
                           "",
                           true,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Import certificates for RSAT",
        "Name": "Import-D365RsatSelfServiceCertificates",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eImport-D365RsatSelfServiceCertificates -Path \"C:\\Temp\\UAT\" -Password \"123456789\"\nThis will import the .cer and .pxf files into the correct stored, bases on the files located in \"C:\\Temp\\UAT\".\r\nAfter import it will display the thumbprint for both certificates.\nSample output:\r\n[23:43:05][Import-D365RsatSelfServiceCertificates] Pfx Thumbprint: B4D6921321434235463463414312343253523A05\r\n[23:43:05][Import-D365RsatSelfServiceCertificates] Cert Thumbprint: B4D6921321434235463463414312343253523A05",
        "Syntax": "Import-D365RsatSelfServiceCertificates [-Path] \u003cObject\u003e [-Password] \u003cObject\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Initialize-D365RsatCertificate",
        "Description": "Creates a new self signed certificate for automated testing and reconfigures the AOS Windows Identity Foundation configuration to trust the certificate",
        "Tags": [
                     "Automated Test",
                     "Test",
                     "Regression",
                     "Certificate",
                     "Thumbprint"
                 ],
        "Params": [
                       [
                           "CertificateFileName",
                           "Filename to be used when exporting the cer file",
                           "",
                           false,
                           "false",
                           "(Join-Path $env:TEMP \"TestAuthCert.cer\")"
                       ],
                       [
                           "PrivateKeyFileName",
                           "Filename to be used when exporting the pfx file",
                           "",
                           false,
                           "false",
                           "(Join-Path $env:TEMP \"TestAuthCert.pfx\")"
                       ],
                       [
                           "Password",
                           "The password that you want to use to protect your certificate with\nThe default value is: \"Password1\"",
                           "",
                           false,
                           "false",
                           "(ConvertTo-SecureString -String \"Password1\" -Force -AsPlainText)"
                       ],
                       [
                           "CertificateOnly",
                           "Switch specifying if only the certificate needs to be created\nIf specified, then only the certificate is created and the thumbprint is not added to the wif.config on the AOS side\r\nIf not specified (default) then the certificate is created and installed and the corresponding thumbprint is added to the wif.config on the local machine",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "KeepCertificateFile",
                           "Instruct the cmdlet to copy the certificate file from the working directory into the desired location specified with OutputPath parameter",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputPath",
                           "Path to where you want the certificate file exported to, when using the KeepCertificateFile parameter switch\nDefault value is: \"c:\\temp\\d365fo.tools\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ]
                   ],
        "Alias": "Initialize-D365TestAutomationCertificate",
        "Author": "Kenny Saelen (@kennysaelen)",
        "Synopsis": "Create and configure test automation certificate",
        "Name": "Initialize-D365RsatCertificate",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInitialize-D365RsatCertificate\nThis will generate a certificate for issuer 127.0.0.1 and install it in the trusted root certificates and modify the wif.config of the AOS to include the thumbprint and trust the certificate.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInitialize-D365RsatCertificate -CertificateOnly\nThis will generate a certificate for issuer 127.0.0.1 and install it in the trusted root certificates.\r\nNo actions will be taken regarding modifying the AOS wif.config file.\nUse this when installing RSAT on a machine different from the AOS where RSAT is pointing to.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInitialize-D365RsatCertificate -CertificateOnly -KeepCertificateFile\nThis will generate a certificate for issuer 127.0.0.1 and install it in the trusted root certificates.\r\nNo actions will be taken regarding modifying the AOS wif.config file.\r\nThe pfx will be copied into the default \"c:\\temp\\d365fo.tools\" folder after creation.\nUse this when installing RSAT on a machine different from the AOS where RSAT is pointing to.\nThe pfx file enables you to import the same certificate across your entire network, instead of creating one per machine.",
        "Syntax": "Initialize-D365RsatCertificate [-CertificateFileName \u003cString\u003e] [-PrivateKeyFileName \u003cString\u003e] [-Password \u003cSecureString\u003e] [-CertificateOnly] [-KeepCertificateFile] [-OutputPath \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Install-D365SupportingSoftware",
        "Description": "Installs software commonly used when doing Dynamics 365 Finance and Operations development\n\nCommon ones: fiddler, postman, microsoft-edge, winmerge, notepadplusplus.install, azurepowershell, azure-cli, insomnia-rest-api-client, git.install\n\nFull list of software: https://community.chocolatey.org/packages",
        "Params": [
                       [
                           "Name",
                           "The name of the software to install\nSupport a list of softwares that you want to have installed on the system",
                           "SoftwareName",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Force",
                           "Instruct the cmdlet to install the latest version of the software, regardless if it is already present on the system",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Dag Calafell (@dodiggitydag)",
        "Synopsis": "Install software supporting F\u0026O development",
        "Name": "Install-D365SupportingSoftware",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInstall-D365SupportingSoftware -Name vscode\nThis will install VSCode on the system.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInstall-D365SupportingSoftware -Name \"vscode\",\"fiddler\"\nThis will install VSCode and fiddler on the system.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInstall-D365SupportingSoftware -Name vscode -Force\nThis will install VSCode on the system, forcing it to be (re)installed.",
        "Syntax": "Install-D365SupportingSoftware [-Name] \u003cString[]\u003e [-Force] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365AzCopyTransfer",
        "Description": "Transfer a file using the AzCopy tool\n\nYou can upload a local file to an Azure Storage Blob Container\n\nYou can download a file located in an Azure Storage Blob Container to a local folder\n\nYou can transfer a file located in an Azure Storage Blob Container to another Azure Storage Blob Container, across regions and subscriptions, if you have SAS tokens/keys as part of your uri",
        "Tags": [
                     "Azure",
                     "Azure Storage",
                     "Config",
                     "Configuration",
                     "Token",
                     "Blob",
                     "File",
                     "Files",
                     "Latest",
                     "Bacpac",
                     "Container",
                     "LCS",
                     "Asset",
                     "Library"
                 ],
        "Params": [
                       [
                           "SourceUri",
                           "Source file uri that you want to transfer",
                           "FileLocation,SourceUrl",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "DestinationUri",
                           "Destination file uri that you want to transfer the file to",
                           "DestinationFile",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "FileName",
                           "You might only pass a blob container or folder name in the DestinationUri parameter and want to give the transfered file another name than the original file name",
                           "",
                           false,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "DeleteOnTransferComplete",
                           "Instruct the cmdlet to delete the source file when done transfering\nDefault is $false which will leave the source file",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\AzCopy\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "Force",
                           "Instruct the cmdlet to overwrite already existing file",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Transfer a file using AzCopy",
        "Name": "Invoke-D365AzCopyTransfer",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365AzCopyTransfer -SourceUri \"https://123.blob.core.windows.net/containername/filename?sv=2015-12-11\u0026sr=...\" -DestinationUri \"c:\\temp\\d365fo.tools\\GOLDER.bacpac\"\nThis will transfer a file from an Azure Storage Blob Container to a local folder/file on the machine.\r\nThe file that will be transfered/downloaded is SourceUri \"https://123.blob.core.windows.net/containername/filename?sv=2015-12-11\u0026sr=...\".\r\nThe file will be transfered/downloaded to DestinationUri \"c:\\temp\\d365fo.tools\\GOLDER.bacpac\".\nIf there exists a file already, the file will NOT be overwritten.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365AzCopyTransfer -SourceUri \"https://123.blob.core.windows.net/containername/filename?sv=2015-12-11\u0026sr=...\" -DestinationUri \"c:\\temp\\d365fo.tools\\GOLDER.bacpac\" -Force\nThis will transfer a file from an Azure Storage Blob Container to a local folder/file on the machine.\r\nThe file that will be transfered/downloaded is SourceUri \"https://123.blob.core.windows.net/containername/filename?sv=2015-12-11\u0026sr=...\".\r\nThe file will be transfered/downloaded to DestinationUri \"c:\\temp\\d365fo.tools\\GOLDER.bacpac\".\r\nIf there exists a file already, the file will be overwritten, because Force has been supplied.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365AzCopyTransfer -SourceUri \"https://123.blob.core.windows.net/containername/filename?sv=2015-12-11\u0026sr=...\" -DestinationUri \r\n\"https://456.blob.core.windows.net/targetcontainer/filename?sv=2015-12-11\u0026sr=...\"\nThis will transfer a file from an Azure Storage Blob Container to another Azure Storage Blob Container.\r\nThe file that will be transfered/downloaded is SourceUri \"https://123.blob.core.windows.net/containername/filename?sv=2015-12-11\u0026sr=...\".\r\nThe file will be transfered/downloaded to DestinationUri \"https://456.blob.core.windows.net/targetcontainer/filename?sv=2015-12-11\u0026sr=...\".\nFor this to work, you need to make sure both SourceUri and DestinationUri has an valid SAS token/key included.\nIf there exists a file already, the file will NOT be overwritten.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eInvoke-D365AzCopyTransfer -SourceUri \"https://123.blob.core.windows.net/containername/filename?sv=2015-12-11\u0026sr=...\" -DestinationUri \"c:\\temp\\d365fo.tools\\GOLDER.bacpac\" \r\n-DeleteOnTransferComplete\nThis will transfer a file from an Azure Storage Blob Container to a local folder/file on the machine.\r\nThe file that will be transfered/downloaded is SourceUri \"https://123.blob.core.windows.net/containername/filename?sv=2015-12-11\u0026sr=...\".\r\nThe file will be transfered/downloaded to DestinationUri \"c:\\temp\\d365fo.tools\\GOLDER.bacpac\".\nAfter the file has been transfered to your local \"c:\\temp\\d365fo.tools\\GOLDER.bacpac\", it will be deleted from the SourceUri \r\n\"https://123.blob.core.windows.net/containername/filename?sv=2015-12-11\u0026sr=...\".\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003e$DestinationParms = Get-D365AzureStorageUrl -OutputAsHashtable\nPS C:\\\u003e $BlobFileDetails = Get-D365LcsDatabaseBackups -Latest | Invoke-D365AzCopyTransfer @DestinationParms\r\nPS C:\\\u003e $BlobFileDetails | Invoke-D365AzCopyTransfer -DestinationUri \"C:\\Temp\" -DeleteOnTransferComplete\nThis will transfer the lastest backup file from LCS Asset Library to your local \"C:\\Temp\".\r\nIt will get a destination Url, for it to transfer the backup file between the LCS storage account and your own.\r\nThe newly transfered file, that lives in your own storage account, will then be downloaded to your local \"c:\\Temp\".\nAfter the file has been downloaded to your local \"C:\\Temp\", it will be deleted from your own storage account.",
        "Syntax": "Invoke-D365AzCopyTransfer [-SourceUri] \u003cString\u003e [-DestinationUri] \u003cString\u003e [[-FileName] \u003cString\u003e] [-DeleteOnTransferComplete] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [-Force] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365AzureDevOpsNugetPush",
        "Description": "Push a package / nuget to an Azure DevOps feed",
        "Params": [
                       [
                           "Path",
                           "Path to the package / nuget that you want to push to the Azure DevOps feed",
                           "PackagePath",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "Source",
                           "The logical name for the nuget source / connection that you want to use while pushing the package / nuget\nThis requires you to register the nuget source, by hand, using the nuget.exe tool directly\nBase command to use:\r\n.\\nuget sources add -Name \"D365FO\" -Source \"https://pkgs.dev.azure.com/Contoso/DynamicsFnO/_packaging/D365Packages/NuGet/v3/index.json\" -username \"alice@contoso.dk\" -password \r\n\"uVWw43FLzaWk9H2EDguXMVYD3DaWj3aHBL6bfZkc21cmkwoK8X78\"\nPlease note that the password is in fact a personal access token and NOT your real password\nThe value specified for Name in the nuget sources command, is the value to supply for Source for this cmdlet",
                           "NugetSource,Destination",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\Nuget\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Push a package / nuget to Azure DevOps",
        "Name": "Invoke-D365AzureDevOpsNugetPush",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365AzureDevOpsNugetPush -Path \"c:\\temp\\d365fo.tools\\microsoft.dynamics.ax.application.devalm.buildxpp.10.0.605.10014.nupkg\" -Source \"Contoso\"\nThis will push the package / nuget to the Azure DevOps feed.\r\nThe file that will be pushed / uploaded is identified by the Path \"c:\\temp\\d365fo.tools\\microsoft.dynamics.ax.application.devalm.buildxpp.10.0.605.10014.nupkg\".\r\nThe request will be going to the Azure DevOps instance that is registered with the Source (Name) \"Contoso\" via the nuget.exe tool.",
        "Syntax": "Invoke-D365AzureDevOpsNugetPush [[-Path] \u003cString\u003e] [[-Source] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365AzureStorageDownload",
        "Description": "Download any file to an Azure Storage Account",
        "Tags": [
                     "Azure",
                     "Azure Storage",
                     "Config",
                     "Configuration",
                     "Token",
                     "Blob",
                     "File",
                     "Files",
                     "Latest",
                     "Bacpac",
                     "Container"
                 ],
        "Params": [
                       [
                           "AccountId",
                           "Storage Account Name / Storage Account Id where you want to fetch the file from",
                           "",
                           false,
                           "false",
                           "$Script:AzureStorageAccountId"
                       ],
                       [
                           "AccessToken",
                           "The token that has the needed permissions for the download action",
                           "",
                           false,
                           "false",
                           "$Script:AzureStorageAccessToken"
                       ],
                       [
                           "SAS",
                           "The SAS key that you have created for the storage account or blob container",
                           "",
                           false,
                           "false",
                           "$Script:AzureStorageSAS"
                       ],
                       [
                           "Container",
                           "Name of the blob container inside the storage account you where the file is",
                           "Blobname,Blob",
                           false,
                           "false",
                           "$Script:AzureStorageContainer"
                       ],
                       [
                           "FileName",
                           "Name of the file that you want to download",
                           "Name",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "Path",
                           "Path to the folder / location you want to save the file\nThe default path is \"c:\\temp\\d365fo.tools\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "Latest",
                           "Instruct the cmdlet to download the latest file from Azure regardless of name",
                           "GetLatest",
                           true,
                           "false",
                           "False"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Download a file to Azure",
        "Name": "Invoke-D365AzureStorageDownload",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365AzureStorageDownload -AccountId \"miscfiles\" -AccessToken \"xx508xx63817x752xx74004x30705xx92x58349x5x78f5xx34xxxxx51\" -Container \"backupfiles\" -FileName \"OriginalUAT.bacpac\" -Path \r\n\"c:\\temp\"\nWill download the \"OriginalUAT.bacpac\" file from the storage account and save it to \"c:\\temp\\OriginalUAT.bacpac\"\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365AzureStorageDownload -AccountId \"miscfiles\" -AccessToken \"xx508xx63817x752xx74004x30705xx92x58349x5x78f5xx34xxxxx51\" -Container \"backupfiles\" -Path \"c:\\temp\" -Latest\nWill download the file with the latest modified datetime from the storage account and save it to \"c:\\temp\\\".\r\nThe complete path to the file will returned as output from the cmdlet.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003e$AzureParams = Get-D365ActiveAzureStorageConfig\nPS C:\\\u003e Invoke-D365AzureStorageDownload @AzureParams -Path \"c:\\temp\" -Latest\nThis will get the current Azure Storage Account configuration details\r\nand use them as parameters to download the latest file from an Azure Storage Account\nWill download the file with the latest modified datetime from the storage account and save it to \"c:\\temp\\\".\r\nThe complete path to the file will returned as output from the cmdlet.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eInvoke-D365AzureStorageDownload -Latest\nThis will use the default parameter values that are based on the configuration stored inside \"Get-D365ActiveAzureStorageConfig\".\r\nWill download the file with the latest modified datetime from the storage account and save it to \"c:\\temp\\d365fo.tools\".\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eInvoke-D365AzureStorageDownload -AccountId \"miscfiles\" -SAS \"sv2018-03-28\u0026siunlisted\u0026src\u0026sigAUOpdsfpoWE976ASDhfjkasdf(5678sdfhk\" -Container \"backupfiles\" -Path \"c:\\temp\" -Latest\nWill download the file with the latest modified datetime from the storage account and save it to \"c:\\temp\\\".\r\nA SAS key is used to gain access to the container and downloading the file from it.\r\nThe complete path to the file will returned as output from the cmdlet.",
        "Syntax": "Invoke-D365AzureStorageDownload [-AccountId \u003cString\u003e] [-AccessToken \u003cString\u003e] [-SAS \u003cString\u003e] [-Container \u003cString\u003e] -FileName \u003cString\u003e [-Path \u003cString\u003e] [-EnableException] [\u003cCommonParameters\u003e]\nInvoke-D365AzureStorageDownload [-AccountId \u003cString\u003e] [-AccessToken \u003cString\u003e] [-SAS \u003cString\u003e] [-Container \u003cString\u003e] [-Path \u003cString\u003e] [-Latest] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365AzureStorageUpload",
        "Description": "Upload any file to an Azure Storage Account",
        "Tags": [
                     "Azure",
                     "Azure Storage",
                     "Config",
                     "Configuration",
                     "Token",
                     "Blob",
                     "File",
                     "Files",
                     "Bacpac",
                     "Container"
                 ],
        "Params": [
                       [
                           "AccountId",
                           "Storage Account Name / Storage Account Id where you want to store the file",
                           "",
                           false,
                           "false",
                           "$Script:AzureStorageAccountId"
                       ],
                       [
                           "AccessToken",
                           "The token that has the needed permissions for the upload action",
                           "",
                           false,
                           "false",
                           "$Script:AzureStorageAccessToken"
                       ],
                       [
                           "SAS",
                           "The SAS key that you have created for the storage account or blob container",
                           "",
                           false,
                           "false",
                           "$Script:AzureStorageSAS"
                       ],
                       [
                           "Container",
                           "Name of the blob container inside the storage account you want to store the file",
                           "Blobname,Blob",
                           false,
                           "false",
                           "$Script:AzureStorageContainer"
                       ],
                       [
                           "Filepath",
                           "Path to the file you want to upload",
                           "Path,File",
                           true,
                           "true (ByValue)",
                           ""
                       ],
                       [
                           "ContentType",
                           "Media type of the file that is going to be uploaded\nThe value will be used for the blob property \"Content Type\".\r\nIf the parameter is left empty, the commandlet will try to automatically determined the value based on the file\u0027s extension.\r\nIf the parameter is left empty and the value cannot be automatically be determined, Azure storage will automatically assign \"application/octet-stream\" as the content type.\r\nValid media type values can be found here: https://www.iana.org/assignments/media-types/media-types.xhtml",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "DeleteOnUpload",
                           "Switch to tell the cmdlet if you want the local file to be deleted after the upload completes",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Upload a file to Azure",
        "Name": "Invoke-D365AzureStorageUpload",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365AzureStorageUpload -AccountId \"miscfiles\" -AccessToken \"xx508xx63817x752xx74004x30705xx92x58349x5x78f5xx34xxxxx51\" -Container \"backupfiles\" -Filepath \r\n\"c:\\temp\\bacpac\\UAT_20180701.bacpac\" -DeleteOnUpload\nThis will upload the \"c:\\temp\\bacpac\\UAT_20180701.bacpac\" up to the \"backupfiles\" container, inside the \"miscfiles\" Azure Storage Account that is access with the \r\n\"xx508xx63817x752xx74004x30705xx92x58349x5x78f5xx34xxxxx51\" token.\r\nAfter upload the local file will be deleted.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003e$AzureParams = Get-D365ActiveAzureStorageConfig\nPS C:\\\u003e New-D365Bacpac | Invoke-D365AzureStorageUpload @AzureParams\nThis will get the current Azure Storage Account configuration details and use them as parameters to upload the file to an Azure Storage Account.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eNew-D365Bacpac | Invoke-D365AzureStorageUpload\nThis will generate a new bacpac file using the \"New-D365Bacpac\" cmdlet.\r\nThe file will be uploaded to an Azure Storage Account using the \"Invoke-D365AzureStorageUpload\" cmdlet.\r\nThis will use the default parameter values that are based on the configuration stored inside \"Get-D365ActiveAzureStorageConfig\" for the \"Invoke-D365AzureStorageUpload\" cmdlet.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eInvoke-D365AzureStorageUpload -AccountId \"miscfiles\" -SAS \"sv2018-03-28\u0026siunlisted\u0026src\u0026sigAUOpdsfpoWE976ASDhfjkasdf(5678sdfhk\" -Container \"backupfiles\" -Filepath \r\n\"c:\\temp\\bacpac\\UAT_20180701.bacpac\" -DeleteOnUpload\nThis will upload the \"c:\\temp\\bacpac\\UAT_20180701.bacpac\" up to the \"backupfiles\" container, inside the \"miscfiles\" Azure Storage Account.\r\nA SAS key is used to gain access to the container and uploading the file to it.",
        "Syntax": "Invoke-D365AzureStorageUpload [-AccountId \u003cString\u003e] [-AccessToken \u003cString\u003e] [-SAS \u003cString\u003e] [-Container \u003cString\u003e] -Filepath \u003cString\u003e [-ContentType \u003cString\u003e] [-DeleteOnUpload] [-EnableException] [\u003cCommonParameters\u003e]\nInvoke-D365AzureStorageUpload [-AccountId \u003cString\u003e] [-AccessToken \u003cString\u003e] [-SAS \u003cString\u003e] [-Container \u003cString\u003e] -Filepath \u003cString\u003e [-ContentType \u003cString\u003e] [-DeleteOnUpload] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365BestPractice",
        "Description": "Run the Best Practice checks against modules and models",
        "Tags": [
                     "Best Practice",
                     "BP",
                     "BPs",
                     "Module",
                     "Model",
                     "Quality"
                 ],
        "Params": [
                       [
                           "Module",
                           "Name of the Module to analyse",
                           "ModuleName",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "Model",
                           "Name of the Model to analyse",
                           "ModelName",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the AOS service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:PackageDirectory\\bin\""
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "\"$Script:MetaDataDir\""
                       ],
                       [
                           "PackagesRoot",
                           "Instructs the cmdlet to use binary metadata",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "LogPath",
                           "Path where you want to store the log outputs generated from the best practice analyser\nAlso used as the path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\BestPractice\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "RunFixers",
                           "Instructs the cmdlet to invoke the fixers for the identified warnings",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Gert Van Der Heyden (@gertvdheyden)",
        "Synopsis": "Run the Best Practice",
        "Name": "Invoke-D365BestPractice",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365BestPractice -module \"ApplicationSuite\" -model \"MyOverLayerModel\"\nThis will execute the best practice checks against MyOverLayerModel in the ApplicationSuite Module.\r\nThe default output will be silenced.\r\nThe XML log file will be written to \"c:\\temp\\d365fo.tools\\ApplicationSuite\\Dynamics.AX.MyOverLayerModel.xppbp.xml\".\r\nThe log file will be written to \"c:\\temp\\d365fo.tools\\ApplicationSuite\\Dynamics.AX.MyOverLayerModel.xppbp.log\".\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365BestPractice -module \"ApplicationSuite\" -model \"MyOverLayerModel\" -PackagesRoot\nThis will execute the best practice checks against MyOverLayerModel in the ApplicationSuite Module.\r\nWe use the binary metadata to look for the module and model.\r\nThe default output will be silenced.\r\nThe XML log file will be written to \"c:\\temp\\d365fo.tools\\ApplicationSuite\\Dynamics.AX.MyOverLayerModel.xppbp.xml\".\r\nThe log file will be written to \"c:\\temp\\d365fo.tools\\ApplicationSuite\\Dynamics.AX.MyOverLayerModel.xppbp.log\".\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365BestPractice -module \"ApplicationSuite\" -model \"MyOverLayerModel\" -ShowOriginalProgress\nThis will execute the best practice checks against MyOverLayerModel in the ApplicationSuite Module.\r\nThe output from the best practice check process will be written to the console / host.\r\nThe XML log file will be written to \"c:\\temp\\d365fo.tools\\ApplicationSuite\\Dynamics.AX.MyOverLayerModel.xppbp.xml\".\r\nThe log file will be written to \"c:\\temp\\d365fo.tools\\ApplicationSuite\\Dynamics.AX.MyOverLayerModel.xppbp.log\".\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eInvoke-D365BestPractice -module \"ApplicationSuite\" -model \"MyOverLayerModel\" -RunFixers\nThis will execute the best practice checks against MyOverLayerModel in the ApplicationSuite Module.\r\nThe default output will be silenced.\r\nThe XML log file will be written to \"c:\\temp\\d365fo.tools\\ApplicationSuite\\Dynamics.AX.MyOverLayerModel.xppbp.xml\".\r\nThe log file will be written to \"c:\\temp\\d365fo.tools\\ApplicationSuite\\Dynamics.AX.MyOverLayerModel.xppbp.log\".\r\nInstructs the xppbp tool to run the fixers for all identified warnings.",
        "Syntax": "Invoke-D365BestPractice [-Module] \u003cString\u003e [-Model] \u003cString\u003e [[-BinDir] \u003cString\u003e] [[-MetaDataDir] \u003cString\u003e] [-PackagesRoot] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-RunFixers] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365CompilerResultAnalyzer",
        "Description": "Analyze the compiler output log and generate an excel file contain worksheets per type: Errors, Warnings, Tasks\n\nIt could be a Visual Studio compiler log or it could be a Invoke-D365ModuleCompile log you want analyzed",
        "Tags": [
                     "Compiler",
                     "Build",
                     "Errors",
                     "Warnings",
                     "Tasks"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the compiler log file that you want to work against\nA BuildModelResult.log or a Dynamics.AX.*.xppc.log file will both work",
                           "LogFile",
                           true,
                           "true (ByValue, ByPropertyName)",
                           ""
                       ],
                       [
                           "OutputPath",
                           "Path where you want the excel file (xlsx-file) saved to",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "SkipWarnings",
                           "Instructs the cmdlet to skip warnings while analyzing the compiler output log file",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "SkipTasks",
                           "Instructs the cmdlet to skip tasks while analyzing the compiler output log file",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nDefault path is the same as the AOS service \"PackagesLocalDirectory\" directory\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Analyze the compiler output log",
        "Name": "Invoke-D365CompilerResultAnalyzer",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365CompilerResultAnalyzer -Path \"c:\\temp\\d365fo.tools\\Custom\\Dynamics.AX.Custom.xppc.log\"\nThis will analyse all compiler output log files generated from Visual Studio.\r\nIt will use the default path for the OutputPath parameter.\nIt will build error and error summary worksheets.\r\nIt will build warning and warning summary worksheets.\r\nIt will build task and task summary worksheets.\nA result set example:\nFile Filename\r\n---- --------\r\nc:\\temp\\d365fo.tools\\Custom-CompilerResults.xlsx Custom-CompilerResults.xlsx\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365CompilerResultAnalyzer -Path \"c:\\temp\\d365fo.tools\\Custom\\Dynamics.AX.Custom.xppc.log\" -SkipWarnings\nThis will analyse all compiler output log files generated from Visual Studio.\r\nIt will use the default path for the OutputPath parameter.\nIt will build error and error summary worksheets.\r\nIt will build task and task summary worksheets.\nA result set example:\nFile Filename\r\n---- --------\r\nc:\\temp\\d365fo.tools\\Custom-CompilerResults.xlsx Custom-CompilerResults.xlsx\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365CompilerResultAnalyzer -Path \"c:\\temp\\d365fo.tools\\Custom\\Dynamics.AX.Custom.xppc.log\" -SkipTasks\nThis will analyse all compiler output log files generated from Visual Studio.\r\nIt will use the default path for the OutputPath parameter.\nIt will build error and error summary worksheets.\r\nIt will build warning and warning summary worksheets.\nA result set example:\nFile Filename\r\n---- --------\r\nc:\\temp\\d365fo.tools\\Custom-CompilerResults.xlsx Custom-CompilerResults.xlsx",
        "Syntax": "Invoke-D365CompilerResultAnalyzer [-Path] \u003cString\u003e [[-OutputPath] \u003cString\u003e] [-SkipWarnings] [-SkipTasks] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365DataFlush",
        "Description": "Invoke one of the runnable classes that is clearing cache, data or something else",
        "Tags": [
                     "Flush",
                     "Url",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "Url",
                           "URL to the Dynamics 365 instance you want to clear the AOD cache on",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "Class",
                           "The class that you want to execute.\nDefault value is \"SysFlushAod\"",
                           "",
                           false,
                           "false",
                           "SysFlushAod"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Invoke the one of the data flush classes",
        "Name": "Invoke-D365DataFlush",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365DataFlush\nThis will make a call against the default URL for the machine and\r\nhave it execute the SysFlushAOD class.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365DataFlush -Class SysFlushData,SysFlushAod\nThis will make a call against the default URL for the machine and\r\nhave it execute the SysFlushData and SysFlushAod classes.",
        "Syntax": "Invoke-D365DataFlush [[-Url] \u003cString\u003e] [-Class \u003cString[]\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365DbSync",
        "Description": "Uses the sync.exe (engine) to synchronize the database for the environment",
        "Tags": [
                     "Database",
                     "Sync",
                     "SyncDB",
                     "Synchronization",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "BinDirTools",
                           "Path to where the tools on the machine can be found\nDefault value is normally the AOS Service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "$Script:BinDirTools"
                       ],
                       [
                           "MetadataDir",
                           "Path to where the tools on the machine can be found\nDefault value is normally the AOS Service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "SyncMode",
                           "The sync mode the sync engine will use\nDefault value is: \"FullAll\"",
                           "",
                           false,
                           "false",
                           "FullAll"
                       ],
                       [
                           "Verbosity",
                           "Parameter used to instruct the level of verbosity the sync engine has to report back\nDefault value is: \"Normal\"",
                           "",
                           false,
                           "false",
                           "Normal"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\DbSync\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Invoke the synchronization process used in Visual Studio",
        "Name": "Invoke-D365DbSync",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365DBSync\nThis will invoke the sync engine and have it work against the database.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365DBSync -Verbose\nThis will invoke the sync engine and have it work against the database. It will output the same level of details that Visual Studio would normally do.",
        "Syntax": "Invoke-D365DbSync [[-BinDirTools] \u003cString\u003e] [[-MetadataDir] \u003cString\u003e] [[-SyncMode] \u003cString\u003e] [[-Verbosity] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365DbSyncModule",
        "Description": "Retrieve the list of installed packages / modules where the name fits the ModelName parameter.\n\nIt will run loop over the list and start the sync process against all tables, views, data entities, table-extensions,\nview-extensions and data entities-extensions of every iterated model",
        "Tags": [
                     "Database",
                     "Sync",
                     "SyncDB",
                     "Synchronization",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "Module",
                           "Name of the model you want to sync tables and table extensions\nSupports an array of module names",
                           "ModuleName",
                           true,
                           "true (ByValue, ByPropertyName)",
                           ""
                       ],
                       [
                           "Verbosity",
                           "Parameter used to instruct the level of verbosity the sync engine has to report back\nDefault value is: \"Normal\"",
                           "",
                           false,
                           "false",
                           "Normal"
                       ],
                       [
                           "BinDirTools",
                           "Path to where the tools on the machine can be found\nDefault value is normally the AOS Service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "$Script:BinDirTools"
                       ],
                       [
                           "MetadataDir",
                           "Path to where the tools on the machine can be found\nDefault value is normally the AOS Service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "LogPath",
                           "The path where the log file will be saved",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\DbSync\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Jasper Callens - Cegeka",
        "Synopsis": "Synchronize all sync base and extension elements based on a modulename",
        "Name": "Invoke-D365DbSyncModule",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365DbSyncModule -Module \"MyModel1\"\nIt will start the sync process against all tables, views, data entities, table-extensions, view-extensions and data entities-extensions of MyModel1.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365DbSyncModule -Module \"MyModel1\",\"MyModel2\"\nIt will run loop over the list and start the sync process against all tables, views, data entities, table-extensions, view-extensions and data entities-extensions of every iterated model.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365Module -Name \"MyModel*\" | Invoke-D365DbSyncModule\nRetrieve the list of installed packages / modules where the name fits the search \"MyModel*\".\nThe result is:\r\nMyModel1\r\nMyModel2\nIt will run loop over the list and start the sync process against all tables, views, data entities, table-extensions, view-extensions and data entities-extensions of every iterated model.",
        "Syntax": "Invoke-D365DbSyncModule [-Module] \u003cString[]\u003e [[-Verbosity] \u003cString\u003e] [[-BinDirTools] \u003cString\u003e] [[-MetadataDir] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365DbSyncPartial",
        "Description": "Uses the sync.exe (engine) to synchronize the database for the environment",
        "Tags": [
                     "Database",
                     "Sync",
                     "SyncDB",
                     "Synchronization",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "SyncList",
                           "The list of objects that you want to pass on to the database synchronoziation engine",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "SyncExtensionsList",
                           "The list of extension objects that you want to pass on to the database synchronoziation engine",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "SyncMode",
                           "The sync mode the sync engine will use\nDefault value is: \"PartialList\"",
                           "",
                           false,
                           "false",
                           "PartialList"
                       ],
                       [
                           "Verbosity",
                           "Parameter used to instruct the level of verbosity the sync engine has to report back\nDefault value is: \"Normal\"",
                           "",
                           false,
                           "false",
                           "Normal"
                       ],
                       [
                           "BinDirTools",
                           "Path to where the tools on the machine can be found\nDefault value is normally the AOS Service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "$Script:BinDirTools"
                       ],
                       [
                           "MetadataDir",
                           "Path to where the tools on the machine can be found\nDefault value is normally the AOS Service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\DbSync\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Invoke the synchronization process used in Visual Studio",
        "Name": "Invoke-D365DbSyncPartial",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365DBSyncPartial -SyncList \"CustCustomerEntity\",\"SalesTable\"\nThis will invoke the sync engine and have it work against the database.\r\nIt will run with the default value \"PartialList\" as the SyncMode.\r\nIt will run the sync process against \"CustCustomerEntity\" and \"SalesTable\"\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365DBSyncPartial -SyncList \"CustCustomerEntity\",\"SalesTable\" -Verbose\nThis will invoke the sync engine and have it work against the database.\r\nIt will run with the default value \"PartialList\" as the SyncMode.\r\nIt will run the sync process against \"CustCustomerEntity\" and \"SalesTable\"\nIt will output the same level of details that Visual Studio would normally do.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365DBSyncPartial -SyncList \"CustCustomerEntity\",\"SalesTable\" -SyncExtensionsList \"CaseLog.Extension\",\"CategoryTable.Extension\" -Verbose\nThis will invoke the sync engine and have it work against the database.\r\nIt will run with the default value \"PartialList\" as the SyncMode.\r\nIt will run the sync process against \"CustCustomerEntity\", \"SalesTable\", \"CaseLog.Extension\" and \"CategoryTable.Extension\"\nIt will output the same level of details that Visual Studio would normally do.",
        "Syntax": "Invoke-D365DbSyncPartial [[-SyncList] \u003cString[]\u003e] [[-SyncExtensionsList] \u003cString[]\u003e] [[-SyncMode] \u003cString\u003e] [[-Verbosity] \u003cString\u003e] [[-BinDirTools] \u003cString\u003e] [[-MetadataDir] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReportAggregateDataEntity",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all Aggregate Data Entities and generate a metadata report",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for Aggregate Data Entity",
        "Name": "Invoke-D365GenerateReportAggregateDataEntity",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReportAggregateDataEntity\nThis will generate a report.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReportAggregateDataEntity [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReportAggregateMeasure",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all Aggregate Measures and generate a metadata report",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for Aggregate Measure",
        "Name": "Invoke-D365GenerateReportAggregateMeasure",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReportAggregateMeasure\nThis will generate a report.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReportAggregateMeasure [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReportConfigKey",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all Config Keys and generate a metadata report",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for Config Key",
        "Name": "Invoke-D365GenerateReportConfigKey",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReportConfigKey\nThis will generate a report.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReportConfigKey [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReportConfigKeyGroup",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all Config Key Groups and generate a metadata report",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for Config Key Group",
        "Name": "Invoke-D365GenerateReportConfigKeyGroup",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReportConfigKeyGroup\nThis will generate a report.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReportConfigKeyGroup [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReportDataEntity",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all Data Entities and generate a metadata report",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for Data Entity",
        "Name": "Invoke-D365GenerateReportDataEntity",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReportDataEntity\nThis will generate a report.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReportDataEntity [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReportDataEntityField",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all Data Entities with their fields and generate a metadata report",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for Data Entity with fields",
        "Name": "Invoke-D365GenerateReportDataEntityField",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReportDataEntityField\nThis will generate a report.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReportDataEntityField [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReportKpi",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all KPIs and generate a metadata report",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for KPI",
        "Name": "Invoke-D365GenerateReportKpi",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReportKpi\nThis will generate a report.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReportKpi [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReportLicenseCode",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all License Codes and generate a metadata report",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for License Code",
        "Name": "Invoke-D365GenerateReportLicenseCode",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReportLicenseCode\nThis will generate a report.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReportLicenseCode [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReportMenuItem",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all types of Menu Items and generate a metadata report",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for Menu Item",
        "Name": "Invoke-D365GenerateReportMenuItem",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReportMenuItem\nThis will generate a report.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReportMenuItem [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReports",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all related objects and generate a metadata report for each",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for all related objects",
        "Name": "Invoke-D365GenerateReports",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReports\nThis will generate a report for each related object.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReports [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReportSsrs",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all SSRS Reports and generate a metadata report",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for SSRS Report",
        "Name": "Invoke-D365GenerateReportSsrs",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReportSsrs\nThis will generate a report.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReportSsrs [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReportTable",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all Tables and generate a metadata report",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for Table",
        "Name": "Invoke-D365GenerateReportTable",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReportTable\nThis will generate a report.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReportTable [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365GenerateReportWorkflowType",
        "Description": "Traverse the Dynamics 365 Finance \u0026 Operations code repository for all Workflow Types and generate a metadata report",
        "Tags": [
                     "Metadata",
                     "Report",
                     "Documentation"
                 ],
        "Params": [
                       [
                           "OutputPath",
                           "Path to where you want the report file to be saved\nThe default value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\\bin\""
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nNormally it is located under the AOSService directory in \"PackagesLocalDirectory\"\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Generate Report for Workflow Type",
        "Name": "Invoke-D365GenerateReportWorkflowType",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365GenerateReportWorkflowType\nThis will generate a report.\r\nIt will contain all the metadata and save it into a xlsx (Excel) file.\r\nIt will saved the file to \"c:\\temp\\d365fo.tools\\\"",
        "Syntax": "Invoke-D365GenerateReportWorkflowType [[-OutputPath] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365InstallAzCopy",
        "Description": "Download and extract the AzCopy.exe to your machine",
        "Params": [
                       [
                           "Url",
                           "Url/Uri to where the latest AzCopy download is located\nThe default value is for v10 as of writing",
                           "",
                           false,
                           "false",
                           "https://aka.ms/downloadazcopy-v10-windows"
                       ],
                       [
                           "Path",
                           "Path to where you want the AzCopy to be extracted to\nDefault value is: \"C:\\temp\\d365fo.tools\\AzCopy\\AzCopy.exe\"",
                           "",
                           false,
                           "false",
                           "C:\\temp\\d365fo.tools\\AzCopy\\AzCopy.exe"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Download AzCopy.exe to your machine",
        "Name": "Invoke-D365InstallAzCopy",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365InstallAzCopy -Path \"C:\\temp\\d365fo.tools\\AzCopy\\AzCopy.exe\"\nThis will update the path for the AzCopy.exe in the modules configuration",
        "Syntax": "Invoke-D365InstallAzCopy [[-Url] \u003cString\u003e] [[-Path] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365InstallLicense",
        "Description": "Install a license for a 3. party solution using the builtin \"Microsoft.Dynamics.AX.Deployment.Setup.exe\" executable",
        "Tags": [
                     "License",
                     "Install",
                     "ISV",
                     "3. Party",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the license file",
                           "File",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "\"$Script:MetaDataDir\""
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:BinDir\""
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\InstallLicense\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Install a license for a 3. party solution",
        "Name": "Invoke-D365InstallLicense",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365InstallLicense -Path c:\\temp\\d365fo.tools\\license.txt\nThis will use the default paths and start the Microsoft.Dynamics.AX.Deployment.Setup.exe with the needed parameters to import / install the license file.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365InstallLicense -Path c:\\temp\\d365fo.tools\\license.txt -ShowOriginalProgress\nThis will use the default paths and start the Microsoft.Dynamics.AX.Deployment.Setup.exe with the needed parameters to import / install the license file.\r\nThe output from the installation process will be written to the console / host.",
        "Syntax": "Invoke-D365InstallLicense [-Path] \u003cString\u003e [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-MetaDataDir] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365InstallNuget",
        "Description": "Download the nuget.exe to your machine\n\nBy default it will download the latest version",
        "Params": [
                       [
                           "Path",
                           "Path to where you want the nuget.exe to be downloaded to\nDefault value is: \"C:\\temp\\d365fo.tools\\nuget\\nuget.exe\"",
                           "",
                           false,
                           "false",
                           "C:\\temp\\d365fo.tools\\nuget"
                       ],
                       [
                           "Url",
                           "Url/Uri to where the latest nuget download is located\nThe default value is \"https://dist.nuget.org/win-x86-commandline/latest/nuget.exe\"",
                           "",
                           false,
                           "false",
                           "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Download nuget.exe to your machine",
        "Name": "Invoke-D365InstallNuget",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365InstallNuget\nThis will download the latest version of nuget.\r\nThe install path is identified by the default value: \"C:\\temp\\d365fo.tools\\nuget\\nuget.exe\".",
        "Syntax": "Invoke-D365InstallNuget [[-Path] \u003cString\u003e] [[-Url] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365InstallSqlPackage",
        "Description": "Download and extract the DotNet/.NET core x64 edition of the SqlPackage.exe to your machine\n\nIt parses the raw html page and tries to extract the latest download link",
        "Params": [
                       [
                           "Path",
                           "Path to where you want the SqlPackage to be extracted to\nDefault value is: \"C:\\temp\\d365fo.tools\\SqlPackage\\SqlPackage.exe\"",
                           "",
                           false,
                           "false",
                           "C:\\temp\\d365fo.tools\\SqlPackage"
                       ],
                       [
                           "SkipExtractFromPage",
                           "Instruct the cmdlet to skip trying to parse the download page and to rely on the Url parameter only",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "Url",
                           "Url/Uri to where the latest SqlPackage download is located\nThe default value is for v18.4.1 (15.0.4630.1) as of writing",
                           "",
                           false,
                           "false",
                           "https://go.microsoft.com/fwlink/?linkid=2113704"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Download SqlPackage.exe to your machine",
        "Name": "Invoke-D365InstallSqlPackage",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365InstallSqlPackage\nThis will download and extract the latest SqlPackage.exe.\r\nIt will use the default value for the Path parameter, for where to save the SqlPackage.exe.\r\nIt will try to extract the latest download URL from the RAW html page.\r\nIt will update the path for the SqlPackage.exe in configuration.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365InstallSqlPackage -Path \"C:\\temp\\SqlPackage\"\nThis will download and extract the latest SqlPackage.exe.\r\nIt will try to extract the latest download URL from the RAW html page.\r\nIt will update the path for the SqlPackage.exe in configuration.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365InstallSqlPackage -SkipExtractFromPage\nThis will download and extract the latest SqlPackage.exe.\r\nIt will rely on the Url parameter to based the download from.\r\nIt will use the default value of the Url parameter.\r\nIt will update the path for the SqlPackage.exe in configuration.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eInvoke-D365InstallSqlPackage -SkipExtractFromPage -Url \"https://go.microsoft.com/fwlink/?linkid=3030303\"\nThis will download and extract the latest SqlPackage.exe.\r\nIt will rely on the Url parameter to based the download from.\r\nIt will use the \"https://go.microsoft.com/fwlink/?linkid=3030303\" as value for the Url parameter.\r\nIt will update the path for the SqlPackage.exe in configuration.",
        "Syntax": "Invoke-D365InstallSqlPackage [[-Path] \u003cString\u003e] [-SkipExtractFromPage] [[-Url] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365LcsApiRefreshToken",
        "Description": "Invoke the refresh logic that refreshes the token object based on the ClientId and RefreshToken",
        "Tags": [
                     "LCS",
                     "API",
                     "Token",
                     "BearerToken"
                 ],
        "Params": [
                       [
                           "ClientId",
                           "The Azure Registered Application Id / Client Id obtained while creating a Registered App inside the Azure Portal",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "RefreshToken",
                           "The Refresh Token that you want to use for the authentication process",
                           "Token,refresh_token",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "InputObject",
                           "The entire object that you received from the Get-D365LcsApiToken command, which contains the needed RefreshToken",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Refresh the token for lcs communication",
        "Name": "Invoke-D365LcsApiRefreshToken",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365LcsApiRefreshToken -ClientId \"9b4f4503-b970-4ade-abc6-2c086e4c4929\" -RefreshToken \"Tsdljfasfe2j32324\"\nThis will refresh an OAuth 2.0 access token, and obtain a (new) valid OAuth 2.0 access token from Azure Active Directory.\r\nThe ClientId \"9b4f4503-b970-4ade-abc6-2c086e4c4929\" is used in the OAuth 2.0 \"Refresh Token\" Grant Flow to authenticate.\r\nThe RefreshToken \"Tsdljfasfe2j32324\" is used to prove to Azure Active Directoy that we are allowed to obtain a new valid Access Token.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003e$temp = Get-D365LcsApiToken -LcsApiUri \"https://lcsapi.eu.lcs.dynamics.com\" -ClientId \"9b4f4503-b970-4ade-abc6-2c086e4c4929\" -Username \"serviceaccount@domain.com\" -Password \"TopSecretPassword\"\nPS C:\\\u003e $temp = Invoke-D365LcsApiRefreshToken -ClientId \"9b4f4503-b970-4ade-abc6-2c086e4c4929\" -InputObject $temp\nThis will refresh an OAuth 2.0 access token, and obtain a (new) valid OAuth 2.0 access token from Azure Active Directory.\r\nThis will obtain a new token object from the Get-D365LcsApiToken cmdlet and store it in $temp.\r\nThen it will pass $temp to the Invoke-D365LcsApiRefreshToken along with the ClientId \"9b4f4503-b970-4ade-abc6-2c086e4c4929\".\r\nThe new token object will be save into $temp.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365LcsApiConfig | Invoke-D365LcsApiRefreshToken | Set-D365LcsApiConfig\nThis will refresh an OAuth 2.0 access token, and obtain a (new) valid OAuth 2.0 access token from Azure Active Directory.\r\nThis will fetch the current LCS API details from Get-D365LcsApiConfig.\r\nThe output from Get-D365LcsApiConfig is piped directly to Invoke-D365LcsApiRefreshToken, which will fetch a new token object.\r\nThe new token object is piped directly into Set-D365LcsApiConfig, which will save the needed details into the configuration store.",
        "Syntax": "Invoke-D365LcsApiRefreshToken -ClientId \u003cString\u003e [-InputObject \u003cPSObject\u003e] [-EnableException] [\u003cCommonParameters\u003e]\nInvoke-D365LcsApiRefreshToken -ClientId \u003cString\u003e -RefreshToken \u003cString\u003e [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365LcsDatabaseExport",
        "Description": "Start a database export from an environment from a LCS project",
        "Tags": [
                     "Environment",
                     "Config",
                     "Configuration",
                     "LCS",
                     "Database backup",
                     "Api",
                     "Backup",
                     "Bacpac"
                 ],
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "SourceEnvironmentId",
                           "The unique id of the environment that you want to use as the source for the database export\nThe Id can be located inside the LCS portal",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "BackupName",
                           "Name of the backup file when it is being exported from the environment\nThe file shouldn\u0027t contain any extension at all, just the desired file name",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "SkipInitialStatusFetch",
                           "Instruct the cmdlet to skip the first fetch of the database refresh status\nUseful when you have a large script that handles this status validation and you don\u0027t want to spend time with this cmdlet\nDefault output from this cmdlet is 2 (two) different objects. The first object is the response object for starting the export operation. The second object is the response object from fetching the \r\nstatus of the export operation.\nSetting this parameter (activate it), will affect the number of output objects. If you skip, only the first response object outputted.",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "FailOnErrorMessage",
                           "Instruct the cmdlet to write logging information to the console, if there is an error message in the response from the LCS endpoint\nUsed in combination with either Enable-D365Exception cmdlet, or the -EnableException directly on this cmdlet, it will throw an exception and break/stop execution of the script\r\nThis allows you to implement custom retry / error handling logic",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Start a database export from an environment",
        "Name": "Invoke-D365LcsDatabaseExport",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365LcsDatabaseExport -ProjectId 123456789 -SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\" -BackupName \"BackupViaApi\" -BearerToken \"JldjfafLJdfjlfsalfd...\" -LcsApiUri \r\n\"https://lcsapi.lcs.dynamics.com\"\nThis will start the database export from the Source environment.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe source environment is identified by the SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\", which can be obtained in the LCS portal.\r\nThe backup name is identified by the BackupName \"BackupViaApi\", which instructs the API to save the backup with that filename.\r\nThe request will authenticate with the BearerToken \"JldjfafLJdfjlfsalfd...\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\" (NON-EUROPE).\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365LcsDatabaseExport -SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\" -BackupName \"BackupViaApi\"\nThis will start the database export from the Source environment.\r\nThe source environment is identified by the SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\", which can be obtained in the LCS portal.\r\nThe backup name is identified by the BackupName \"BackupViaApi\", which instructs the API to save the backup with that filename.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003e$databaseExport = Invoke-D365LcsDatabaseExport -SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\" -BackupName \"BackupViaApi\" -SkipInitialStatusFetch\nPS C:\\\u003e $databaseExport | Get-D365LcsDatabaseOperationStatus -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e9\" -SleepInSeconds 60\nThis will start the database export from the Source environment.\r\nThe source environment is identified by the SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\", which can be obtained in the LCS portal.\r\nThe backup name is identified by the BackupName \"BackupViaApi\", which instructs the API to save the backup with that filename.\r\nIt will skip the first database operation status fetch and only output the details from starting the export.\nThe output from Invoke-D365LcsDatabaseExport is stored in the $databaseExport. This will enable you to pass the $databaseExport variable to other cmdlets which should make things easier for you.\nWill pipe the $databaseExport variable to the Get-D365LcsDatabaseOperationStatus cmdlet and get the status from the database export job.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eInvoke-D365LcsDatabaseExport -SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\" -BackupName \"BackupViaApi\" -SkipInitialStatusFetch\nThis will start the database export from the Source environment.\r\nThe source environment is identified by the SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\", which can be obtained in the LCS portal.\r\nThe backup name is identified by the BackupName \"BackupViaApi\", which instructs the API to save the backup with that filename.\r\nIt will skip the first database operation status fetch and only output the details from starting the export.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eInvoke-D365LcsDatabaseExport -SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\" -BackupName \"BackupViaApi\" -RetryTimeout \"00:01:00\"\nThis will start the database export from the Source environment, and allow for the cmdlet to retry for no more than 1 minute.\r\nThe source environment is identified by the SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\", which can be obtained in the LCS portal.\r\nThe backup name is identified by the BackupName \"BackupViaApi\", which instructs the API to save the backup with that filename.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.",
        "Syntax": "Invoke-D365LcsDatabaseExport [[-ProjectId] \u003cInt32\u003e] [[-BearerToken] \u003cString\u003e] [-SourceEnvironmentId] \u003cString\u003e [-BackupName] \u003cString\u003e [[-LcsApiUri] \u003cString\u003e] [-SkipInitialStatusFetch] [-FailOnErrorMessage] [[-RetryTimeout] \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365LcsDatabaseRefresh",
        "Description": "Start a database refresh between 2 environments from a LCS project",
        "Tags": [
                     "Environment",
                     "Config",
                     "Configuration",
                     "LCS",
                     "Database backup",
                     "Api",
                     "Backup",
                     "Restore",
                     "Refresh"
                 ],
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "SourceEnvironmentId",
                           "The unique id of the environment that you want to use as the source for the database refresh\nThe Id can be located inside the LCS portal",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "TargetEnvironmentId",
                           "The unique id of the environment that you want to use as the target for the database refresh\nThe Id can be located inside the LCS portal",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "SkipInitialStatusFetch",
                           "Instruct the cmdlet to skip the first fetch of the database refresh status\nUseful when you have a large script that handles this status validation and you don\u0027t want to spend time with this cmdlet\nDefault output from this cmdlet is 2 (two) different objects. The first object is the response object for starting the refresh operation. The second object is the response object from fetching the \r\nstatus of the refresh operation.\nSetting this parameter (activate it), will affect the number of output objects. If you skip, only the first response object outputted.",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "FailOnErrorMessage",
                           "Instruct the cmdlet to write logging information to the console, if there is an error message in the response from the LCS endpoint\nUsed in combination with either Enable-D365Exception cmdlet, or the -EnableException directly on this cmdlet, it will throw an exception and break/stop execution of the script\r\nThis allows you to implement custom retry / error handling logic",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Start a database refresh between 2 environments",
        "Name": "Invoke-D365LcsDatabaseRefresh",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365LcsDatabaseRefresh -ProjectId 123456789 -SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\" -TargetEnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -BearerToken \r\n\"JldjfafLJdfjlfsalfd...\" -LcsApiUri \"https://lcsapi.lcs.dynamics.com\"\nThis will start the database refresh between the Source and Target environments.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe source environment is identified by the SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\", which can be obtained in the LCS portal.\r\nThe target environment is identified by the TargetEnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\r\nThe request will authenticate with the BearerToken \"JldjfafLJdfjlfsalfd...\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\" (NON-EUROPE).\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365LcsDatabaseRefresh -SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\" -TargetEnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\"\nThis will start the database refresh between the Source and Target environments.\r\nThe source environment is identified by the SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\", which can be obtained in the LCS portal.\r\nThe target environment is identified by the TargetEnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003e$databaseRefresh = Invoke-D365LcsDatabaseRefresh -SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\" -TargetEnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -SkipInitialStatusFetch\nPS C:\\\u003e $databaseRefresh | Get-D365LcsDatabaseOperationStatus -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e9\" -SleepInSeconds 60\nThis will start the database refresh between the Source and Target environments.\r\nThe source environment is identified by the SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\", which can be obtained in the LCS portal.\r\nThe target environment is identified by the TargetEnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\r\nIt will skip the first database refesh status fetch and only output the details from starting the refresh.\nThe output from Invoke-D365LcsDatabaseRefresh is stored in the $databaseRefresh. This will enable you to pass the $databaseRefresh variable to other cmdlets which should make things easier for you.\nWill pipe the $databaseRefresh variable to the Get-D365LcsDatabaseOperationStatus cmdlet and get the status from the database refresh job.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eInvoke-D365LcsDatabaseRefresh -SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\" -TargetEnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -SkipInitialStatusFetch\nThis will start the database refresh between the Source and Target environments.\r\nThe source environment is identified by the SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\", which can be obtained in the LCS portal.\r\nThe target environment is identified by the TargetEnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\r\nIt will skip the first database refesh status fetch and only output the details from starting the refresh.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eInvoke-D365LcsDatabaseRefresh -SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\" -TargetEnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -RetryTimeout \"00:01:00\"\nThis will start the database refresh between the Source and Target environments, and allow for the cmdlet to retry for no more than 1 minute.\r\nThe source environment is identified by the SourceEnvironmentId \"958ae597-f089-4811-abbd-c1190917eaae\", which can be obtained in the LCS portal.\r\nThe target environment is identified by the TargetEnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.",
        "Syntax": "Invoke-D365LcsDatabaseRefresh [[-ProjectId] \u003cInt32\u003e] [[-BearerToken] \u003cString\u003e] [-SourceEnvironmentId] \u003cString\u003e [-TargetEnvironmentId] \u003cString\u003e [[-LcsApiUri] \u003cString\u003e] [-SkipInitialStatusFetch] [-FailOnErrorMessage] [[-RetryTimeout] \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365LcsDeployment",
        "Description": "Deploy a deployable package from the Asset Library from a LCS project using the API provided by Microsoft",
        "Tags": [
                     "Environment",
                     "Url",
                     "Config",
                     "Configuration",
                     "LCS",
                     "Upload",
                     "Api",
                     "AAD",
                     "Token",
                     "Deployment",
                     "Deploy"
                 ],
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "AssetId",
                           "The unique id of the asset / file that you are trying to deploy from LCS",
                           "",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "EnvironmentId",
                           "The unique id of the environment that you want to work against\nThe Id can be located inside the LCS portal\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "UpdateName",
                           "Name of the update when you are working against Self-Service environments",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "FailOnErrorMessage",
                           "Instruct the cmdlet to write logging information to the console, if there is an error message in the response from the LCS endpoint\nUsed in combination with either Enable-D365Exception cmdlet, or the -EnableException directly on this cmdlet, it will throw an exception and break/stop execution of the script\r\nThis allows you to implement custom retry / error handling logic",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Start the deployment of a deployable package",
        "Name": "Invoke-D365LcsDeployment",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365LcsDeployment -ProjectId 123456789 -AssetId \"958ae597-f089-4811-abbd-c1190917eaae\" -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -BearerToken \"Bearer JldjfafLJdfjlfsalfd...\" \r\n-LcsApiUri \"https://lcsapi.lcs.dynamics.com\"\nThis will start the deployment of the file located in the Asset Library.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe file is identified by the AssetId \"958ae597-f089-4811-abbd-c1190917eaae\", which is obtained either by earlier upload or simply looking in the LCS portal.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\r\nThe request will authenticate with the BearerToken \"Bearer JldjfafLJdfjlfsalfd...\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\" (NON-EUROPE).\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365LcsDeployment -AssetId \"958ae597-f089-4811-abbd-c1190917eaae\" -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\"\nThis will start the deployment of the file located in the Asset Library.\r\nThe file is identified by the AssetId \"958ae597-f089-4811-abbd-c1190917eaae\", which is obtained either by earlier upload or simply looking in the LCS portal.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365LcsDeployment -AssetId \"958ae597-f089-4811-abbd-c1190917eaae\" -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -UpdateName \"Release_XYZ\"\nThis will start the deployment of the file located in the Asset Library against a Self-Service environment.\r\nThe file is identified by the AssetId \"958ae597-f089-4811-abbd-c1190917eaae\", which is obtained either by earlier upload or simply looking in the LCS portal.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\r\nThe deployment is name \"Release_XYZ\" by setting the UpdateName parameter, which is mandatory when working against Self-Service environments.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eInvoke-D365LcsDeployment -AssetId \"958ae597-f089-4811-abbd-c1190917eaae\" -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -RetryTimeout \"00:01:00\"\nThis will start the deployment of the file located in the Asset Library, and allow for the cmdlet to retry for no more than 1 minute.\r\nThe file is identified by the AssetId \"958ae597-f089-4811-abbd-c1190917eaae\", which is obtained either by earlier upload or simply looking in the LCS portal.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.",
        "Syntax": "Invoke-D365LcsDeployment [-ProjectId \u003cInt32\u003e] -AssetId \u003cString\u003e -EnvironmentId \u003cString\u003e [-BearerToken \u003cString\u003e] [-LcsApiUri \u003cString\u003e] [-FailOnErrorMessage] [-RetryTimeout \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]\nInvoke-D365LcsDeployment [-ProjectId \u003cInt32\u003e] -AssetId \u003cString\u003e -EnvironmentId \u003cString\u003e -UpdateName \u003cString\u003e [-BearerToken \u003cString\u003e] [-LcsApiUri \u003cString\u003e] [-FailOnErrorMessage] [-RetryTimeout \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365LcsEnvironmentStart",
        "Description": "Start a specified IAAS environment that is Customer Managed through the LCS API.",
        "Tags": [
                     "Environment",
                     "Start",
                     "StartStop",
                     "Stop",
                     "LCS",
                     "Api"
                 ],
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "EnvironmentId",
                           "The unique id of the environment that you want to take action upon\nThe Id can be located inside the LCS portal",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending where your LCS project is located, there are several valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "FailOnErrorMessage",
                           "Instruct the cmdlet to write logging information to the console, if there is an error message in the response from the LCS endpoint\nUsed in combination with either Enable-D365Exception cmdlet, or the -EnableException directly on this cmdlet, it will throw an exception and break/stop execution of the script\r\nThis allows you to implement custom retry / error handling logic",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi), Billy Richardson (@richardsondev)",
        "Synopsis": "Start a specified environment through LCS.",
        "Name": "Invoke-D365LcsEnvironmentStart",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365LcsEnvironmentStart -ProjectId 123456789 -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -BearerToken \"JldjfafLJdfjlfsalfd...\" -LcsApiUri \"https://lcsapi.lcs.dynamics.com\"\nThis will trigger the environment start operation upon the given environment through the LCS API.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\r\nThe request will authenticate with the BearerToken \"JldjfafLJdfjlfsalfd...\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\"\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365LcsEnvironmentStart -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\"\nThis will trigger the environment start operation upon the given environment through the LCS API.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365LcsEnvironmentStart -ProjectId 123456789 -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -RetryTimeout \"00:01:00\"\nThis will trigger the environment start operation upon the given environment through the LCS API, and allow for the cmdlet to retry for no more than 1 minute.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.",
        "Syntax": "Invoke-D365LcsEnvironmentStart [[-ProjectId] \u003cInt32\u003e] [[-BearerToken] \u003cString\u003e] [-EnvironmentId] \u003cString\u003e [[-LcsApiUri] \u003cString\u003e] [-FailOnErrorMessage] [[-RetryTimeout] \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365LcsEnvironmentStop",
        "Description": "Stop a specified IAAS environment that is Customer Managed through the LCS API.",
        "Tags": [
                     "Environment",
                     "Stop",
                     "StartStop",
                     "Start",
                     "LCS",
                     "Api"
                 ],
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "EnvironmentId",
                           "The unique id of the environment that you want to take action upon\nThe Id can be located inside the LCS portal",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending where your LCS project is located, there are several valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "FailOnErrorMessage",
                           "Instruct the cmdlet to write logging information to the console, if there is an error message in the response from the LCS endpoint\nUsed in combination with either Enable-D365Exception cmdlet, or the -EnableException directly on this cmdlet, it will throw an exception and break/stop execution of the script\r\nThis allows you to implement custom retry / error handling logic",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi), Billy Richardson (@richardsondev)",
        "Synopsis": "Stop a specified environment through LCS.",
        "Name": "Invoke-D365LcsEnvironmentStop",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365LcsEnvironmentStop -ProjectId 123456789 -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -BearerToken \"JldjfafLJdfjlfsalfd...\" -LcsApiUri \"https://lcsapi.lcs.dynamics.com\"\nThis will trigger the environment stop operation upon the given environment through the LCS API.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\r\nThe request will authenticate with the BearerToken \"JldjfafLJdfjlfsalfd...\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\"\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365LcsEnvironmentStop -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\"\nThis will trigger the environment stop operation upon the given environment through the LCS API.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365LcsEnvironmentStop -ProjectId 123456789 -EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\" -RetryTimeout \"00:01:00\"\nThis will trigger the environment stop operation upon the given environment through the LCS API, and allow for the cmdlet to retry for no more than 1 minute.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe environment is identified by the EnvironmentId \"13cc7700-c13b-4ea3-81cd-2d26fa72ec5e\", which can be obtained in the LCS portal.\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.",
        "Syntax": "Invoke-D365LcsEnvironmentStop [[-ProjectId] \u003cInt32\u003e] [[-BearerToken] \u003cString\u003e] [-EnvironmentId] \u003cString\u003e [[-LcsApiUri] \u003cString\u003e] [-FailOnErrorMessage] [[-RetryTimeout] \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365LcsUpload",
        "Description": "Upload a file to a LCS project using the API provided by Microsoft",
        "Tags": [
                     "Environment",
                     "Url",
                     "Config",
                     "Configuration",
                     "LCS",
                     "Upload",
                     "Api",
                     "AAD",
                     "Token"
                 ],
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiProjectId"
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api\nDefault value can be configured using Set-D365LcsApiConfig",
                           "Token",
                           false,
                           "false",
                           "$Script:LcsApiBearerToken"
                       ],
                       [
                           "FilePath",
                           "Path to the file that you want to upload to the Asset Library on LCS",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "FileType",
                           "Type of file you want to upload\nValid options:\r\n\"Model\"\r\n\"Process Data Package\"\r\n\"Software Deployable Package\"\r\n\"GER Configuration\"\r\n\"Data Package\"\r\n\"PowerBI Report Model\"\r\n\"E-Commerce Package\"\r\n\"NuGet Package\"\r\n\"Retail Self-Service Package\"\r\n\"Commerce Cloud Scale Unit Extension\"\nDefault value is \"Software Deployable Package\"",
                           "",
                           false,
                           "false",
                           "SoftwareDeployablePackage"
                       ],
                       [
                           "Name",
                           "Name to be assigned / shown on LCS",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "Filename",
                           "Filename to be assigned / shown on LCS\nOften will it require an extension for it to be accepted",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "FileDescription",
                           "Description to be assigned / shown on LCS",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"\nDefault value can be configured using Set-D365LcsApiConfig",
                           "",
                           false,
                           "false",
                           "$Script:LcsApiLcsApiUri"
                       ],
                       [
                           "FailOnErrorMessage",
                           "Instruct the cmdlet to write logging information to the console, if there is an error message in the response from the LCS endpoint\nUsed in combination with either Enable-D365Exception cmdlet, or the -EnableException directly on this cmdlet, it will throw an exception and break/stop execution of the script\r\nThis allows you to implement custom retry / error handling logic",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "RetryTimeout",
                           "The retry timeout, before the cmdlet should quit retrying based on the 429 status code\nNeeds to be provided in the timspan notation:\r\n\"hh:mm:ss\"\nhh is the number of hours, numerical notation only\r\nmm is the number of minutes\r\nss is the numbers of seconds\nEach section of the timeout has to valid, e.g.\r\nhh can maximum be 23\r\nmm can maximum be 59\r\nss can maximum be 59\nNot setting this parameter will result in the cmdlet to try for ever to handle the 429 push back from the endpoint",
                           "",
                           false,
                           "false",
                           "00:00:00"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Upload a file to a LCS project",
        "Name": "Invoke-D365LcsUpload",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365LcsUpload -ProjectId 123456789 -BearerToken \"Bearer JldjfafLJdfjlfsalfd...\" -FilePath \"C:\\temp\\d365fo.tools\\Release-2019-05-05.zip\" -FileType \"SoftwareDeployablePackage\" -Name \r\n\"Release-2019-05-05\" -Filename \"Release-2019-05-05.zip\" -FileDescription \"Build based on sprint: SuperSprint-1\" -LcsApiUri \"https://lcsapi.lcs.dynamics.com\"\nThis will start the upload of a file to the Asset Library.\r\nThe LCS project is identified by the ProjectId 123456789, which can be obtained in the LCS portal.\r\nThe file that will be uploaded is based on the FilePath \"C:\\temp\\d365fo.tools\\Release-2019-05-05.zip\".\r\nThe file type \"Software Deployable Package\" determines where inside the Asset Library the file will end up.\r\nThe name inside the Asset Library is based on the Name \"Release-2019-05-05\".\r\nThe file name inside the Asset Library is based on the FileName \"Release-2019-05-05.zip\".\r\nThe description inside the Asset Library is based on the FileDescription \"Build based on sprint: SuperSprint-1\".\r\nThe request will authenticate with the BearerToken \"Bearer JldjfafLJdfjlfsalfd...\".\r\nThe http request will be going to the LcsApiUri \"https://lcsapi.lcs.dynamics.com\" (NON-EUROPE).\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365LcsUpload -FilePath \"C:\\temp\\d365fo.tools\\Release-2019-05-05.zip\" -FileType \"SoftwareDeployablePackage\" -FileName \"Release-2019-05-05.zip\"\nThis will start the upload of a file to the Asset Library.\r\nThe file that will be uploaded is based on the FilePath \"C:\\temp\\d365fo.tools\\Release-2019-05-05.zip\".\r\nThe file type \"Software Deployable Package\" determines where inside the Asset Library the file will end up.\r\nThe file name inside the Asset Library is based on the FileName \"Release-2019-05-05.zip\".\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365LcsUpload -FilePath \"C:\\temp\\d365fo.tools\\Release-2019-05-05.zip\"\nThis will start the upload of a file to the Asset Library.\r\nThe file that will be uploaded is based on the FilePath \"C:\\temp\\d365fo.tools\\Release-2019-05-05.zip\".\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eInvoke-D365LcsUpload -FilePath \"C:\\temp\\d365fo.tools\\Release-2019-05-05.zip\" -RetryTimeout \"00:01:00\"\nThis will start the upload of a file to the Asset Library through the LCS API, and allow for the cmdlet to retry for no more than 1 minute.\r\nThe file that will be uploaded is based on the FilePath \"C:\\temp\\d365fo.tools\\Release-2019-05-05.zip\".\nAll default values will come from the configuration available from Get-D365LcsApiConfig.\nThe default values can be configured using Set-D365LcsApiConfig.",
        "Syntax": "Invoke-D365LcsUpload [[-ProjectId] \u003cInt32\u003e] [[-BearerToken] \u003cString\u003e] [-FilePath] \u003cString\u003e [[-FileType] {Model | ProcessDataPackage | SoftwareDeployablePackage | GERConfiguration | DataPackage | PowerBIReportModel | ECommercePackage | NuGetPackage | RetailSelfServicePackage | CommerceCloudScaleUnitExtension}] [[-Name] \u003cString\u003e] [[-Filename] \u003cString\u003e] [[-FileDescription] \u003cString\u003e] [[-LcsApiUri] \u003cString\u003e] [-FailOnErrorMessage] [[-RetryTimeout] \u003cTimeSpan\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365LogicApp",
        "Description": "Invoke a Logic App using a http request and pass a json object with details about the calling function",
        "Tags": [
                     "LogicApp",
                     "Logic App",
                     "Configuration",
                     "Url",
                     "Notification"
                 ],
        "Params": [
                       [
                           "Url",
                           "The URL for the http endpoint that you want to invoke",
                           "",
                           false,
                           "false",
                           "(Get-D365LogicAppConfig).Url"
                       ],
                       [
                           "Payload",
                           "The data content you want to send to the LogicApp",
                           "",
                           false,
                           "false",
                           "{}"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Invoke a http request for a Logic App",
        "Name": "Invoke-D365LogicApp",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365SyncDB | Invoke-D365LogicApp\nThis will execute the sync process and when it is done it will invoke a Azure Logic App with the default parameters that have been configured for the system.",
        "Syntax": "Invoke-D365LogicApp [[-Url] \u003cString\u003e] [[-Payload] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365LogicAppMessage",
        "Description": "Invoke a Logic App using a http request and pass a json object with details about the calling function",
        "Tags": [
                     "LogicApp",
                     "Logic App",
                     "Configuration",
                     "Url",
                     "Email",
                     "Notification",
                     "Message",
                     "Email"
                 ],
        "Params": [
                       [
                           "Url",
                           "The URL for the http endpoint that you want to invoke",
                           "",
                           false,
                           "false",
                           "(Get-D365LogicAppConfig).Url"
                       ],
                       [
                           "Email",
                           "The email address of the receiver of the message that the cmdlet will send",
                           "",
                           false,
                           "false",
                           "(Get-D365LogicAppConfig).Email"
                       ],
                       [
                           "Subject",
                           "Subject string to apply to the email and to the IM message",
                           "",
                           false,
                           "false",
                           "(Get-D365LogicAppConfig).Subject"
                       ],
                       [
                           "Message",
                           "The message you want to pass onto the Logic App",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "IncludeAll",
                           "Switch to instruct the cmdlet to include all cmdlets (names only) from the pipeline",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "AsJob",
                           "Switch to instruct the cmdlet to run the invocation as a job (async)",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Invoke a http request for a Logic App",
        "Name": "Invoke-D365LogicAppMessage",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365SyncDB | Invoke-D365LogicAppMessage\nThis will execute the sync process and when it is done it will invoke a Azure Logic App with the default parameters that have been configured for the system.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365SyncDB | Invoke-D365LogicAppMessage -Email administrator@contoso.com -Subject \"Work is done\" -Url https://prod-35.westeurope.logic.azure.com:443/\nThis will execute the sync process and when it is done it will invoke a Azure Logic App with the email, subject and URL parameters that are needed to invoke an Azure Logic App.",
        "Syntax": "Invoke-D365LogicAppMessage [[-Url] \u003cString\u003e] [[-Email] \u003cString\u003e] [[-Subject] \u003cString\u003e] [[-Message] \u003cString\u003e] [-IncludeAll] [-AsJob] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365ModuleCompile",
        "Description": "Compile a package / module / model using the builtin \"xppc.exe\" executable to compile source code",
        "Tags": [
                     "Compile",
                     "Model",
                     "Servicing",
                     "X++"
                 ],
        "Params": [
                       [
                           "Module",
                           "The package to compile",
                           "ModuleName",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "OutputDir",
                           "The path to the folder to save generated artifacts",
                           "Output",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "LogPath",
                           "Path where you want to store the log outputs generated from the compiler\nAlso used as the path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\ModuleCompile\")"
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "ReferenceDir",
                           "The full path of a folder containing all assemblies referenced from X++ code\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "$Script:BinDirTools"
                       ],
                       [
                           "XRefGeneration",
                           "Instruct the cmdlet to enable the generation of XRef metadata while running the compile",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Ievgen Miroshnikov (@IevgenMir)",
        "Synopsis": "Compile a package / module / model",
        "Name": "Invoke-D365ModuleCompile",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365ModuleCompile -Module MyModel\nThis will use the default paths and start the xppc.exe with the needed parameters to compile MyModel package.\r\nThe default output from the compile will be silenced.\nIf an error should occur, both the standard output and error output will be written to the console / host.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365ModuleCompile -Module MyModel -ShowOriginalProgress\nThis will use the default paths and start the xppc.exe with the needed parameters to compile MyModel package.\r\nThe output from the compile will be written to the console / host.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365ModuleCompile -Module MyModel -XRefGeneration\nThis will use the default paths and start the xppc.exe with the needed parameters to compile MyModel package.\r\nThe default output from the compile will be silenced.\r\nThe compiler will generate XRef metadata while compiling.\nIf an error should occur, both the standard output and error output will be written to the console / host.",
        "Syntax": "Invoke-D365ModuleCompile [-Module] \u003cString\u003e [[-OutputDir] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [[-MetaDataDir] \u003cString\u003e] [[-ReferenceDir] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [-XRefGeneration] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365ModuleFullCompile",
        "Description": "Compile a package using the builtin \"xppc.exe\" executable to compile source code, \"labelc.exe\" to compile label files and \"reportsc.exe\" to compile reports",
        "Tags": [
                     "Compile",
                     "Model",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "Module",
                           "The package to compile",
                           "ModuleName",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "OutputDir",
                           "The path to the folder to save assemblies",
                           "Output",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "LogPath",
                           "Path where you want to store the log outputs generated from the compiler\nAlso used as the path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\ModuleCompile\")"
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "ReferenceDir",
                           "The full path of a folder containing all assemblies referenced from X++ code",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "$Script:BinDirTools"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Ievgen Miroshnikov (@IevgenMir)",
        "Synopsis": "Compile a package",
        "Name": "Invoke-D365ModuleFullCompile",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365ModuleFullCompile -Module MyModel\nThis will use the default paths and start the xppc.exe with the needed parameters to compile MyModel package.\r\nThe default output from all the different steps will be silenced.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365ModuleFullCompile -Module MyModel -ShowOriginalProgress\nThis will use the default paths and start the xppc.exe with the needed parameters to copmile MyModel package.\r\nThe default output from the different steps will be written to the console / host.",
        "Syntax": "Invoke-D365ModuleFullCompile [-Module] \u003cString\u003e [[-OutputDir] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [[-MetaDataDir] \u003cString\u003e] [[-ReferenceDir] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365ModuleLabelGeneration",
        "Description": "Generate labels for a package / module / model using the builtin \"labelc.exe\"",
        "Tags": [
                     "Compile",
                     "Model",
                     "Servicing",
                     "Label",
                     "Labels"
                 ],
        "Params": [
                       [
                           "Module",
                           "Name of the package that you want to work against",
                           "ModuleName",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "OutputDir",
                           "The path to the folder to save generated artifacts",
                           "Output",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "LogPath",
                           "Path where you want to store the log outputs generated from the compiler\nAlso used as the path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\ModuleCompile\")"
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "ReferenceDir",
                           "The full path of a folder containing all assemblies referenced from X++ code\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "$Script:BinDirTools"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Ievgen Miroshnikov (@IevgenMir)",
        "Synopsis": "Generate labels for a package / module / model",
        "Name": "Invoke-D365ModuleLabelGeneration",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365ModuleLabelGeneration -Module MyModel\nThis will use the default paths and start the labelc.exe with the needed parameters to labels from the MyModel package.\r\nThe default output from the generation process will be silenced.\nIf an error should occur, both the standard output and error output will be written to the console / host.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365ModuleLabelGeneration -Module MyModel -ShowOriginalProgress\nThis will use the default paths and start the labelc.exe with the needed parameters to labels from the MyModel package.\r\nThe output from the compile will be written to the console / host.",
        "Syntax": "Invoke-D365ModuleLabelGeneration [-Module] \u003cString\u003e [[-OutputDir] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [[-MetaDataDir] \u003cString\u003e] [[-ReferenceDir] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365ModuleReportsCompile",
        "Description": "Generate reports for a package / module / model using the builtin \"ReportsC.exe\"",
        "Tags": [
                     "Compile",
                     "Model",
                     "Servicing",
                     "Report",
                     "Reports"
                 ],
        "Params": [
                       [
                           "Module",
                           "Name of the package that you want to work against",
                           "ModuleName",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "OutputDir",
                           "The path to the folder to save generated artifacts",
                           "Output",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "LogPath",
                           "Path where you want to store the log outputs generated from the compiler\nAlso used as the path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\ModuleCompile\")"
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "ReferenceDir",
                           "The full path of a folder containing all assemblies referenced from X++ code\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "$Script:BinDirTools"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Ievgen Miroshnikov (@IevgenMir)",
        "Synopsis": "Generate reports for a package / module / model",
        "Name": "Invoke-D365ModuleReportsCompile",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365ModuleReportsCompile -Module MyModel\nThis will use the default paths and start the ReportsC.exe with the needed parameters to compile the reports from the MyModel package.\r\nThe default output from the reports compile will be silenced.\nIf an error should occur, both the standard output and error output will be written to the console / host.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365ModuleReportsCompile -Module MyModel -ShowOriginalProgress\nThis will use the default paths and start the ReportsC.exe with the needed parameters to compile the reports from the MyModel package.\r\nThe output from the compile will be written to the console / host.",
        "Syntax": "Invoke-D365ModuleReportsCompile [-Module] \u003cString\u003e [[-OutputDir] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [[-MetaDataDir] \u003cString\u003e] [[-ReferenceDir] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365ProcessModule",
        "Description": "Process a specific or multiple modules by invoking the following functions (based on flags)\n- Invoke-D365ModuleFullCompile function\n- Publish-D365SsrsReport to deploy the reports of a module\n- Invoke-D365DBSyncPartial to sync the table and extension elements for module",
        "Tags": [
                     "Compile",
                     "Model",
                     "Servicing",
                     "Database",
                     "Synchronization"
                 ],
        "Params": [
                       [
                           "Module",
                           "Name of the module that you want to process\nAccepts wildcards for searching. E.g. -Module \"Application*Adaptor\"\nDefault value is \"*\" which will search for all modules",
                           "ModuleName",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "ExecuteCompile",
                           "Switch/flag to determine if the compile function should be executed for requested modules",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "ExecuteSync",
                           "Switch/flag to determine if the databasesync function should be executed for requested modules",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "ExecuteDeployReports",
                           "Switch/flag to determine if the deploy reports function should be executed for requested modules",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputDir",
                           "The path to the folder to save assemblies",
                           "Output",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "LogPath",
                           "Path where you want to store the log outputs generated from the compiler\nAlso used as the path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\ModuleCompile\")"
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "ReferenceDir",
                           "The full path of a folder containing all assemblies referenced from X++ code",
                           "",
                           false,
                           "false",
                           "$Script:MetaDataDir"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "$Script:BinDirTools"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Jasper Callens - Cegeka",
        "Synopsis": "Process a specific or multiple modules (compile, deploy reports and sync)",
        "Name": "Invoke-D365ProcessModule",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365ProcessModule -Module \"Application*Adaptor\" -ExecuteCompile\nRetrieve the list of installed packages / modules where the name fits the search \"Application*Adaptor\".\nFor every value of the list perform the following:\r\n* Invoke-D365ModuleFullCompile with the needed parameters to compile current module value package.\nThe default output from all the different steps will be silenced.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365ProcessModule -Module \"Application*Adaptor\" -ExecuteSync\nRetrieve the list of installed packages / modules where the name fits the search \"Application*Adaptor\".\nFor every value of the list perform the following:\r\n* Invoke-D365DBSyncPartial with the needed parameters to sync current module value table and extension elements.\nThe default output from all the different steps will be silenced.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365ProcessModule -Module \"Application*Adaptor\" -ExecuteDeployReports\nRetrieve the list of installed packages / modules where the name fits the search \"Application*Adaptor\".\nFor every value of the list perform the following:\r\n* Publish-D365SsrsReport with the required parameters to deploy all reports of current module\nThe default output from all the different steps will be silenced.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eInvoke-D365ProcessModule -Module \"Application*Adaptor\" -ExecuteCompile -ExecuteSync -ExecuteDeployReports\nRetrieve the list of installed packages / modules where the name fits the search \"Application*Adaptor\".\nFor every value of the list perform the following:\r\n* Invoke-D365ModuleFullCompile with the needed parameters to compile current module package.\r\n* Invoke-D365DBSyncPartial with the needed parameters to sync current module table and extension elements.\r\n* Publish-D365SsrsReport with the required parameters to deploy all reports of current module\nThe default output from all the different steps will be silenced.",
        "Syntax": "Invoke-D365ProcessModule [-Module] \u003cString\u003e [-ExecuteCompile] [-ExecuteSync] [-ExecuteDeployReports] [[-OutputDir] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [[-MetaDataDir] \u003cString\u003e] [[-ReferenceDir] \u003cString\u003e] [[-BinDir] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365ReArmWindows",
        "Description": "Function used for invoking the rearm functionality inside Windows",
        "Params": [
                       [
                           "Restart",
                           "Instruct the cmdlet to restart the machine",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Invokes the Rearm of Windows license",
        "Name": "Invoke-D365ReArmWindows",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365ReArmWindows\nThis will re arm the Windows installation if there is any activation retries left\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365ReArmWindows -Restart\nThis will re arm the Windows installation if there is any activation retries left and restart the computer.",
        "Syntax": "Invoke-D365ReArmWindows [[-Restart]] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365RunbookAnalyzer",
        "Description": "Get all the important details from a failed runbook",
        "Tags": [
                     "Runbook",
                     "Servicing",
                     "Hotfix",
                     "DeployablePackage",
                     "Deployable Package",
                     "InstallationRecordsDirectory",
                     "Installation Records Directory"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the runbook file that you work against",
                           "File",
                           true,
                           "true (ByValue, ByPropertyName)",
                           ""
                       ],
                       [
                           "FailedOnly",
                           "Instruct the cmdlet to only output failed steps",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "FailedOnlyAsObjects",
                           "Instruct the cmdlet to only output failed steps as objects",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Analyze the runbook",
        "Name": "Invoke-D365RunbookAnalyzer",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365RunbookAnalyzer -Path \"C:\\DynamicsAX\\InstallationRecords\\Runbooks\\Runbook.xml\"\nThis will analyze the Runbook.xml and output all the details about failed steps, the connected error logs and all the unprocessed steps.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365Runbook -Latest | Invoke-D365RunbookAnalyzer\nThis will find the latest runbook file and have it analyzed by the Invoke-D365RunbookAnalyzer cmdlet to output any error details.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eGet-D365Runbook -Latest | Invoke-D365RunbookAnalyzer -FailedOnly\nThis will find the latest runbook file and have it analyzed by the Invoke-D365RunbookAnalyzer cmdlet to output any error details.\r\nThe output from Invoke-D365RunbookAnalyzer will only contain failed steps.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365Runbook -Latest | Invoke-D365RunbookAnalyzer -FailedOnlyAsObjects\nThis will find the latest runbook file and have it analyzed by the Invoke-D365RunbookAnalyzer cmdlet to output any error details.\r\nThe output from Invoke-D365RunbookAnalyzer will only contain failed steps.\r\nThe output will be formatted as PSCustomObjects, to be used as variables or piping.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eGet-D365Runbook -Latest | Invoke-D365RunbookAnalyzer -FailedOnlyAsObjects | Get-D365RunbookLogFile -Path \"C:\\Temp\\PU35\" -OpenInEditor\nThis will find the latest runbook file and have it analyzed by the Invoke-D365RunbookAnalyzer cmdlet to output any error details.\r\nThe output from Invoke-D365RunbookAnalyzer will only contain failed steps.\r\nThe Get-D365RunbookLogFile will open all log files for the failed step.\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eGet-D365Runbook -Latest | Invoke-D365RunbookAnalyzer | Out-File \"C:\\Temp\\d365fo.tools\\runbook-analyze-results.xml\"\nThis will find the latest runbook file and have it analyzed by the Invoke-D365RunbookAnalyzer cmdlet to output any error details.\r\nThe output will be saved into the \"C:\\Temp\\d365fo.tools\\runbook-analyze-results.xml\" file.\n-------------------------- EXAMPLE 7 --------------------------\nPS C:\\\u003eGet-D365Runbook -Latest | Backup-D365Runbook -Force | Invoke-D365RunbookAnalyzer\nThis will get the latest runbook from the default location.\r\nThis will backup the file onto the default \"c:\\temp\\d365fo.tools\\runbookbackups\\\".\r\nThis will start the Runbook Analyzer on the backup file.",
        "Syntax": "Invoke-D365RunbookAnalyzer -Path \u003cString\u003e [\u003cCommonParameters\u003e]\nInvoke-D365RunbookAnalyzer -Path \u003cString\u003e [-FailedOnlyAsObjects] [\u003cCommonParameters\u003e]\nInvoke-D365RunbookAnalyzer -Path \u003cString\u003e [-FailedOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365SCDPBundleInstall",
        "Description": "A cmdlet that wraps some of the cumbersome work of installing updates / hotfixes into a streamlined process",
        "Tags": [
                     "Hotfix",
                     "Hotfixes",
                     "Updates",
                     "Prepare",
                     "VSTS",
                     "axscdppkg"
                 ],
        "Params": [
                       [
                           "InstallOnly",
                           "Instructs the cmdlet to only run the Install option and ignore any TFS / VSTS folders and source control in general\nUse it when testing an update on a local development machine (VM) / onebox",
                           "",
                           true,
                           "false",
                           "False"
                       ],
                       [
                           "Command",
                           "The command / job you want the cmdlet to execute\nValid options are:\r\nPrepare\r\nInstall\nDefault value is \"Prepare\"",
                           "",
                           false,
                           "false",
                           "Prepare"
                       ],
                       [
                           "Path",
                           "Path to the update package that you want to install into the environment\nThe cmdlet only supports an already extracted \".axscdppkg\" file",
                           "File,Hotfix",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "\"$Script:MetaDataDir\""
                       ],
                       [
                           "TfsWorkspaceDir",
                           "The path to the TFS Workspace directory that you want to work against\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "\"$Script:MetaDataDir\""
                       ],
                       [
                           "TfsUri",
                           "The URI for the TFS Team Site / VSTS Portal that you want to work against\nDefault URI is the one that is configured from inside Visual Studio",
                           "",
                           false,
                           "false",
                           "\"$Script:TfsUri\""
                       ],
                       [
                           "ShowModifiedFiles",
                           "Switch to instruct the cmdlet to show all the modified files afterwards",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "ShowProgress",
                           "Switch to instruct the cmdlet to output progress details while servicing the installation",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Invoke the SCDPBundleInstall.exe file",
        "Name": "Invoke-D365SCDPBundleInstall",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365SCDPBundleInstall -Path \"c:\\temp\\HotfixPackageBundle.axscdppkg\" -InstallOnly\nThis will install the \"HotfixPackageBundle.axscdppkg\" into the default PackagesLocalDirectory location on the machine.",
        "Syntax": "Invoke-D365SCDPBundleInstall [-InstallOnly] [-Path] \u003cString\u003e [[-MetaDataDir] \u003cString\u003e] [[-ShowModifiedFiles]] [[-ShowProgress]] [\u003cCommonParameters\u003e]\nInvoke-D365SCDPBundleInstall [[-Command] \u003cString\u003e] [-Path] \u003cString\u003e [[-MetaDataDir] \u003cString\u003e] [[-TfsWorkspaceDir] \u003cString\u003e] [[-TfsUri] \u003cString\u003e] [[-ShowModifiedFiles]] [[-ShowProgress]] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365SDPInstall",
        "Description": "A cmdlet that wraps some of the cumbersome work into a streamlined process.\nThe process are detailed in the Microsoft documentation here:\nhttps://docs.microsoft.com/en-us/dynamics365/unified-operations/dev-itpro/deployment/install-deployable-package",
        "Params": [
                       [
                           "Path",
                           "Path to the update package that you want to install into the environment\nThe cmdlet only supports a path to an unblocked zip-file",
                           "File,Hotfix",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "\"$Script:MetaDataDir\""
                       ],
                       [
                           "QuickInstallAll",
                           "Use this switch to let the runbook reside in memory. You will not get a runbook on disc which you can examine for steps",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "DevInstall",
                           "Use this when running on developer box without administrator privileges (Run As Administrator)",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "Command",
                           "The command you want the cmdlet to execute when it runs the AXUpdateInstaller.exe\nValid options are:\r\nSetTopology\r\nGenerate\r\nImport\r\nExecute\r\nRunAll\r\nReRunStep\r\nSetStepComplete\r\nExport\r\nVersionCheck\nThe default value is \"SetTopology\"",
                           "",
                           true,
                           "false",
                           "SetTopology"
                       ],
                       [
                           "Step",
                           "The step number that you want to work against",
                           "",
                           false,
                           "false",
                           "0"
                       ],
                       [
                           "RunbookId",
                           "The runbook id of the runbook that you want to work against\nDefault value is \"Runbook\"",
                           "",
                           false,
                           "false",
                           "Runbook"
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\SdpInstall\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Tommy Skaue (@skaue)",
        "Synopsis": "Invoke the AxUpdateInstaller.exe file from Software Deployable Package (SDP)",
        "Name": "Invoke-D365SDPInstall",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365SDPInstall -Path \"c:\\temp\\\" -QuickInstallAll\nThis will install the extracted package in c:\\temp\\ using a runbook in memory while executing.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365SDPInstall -Path \"c:\\temp\\\" -DevInstall\nThis will install the extracted package in c:\\temp\\ using a runbook in memory while executing.\nThis command is to be used on Microsoft Hosted Tier1 development environment, where you don\u0027t have access to the administrator user account on the vm.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365SDPInstall -Path \"c:\\temp\\\" -Command SetTopology\nPS C:\\\u003e Invoke-D365SDPInstall -Path \"c:\\temp\\\" -Command Generate -RunbookId \u0027MyRunbook\u0027\r\nPS C:\\\u003e Invoke-D365SDPInstall -Path \"c:\\temp\\\" -Command Import -RunbookId \u0027MyRunbook\u0027\r\nPS C:\\\u003e Invoke-D365SDPInstall -Path \"c:\\temp\\\" -Command Execute -RunbookId \u0027MyRunbook\u0027\nManual operations that first create Topology XML from current environment, then generate runbook with id \u0027MyRunbook\u0027, then import it and finally execute it.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eInvoke-D365SDPInstall -Path \"c:\\temp\\\" -Command RunAll\nCreate Topology XML from current environment. Using default runbook id \u0027Runbook\u0027 and run all the operations from generate, to import to execute.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eInvoke-D365SDPInstall -Path \"c:\\temp\\\" -Command RerunStep -Step 18 -RunbookId \u0027MyRunbook\u0027\nRerun runbook with id \u0027MyRunbook\u0027 from step 18.\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eInvoke-D365SDPInstall -Path \"c:\\temp\\\" -Command SetStepComplete -Step 24 -RunbookId \u0027MyRunbook\u0027\nMark step 24 complete in runbook with id \u0027MyRunbook\u0027 and continue the runbook from the next step.",
        "Syntax": "Invoke-D365SDPInstall [-Path] \u003cString\u003e [[-MetaDataDir] \u003cString\u003e] [[-QuickInstallAll]] [[-Step] \u003cInt32\u003e] [[-RunbookId] \u003cString\u003e] [-LogPath \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]\nInvoke-D365SDPInstall [-Path] \u003cString\u003e [[-MetaDataDir] \u003cString\u003e] [[-DevInstall]] [[-Step] \u003cInt32\u003e] [[-RunbookId] \u003cString\u003e] [-LogPath \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]\nInvoke-D365SDPInstall [-Path] \u003cString\u003e [[-MetaDataDir] \u003cString\u003e] [-Command] \u003cString\u003e [[-Step] \u003cInt32\u003e] [[-RunbookId] \u003cString\u003e] [-LogPath \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365SeleniumDownload",
        "Description": "Downloads the Selenium web driver files and deploys them to the specified destinations.",
        "Params": [
                       [
                           "RegressionSuiteAutomationTool",
                           "Switch to specify if the Selenium files need to be installed in the Regression Suite Automation Tool folder.",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "PerfSDK",
                           "Switch to specify if the Selenium files need to be installed in the PerfSDK folder.",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Kenny Saelen (@kennysaelen)",
        "Synopsis": "Downloads the Selenium web driver files and deploys them to the specified destinations.",
        "Name": "Invoke-D365SeleniumDownload",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365SeleniumDownload -RegressionSuiteAutomationTool -PerfSDK\nThis will download the Selenium zip archives and extract the files into both the Regression Suite Automation Tool folder and the PerfSDK folder.",
        "Syntax": "Invoke-D365SeleniumDownload [[-RegressionSuiteAutomationTool]] [[-PerfSDK]] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365SqlScript",
        "Description": "Execute a SQL Script or a SQL Command against the D365FO SQL Server database",
        "Params": [
                       [
                           "FilePath",
                           "Path to the file containing the SQL Script that you want executed",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Command",
                           "SQL command that you want executed",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "TrustedConnection",
                           "Switch to instruct the cmdlet whether the connection should be using Windows Authentication or not",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "Invoke-D365SqlCmd",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Execute a SQL Script or a SQL Command",
        "Name": "Invoke-D365SqlScript",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365SqlScript -FilePath \"C:\\temp\\d365fo.tools\\DeleteUser.sql\"\nThis will execute the \"C:\\temp\\d365fo.tools\\DeleteUser.sql\" against the registered SQL Server on the machine.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365SqlScript -Command \"DELETE FROM SALESTABLE WHERE RECID = 123456789\"\nThis will execute \"DELETE FROM SALESTABLE WHERE RECID = 123456789\" against the registered SQL Server on the machine.",
        "Syntax": "Invoke-D365SqlScript [-FilePath] \u003cString\u003e [-DatabaseServer \u003cString\u003e] [-DatabaseName \u003cString\u003e] [-SqlUser \u003cString\u003e] [-SqlPwd \u003cString\u003e] [-TrustedConnection \u003cBoolean\u003e] [-EnableException] [\u003cCommonParameters\u003e]\nInvoke-D365SqlScript [-Command] \u003cString\u003e [-DatabaseServer \u003cString\u003e] [-DatabaseName \u003cString\u003e] [-SqlUser \u003cString\u003e] [-SqlPwd \u003cString\u003e] [-TrustedConnection \u003cBoolean\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365SysFlushAodCache",
        "Description": "Invoke the runnable class SysFlushAos to clear the AOD cache",
        "Params": [
                       [
                           "Url",
                           "URL to the Dynamics 365 instance you want to clear the AOD cache on",
                           "",
                           false,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Invoke the SysFlushAos class",
        "Name": "Invoke-D365SysFlushAodCache",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365SysFlushAodCache\nThis will a call against the default URL for the machine and\r\nhave it execute the SysFlushAOD class",
        "Syntax": "Invoke-D365SysFlushAodCache [[-Url] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365SysRunnerClass",
        "Description": "Makes it possible to call any runnable class directly from the browser, without worrying about the details",
        "Params": [
                       [
                           "ClassName",
                           "The name of the class you want to execute",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Company",
                           "The company for which you want to execute the class against\nDefault value is: \"DAT\"",
                           "",
                           false,
                           "false",
                           "$Script:Company"
                       ],
                       [
                           "Url",
                           "The URL you want to execute against\nDefault value is the Fully Qualified Domain Name registered on the machine",
                           "",
                           false,
                           "false",
                           "$Script:Url"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Start a browser session that executes SysRunnerClass",
        "Name": "Invoke-D365SysRunnerClass",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365SysRunnerClass -ClassName SysFlushAOD\nWill execute the SysRunnerClass and have it execute the SysFlushAOD class and will run it against the \"DAT\" (default value) company\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365SysRunnerClass -ClassName SysFlushAOD -Company \"USMF\"\nWill execute the SysRunnerClass and have it execute the SysFlushAOD class and will run it against the \"USMF\" company\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365SysRunnerClass -ClassName SysFlushAOD -Url https://Test.cloud.onebox.dynamics.com\nWill execute the SysRunnerClass and have it execute the SysFlushAOD class and will run it against the \"DAT\" company, on the https://Test.cloud.onebox.dynamics.com URL",
        "Syntax": "Invoke-D365SysRunnerClass [-ClassName] \u003cString\u003e [[-Company] \u003cString\u003e] [[-Url] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365TableBrowser",
        "Description": "Makes it possible to call the table browser for a given table directly from the web browser, without worrying about the details",
        "Params": [
                       [
                           "TableName",
                           "The name of the table you want to see the rows for",
                           "",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "Company",
                           "The company for which you want to see the data from in the given table\nDefault value is: \"DAT\"",
                           "",
                           false,
                           "true (ByPropertyName)",
                           "$Script:Company"
                       ],
                       [
                           "Url",
                           "The URL you want to execute against\nDefault value is the Fully Qualified Domain Name registered on the machine",
                           "",
                           false,
                           "true (ByPropertyName)",
                           "$Script:Url"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Start a browser session that will show the table browser",
        "Name": "Invoke-D365TableBrowser",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365TableBrowser -TableName SalesTable\nWill open the table browser and show all the records in Sales Table from the \"DAT\" company (default value).\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365TableBrowser -TableName SalesTable -Company \"USMF\"\nWill open the table browser and show all the records in Sales Table from the \"USMF\" company.",
        "Syntax": "Invoke-D365TableBrowser [-TableName] \u003cString\u003e [[-Company] \u003cString\u003e] [[-Url] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365VisualStudioCompilerResultAnalyzer",
        "Description": "Analyze the Visual Studio compiler output log and generate an excel file contain worksheets per type: Errors, Warnings, Tasks",
        "Tags": [
                     "Compiler",
                     "Build",
                     "Errors",
                     "Warnings",
                     "Tasks"
                 ],
        "Params": [
                       [
                           "Module",
                           "Name of the module that you want to work against\nDefault value is \"*\" which will search for all modules",
                           "ModuleName",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "OutputPath",
                           "Path where you want the excel file (xlsx-file) saved to\nDefault value is: \"c:\\temp\\d365fo.tools\\\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "SkipWarnings",
                           "Instructs the cmdlet to skip warnings while analyzing the compiler output log file",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "SkipTasks",
                           "Instructs the cmdlet to skip tasks while analyzing the compiler output log file",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "PackageDirectory",
                           "Path to the directory containing the installed package / module\nDefault path is the same as the AOS service \"PackagesLocalDirectory\" directory\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Analyze the Visual Studio compiler output log",
        "Name": "Invoke-D365VisualStudioCompilerResultAnalyzer",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365VisualStudioCompilerResultAnalyzer\nThis will analyse all compiler output log files generated from Visual Studio.\nA result set example:\nFile Filename\r\n---- --------\r\nc:\\temp\\d365fo.tools\\ApplicationCommon-CompilerResults.xlsx ApplicationCommon-CompilerResults.xlsx\r\nc:\\temp\\d365fo.tools\\ApplicationFoundation-CompilerResults.xlsx ApplicationFoundation-CompilerResults.xlsx\r\nc:\\temp\\d365fo.tools\\ApplicationPlatform-CompilerResults.xlsx ApplicationPlatform-CompilerResults.xlsx\r\nc:\\temp\\d365fo.tools\\ApplicationSuite-CompilerResults.xlsx ApplicationSuite-CompilerResults.xlsx\r\nc:\\temp\\d365fo.tools\\ApplicationWorkspaces-CompilerResults.xlsx ApplicationWorkspaces-CompilerResults.xlsx\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eInvoke-D365VisualStudioCompilerResultAnalyzer -SkipWarnings\nThis will analyse all compiler output log files generated from Visual Studio.\r\nIt will exclude all warnings from the output.\nA result set example:\nFile Filename\r\n---- --------\r\nc:\\temp\\d365fo.tools\\ApplicationCommon-CompilerResults.xlsx ApplicationCommon-CompilerResults.xlsx\r\nc:\\temp\\d365fo.tools\\ApplicationFoundation-CompilerResults.xlsx ApplicationFoundation-CompilerResults.xlsx\r\nc:\\temp\\d365fo.tools\\ApplicationPlatform-CompilerResults.xlsx ApplicationPlatform-CompilerResults.xlsx\r\nc:\\temp\\d365fo.tools\\ApplicationSuite-CompilerResults.xlsx ApplicationSuite-CompilerResults.xlsx\r\nc:\\temp\\d365fo.tools\\ApplicationWorkspaces-CompilerResults.xlsx ApplicationWorkspaces-CompilerResults.xlsx\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eInvoke-D365VisualStudioCompilerResultAnalyzer -SkipTasks\nThis will analyse all compiler output log files generated from Visual Studio.\r\nIt will exclude all tasks from the output.\nA result set example:\nFile Filename\r\n---- --------\r\nc:\\temp\\d365fo.tools\\ApplicationCommon-CompilerResults.xlsx ApplicationCommon-CompilerResults.xlsx\r\nc:\\temp\\d365fo.tools\\ApplicationFoundation-CompilerResults.xlsx ApplicationFoundation-CompilerResults.xlsx\r\nc:\\temp\\d365fo.tools\\ApplicationPlatform-CompilerResults.xlsx ApplicationPlatform-CompilerResults.xlsx\r\nc:\\temp\\d365fo.tools\\ApplicationSuite-CompilerResults.xlsx ApplicationSuite-CompilerResults.xlsx\r\nc:\\temp\\d365fo.tools\\ApplicationWorkspaces-CompilerResults.xlsx ApplicationWorkspaces-CompilerResults.xlsx",
        "Syntax": "Invoke-D365VisualStudioCompilerResultAnalyzer [[-Module] \u003cString\u003e] [[-OutputPath] \u003cString\u003e] [-SkipWarnings] [-SkipTasks] [[-PackageDirectory] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Invoke-D365WinRmCertificateRotation",
        "Description": "There is a scenario where you might need to update the certificate that is being used for WinRM on your Tier1 environment\n\n1 year after you deploy your Tier1 environment, the original WinRM certificate expires and then LCS will be unable to communicate with your Tier1 environment",
        "Params": [
                       [
                           "MachineName",
                           "The DNS / Netbios name of the machine\nThe default value is: \"$env:COMPUTERNAME\" which translates into the current name of the machine",
                           "",
                           false,
                           "false",
                           "$env:COMPUTERNAME"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Rotate the certificate used for WinRM",
        "Name": "Invoke-D365WinRmCertificateRotation",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365WinRmCertificateRotation\nThis will update the certificate that is being used by WinRM.\r\nA new certificate is created with the current computer name.\r\nThe new certificate and its thumbprint will be configured for WinRM to use that going forward.",
        "Syntax": "Invoke-D365WinRmCertificateRotation [[-MachineName] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "New-D365Bacpac",
        "Description": "Takes care of all the details and steps that is needed to create a valid bacpac file to move between Tier 1 (onebox or Azure hosted) and Tier 2 (MS hosted), or vice versa\n\nSupports to create a raw bacpac file without prepping. Can be used to automate backup from Tier 2 (MS hosted) environment",
        "Params": [
                       [
                           "ExportModeTier1",
                           "Switch to instruct the cmdlet that the export will be done against a classic SQL Server installation",
                           "",
                           true,
                           "false",
                           "False"
                       ],
                       [
                           "ExportModeTier2",
                           "Switch to instruct the cmdlet that the export will be done against an Azure SQL DB instance",
                           "",
                           true,
                           "false",
                           "False"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "BackupDirectory",
                           "The path where to store the temporary backup file when the script needs to handle that",
                           "",
                           false,
                           "false",
                           "C:\\Temp\\d365fo.tools\\SqlBackups"
                       ],
                       [
                           "NewDatabaseName",
                           "The name for the database the script is going to create when doing the restore process",
                           "",
                           false,
                           "false",
                           "\"$Script:DatabaseName`_export\""
                       ],
                       [
                           "BacpacFile",
                           "The path where you want the cmdlet to store the bacpac file that will be generated",
                           "File",
                           false,
                           "false",
                           "\"C:\\Temp\\d365fo.tools\\$DatabaseName.bacpac\""
                       ],
                       [
                           "CustomSqlFile",
                           "The path to a custom sql server script file that you want executed against the database before it is exported",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "DiagnosticFile",
                           "Path to where you want the export to output a diagnostics file to assist you in troubleshooting the export",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "ExportOnly",
                           "Switch to instruct the cmdlet to either just create a dump bacpac file or run the prepping process first",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "MaxParallelism",
                           "Sets SqlPackage.exe\u0027s degree of parallelism for concurrent operations running against a database. The default value is 8.",
                           "",
                           false,
                           "false",
                           "8"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Generate a bacpac file from a database",
        "Name": "New-D365Bacpac",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365InstallSqlPackage\nYou should always install the latest version of the SqlPackage.exe, which is used by New-D365Bacpac.\nThis will fetch the latest .Net Core Version of SqlPackage.exe and install it at \"C:\\temp\\d365fo.tools\\SqlPackage\".\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eNew-D365Bacpac -ExportModeTier1 -BackupDirectory c:\\Temp\\backup\\ -NewDatabaseName Testing1 -BacpacFile \"C:\\Temp\\Bacpac\\Testing1.bacpac\"\nWill backup the \"AXDB\" database and restore is as \"Testing1\" again the localhost SQL Server.\r\nWill run the prepping process against the restored database.\r\nWill export a bacpac file to \"C:\\Temp\\Bacpac\\Testing1.bacpac\".\r\nWill delete the restored database.\r\nIt will use trusted connection (Windows authentication) while working against the SQL Server.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eNew-D365Bacpac -ExportModeTier2 -DatabaseServer localhost -DatabaseName AxDB -SqlUser User123 -SqlPwd \"Password123\" -NewDatabaseName Testing1 -BacpacFile C:\\Temp\\Bacpac\\Testing1.bacpac\nWill create a copy the db database on the dbserver1 in Azure.\r\nWill run the prepping process against the copy database.\r\nWill export a bacpac file.\r\nWill delete the copy database.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eNew-D365Bacpac -ExportModeTier2 -SqlUser User123 -SqlPwd \"Password123\" -NewDatabaseName Testing1 -BacpacFile \"C:\\Temp\\Bacpac\\Testing1.bacpac\"\nNormally used for a Tier-2 export and preparation for Tier-1 import\nWill create a copy of the registered D365 database on the registered D365 Azure SQL DB instance.\r\nWill run the prepping process against the copy database.\r\nWill export a bacpac file.\r\nWill delete the copy database.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eNew-D365Bacpac -ExportModeTier2 -SqlUser User123 -SqlPwd \"Password123\" -NewDatabaseName Testing1 -BacpacFile C:\\Temp\\Bacpac\\Testing1.bacpac -ExportOnly\nWill export a bacpac file.\r\nThe bacpac should be able to restore back into the database without any preparing because it is coming from the environment from the beginning\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eNew-D365Bacpac -ExportModeTier1 -BackupDirectory c:\\Temp\\backup\\ -NewDatabaseName Testing1 -BacpacFile \"C:\\Temp\\Bacpac\\Testing1.bacpac\" -DiagnosticFile \"C:\\temp\\ExportLog.txt\"\nWill backup the \"AXDB\" database and restore is as \"Testing1\" again the localhost SQL Server.\r\nWill run the prepping process against the restored database.\r\nWill export a bacpac file to \"C:\\Temp\\Bacpac\\Testing1.bacpac\".\r\nWill delete the restored database.\r\nIt will use trusted connection (Windows authentication) while working against the SQL Server.\nIt will output a diagnostic file to \"C:\\temp\\ExportLog.txt\".\n-------------------------- EXAMPLE 7 --------------------------\nPS C:\\\u003eNew-D365Bacpac -ExportModeTier1 -BackupDirectory c:\\Temp\\backup\\ -NewDatabaseName Testing1 -BacpacFile \"C:\\Temp\\Bacpac\\Testing1.bacpac\" -MaxParallelism 32\nWill backup the \"AXDB\" database and restore is as \"Testing1\" again the localhost SQL Server.\r\nWill run the prepping process against the restored database.\r\nWill export a bacpac file to \"C:\\Temp\\Bacpac\\Testing1.bacpac\".\r\nWill delete the restored database.\r\nIt will use trusted connection (Windows authentication) while working against the SQL Server.\nIt will use 32 connections against the database server while generating the bacpac file.",
        "Syntax": "New-D365Bacpac [-ExportModeTier2] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [-SqlUser] \u003cString\u003e [-SqlPwd] \u003cString\u003e [[-NewDatabaseName] \u003cString\u003e] [[-BacpacFile] \u003cString\u003e] [[-CustomSqlFile] \u003cString\u003e] [-DiagnosticFile \u003cString\u003e] [-ExportOnly] [-MaxParallelism \u003cInt32\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [-EnableException] [\u003cCommonParameters\u003e]\nNew-D365Bacpac [-ExportModeTier1] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-BackupDirectory] \u003cString\u003e] [[-NewDatabaseName] \u003cString\u003e] [[-BacpacFile] \u003cString\u003e] [[-CustomSqlFile] \u003cString\u003e] [-DiagnosticFile \u003cString\u003e] [-ExportOnly] [-MaxParallelism \u003cInt32\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "New-D365CAReport",
        "Description": "A cmdlet that wraps some of the cumbersome work into a streamlined process",
        "Params": [
                       [
                           "OutputPath",
                           "Path where you want the CAR file (xlsx-file) saved to\nDefault value is: \"c:\\temp\\d365fo.tools\\CAReport.xlsx\"",
                           "Path,File",
                           false,
                           "false",
                           "(Join-Path $Script:DefaultTempPath \"CAReport.xlsx\")"
                       ],
                       [
                           "Module",
                           "Name of the Module to analyse",
                           "ModuleName,Package",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Model",
                           "Name of the Model to analyse",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "SuffixWithModule",
                           "Instruct the cmdlet to append the module name as a suffix to the desired output file name",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the AOS service PackagesLocalDirectory\\bin",
                           "",
                           false,
                           "false",
                           "\"$Script:PackageDirectory\\bin\""
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "\"$Script:MetaDataDir\""
                       ],
                       [
                           "XmlLog",
                           "Path where you want to store the Xml log output generated from the best practice analyser",
                           "",
                           false,
                           "false",
                           "(Join-Path $Script:DefaultTempPath \"BPCheckLogcd.xml\")"
                       ],
                       [
                           "PackagesRoot",
                           "Instructs the cmdlet to use binary metadata",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\CAReport\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Tommy Skaue (@Skaue)",
        "Synopsis": "Generate the Customization\u0027s Analysis Report (CAR)",
        "Name": "New-D365CAReport",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eNew-D365CAReport -module \"ApplicationSuite\" -model \"MyOverLayerModel\"\nThis will generate a CAR report against MyOverLayerModel in the ApplicationSuite Module.\r\nIt will use the default value for the OutputPath parameter, which is \"c:\\temp\\d365fo.tools\\CAReport.xlsx\".\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eNew-D365CAReport -OutputPath \"c:\\temp\\CAReport.xlsx\" -module \"ApplicationSuite\" -model \"MyOverLayerModel\"\nThis will generate a CAR report against MyOverLayerModel in the ApplicationSuite Module.\r\nIt will use the \"c:\\temp\\CAReport.xlsx\" value for the OutputPath parameter.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eNew-D365CAReport -module \"ApplicationSuite\" -model \"MyOverLayerModel\" -SuffixWithModule\nThis will generate a CAR report against MyOverLayerModel in the ApplicationSuite Module.\r\nIt will use the default value for the OutputPath parameter, which is \"c:\\temp\\d365fo.tools\\CAReport.xlsx\".\r\nIt will append the module name to the desired output file, which will then be \"c:\\temp\\d365fo.tools\\CAReport-ApplicationSuite.xlsx\".\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eNew-D365CAReport -OutputPath \"c:\\temp\\CAReport.xlsx\" -module \"ApplicationSuite\" -model \"MyOverLayerModel\" -PackagesRoot\nThis will generate a CAR report against MyOverLayerModel in the ApplicationSuite Module.\r\nIt will use the binary metadata to look for the module and model.\r\nIt will use the \"c:\\temp\\CAReport.xlsx\" value for the OutputPath parameter.",
        "Syntax": "New-D365CAReport [[-OutputPath] \u003cString\u003e] [-Module] \u003cString\u003e [-Model] \u003cString\u003e [-SuffixWithModule] [[-BinDir] \u003cString\u003e] [[-MetaDataDir] \u003cString\u003e] [[-XmlLog] \u003cString\u003e] [-PackagesRoot] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "New-D365ISVLicense",
        "Description": "Create a deployable package with a license file inside",
        "Params": [
                       [
                           "LicenseFile",
                           "Path to the license file that you want to have inside a deployable package",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Path",
                           "Path to the template zip file for creating a deployable package with a license file\nDefault path is the same as the aos service \"PackagesLocalDirectory\\bin\\CustomDeployablePackage\\ImportISVLicense.zip\"",
                           "Template",
                           false,
                           "false",
                           "\"$Script:BinDirTools\\CustomDeployablePackage\\ImportISVLicense.zip\""
                       ],
                       [
                           "OutputPath",
                           "Path where you want the generated deployable package stored\nDefault value is: \"C:\\temp\\d365fo.tools\\ISVLicense.zip\"",
                           "",
                           false,
                           "false",
                           "C:\\temp\\d365fo.tools\\ISVLicense.zip"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Create a license deployable package",
        "Name": "New-D365ISVLicense",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eNew-D365ISVLicense -LicenseFile \"C:\\temp\\ISVLicenseFile.txt\"\nThis will take the \"C:\\temp\\ISVLicenseFile.txt\" file and locate the \"ImportISVLicense.zip\" template file under the \"PackagesLocalDirectory\\bin\\CustomDeployablePackage\\\".\r\nIt will extract the \"ImportISVLicense.zip\", load the ISVLicenseFile.txt and compress (zip) the files into a deployable package.\r\nThe package will be exported to \"C:\\temp\\d365fo.tools\\ISVLicense.zip\"",
        "Syntax": "New-D365ISVLicense [-LicenseFile] \u003cString\u003e [-Path \u003cString\u003e] [-OutputPath \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "New-D365TopologyFile",
        "Description": "Build a new topology file based on a template and update the ServiceModelList",
        "Params": [
                       [
                           "Path",
                           "Path to the template topology file",
                           "File",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Services",
                           "The array with all the service names that you want to fill into the topology file",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "NewPath",
                           "Path to where you want to save the new file after it has been created",
                           "NewFile",
                           true,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Create a new topology file",
        "Name": "New-D365TopologyFile",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eNew-D365TopologyFile -Path C:\\Temp\\DefaultTopologyData.xml -Services \"ALMService\",\"AOSService\",\"BIService\" -NewPath C:\\temp\\CurrentTopology.xml\nThis will read the \"DefaultTopologyData.xml\" file and fill in \"ALMService\",\"AOSService\" and \"BIService\"\r\nas the services in the ServiceModelList tag. The new file is stored at \"C:\\temp\\CurrentTopology.xml\"\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003e$Services = @(Get-D365InstalledService | ForEach-Object {$_.Servicename})\nPS C:\\\u003e New-D365TopologyFile -Path C:\\Temp\\DefaultTopologyData.xml -Services $Services -NewPath C:\\temp\\CurrentTopology.xml\nThis will get all the services already installed on the machine. Afterwards the list is piped\r\nto New-D365TopologyFile where all services are import into the new topology file that is stored at \"C:\\temp\\CurrentTopology.xml\"",
        "Syntax": "New-D365TopologyFile [-Path] \u003cString\u003e [-Services] \u003cString[]\u003e [-NewPath] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Publish-D365SsrsReport",
        "Description": "Deploy SSRS Report to SQL Server Reporting Services",
        "Tags": [
                     "SSRS",
                     "Report",
                     "Reports",
                     "Deploy",
                     "Publish"
                 ],
        "Params": [
                       [
                           "Module",
                           "Name of the module that you want to works against\nAccepts an array of strings\nDefault value is \"*\" and will work against all modules loaded on the machine",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "ReportName",
                           "Name of the report that you want to deploy\nDefault value is \"*\" and will deploy all reports from the module(s) that you speficied",
                           "",
                           false,
                           "false",
                           "*"
                       ],
                       [
                           "LogFile",
                           "Path to the file that should contain the logging information\nDefault value is \"c:\\temp\\d365fo.tools\\AxReportDeployment.log\"",
                           "",
                           false,
                           "false",
                           "(Join-Path $Script:DefaultTempPath \"AxReportDeployment.log\")"
                       ],
                       [
                           "PackageDirectory",
                           "Path to the PackagesLocalDirectory\nDefault path is the same as the AOS Service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ],
                       [
                           "ToolsBasePath",
                           "Base path to the folder containing the needed PowerShell manifests that the cmdlet utilizes\nDefault path is the same as the AOS Service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "$Script:PackageDirectory"
                       ],
                       [
                           "ReportServerIp",
                           "IP Address of the server that has SQL Reporting Services installed\nDefault value is \"127.0.01\"",
                           "",
                           false,
                           "false",
                           "127.0.0.1"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Deploy Report",
        "Name": "Publish-D365SsrsReport",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003ePublish-D365SsrsReport -Module ApplicationSuite -ReportName TaxVatRegister.Report\nThis will deploy the report which is named \"TaxVatRegister.Report\".\r\nThe cmdlet will look for the report inside the ApplicationSuite module.\r\nThe cmdlet will be using the default 127.0.0.1 while deploying the report.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003ePublish-D365SsrsReport -Module ApplicationSuite -ReportName *\nThis will deploy the all reports from the ApplicationSuite module.\r\nThe cmdlet will be using the default 127.0.0.1 while deploying the report.",
        "Syntax": "Publish-D365SsrsReport [[-Module] \u003cString[]\u003e] [[-ReportName] \u003cString[]\u003e] [[-LogFile] \u003cString\u003e] [[-PackageDirectory] \u003cString\u003e] [[-ToolsBasePath] \u003cString\u003e] [[-ReportServerIp] \u003cString[]\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Register-D365AzureStorageConfig",
        "Description": "Register all Azure Storage Configurations",
        "Tags": [
                     "Configuration",
                     "Azure",
                     "Storage"
                 ],
        "Params": [
                       [
                           "ConfigStorageLocation",
                           "Parameter used to instruct where to store the configuration objects\nThe default value is \"User\" and this will store all configuration for the active user\nValid options are:\r\n\"User\"\r\n\"System\"\n\"System\" will store the configuration as default for all users, so they can access the configuration objects",
                           "",
                           false,
                           "false",
                           "User"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Register Azure Storage Configurations",
        "Name": "Register-D365AzureStorageConfig",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eRegister-D365AzureStorageConfig -ConfigStorageLocation \"System\"\nThis will store all Azure Storage Configurations as defaults for all users on the machine.",
        "Syntax": "Register-D365AzureStorageConfig [[-ConfigStorageLocation] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Remove-D365BroadcastMessageConfig",
        "Description": "Remove a broadcast message configuration from the configuration store",
        "Tags": [
                     "Servicing",
                     "Broadcast",
                     "Message",
                     "Users",
                     "Environment",
                     "Config",
                     "Configuration",
                     "ClientId",
                     "ClientSecret"
                 ],
        "Params": [
                       [
                           "Name",
                           "Name of the broadcast message configuration you want to remove from the configuration store",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Temporary",
                           "Instruct the cmdlet to only temporarily remove the broadcast message configuration from the configuration store",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Remove broadcast message configuration",
        "Name": "Remove-D365BroadcastMessageConfig",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eRemove-D365BroadcastMessageConfig -Name \"UAT\"\nThis will remove the broadcast message configuration name \"UAT\" from the machine.",
        "Syntax": "Remove-D365BroadcastMessageConfig [-Name] \u003cString\u003e [-Temporary] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Remove-D365Database",
        "Description": "Removes a Database",
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Removes a Database",
        "Name": "Remove-D365Database",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eRemove-D365Database -DatabaseName \"ExportClone\"\nThis will remove the \"ExportClone\" from the default SQL Server instance that is registered on the machine.",
        "Syntax": "Remove-D365Database [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Remove-D365Model",
        "Description": "Remove a model from a Dynamics 365 for Finance \u0026 Operations environment",
        "Tags": [
                     "ModelUtil",
                     "Axmodel",
                     "Model",
                     "Remove",
                     "Delete",
                     "Source Control",
                     "Vsts",
                     "Azure DevOps"
                 ],
        "Params": [
                       [
                           "Model",
                           "Name of the model that you want to work against",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "BinDir",
                           "The path to the bin directory for the environment\nDefault path is the same as the AOS service PackagesLocalDirectory\\bin\nDefault value is fetched from the current configuration on the machine",
                           "",
                           false,
                           "false",
                           "\"$Script:PackageDirectory\\bin\""
                       ],
                       [
                           "MetaDataDir",
                           "The path to the meta data directory for the environment\nDefault path is the same as the aos service PackagesLocalDirectory",
                           "",
                           false,
                           "false",
                           "\"$Script:MetaDataDir\""
                       ],
                       [
                           "DeleteFolders",
                           "Instruct the cmdlet to delete the model folder\nThis is useful when you are trying to clean up the folders in your source control / branch",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Remove a model from Dynamics 365 for Finance \u0026 Operations",
        "Name": "Remove-D365Model",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eRemove-D365Model -Model CustomModelName\nThis will remove the \"CustomModelName\" model from the D365FO environment.\r\nIt will NOT remove the folders inside the PackagesLocalDirectory location.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eRemove-D365Model -Model CustomModelName -DeleteFolders\nThis will remove the \"CustomModelName\" model from the D365FO environment.\r\nIt will remove the folders inside the PackagesLocalDirectory location.\r\nThis is helpful when dealing with source control and you want to remove the model entirely.",
        "Syntax": "Remove-D365Model [-Model] \u003cString\u003e [[-BinDir] \u003cString\u003e] [[-MetaDataDir] \u003cString\u003e] [-DeleteFolders] [-ShowOriginalProgress] [-OutputCommandOnly] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Remove-D365User",
        "Description": "Deletes the user from the database, including security configuration",
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "Email",
                           "The search string to select which user(s) should be updated.\nYou have to specific the explicit email address of the user you want to remove\nThe cmdlet will not be able to delete the ADMIN user, this is to prevent you\r\nfrom being locked out of the system.",
                           "",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Delete an user from the environment",
        "Name": "Remove-D365User",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eRemove-D365User -Email \"Claire@contoso.com\"\nThis will move all security and user details from the user with the email address\r\n\"Claire@contoso.com\"\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365User -Email *contoso.com | Remove-D365User\nThis will first get all users from the database that matches the *contoso.com\r\nsearch and pipe their emails to Remove-D365User for it to delete them.",
        "Syntax": "Remove-D365User [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [-Email] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Rename-D365ComputerName",
        "Description": "When doing development on-prem, there is as need for changing the Computername.\nFunction both changes Computername and SSRS Configuration",
        "Params": [
                       [
                           "NewName",
                           "The new name for the computer",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "SSRSReportDatabase",
                           "Name of the SSRS reporting database",
                           "",
                           false,
                           "false",
                           "DynamicsAxReportServer"
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "LogPath",
                           "The path where the log file(s) will be saved\nWhen running without the ShowOriginalProgress parameter, the log files will be the standard output and the error output from the underlying tool executed",
                           "LogDir",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:DefaultTempPath -ChildPath \"Logs\\RsConfig\")"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OutputCommandOnly",
                           "Instruct the cmdlet to only output the command that you would have to execute by hand\nWill include full path to the executable and the needed parameters based on your selection",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Function for renaming computer.\nRenames Computer and changes the SSRS Configration",
        "Name": "Rename-D365ComputerName",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eRename-D365ComputerName -NewName \"Demo-8.1\" -SSRSReportDatabase \"ReportServer\"\nThis will rename the local machine to the \"Demo-8.1\" as the new Windows machine name.\r\nIt will update the registration inside the SQL Server Reporting Services configuration to handle the new name of the machine.",
        "Syntax": "Rename-D365ComputerName [-NewName] \u003cString\u003e [[-SSRSReportDatabase] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [[-LogPath] \u003cString\u003e] [-ShowOriginalProgress] [-OutputCommandOnly] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Rename-D365Instance",
        "Description": "The Rename function, changes the config values used by a D365FO dev box for identifying its name. Standard it is called \u0027usnconeboxax1aos\u0027",
        "Params": [
                       [
                           "NewName",
                           "The new name wanted for the D365FO instance",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "AosServiceWebRootPath",
                           "Path to the webroot folder for the AOS service \u0027Default value : C:\\AOSService\\Webroot",
                           "",
                           false,
                           "false",
                           "$Script:AOSPath"
                       ],
                       [
                           "IISServerApplicationHostConfigFile",
                           "Path to the IISService Application host file, [Where the binding configurations is stored] \u0027Default value : C:\\Windows\\System32\\inetsrv\\Config\\applicationHost.config\u0027",
                           "",
                           false,
                           "false",
                           "$Script:IISHostFile"
                       ],
                       [
                           "HostsFile",
                           "Place of the host file on the current system [Local DNS record] \u0027 Default value C:\\Windows\\System32\\drivers\\etc\\hosts\u0027",
                           "",
                           false,
                           "false",
                           "$Script:Hosts"
                       ],
                       [
                           "BackupExtension",
                           "Backup name for all the files that are changed",
                           "",
                           false,
                           "false",
                           "bak"
                       ],
                       [
                           "MRConfigFile",
                           "Path to the Financial Reporter (Management Reporter) configuration file",
                           "",
                           false,
                           "false",
                           "$Script:MRConfigFile"
                       ]
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Rename as D365FO Demo/Dev box",
        "Name": "Rename-D365Instance",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eRename-D365Instance -NewName \"Demo1\"\nThis will rename the D365 for Finance \u0026 Operations instance to \"Demo1\".\r\nThis IIS will be restarted while doing it.",
        "Syntax": "Rename-D365Instance [-NewName] \u003cString\u003e [[-AosServiceWebRootPath] \u003cString\u003e] [[-IISServerApplicationHostConfigFile] \u003cString\u003e] [[-HostsFile] \u003cString\u003e] [[-BackupExtension] \u003cString\u003e] [[-MRConfigFile] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Restart-D365Environment",
        "Description": "Restart the different services in a Dynamics 365 Finance \u0026 Operations environment",
        "Tags": [
                     "Environment",
                     "Service",
                     "Services",
                     "Aos",
                     "Batch",
                     "Servicing"
                 ],
        "Params": [
                       [
                           "ComputerName",
                           "An array of computers that you want to work against",
                           "",
                           false,
                           "false",
                           "@($env:computername)"
                       ],
                       [
                           "All",
                           "Instructs the cmdlet work against all relevant services\nIncludes:\r\nAos\r\nBatch\r\nFinancial Reporter\r\nDMF",
                           "",
                           false,
                           "false",
                           "True"
                       ],
                       [
                           "Aos",
                           "Instructs the cmdlet to work against the AOS (IIS) service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "Batch",
                           "Instructs the cmdlet to work against the Batch service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "FinancialReporter",
                           "Instructs the cmdlet to work against the Financial Reporter (Management Reporter 2012)",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "DMF",
                           "Instructs the cmdlet to work against the DMF service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "Kill",
                           "Instructs the cmdlet to kill the service(s) that you want to restart",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Restart the different services",
        "Name": "Restart-D365Environment",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eRestart-D365Environment -All\nThis will stop all services and then start all services again.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eRestart-D365Environment -All -ShowOriginalProgress\nThis will stop all services and then start all services again.\r\nThe progress of Stopping the different services will be written to the console / host.\r\nThe progress of Starting the different services will be written to the console / host.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eRestart-D365Environment -ComputerName \"TEST-SB-AOS1\",\"TEST-SB-AOS2\",\"TEST-SB-BI1\" -All\nThis will work against the machines: \"TEST-SB-AOS1\",\"TEST-SB-AOS2\",\"TEST-SB-BI1\".\r\nThis will stop all services and then start all services again.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eRestart-D365Environment -Aos -Batch\nThis will stop the AOS and Batch services and then start the AOS and Batch services again.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eRestart-D365Environment -FinancialReporter -DMF\nThis will stop the FinancialReporter and DMF services and then start the FinancialReporter and DMF services again.\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eRestart-D365Environment -All -Kill\nThis will stop all services and then start all services again.\r\nIt will use the Kill parameter to make sure that the services is stopped.",
        "Syntax": "Restart-D365Environment [[-ComputerName] \u003cString[]\u003e] [[-All]] [-Kill] [-ShowOriginalProgress] [\u003cCommonParameters\u003e]\nRestart-D365Environment [[-ComputerName] \u003cString[]\u003e] [[-Aos]] [[-Batch]] [[-FinancialReporter]] [[-DMF]] [-Kill] [-ShowOriginalProgress] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Restore-D365WebConfig",
        "Description": "Will restore the web.config file located back into the AOS / IIS folder",
        "Tags": [
                     "DEV",
                     "Tier2",
                     "DB",
                     "Database",
                     "Debug",
                     "JIT",
                     "LCS",
                     "Azure DB"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the folder where you the desired web.config file that you want restored is located\nDefault is: \"C:\\Temp\\d365fo.tools\\WebConfigBackup\"",
                           "",
                           false,
                           "false",
                           "$(Join-Path $Script:DefaultTempPath \"WebConfigBackup\")"
                       ],
                       [
                           "Force",
                           "Instructs the cmdlet to overwrite the destination file if it already exists",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Restore the web.config file",
        "Name": "Restore-D365WebConfig",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eRestore-D365WebConfig -Force\nWill restore the web.config file, and overwrite the current web.config file in the AOS / IIS folder.\r\nIt will use the default path \"C:\\Temp\\d365fo.tools\\WebConfigBackup\" as the source directory.\r\nIt will overwrite the current web.config file.\nA result set example:\nFilename LastModified File\r\n-------- ------------ ----\r\nweb.config 6/29/2021 7:31:04 PM K:\\AosService\\WebRoot\\web.config",
        "Syntax": "Restore-D365WebConfig [[-Path] \u003cString\u003e] [-Force] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Send-D365BroadcastMessage",
        "Description": "Utilize the same messaging framework available from LCS and send a broadcast message to all online users in the environment",
        "Tags": [
                     "Servicing",
                     "Message",
                     "Users",
                     "Environment"
                 ],
        "Params": [
                       [
                           "Tenant",
                           "Azure Active Directory (AAD) tenant id (Guid) that the D365FO environment is connected to, that you want to send a message to",
                           "$AADGuid",
                           false,
                           "false",
                           "$Script:BroadcastTenant"
                       ],
                       [
                           "URL",
                           "URL / URI for the D365FO environment you want to send a message to",
                           "URI",
                           false,
                           "false",
                           "$Script:BroadcastUrl"
                       ],
                       [
                           "ClientId",
                           "The ClientId obtained from the Azure Portal when you created a Registered Application",
                           "",
                           false,
                           "false",
                           "$Script:BroadcastClientId"
                       ],
                       [
                           "ClientSecret",
                           "The ClientSecret obtained from the Azure Portal when you created a Registered Application",
                           "",
                           false,
                           "false",
                           "$Script:BroadcastClientSecret"
                       ],
                       [
                           "TimeZone",
                           "Id of the Time Zone your environment is running in\nYou might experience that the local VM running the D365FO is running another Time Zone than the computer you are running this cmdlet from\nAll available .NET Time Zones can be traversed with tab for this parameter\nThe default value is \"UTC\"",
                           "",
                           false,
                           "false",
                           "$Script:BroadcastTimeZone"
                       ],
                       [
                           "StartTime",
                           "The time and date you want the message to be displayed for the users\nDefault value is NOW\nThe specified StartTime will always be based on local Time Zone. If you specify a different Time Zone than the local computer is running, the start and end time will be calculated based on your \r\nselection.",
                           "",
                           false,
                           "false",
                           "(Get-Date)"
                       ],
                       [
                           "EndingInMinutes",
                           "Specify how many minutes into the future you want this message / maintenance window to last\nDefault value is 60 minutes\nThe specified StartTime will always be based on local Time Zone. If you specify a different Time Zone than the local computer is running, the start and end time will be calculated based on your \r\nselection.",
                           "",
                           false,
                           "false",
                           "$Script:BroadcastEndingInMinutes"
                       ],
                       [
                           "OnPremise",
                           "Specify if environnement is an D365 OnPremise\nDefault value is \"Not set\" (= Cloud Environnement)",
                           "",
                           false,
                           "false",
                           "$Script:BroadcastOnPremise"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Send broadcast message to online users in D365FO",
        "Name": "Send-D365BroadcastMessage",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSend-D365BroadcastMessage\nThis will send a message to all active users that are working on default D365FO environment.\nSee the RELATED LINKS section for the supporting cmdlets needed to store a default configuration.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eSend-D365BroadcastMessage -Tenant \"e674da86-7ee5-40a7-b777-1111111111111\" -URL \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\" -ClientId \"dea8d7a9-1602-4429-b138-111111111111\" \r\n-ClientSecret \"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\"\nThis will send a message to all active users that are working on the D365FO environment located at \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\".\r\nIt will authenticate against the Azure Active Directory with the \"e674da86-7ee5-40a7-b777-1111111111111\" guid.\r\nIt will use the ClientId \"dea8d7a9-1602-4429-b138-111111111111\" and ClientSecret \"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\" go get access to the environment.\r\nIt will use the default value \"UTC\" Time Zone for converting the different time and dates.\r\nIt will use the default start time which is NOW.\r\nIt will use the default end time which is 60 minutes.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eSend-D365BroadcastMessage -OnPremise -Tenant \"https://adfs.local/adfs\" -URL \"https://ax-sandbox.d365fo.local\" -ClientId \"dea8d7a9-1602-4429-b138-111111111111\" -ClientSecret \r\n\"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\"\nThis will send a message to all active users that are working on the D365FO OnPremise environment located at \"https://ax-sandbox.d365fo.local\".\r\nIt will authenticate against Local ADFS with the \"https://adfs.local/adfs\" path\r\nIt will use the ClientId \"dea8d7a9-1602-4429-b138-111111111111\" and ClientSecret \"Vja/VmdxaLOPR+alkjfsadffelkjlfw234522\" go get access to the environment.\r\nIt will use the default value \"UTC\" Time Zone for converting the different time and dates.\r\nIt will use the default start time which is NOW.\r\nIt will use the default end time which is 60 minutes.",
        "Syntax": "Send-D365BroadcastMessage [[-Tenant] \u003cString\u003e] [[-URL] \u003cString\u003e] [[-ClientId] \u003cString\u003e] [[-ClientSecret] \u003cString\u003e] [[-TimeZone] \u003cString\u003e] [[-StartTime] \u003cDateTime\u003e] [[-EndingInMinutes] \u003cInt32\u003e] [[-OnPremise]] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365ActiveAzureStorageConfig",
        "Description": "Updates the current active Azure Storage Account configuration with a new one",
        "Params": [
                       [
                           "Name",
                           "The name the Azure Storage Account configuration you want to load into the active Azure Storage Account configuration",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "ConfigStorageLocation",
                           "Parameter used to instruct where to store the configuration objects\nThe default value is \"User\" and this will store all configuration for the active user\nValid options are:\r\n\"User\"\r\n\"System\"\n\"System\" will store the configuration so all users can access the configuration objects",
                           "",
                           false,
                           "false",
                           "User"
                       ],
                       [
                           "Temporary",
                           "Instruct the cmdlet to only temporarily override the persisted settings in the configuration storage",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the active Azure Storage Account configuration",
        "Name": "Set-D365ActiveAzureStorageConfig",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365ActiveAzureStorageConfig -Name \"UAT-Exports\"\nThis will import the \"UAT-Exports\" set from the Azure Storage Account configurations.\r\nIt will update the active Azure Storage Account configuration.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eSet-D365ActiveAzureStorageConfig -Name \"UAT-Exports\" -ConfigStorageLocation \"System\"\nThis will import the \"UAT-Exports\" set from the Azure Storage Account configurations.\r\nIt will update the active Azure Storage Account configuration.\r\nThe data will be stored in the system wide configuration storage, which makes it accessible from all users.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eSet-D365ActiveAzureStorageConfig -Name \"UAT-Exports\" -Temporary\nThis will import the \"UAT-Exports\" set from the Azure Storage Account configurations.\r\nIt will update the active Azure Storage Account configuration.\r\nThe update will only last for the rest of this PowerShell console session.",
        "Syntax": "Set-D365ActiveAzureStorageConfig [[-Name] \u003cString\u003e] [[-ConfigStorageLocation] \u003cString\u003e] [-Temporary] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365ActiveBroadcastMessageConfig",
        "Description": "Updates the current active broadcast message configuration with a new one",
        "Tags": [
                     "Servicing",
                     "Message",
                     "Users",
                     "Environment",
                     "Config",
                     "Configuration",
                     "ClientId",
                     "ClientSecret",
                     "OnPremise"
                 ],
        "Params": [
                       [
                           "Name",
                           "Name of the broadcast message configuration you want to load into the active broadcast message configuration",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Temporary",
                           "Instruct the cmdlet to only temporarily override the persisted settings in the configuration store",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the active broadcast message configuration",
        "Name": "Set-D365ActiveBroadcastMessageConfig",
        "Links": [
                      null,
                      null,
                      null,
                      null,
                      null,
                      null
                  ],
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365ActiveBroadcastMessageConfig -Name \"UAT\"\nThis will set the broadcast message configuration named \"UAT\" as the active configuration.",
        "Syntax": "Set-D365ActiveBroadcastMessageConfig [-Name] \u003cString\u003e [-Temporary] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365Admin",
        "Description": "Cmdlet using the AdminProvisioning tool from D365FO",
        "Params": [
                       [
                           "AdminSignInName",
                           "Email for the Admin",
                           "Email",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN)\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Powershell implementation of the AdminProvisioning tool",
        "Name": "Set-D365Admin",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365Admin \"claire@contoso.com\"\nThis will provision claire@contoso.com as administrator for the environment",
        "Syntax": "Set-D365Admin [-AdminSignInName] \u003cString\u003e [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365AzCopyPath",
        "Description": "Update the path where the module will be looking for the AzCopy.exe executable",
        "Params": [
                       [
                           "Path",
                           "Path to the AzCopy.exe",
                           "",
                           true,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the path for AzCopy.exe",
        "Name": "Set-D365AzCopyPath",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eInvoke-D365InstallAzCopy -Path \"C:\\temp\\d365fo.tools\\AzCopy\\AzCopy.exe\"\nThis will update the path for the AzCopy.exe in the modules configuration",
        "Syntax": "Set-D365AzCopyPath [-Path] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365ClickOnceTrustPrompt",
        "Description": "Creates the needed registry keys and values for ClickOnce to work on the machine",
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the ClickOnce needed configuration",
        "Name": "Set-D365ClickOnceTrustPrompt",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365ClickOnceTrustPrompt\nThis will create / or update the current ClickOnce configuration.",
        "Syntax": "Set-D365ClickOnceTrustPrompt [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365DefaultModelForNewProjects",
        "Description": "Set the registered default model that is used across all new projects that are created inside Visual Studio when working with D365FO project types\n\nIt will backup the current \"DynamicsDevConfig.xml\" file, for you to revert the changes if anything should go wrong",
        "Params": [
                       [
                           "Module",
                           "The name of the module / model that you want to be the default model for all new projects used inside Visual Studio when working with D365FO project types",
                           "Model",
                           true,
                           "true (ByValue, ByPropertyName)",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the default model used creating new projects in Visual Studio",
        "Name": "Set-D365DefaultModelForNewProjects",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365DefaultModelForNewProjects -Model \"FleetManagement\"\nThis will update the current default module registered in the \"DynamicsDevConfig.xml\" file.\r\nThis file is located in Documents\\Visual Studio Dynamics 365\\ or in Documents\\Visual Studio 2015\\Settings\\ depending on the version.\r\nIt will backup the current \"DynamicsDevConfig.xml\" file.\r\nIt will replace the value inside the \"DefaultModelForNewProjects\" tag.",
        "Syntax": "Set-D365DefaultModelForNewProjects [-Module] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365FavoriteBookmark",
        "Description": "Enable the favorite bar in internet explorer and put in the URL as a favorite",
        "Params": [
                       [
                           "URL",
                           "The URL of the shortcut you want to add to the favorite bar",
                           "",
                           false,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "D365FO",
                           "Instruct the cmdlet that you want the populate the D365FO favorite entry based on the URL provided",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "AzureDevOps",
                           "Instruct the cmdlet that you want the populate the AzureDevOps favorite entry based on the URL provided",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Enable the favorite bar and add an URL",
        "Name": "Set-D365FavoriteBookmark",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365FavoriteBookmark -Url \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\"\nThis will add the \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\" to the favorite bar, enable the favorite bar and lock it.\r\nThis will be interpreted as the using the -D365FO parameter also, because that is the expected behavior.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eSet-D365FavoriteBookmark -Url \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\" -D365FO\nThis will add the \"https://usnconeboxax1aos.cloud.onebox.dynamics.com\" to the favorite bar, enable the favorite bar and lock it.\r\nThe bookmark will be mapped as the one for the Dynamics 365 Finance \u0026 Operations instance.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eSet-D365FavoriteBookmark -Url \"https://CUSTOMERNAME.visualstudio.com/\" -AzureDevOps\nThis will add the \"https://CUSTOMERNAME.visualstudio.com/\" to the favorite bar, enable the favorite bar and lock it.\r\nThe bookmark will be mapped as the one for the Azure DevOps instance.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eGet-D365Url | Set-D365FavoriteBookmark\nThis will get the URL from the environment and add that to the favorite bar, enable the favorite bar and lock it.\r\nThis will be interpreted as the using the -D365FO parameter also, because that is the expected behavior.",
        "Syntax": "Set-D365FavoriteBookmark [-URL \u003cString\u003e] [-D365FO] [\u003cCommonParameters\u003e]\nSet-D365FavoriteBookmark [-URL \u003cString\u003e] [-AzureDevOps] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365FlightServiceCatalogId",
        "Description": "Set the FlightingServiceCatalogID element in the web.config file used by D365FO",
        "Tags": [
                     "Flight",
                     "Flighting"
                 ],
        "Params": [
                       [
                           "FlightServiceCatalogId",
                           "Flighting catalog ID to be set",
                           "",
                           false,
                           "false",
                           "12719367"
                       ],
                       [
                           "AosServiceWebRootPath",
                           "Path to the root folder where to locate the web.config file",
                           "",
                           false,
                           "false",
                           "$Script:AOSPath"
                       ]
                   ],
        "Alias": "",
        "Author": "Frank Hüther(@FrankHuether))",
        "Synopsis": "Set the FlightingServiceCatalogID",
        "Name": "Set-D365FlightServiceCatalogId",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365FlightServiceCatalogId\nThis will set the FlightingServiceCatalogID element the web.config to the default value \"12719367\".",
        "Syntax": "Set-D365FlightServiceCatalogId [[-FlightServiceCatalogId] \u003cString\u003e] [[-AosServiceWebRootPath] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365LcsApiConfig",
        "Description": "Set the LCS configuration details and save them into the configuration store",
        "Tags": [
                     "Environment",
                     "Url",
                     "Config",
                     "Configuration",
                     "LCS",
                     "Upload",
                     "ClientId"
                 ],
        "Params": [
                       [
                           "ProjectId",
                           "The project id for the Dynamics 365 for Finance \u0026 Operations project inside LCS",
                           "",
                           false,
                           "false",
                           "0"
                       ],
                       [
                           "ClientId",
                           "The Azure Registered Application Id / Client Id obtained while creating a Registered App inside the Azure Portal",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "BearerToken",
                           "The token you want to use when working against the LCS api",
                           "AccessToken,access_token",
                           false,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "ActiveTokenExpiresOn",
                           "The point in time where the current bearer token will expire\nThe time is measured in Unix Time, total seconds since 1970-01-01",
                           "expires_on",
                           false,
                           "true (ByPropertyName)",
                           "0"
                       ],
                       [
                           "RefreshToken",
                           "The Refresh Token that you want to use for the authentication process",
                           "refresh_token",
                           false,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "LcsApiUri",
                           "URI / URL to the LCS API you want to use\nDepending on whether your LCS project is located in europe or not, there is 2 valid URI\u0027s / URL\u0027s\nValid options:\r\n\"https://lcsapi.lcs.dynamics.com\"\r\n\"https://lcsapi.eu.lcs.dynamics.com\"\r\n\"https://lcsapi.fr.lcs.dynamics.com\"\r\n\"https://lcsapi.sa.lcs.dynamics.com\"\r\n\"https://lcsapi.uae.lcs.dynamics.com\"\r\n\"https://lcsapi.ch.lcs.dynamics.com\"\r\n\"https://lcsapi.lcs.dynamics.cn\"\r\n\"https://lcsapi.gov.lcs.microsoftdynamics.us\"",
                           "resource",
                           false,
                           "true (ByPropertyName)",
                           "https://lcsapi.lcs.dynamics.com"
                       ],
                       [
                           "Temporary",
                           "Instruct the cmdlet to only temporarily override the persisted settings in the configuration storage",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the LCS configuration details",
        "Name": "Set-D365LcsApiConfig",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365LcsApiConfig -ProjectId 123456789 -ClientId \"9b4f4503-b970-4ade-abc6-2c086e4c4929\" -BearerToken \"JldjfafLJdfjlfsalfd...\" -ActiveTokenExpiresOn 1556909205 -RefreshToken \r\n\"Tsdljfasfe2j32324\" -LcsApiUri \"https://lcsapi.lcs.dynamics.com\"\nThis will set the LCS API configuration.\r\nThe ProjectId 123456789 will be saved as the default ProjectId for all cmdlets that will interact with LCS, if they require a ProjectId.\r\nThe ClientId \"9b4f4503-b970-4ade-abc6-2c086e4c4929\" will be saved as the default ClientId for all cmdlets that will interact with LCS, if they require a ClientId.\r\nThe BearerToken \"JldjfafLJdfjlfsalfd...\" will be saved as the default BearerToken. Remember the BearerToken will expire, so you should fill in the ActiveTokenExpiresOn and RefreshToken parameters \r\nalso.\r\nThe ActiveTokenExpiresOn 1556909205 will be saved to assist the module in determine whether the BearerToken is still valid or not.\r\nThe RefreshToken \"Tsdljfasfe2j32324\" will be saved as the default RefreshToken for all cmdlets that will interact with tokens.\r\nThe LcsApiUri \"https://lcsapi.lcs.dynamics.com\" will be saved as the default LCS HTTP endpoint for all cmdlets that will interact with LCS.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eGet-D365LcsApiToken -Username \"serviceaccount@domain.com\" -Password \"TopSecretPassword\" | Set-D365LcsApiConfig\nThis will obtain a valid OAuth 2.0 access token from Azure Active Directory and save the needed details.\r\nThe Username \"serviceaccount@domain.com\" and Password \"TopSecretPassword\" is used in the OAuth 2.0 Grant Flow, to approved that the application should impersonate like \"serviceaccount@domain.com\".\r\nThe output object received from Get-D365LcsApiToken is piped directly to Set-D365LcsApiConfig.\r\nSet-D365LcsApiConfig will save the access_token(BearerToken), refresh_token(RefreshToken) and expires_on(ActiveTokenExpiresOn).\nThese values will then be available as default values for all LCS cmdlets across the module.\nYou can validate the current default values by calling Get-D365LcsApiConfig.",
        "Syntax": "Set-D365LcsApiConfig [[-ProjectId] \u003cInt32\u003e] [[-ClientId] \u003cString\u003e] [[-BearerToken] \u003cString\u003e] [[-ActiveTokenExpiresOn] \u003cInt64\u003e] [[-RefreshToken] \u003cString\u003e] [[-LcsApiUri] \u003cString\u003e] [-Temporary] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365LogicAppConfig",
        "Description": "Store the needed details for the module to execute an Azure Logic App using a HTTP request",
        "Params": [
                       [
                           "Url",
                           "The URL for the http request endpoint of the desired\r\nlogic app",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Email",
                           "The receiving email address that should be notified",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "Subject",
                           "The subject of the email that you want to send",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "ConfigStorageLocation",
                           "Parameter used to instruct where to store the configuration objects\nThe default value is \"User\" and this will store all configuration for the active user\nValid options are:\r\n\"User\"\r\n\"System\"\n\"System\" will store the configuration so all users can access the configuration objects",
                           "",
                           false,
                           "false",
                           "User"
                       ],
                       [
                           "Temporary",
                           "Switch to instruct the cmdlet to only temporarily override the persisted settings in the configuration storage",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the details for the logic app invoke cmdlet",
        "Name": "Set-D365LogicAppConfig",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365LogicAppConfig -Email administrator@contoso.com -Subject \"Work is done\" -Url https://prod-35.westeurope.logic.azure.com:443/\nThis will set all the details about invoking the Logic App.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eSet-D365LogicAppConfig -Email administrator@contoso.com -Subject \"Work is done\" -Url https://prod-35.westeurope.logic.azure.com:443/ -ConfigStorageLocation \"System\"\nThis will set all the details about invoking the Logic App.\r\nThe data will be stored in the system wide configuration storage, which makes it accessible from all users.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eSet-D365LogicAppConfig -Email administrator@contoso.com -Subject \"Work is done\" -Url https://prod-35.westeurope.logic.azure.com:443/ -Temporary\nThis will set all the details about invoking the Logic App.\r\nThe update will only last for the rest of this PowerShell console session.",
        "Syntax": "Set-D365LogicAppConfig [-Url] \u003cString\u003e [[-Email] \u003cString\u003e] [[-Subject] \u003cString\u003e] [[-ConfigStorageLocation] \u003cString\u003e] [-Temporary] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365NugetPath",
        "Description": "Update the path where the module will be looking for the nuget.exe executable",
        "Params": [
                       [
                           "Path",
                           "Path to the nuget.exe",
                           "",
                           true,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the path for nuget.exe",
        "Name": "Set-D365NugetPath",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365SqlPackagePath -Path \"C:\\temp\\d365fo.tools\\nuget\\nuget.exe\"\nThis will update the path for the nuget.exe in the modules configuration",
        "Syntax": "Set-D365NugetPath [-Path] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365OfflineAuthenticationAdminEmail",
        "Description": "Sets the registered offline administrator in the \"DynamicsDevConfig.xml\" file located in the default Package Directory",
        "Params": [
                       [
                           "Email",
                           "The desired email address of the to be offline administrator",
                           "",
                           true,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Sets the offline administrator e-mail",
        "Name": "Set-D365OfflineAuthenticationAdminEmail",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365OfflineAuthenticationAdminEmail -Email \"admin@contoso.com\"\nWill update the Offline Administrator E-mail address in the DynamicsDevConfig.xml file with \"admin@contoso.com\"",
        "Syntax": "Set-D365OfflineAuthenticationAdminEmail [-Email] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365RsatConfiguration",
        "Description": "Update different RSAT configuration values while using the tool",
        "Tags": [
                     "RSAT",
                     "Testing",
                     "Regression Suite Automation Test",
                     "Regression",
                     "Test",
                     "Automation",
                     "Configuration"
                 ],
        "Params": [
                       [
                           "LogGenerationEnabled",
                           "Will set the LogGeneration property\n$true will make RSAT start generating logs\r\n$false will stop RSAT from generating logs",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "VerboseSnapshotsEnabled",
                           "Will set the VerboseSnapshotsEnabled property\n$true will make RSAT start generating snapshots and store related details\r\n$false will stop RSAT from generating snapshots and store related details",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "AddOperatorFieldsToExcelValidationEnabled",
                           "Will set the AddOperatorFieldsToExcelValidation property\n$true will make RSAT start adding the operation options in the excel parameter file\r\n$false will stop RSAT from adding the operation options in the excel parameter file",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set different RSAT configuration values",
        "Name": "Set-D365RsatConfiguration",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365RsatConfiguration -LogGenerationEnabled $true\nThis will enable the log generation logic of RSAT.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eSet-D365RsatConfiguration -VerboseSnapshotsEnabled $true\nThis will enable the snapshot generation logic of RSAT.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eSet-D365RsatConfiguration -AddOperatorFieldsToExcelValidationEnabled $true\nThis will enable the operator generation logic of RSAT.",
        "Syntax": "Set-D365RsatConfiguration [[-LogGenerationEnabled] \u003cBoolean\u003e] [[-VerboseSnapshotsEnabled] \u003cBoolean\u003e] [[-AddOperatorFieldsToExcelValidationEnabled] \u003cBoolean\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365RsatTier2Crypto",
        "Description": "Set the needed registry settings for when you are running RSAT against a Tier2+ environment",
        "Tags": [
                     "RSAT",
                     "Testing",
                     "Regression Suite Automation Test",
                     "Regression",
                     "Test",
                     "Automation",
                     "Configuration"
                 ],
        "Params": [
 
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the needed configuration to work on Tier2+ environments",
        "Name": "Set-D365RsatTier2Crypto",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365RsatTier2Crypto\nThis will configure the registry to support RSAT against a Tier2+ environment.",
        "Syntax": "Set-D365RsatTier2Crypto [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365SDPCleanUp",
        "Description": "Sets the configured retention period before updates are deleted",
        "Params": [
                       [
                           "NumberOfDays",
                           "Number of days that deployable software packages should remain on the server",
                           "",
                           false,
                           "false",
                           "30"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the cleanup retention period",
        "Name": "Set-D365SDPCleanUp",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365SDPCleanUp -NumberOfDays 10\nThis will set the retention period to 10 days inside the the registry\nThe cmdlet REQUIRES elevated permissions to run, otherwise it will fail",
        "Syntax": "Set-D365SDPCleanUp [[-NumberOfDays] \u003cInt32\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365SqlPackagePath",
        "Description": "Update the path where the module will be looking for the SqlPackage.exe executable",
        "Params": [
                       [
                           "Path",
                           "Path to the SqlPackage.exe",
                           "",
                           true,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the path for SqlPackage.exe",
        "Name": "Set-D365SqlPackagePath",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365SqlPackagePath -Path \"C:\\Program Files\\Microsoft SQL Server\\150\\DAC\\bin\\SqlPackage.exe\"\nThis will update the path for the SqlPackage.exe in the modules configuration",
        "Syntax": "Set-D365SqlPackagePath [-Path] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365StartPage",
        "Description": "Function for setting the start page in internet explorer",
        "Params": [
                       [
                           "Name",
                           "Name of the D365 Instance",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Url",
                           "URL of the D365 for Finance \u0026 Operations instance that you want to have as your start page",
                           "",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Sets the start page in internet explorer",
        "Name": "Set-D365StartPage",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365StartPage -Name \u0027Demo1\u0027\nThis will update the start page for the current user to \"https://Demo1.cloud.onebox.dynamics.com\"\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eSet-D365StartPage -URL \"https://uat.sandbox.operations.dynamics.com\"\nThis will update the start page for the current user to \"https://uat.sandbox.operations.dynamics.com\"",
        "Syntax": "Set-D365StartPage [-Name] \u003cString\u003e [\u003cCommonParameters\u003e]\nSet-D365StartPage [-Url] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365SysAdmin",
        "Description": "Set a user to sysadmin inside the SQL Server",
        "Params": [
                       [
                           "User",
                           "The user that you want to make sysadmin\nMost be well formatted server\\user or domain\\user.\nDefault value is: machinename\\administrator",
                           "",
                           false,
                           "false",
                           "\"$env:computername\\administrator\""
                       ],
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@splaxi)",
        "Synopsis": "Set a user to sysadmin",
        "Name": "Set-D365SysAdmin",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365SysAdmin\nThis will configure the local administrator on the machine as a SYSADMIN inside SQL Server\nFor this to run you need to be running it from a elevated console\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eSet-D365SysAdmin -SqlPwd Test123\nThis will configure the local administrator on the machine as a SYSADMIN inside SQL Server.\r\nIt will logon as the default SqlUser but use the provided SqlPwd.\nThis can be run from a non-elevated console",
        "Syntax": "Set-D365SysAdmin [[-User] \u003cString\u003e] [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365Tier2Params",
        "Description": "Saves the hashtable as a json string into the configuration store\n\nThis cmdlet is only intended to be used for New-D365Bacpac and Import-D365Bacpac for Tier2 environments",
        "Params": [
                       [
                           "InputObject",
                           "The hashtable containing all the parameters you want to store",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "ConfigStorageLocation",
                           "Parameter used to instruct where to store the configuration objects\nThe default value is \"User\" and this will store all configuration for the active user\nValid options are:\r\n\"User\"\r\n\"System\"\n\"System\" will store the configuration so all users can access the configuration objects",
                           "",
                           false,
                           "false",
                           "User"
                       ],
                       [
                           "Temporary",
                           "Switch to instruct the cmdlet to only temporarily override the persisted settings in the configuration storage",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Save hashtable with parameters",
        "Name": "Set-D365Tier2Params",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003e$params = @{ SqlUser = \"sqladmin\"\nPS C:\\\u003e SqlPwd = \"pass@word1\"\r\nPS C:\\\u003e }\r\nPS C:\\\u003e Set-D365Tier2Params -InputObject $params",
        "Syntax": "Set-D365Tier2Params [-InputObject] \u003cHashtable\u003e [-ConfigStorageLocation \u003cString\u003e] [-Temporary] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365TraceParserFileSize",
        "Description": "Change the maximum file size that the TraceParser generates",
        "Params": [
                       [
                           "FileSizeInMB",
                           "The maximum size that you want to allow the TraceParser file to grow to\nOriginal value inside the configuration is 1024 (MB)",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Path",
                           "The path to the TraceParser.config file that you want to edit\nThe default path is: \"\\AosService\\Webroot\\Services\\TraceParserService\\TraceParserService.config\"",
                           "",
                           false,
                           "false",
                           "(Join-Path $Script:AOSPath \"Services\\TraceParserService\\TraceParserService.config\")"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Configue a new maximum file size for the TraceParser",
        "Name": "Set-D365TraceParserFileSize",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365TraceParserFileSize -FileSizeInMB 2048\nThis will configure the maximum TraceParser file to 2048 MB.",
        "Syntax": "Set-D365TraceParserFileSize [-FileSizeInMB] \u003cString\u003e [[-Path] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365WebConfigDatabase",
        "Description": "Overwrite the current database connection details directly in the web.config file\n\nUsed when you want to connect a DEV box directly to a Tier2 database, and want to debug something that requires better data than usual",
        "Tags": [
                     "DEV",
                     "Tier2",
                     "DB",
                     "Database",
                     "Debug",
                     "JIT",
                     "LCS",
                     "Azure DB"
                 ],
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nObtain when you request JIT (Just-in-Time) access through the LCS portal",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "DatabaseName",
                           "The name of the database\nObtain when you request JIT (Just-in-Time) access through the LCS portal",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance\nObtain when you request JIT (Just-in-Time) access through the LCS portal",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user\nObtain when you request JIT (Just-in-Time) access through the LCS portal",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Path",
                           "Path to the web.config file that you want to update with new SQL connection details\nDefault is: \"K:\\AosService\\WebRoot\\web.config\" or what else drive that is recognized by the D365FO components as the service drive",
                           "",
                           false,
                           "false",
                           "$(Join-Path -Path $Script:AOSPath -ChildPath $Script:WebConfig)"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the database connection details",
        "Name": "Set-D365WebConfigDatabase",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365WebConfigDatabase -DatabaseServer TestServer.database.windows.net -DatabaseName AxDB -SqlUser User123 -SqlPwd \"Password123\"\nWill overwrite Server, Database, Username and Password directly in the web.config file.\r\nIt will save all details unencrypted.",
        "Syntax": "Set-D365WebConfigDatabase [-DatabaseServer] \u003cString\u003e [-DatabaseName] \u003cString\u003e [-SqlUser] \u003cString\u003e [-SqlPwd] \u003cString\u003e [[-Path] \u003cObject\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Set-D365WorkstationMode",
        "Description": "Set the Workstation mode to enabled or not\n\nIt is used to enable the tool to run on a personal machine and still be able to call Invoke-D365TableBrowser and Invoke-D365SysRunnerClass",
        "Params": [
                       [
                           "Enabled",
                           "$True enables the workstation mode while $false deactivated the workstation mode",
                           "",
                           true,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Set the Workstation mode",
        "Name": "Set-D365WorkstationMode",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSet-D365WorkstationMode -Enabled $true\nThis will enable the Workstation mode.\r\nYou will have to restart the powershell session when you switch around.",
        "Syntax": "Set-D365WorkstationMode [-Enabled] \u003cBoolean\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Start-D365Environment",
        "Description": "Can start all relevant services that is running in a D365FO environment",
        "Params": [
                       [
                           "ComputerName",
                           "An array of computers that you want to start services on.",
                           "",
                           false,
                           "false",
                           "@($env:computername)"
                       ],
                       [
                           "All",
                           "Set when you want to start all relevant services\nIncludes:\r\nAos\r\nBatch\r\nFinancial Reporter",
                           "",
                           false,
                           "false",
                           "True"
                       ],
                       [
                           "Aos",
                           "Start the Aos (iis) service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "Batch",
                           "Start the batch service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "FinancialReporter",
                           "Start the financial reporter (Management Reporter 2012) service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "DMF",
                           "Start the Data Management Framework service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "OnlyStartTypeAutomatic",
                           "Instruct the cmdlet to filter out services that are set to manual start or disabled",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Cmdlet to start the different services in a Dynamics 365 Finance \u0026 Operations environment",
        "Name": "Start-D365Environment",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eStart-D365Environment\nThis will run the cmdlet with the default parameters.\r\nDefault is \"-All\".\r\nThis will start all D365FO services on the machine.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eStart-D365Environment -OnlyStartTypeAutomatic\nThis will start all D365FO services on the machine that are configured for Automatic startup.\r\nIt will exclude all services that are either manual or disabled in their startup configuration.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eStart-D365Environment -ShowOriginalProgress\nThis will run the cmdlet with the default parameters.\r\nDefault is \"-All\".\r\nThis will start all D365FO services on the machine.\r\nThe progress of starting the different services will be written to the console / host.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eStart-D365Environment -All\nThis will start all D365FO services on the machine.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eStart-D365Environment -Aos -Batch\nThis will start the Aos \u0026 Batch D365FO services on the machine.\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eStart-D365Environment -FinancialReporter -DMF\nThis will start the FinancialReporter and DMF services on the machine.",
        "Syntax": "Start-D365Environment [[-ComputerName] \u003cString[]\u003e] [[-All]] [-OnlyStartTypeAutomatic] [-ShowOriginalProgress] [\u003cCommonParameters\u003e]\nStart-D365Environment [[-ComputerName] \u003cString[]\u003e] [[-Aos]] [[-Batch]] [[-FinancialReporter]] [[-DMF]] [-OnlyStartTypeAutomatic] [-ShowOriginalProgress] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Start-D365EventTrace",
        "Description": "Start an Event Trace session with default values to help you getting started",
        "Tags": [
                     "ETL",
                     "EventTracing",
                     "EventTrace"
                 ],
        "Params": [
                       [
                           "ProviderName",
                           "Name of the provider(s) you want to have part of your trace\nAccepts an array/list of provider names",
                           "",
                           true,
                           "true (ByValue, ByPropertyName)",
                           ""
                       ],
                       [
                           "OutputPath",
                           "Path to the output folder where you want to store the ETL file that will be generated\nDefault path is \"C:\\Temp\\d365fo.tools\\EventTrace\"",
                           "",
                           false,
                           "false",
                           "(Join-Path -Path $Script:DefaultTempPath -ChildPath \"EventTrace\")"
                       ],
                       [
                           "SessionName",
                           "Name that you want the tracing session to have while running the trace\nDefault value is \"d365fo.tools.trace\"",
                           "",
                           false,
                           "false",
                           "d365fo.tools.trace"
                       ],
                       [
                           "FileName",
                           "Name of the file that you want the trace to write its output to\nDefault value is \"d365fo.tools.trace.etl\"",
                           "",
                           false,
                           "false",
                           "d365fo.tools.trace.etl"
                       ],
                       [
                           "OutputFormat",
                           "The desired output format of the ETL file being outputted from the tracing session\nDefault value is \"bincirc\"",
                           "",
                           false,
                           "false",
                           "bincirc"
                       ],
                       [
                           "MinBuffer",
                           "The minimum buffer size in MB that you want the tracing session to work with\nDefault value is 10240",
                           "",
                           false,
                           "false",
                           "10240"
                       ],
                       [
                           "MaxBuffer",
                           "The maximum buffer size in MB that you want the tracing session to work with\nDefault value is 10240",
                           "",
                           false,
                           "false",
                           "10240"
                       ],
                       [
                           "BufferSizeKB",
                           "The buffer size in KB that you want the tracing session to work with\nDefault value is 1024",
                           "",
                           false,
                           "false",
                           "1024"
                       ],
                       [
                           "MaxLogFileSizeMB",
                           "The maximum log file size in MB that you want the tracing session to work with\nDefault value is 4096",
                           "",
                           false,
                           "false",
                           "4096"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Start an Event Trace session",
        "Name": "Start-D365EventTrace",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eStart-D365EventTrace -ProviderName \"Microsoft-Dynamics-AX-FormServer\",\"Microsoft-Dynamics-AX-XppRuntime\"\nThis will start a new Event Tracing session with the binary circular output format.\r\nIt uses \"Microsoft-Dynamics-AX-FormServer\",\"Microsoft-Dynamics-AX-XppRuntime\" as the providernames.\r\nIt uses the default output folder \"C:\\Temp\\d365fo.tools\\EventTrace\".\nIt will use the default values for the remaining parameters.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eStart-D365EventTrace -ProviderName \"Microsoft-Dynamics-AX-FormServer\",\"Microsoft-Dynamics-AX-XppRuntime\" -OutputFormat CSV\nThis will start a new Event Tracing session with the comma separated output format.\r\nIt uses \"Microsoft-Dynamics-AX-FormServer\",\"Microsoft-Dynamics-AX-XppRuntime\" as the providernames.\r\nIt uses the default output folder \"C:\\Temp\\d365fo.tools\\EventTrace\".\nIt will use the default values for the remaining parameters.",
        "Syntax": "Start-D365EventTrace [-ProviderName] \u003cString[]\u003e [[-OutputPath] \u003cString\u003e] [[-SessionName] \u003cString\u003e] [[-FileName] \u003cString\u003e] [[-OutputFormat] \u003cString\u003e] [[-MinBuffer] \u003cInt32\u003e] [[-MaxBuffer] \u003cInt32\u003e] [[-BufferSizeKB] \u003cInt32\u003e] [[-MaxLogFileSizeMB] \u003cInt32\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Stop-D365Environment",
        "Description": "Can stop all relevant services that is running in a D365FO environment",
        "Params": [
                       [
                           "ComputerName",
                           "An array of computers that you want to stop services on.",
                           "",
                           false,
                           "false",
                           "@($env:computername)"
                       ],
                       [
                           "All",
                           "Set when you want to stop all relevant services\nIncludes:\r\nAos\r\nBatch\r\nFinancial Reporter",
                           "",
                           false,
                           "false",
                           "True"
                       ],
                       [
                           "Aos",
                           "Stop the Aos (iis) service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "Batch",
                           "Stop the batch service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "FinancialReporter",
                           "Start the financial reporter (Management Reporter 2012) service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "DMF",
                           "Start the Data Management Framework service",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "Kill",
                           "Instructs the cmdlet to kill the service(s) that you want to stop",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "ShowOriginalProgress",
                           "Instruct the cmdlet to show the standard output in the console\nDefault is $false which will silence the standard output",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Cmdlet to stop the different services in a Dynamics 365 Finance \u0026 Operations environment",
        "Name": "Stop-D365Environment",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eStop-D365Environment\nThis will run the cmdlet with the default parameters.\r\nDefault is \"-All\".\r\nThis will stop all D365FO services on the machine.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eStop-D365Environment -ShowOriginalProgress\nThis will run the cmdlet with the default parameters.\r\nDefault is \"-All\".\r\nThis will Stop all D365FO services on the machine.\r\nThe progress of Stopping the different services will be written to the console / host.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eStop-D365Environment -All\nThis will stop all D365FO services on the machine.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eStop-D365Environment -Aos -Batch\nThis will stop the Aos \u0026 Batch D365FO services on the machine.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eStop-D365Environment -FinancialReporter -DMF\nThis will stop the FinancialReporter and DMF services on the machine.\n-------------------------- EXAMPLE 6 --------------------------\nPS C:\\\u003eStop-D365Environment -All -Kill\nThis will stop all D365FO services on the machine.\r\nIt will use the Kill parameter to make sure that the services is stopped.",
        "Syntax": "Stop-D365Environment [[-ComputerName] \u003cString[]\u003e] [[-All]] [[-Kill]] [[-ShowOriginalProgress]] [\u003cCommonParameters\u003e]\nStop-D365Environment [[-ComputerName] \u003cString[]\u003e] [[-Aos]] [[-Batch]] [[-FinancialReporter]] [[-DMF]] [[-Kill]] [[-ShowOriginalProgress]] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Stop-D365EventTrace",
        "Description": "Stop an Event Trace session that you have started earlier with the d365fo.tools",
        "Tags": [
                     "ETL",
                     "EventTracing",
                     "EventTrace"
                 ],
        "Params": [
                       [
                           "SessionName",
                           "Name of the tracing session that you want to stop\nDefault value is \"d365fo.tools.trace\"",
                           "",
                           false,
                           "false",
                           "d365fo.tools.trace"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Stop an Event Trace session",
        "Name": "Stop-D365EventTrace",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eStop-D365EventTrace\nThis will stop an Event Trace session.\r\nIt will use the \"d365fo.tools.trace\" as the SessionName parameter.",
        "Syntax": "Stop-D365EventTrace [[-SessionName] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Switch-D365ActiveDatabase",
        "Description": "Switches the 2 databases. The Old wil be renamed _original",
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "DestinationDatabaseName",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "SourceDatabaseName",
                           "The database that takes the DatabaseName\u0027s place",
                           "NewDatabaseName",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "DestinationSuffix",
                           "The suffix that you want to append onto the database that is being switched out (DestinationDatabaseName / DatabaseName)\nThe default value is \"_original\" to mimic the official guides from Microsoft",
                           "",
                           false,
                           "false",
                           "_original"
                       ],
                       [
                           "EnableException",
                           "This parameters disables user-friendly warnings and enables the throwing of exceptions\r\nThis is less user friendly, but allows catching exceptions in calling scripts",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Switches the 2 databases. The Old wil be renamed _original",
        "Name": "Switch-D365ActiveDatabase",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eSwitch-D365ActiveDatabase -SourceDatabaseName \"GoldenConfig\"\nThis will switch the default database AXDB out and put \"GoldenConfig\" in its place instead.\r\nIt will use the default value for DestinationSuffix which is \"_original\".\r\nThe destination database \"AXDB\" will be renamed to \"AXDB_original\".\r\nThe GoldenConfig database will be renamed to \"AXDB\".\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eSwitch-D365ActiveDatabase -SourceDatabaseName \"AXDB_original\" -DestinationSuffix \"_reverted\"\nThis will switch the default database AXDB out and put \"AXDB_original\" in its place instead.\r\nIt will use the \"_reverted\" value for DestinationSuffix parameter.\r\nThe destination database \"AXDB\" will be renamed to \"AXDB_reverted\".\r\nThe \"AXDB_original\" database will be renamed to \"AXDB\".\nThis is used when you did a switch already and need to switch back to the original database.\nThis example assumes that the used the first example to switch in the GoldenConfig database with default parameters.",
        "Syntax": "Switch-D365ActiveDatabase [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [-SourceDatabaseName] \u003cString\u003e [[-DestinationSuffix] \u003cString\u003e] [-EnableException] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Test-D365Command",
        "Description": "Analyze a function and it\u0027s parameters\n\nThe cmdlet / function is capable of validating a string input with function name and parameters",
        "Params": [
                       [
                           "CommandText",
                           "The string that you want to analyze\nIf there is parameter value present, you have to use the opposite quote strategy to encapsulate the string correctly\nE.g. for double quotes\r\n-CommandText \u0027Import-D365Bacpac -ImportModeTier2 -SqlUser \"sqladmin\" -SqlPwd \"XyzXyz\" -BacpacFile2 \"C:\\temp\\uat.bacpac\"\u0027\nE.g. for single quotes\r\n-CommandText \"Import-D365Bacpac -ExportModeTier2 -SqlUser \u0027sqladmin\u0027 -SqlPwd \u0027XyzXyz\u0027 -BacpacFile2 \u0027C:\\temp\\uat.bacpac\u0027\"",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Mode",
                           "The operation mode of the cmdlet / function\nValid options are:\r\n- Validate\r\n- ShowParameters",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "SplatInput",
                           "Pass in your hashtable that you use for your command execution and have it validated",
                           "",
                           false,
                           "false",
                           ""
                       ],
                       [
                           "ShowSplatStyleV1",
                           "Include an hashtable splatting for all parameter sets in the output\nThe example is built like this:\r\nPS C:\\\u003e $params = @{}\r\nPS C:\\\u003e $params.PropertyName = \"SAMPLEVALUE\"\r\nPS C:\\\u003e Test-FakeCommand @params",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "ShowSplatStyleV2",
                           "Include an hashtable splatting for all parameter sets in the output\nThe example is built like this:\r\nPS C:\\\u003e $params = @{\r\nPS C:\\\u003e PropertyName = \"SAMPLEVALUE\"\r\nPS C:\\\u003e }\r\nPS C:\\\u003e Test-FakeCommand @params",
                           "",
                           false,
                           "false",
                           "False"
                       ],
                       [
                           "IncludeHelp",
                           "Switch to instruct the cmdlet / function to output a simple guide with the colors in it",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Validate or show parameter set details with colored output",
        "Name": "Test-D365Command",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eTest-D365Command -CommandText \u0027Import-D365Bacpac -ImportModeTier2 -SqlUser \"sqladmin\" -SqlPwd \"XyzXyz\" -BacpacFile2 \"C:\\temp\\uat.bacpac\"\u0027 -Mode \"Validate\" -IncludeHelp\nThis will validate all the parameters that have been passed to the Import-D365Bacpac cmdlet.\r\nAll supplied parameters that matches a parameter will be marked with an asterisk.\r\nWill print the coloring help.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eTest-D365Command -CommandText \u0027Import-D365Bacpac\u0027 -Mode \"ShowParameters\" -IncludeHelp\nThis will display all the parameter sets and their individual parameters.\r\nWill print the coloring help.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003e$params = @{}\nPS C:\\\u003e $params.DatabaseName = \"SAMPLEVALUE\"\r\nPS C:\\\u003e Test-D365Command -CommandText \u0027Import-D365Bacpac -ImportModeTier2\u0027 -SplatInput $params -Mode \"Validate\"\nThis builds a hashtable with a property names \"DatabaseName\".\r\nThe hashtable is passed to the cmdlet to be part of the validation.",
        "Syntax": "Test-D365Command [-CommandText] \u003cString\u003e [-Mode] \u003cString\u003e [-SplatInput \u003cHashtable\u003e] [-ShowSplatStyleV1] [-ShowSplatStyleV2] [-IncludeHelp] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Test-D365FlightServiceCatalogId",
        "Description": "Test if the FlightingServiceCatalogID element exists in the web.config file used by D365FO",
        "Tags": [
                     "Flight",
                     "Flighting"
                 ],
        "Params": [
                       [
                           "AosServiceWebRootPath",
                           "Path to the root folder where to locate the web.config file",
                           "",
                           false,
                           "false",
                           "$Script:AOSPath"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi))",
        "Synopsis": "Test if the FlightingServiceCatalogID is present and filled out",
        "Name": "Test-D365FlightServiceCatalogId",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eTest-D365FlightServiceCatalogId\nThis will open the web.config and check if the FlightingServiceCatalogID element is present or not.",
        "Syntax": "Test-D365FlightServiceCatalogId [[-AosServiceWebRootPath] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Test-D365LabelIdIsValid",
        "Description": "This function will validate if a string is a valid \u0027Label Id\u0027 format.",
        "Params": [
                       [
                           "LabelId",
                           "The LabelId string thay you want to validate",
                           "",
                           true,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Alex Kwitny (@AlexOnDAX)",
        "Synopsis": "Checks if a string is a valid \u0027Label Id\u0027 format",
        "Name": "Test-D365LabelIdIsValid",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\u003eTest-D365LabelIdIsValid -LabelId \"ABC123\"\nThis will test the if the LabelId is valid.\r\nIt will use the \"ABC123\" as the LabelId parameter.\nThe expected result is $true\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\u003eTest-D365LabelIdIsValid -LabelId \"@ABC123\"\nThis will test the if the LabelId is valid.\r\nIt will use the \"@ABC123\" as the LabelId parameter.\nThe expected result is $true\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\u003eTest-D365LabelIdIsValid -LabelId \"@ABC123_1\"\nThis will test the if the LabelId is valid.\r\nIt will use the \"@ABC123_1\" as the LabelId parameter.\nThe expected result is $false\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\u003eTest-D365LabelIdIsValid -LabelId \"ABC.123\" #False\nThis will test the if the LabelId is valid.\r\nIt will use the \"ABC.123\" as the LabelId parameter.\nThe expected result is $false",
        "Syntax": "Test-D365LabelIdIsValid [-LabelId] \u003cString\u003e [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Update-D365BacpacModelFileSingleTable",
        "Description": "Update the \"model.xml\" file from inside the bacpac file to only handle a single table\n\nThis can be used to restore a single table as fast as possible to a new data\n\nThe table will be created like ordinary bacpac restore, expect it will only have the raw table definition and indexes, all other objects are dropped\n\nThe output can be used directly with the Import-D365Bacpac cmdlet and its ModelFile parameter, see the example sections for more details",
        "Tags": [
                     "Bacpac",
                     "Servicing",
                     "Data",
                     "SqlPackage",
                     "Import",
                     "Table",
                     "Troubleshooting"
                 ],
        "Params": [
                       [
                           "Path",
                           "Path to the bacpac file that you want to work against\nIt can also be a zip file",
                           "File,ModelFile",
                           false,
                           "true (ByValue, ByPropertyName)",
                           ""
                       ],
                       [
                           "Table",
                           "Name of the table that you want to be kept inside the model file when the update is done",
                           "",
                           true,
                           "false",
                           ""
                       ],
                       [
                           "Schema",
                           "Schema where the table that you want to work against exists\nThe default value is \"dbo\"",
                           "",
                           false,
                           "false",
                           "dbo"
                       ],
                       [
                           "OutputPath",
                           "Path to where you want the updated bacpac model file to be saved\nDefault value is: \"c:\\temp\\d365fo.tools\"",
                           "",
                           false,
                           "false",
                           "$Script:DefaultTempPath"
                       ],
                       [
                           "Force",
                           "Switch to instruct the cmdlet to overwrite the bacpac model file specified in the OutputPath",
                           "",
                           false,
                           "false",
                           "False"
                       ]
                   ],
        "Alias": "",
        "Author": "Mötz Jensen (@Splaxi)",
        "Synopsis": "Update the \"model.xml\" from the bacpac file to a single table",
        "Name": "Update-D365BacpacModelFileSingleTable",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eUpdate-D365BacpacModelFileSingleTable -Path \"c:\\temp\\d365fo.tools\\bacpac.model.xml\" -Table \"SalesTable\"\nThis will create an updated bacpac.model.xml file with only the SalesTable to be imported.\r\nIt will read the \"c:\\temp\\d365fo.tools\\bacpac.model.xml\" file.\r\nIt will use the default \"dbo\" as the Schema parameter.\r\nIt will use the \"SalesTable\" as the Table parameter.\r\nIt will use the \"c:\\temp\\d365fo.tools\\dbo.salestable.model.xml\" as the default path for OutputPath parameter.\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eUpdate-D365BacpacModelFileSingleTable -Path \"c:\\temp\\d365fo.tools\\bacpac.model.xml\" -Table \"CommissionSalesGroup\" -Schema \"AX\"\nThis will create an updated bacpac.model.xml file with only the \"CommissionSalesGroup\", from the \"AX\" schema, to be imported.\r\nIt will read the \"c:\\temp\\d365fo.tools\\bacpac.model.xml\" file.\r\nIt will use the \"AX\" as the Schema for the table.\r\nIt will use the \"CommissionSalesGroup\" as the Table parameter.\r\nIt will use the \"c:\\temp\\d365fo.tools\\ax.CommissionSalesGroup.model.xml\" as the default path for OutputPath parameter.\n-------------------------- EXAMPLE 3 --------------------------\nPS C:\\\u003eUpdate-D365BacpacModelFileSingleTable -Path \"c:\\temp\\d365fo.tools\\bacpac.model.xml\" -Table \"SalesTable\" -OutputPath \"c:\\temp\\troubleshoot.xml\"\nThis will create an updated bacpac.model.xml file with only the SalesTable to be imported.\r\nIt will read the \"c:\\temp\\d365fo.tools\\bacpac.model.xml\" file.\r\nIt will use the default \"dbo\" as the Schema parameter.\r\nIt will use the \"SalesTable\" as the Table parameter.\r\nIt will use the \"c:\\temp\\troubleshoot.xml\" as the path for OutputPath parameter.\n-------------------------- EXAMPLE 4 --------------------------\nPS C:\\\u003eExport-D365BacpacModelFile -Path \"c:\\Temp\\AxDB.bacpac\" | Update-D365BacpacModelFileSingleTable -Table SalesTable\nThis will create an updated bacpac.model.xml file with only the SalesTable to be imported.\r\nIt will read the bacpac model file generated from the Export-D365BacpacModelFile cmdlet.\r\nIt will use the default \"dbo\" as the Schema parameter.\r\nIt will use the \"SalesTable\" as the Table parameter.\r\nIt will use the \"c:\\temp\\d365fo.tools\\dbo.salestable.model.xml\" as the default path for OutputPath parameter.\n-------------------------- EXAMPLE 5 --------------------------\nPS C:\\\u003eUpdate-D365BacpacModelFileSingleTable -Path \"c:\\temp\\d365fo.tools\\bacpac.model.xml\" -Table \"SalesTable\" -Force\nThis will create an updated bacpac.model.xml file with only the SalesTable to be imported.\r\nIt will read the \"c:\\temp\\d365fo.tools\\bacpac.model.xml\" file.\r\nIt will use the default \"dbo\" as the Schema parameter.\r\nIt will use the \"SalesTable\" as the Table parameter.\r\nIt will use the \"c:\\temp\\d365fo.tools\\dbo.salestable.model.xml\" as the default path for OutputPath parameter.\nIt will overwrite the \"c:\\temp\\d365fo.tools\\dbo.salestable.model.xml\" if it already exists.",
        "Syntax": "Update-D365BacpacModelFileSingleTable [[-Path] \u003cString\u003e] [-Table] \u003cString\u003e [[-Schema] \u003cString\u003e] [[-OutputPath] \u003cString\u003e] [-Force] [\u003cCommonParameters\u003e]"
    },
    {
        "CommandName": "Update-D365User",
        "Description": "Is capable of updating all the user details inside the UserInfo table to enable a user to sign in",
        "Params": [
                       [
                           "DatabaseServer",
                           "The name of the database server\nIf on-premises or classic SQL Server, use either short name og Fully Qualified Domain Name (FQDN).\nIf Azure use the full address to the database server, e.g. server.database.windows.net",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseServer"
                       ],
                       [
                           "DatabaseName",
                           "The name of the database",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseName"
                       ],
                       [
                           "SqlUser",
                           "The login name for the SQL Server instance",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserName"
                       ],
                       [
                           "SqlPwd",
                           "The password for the SQL Server user",
                           "",
                           false,
                           "false",
                           "$Script:DatabaseUserPassword"
                       ],
                       [
                           "Email",
                           "The search string to select which user(s) should be updated.\nThe parameter supports wildcards. E.g. -Email \"*@contoso.com*\"",
                           "",
                           true,
                           "true (ByPropertyName)",
                           ""
                       ],
                       [
                           "Company",
                           "The company the user should start in.",
                           "",
                           false,
                           "false",
                           ""
                       ]
                   ],
        "Alias": "",
        "Author": "Rasmus Andersen (@ITRasmus)",
        "Synopsis": "Updates the user details in the database",
        "Name": "Update-D365User",
        "Links": null,
        "Examples": "-------------------------- EXAMPLE 1 --------------------------\nPS C:\\\u003eUpdate-D365User -Email \"claire@contoso.com\"\nThis will search for the user with the e-mail address claire@contoso.com and update it with needed information based on the tenant owner of the environment\n-------------------------- EXAMPLE 2 --------------------------\nPS C:\\\u003eUpdate-D365User -Email \"*contoso.com\"\nThis will search for all users with an e-mail address containing \u0027contoso.com\u0027 and update them with needed information based on the tenant owner of the environment",
        "Syntax": "Update-D365User [[-DatabaseServer] \u003cString\u003e] [[-DatabaseName] \u003cString\u003e] [[-SqlUser] \u003cString\u003e] [[-SqlPwd] \u003cString\u003e] [-Email] \u003cString\u003e [[-Company] \u003cString\u003e] [\u003cCommonParameters\u003e]"
    }
]