en-us/about_AutomatedLabAdvanced.help.txt

TOPIC
    about_automatedlabadvanced
 
SHORT DESCRIPTION
    Generic help about the advanced mechanics of AutomatedLab
 
LONG DESCRIPTION
The AutomatedLab settings system
    Since AutomatedLab version 5 we are using user-specific and global settings,
    managed with the module
    PSFramework
    .
    To view all settings, you may use the `Get-LabConfigurationItem` cmdlet. For
    a bit of documentation, refer to `Get-PSFConfig -Module AutomatedLab`
    instead. If you don't know what a setting does, please do not set it. If you
    do know what the setting does, feel free to do so:
 
 
    ## One session only, then reset to default
    Set-PSFConfig -Module AutomatedLab -Name MacAddressPrefix -Value '0017FC'
     
    ## Persistent setting, survives module updates
    Set-PSFConfig -Module AutomatedLab -Name MacAddressPrefix -Value '0017FC' -PassThru | Register-PSFConfig
 
    AVAILABLE SETTINGS
    ACCESSDATABASEENGINE2016X86
    Link to Access Database Engine (required for DSC Pull)
    Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/3/5/C/35C84C36-661A-44E6-9324-8786B8DBE231/AccessDatabaseEngine.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.AccessDatabaseEngine2016x86
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    AUTOSYNCLABSOURCES
    Toggle auto-sync of Azure lab sources in Azure labs
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.AutoSyncLabSources -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    AZUREDISABLELABSOURCESSTORAGE
    Enable this setting to opt out of creating Lab Sources storage. This will
    prolong your lab deployment times significantly, if ISOs have to be mounted
    or large files have to be copied.
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.AzureDisableLabSourcesStorage -Value <YourValue> -PassThru |
    Register-PSFConfig`
 
    AZUREDISKSKUS
    SKU for Azure VM Managed Disk, no UltraSSDs
Data type: System.Object[]
 
    Hidden?: False
 
    Default value: Standard_LRS Premium_LRS StandardSSD_LRS
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.AzureDiskSkus -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    AZUREENABLEJIT
    Enable this setting to have AutomatedLab configure ports 22, 3389 and 5986
    for JIT access. Can be done manually with Enable-LabAzureJitAccess and
    requested (after enabling) with Request-LabAzureJitAccess
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.AzureEnableJit -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    AZURELOCATIONSURLS
    Hashtable containing all Azure Speed Test URLs for automatic region placement
    Data type: System.Collections.Hashtable
 
    Hidden?: False
 
    Default value: System.Collections.Hashtable
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.AzureLocationsUrls -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    AZURERETRYCOUNT
    The number of retries for Azure actions like creating a virtual network
    Data type: System.Int32
 
    Hidden?: False
 
    Default value: 3
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.AzureRetryCount -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    BUILDAGENTURI
    Link to Azure DevOps/VSTS Build Agent
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.agent.dev.azure.com/agent/4.258.1/vsts-agent-win-x64-4.258.1.zip
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.BuildAgentUri -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    CONFIGURATIONMANAGERURL1902CB
    Link to ConfigMgr 1902 CB
Data type: System.String
 
    Hidden?: False
 
    Default value:
    http://download.microsoft.com/download/1/B/C/1BCADBD7-47F6-40BB-8B1F-0B2D9B51B289/SC_Configmgr_SCEP_1902.exe
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.ConfigurationManagerUrl1902CB -Value <YourValue> -PassThru |
    Register-PSFConfig`
 
    CONFIGURATIONMANAGERURL2002CB
    Link to ConfigMgr 2002 CB
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/e/0/a/e0a2dd5e-2b96-47e7-9022-3030f8a1807b/MEM_Configmgr_2002.exe
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.ConfigurationManagerUrl2002CB -Value <YourValue> -PassThru |
    Register-PSFConfig`
 
    CONFIGURATIONMANAGERURL2103CB
    Link to ConfigMgr 2103 CB
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/8/8/8/888d525d-5523-46ba-aca8-4709f54affa8/MEM_Configmgr_2103.exe
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.ConfigurationManagerUrl2103CB -Value <YourValue> -PassThru |
    Register-PSFConfig`
 
    CONFIGURATIONMANAGERURL2203CB
    Link to ConfigMgr 2203 CB
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/f/5/5/f55e3b9c-781d-493b-932b-16aa1b2f6371/MEM_Configmgr_2203.exe
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.ConfigurationManagerUrl2203CB -Value <YourValue> -PassThru |
    Register-PSFConfig`
 
    CONFIGURATIONMANAGERURL2411TP
    Link to ConfigMgr 2411 TP
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/D/8/E/D8E795CE-44D7-40B7-9067-D3D1313865E5/ConfigMgr_TechPreview2411.exe
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.ConfigurationManagerUrl2411TP -Value <YourValue> -PassThru |
    Register-PSFConfig`
 
    CONFIGURATIONMANAGERWMIEXPLORER
    Link to WMI explorer
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://github.com/vinaypamnani/wmie2/releases/download/v2.0.0.2/WmiExplorer_2.0.0.2.zip
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.ConfigurationManagerWmiExplorer -Value <YourValue> -PassThru |
    Register-PSFConfig`
 
    CPPREDIST32_2012
    Link to VC++ redist 2012 (x86)
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x86.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.cppredist32_2012 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    CPPREDIST32_2013
    Link to VC++ redist 2013 (x86)
Data type: System.String
 
    Hidden?: False
 
    Default value: https://aka.ms/highdpimfc2013x86enu
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.cppredist32_2013 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    CPPREDIST32_2015
    Link to VC++ redist 2015 (x86)
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x86.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.cppredist32_2015 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    CPPREDIST32_2017
    Link to VC++ redist 2017 (x86)
Data type: System.String
 
    Hidden?: False
 
    Default value: https://aka.ms/vs/15/release/vc_redist.x86.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.cppredist32_2017 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    CPPREDIST64_2010
    Link to VC++ redist 2010 (x64)
Data type: System.String
 
    Hidden?: False
 
    Default value: http://go.microsoft.com/fwlink/?LinkId=404264&clcid=0x409
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.cppredist64_2010 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    CPPREDIST64_2012
    Link to VC++ redist 2012 (x64)
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.cppredist64_2012 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    CPPREDIST64_2013
    Link to VC++ redist 2013 (x64)
Data type: System.String
 
    Hidden?: False
 
    Default value: https://aka.ms/highdpimfc2013x64enu
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.cppredist64_2013 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    CPPREDIST64_2015
    Link to VC++ redist 2015 (x64)
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.cppredist64_2015 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    CPPREDIST64_2017
    Link to VC++ redist 2017 (x64)
Data type: System.String
 
    Hidden?: False
 
    Default value: https://aka.ms/vs/15/release/vc_redist.x64.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.cppredist64_2017 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    CREATEONLYREFERENCEDDISKS
    Disks that are not references by a VM will not be created
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: True
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.CreateOnlyReferencedDisks
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    DEFAULTADDRESSSPACE
    Default address space if no address space is selected
    Data type: System.String
 
    Hidden?: False
 
    Default value: 192.168.10.0/24
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DefaultAddressSpace -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DEFAULTAZUREROLESIZE
    The default Azure role size, e.g. from Get-LabAzureAvailableRoleSize
    Data type: System.String
 
    Hidden?: False
 
    Default value: D
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DefaultAzureRoleSize -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DEFAULTDNSFORWARDER1
    If routing is installed on a Root DC, this forwarder is used
    Data type: System.String
 
    Hidden?: False
 
    Default value: 1.1.1.1
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DefaultDnsForwarder1 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DEFAULTDNSFORWARDER2
    If routing is installed on a Root DC, this forwarder is used
    Data type: System.String
 
    Hidden?: False
 
    Default value: 8.8.8.8
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DefaultDnsForwarder2 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DEFAULTPROGRESSINDICATOR
    After how many minutes will a progress indicator be written
    Data type: System.Int32
 
    Hidden?: False
 
    Default value: 10
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DefaultProgressIndicator
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    DISABLECLUSTERCHECK
    Set to true to disable checking cluster with Get-LWHyperVVM in case you are
    suffering from performance issues. Caution: While this speeds up deployment,
    the likelihood for errors increases when machines are migrated away from the host!
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DisableClusterCheck -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DISABLECONNECTIVITYCHECK
    Indicates whether connectivity checks should be skipped. Certain systems
    like Azure DevOps build workers do not send ICMP packges and the method
    might always fail
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DisableConnectivityCheck
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    DISABLEDEVICENAMING
    Disables Device Naming for VM NICs. Enabled by default for Hosts > 2016 and
    Gen 2 Guests > 2016
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DisableDeviceNaming -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DISABLEVERSIONCHECK
    Set to true to skip checking GitHub for an updated AutomatedLab release
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DisableVersionCheck -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DISABLEWINDOWSDEFENDER
    Indicates that Windows Defender should be disabled on the lab VMs
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: True
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DisableWindowsDefender
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    DISKDEPLOYMENTINPROGRESSPATH
    The file indicating that Hyper-V disks are being configured to reduce disk congestion
    Data type: System.Management.Automation.PSObject
 
    Hidden?: False
 
    Default value: $HOME/.automatedlab/LabDiskDeploymentInProgress.txt
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DiskDeploymentInProgressPath
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    DISKFILENAME
    The file name for the deserialized disks. Do not change unless you know what
    you are doing.
    Data type: System.String
 
    Hidden?: False
 
    Default value: Disks.xml
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DiskFileName -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DONOTADDVMSTOCLUSTER
    Set to true to skip adding VMs to a cluster if AutomatedLab is being run on
    a cluster node
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DoNotAddVmsToCluster -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DONOTPROMPT
    Indicates that AutomatedLab should not display prompts. Workaround for
    environments that register as interactive, even if they are not. Skips
    enabling telemetry, skips Azure lab sources sync, forcibly configures remoting
    Data type: System.Boolean
 
    Hidden?: True
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DoNotPrompt -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DONOTSKIPNONNONENGLISHISO
    Indicates that non English ISO files will not be skipped
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DoNotSkipNonNonEnglishIso
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    DONOTUSEGETHOSTENTRYINNEWLABPSSESSION
    Do not use hosts file for session creation
Data type: System.Boolean
 
    Hidden?: False
 
    Default value: True
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.DoNotUseGetHostEntryInNewLabPSSession -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    DONOTWAITFORLINUX
    Indicates that you will not wait for Linux VMs to be ready, e.g. because you
    are offline and PowerShell cannot be installed.
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DoNotWaitForLinux -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DOTNET452DOWNLOADLINK
    Link to .NET 4.5.2
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/E/2/1/E21644B5-2DF2-47C2-91BD-63C560427900/NDP452-KB2901907-x86-x64-AllOS-ENU.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.dotnet452DownloadLink -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DOTNET462DOWNLOADLINK
    Link to .NET 4.6.2
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/8/b/7/8b79adc2-162c-4cf4-a200-3aeaadc455bf/NDP462-KB3151800-x86-x64-AllOS-ENU.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.dotnet462DownloadLink -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DOTNET46DOWNLOADLINK
    Link to .NET 4.6
Data type: System.String
 
    Hidden?: False
 
    Default value:
    http://download.microsoft.com/download/6/F/9/6F9673B1-87D1-46C4-BF04-95F24C3EB9DA/enu_netfx/NDP46-KB3045557-x86-x64-AllOS-ENU_exe/NDP46-KB3045557-x86-x64-AllOS-ENU.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.dotnet46DownloadLink -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DOTNET471DOWNLOADLINK
    Link to .NET 4.7.1
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/8/b/7/8b79adc2-162c-4cf4-a200-3aeaadc455bf/NDP471-KB4033342-x86-x64-AllOS-ENU.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.dotnet471DownloadLink -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DOTNET472DOWNLOADLINK
    Link to .NET 4.7.2
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/f/3/a/f3a6af84-da23-40a5-8d1c-49cc10c8e76f/NDP472-KB4054530-x86-x64-AllOS-ENU.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.dotnet472DownloadLink -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DOTNET48DOWNLOADLINK
    Link to .NET 4.8
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.visualstudio.microsoft.com/download/pr/7afca223-55d2-470a-8edc-6a1739ae3252/abd170b4b0ec15ad0222a809b761a036/ndp48-x86-x64-allos-enu.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.dotnet48DownloadLink -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DSCMOFPATH
    Default path for MOF files on Pull server
Data type: System.String
 
    Hidden?: False
 
    Default value: DscConfigurations
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DscMofPath -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    DSCPULLSERVERREGISTRATIONKEY
    DSC registration key used on all Dsc Pull servers and clients
    Data type: System.String
 
    Hidden?: False
 
    Default value: ec717ee9-b343-49ee-98a2-26e53939eecf
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.DscPullServerRegistrationKey
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    DYNAMICS365URI
    Dynamics 365 Download URI, defaults to CRM9.0
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/B/D/0/BD0FA814-9885-422A-BA0E-54CBB98C8A33/CRM9.0-Server-ENU-amd64.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Dynamics365Uri -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    EXCHANGE2013DOWNLOADURL
    Download url for Exchange Server 2013 exe
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/7/F/D/7FDCC96C-26C0-4D49-B5DB-5A8B36935903/Exchange2013-x64-cu23.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Exchange2013DownloadUrl
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    EXCHANGE2016DOWNLOADURL
    Download url for Exchange Server 2016 ISO
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/8/d/2/8d2d01b4-5bbb-4726-87da-0e331bc2b76f/ExchangeServer2016-x64-CU23.ISO
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Exchange2016DownloadUrl
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    EXCHANGE2019DOWNLOADURL
    Download url for Exchange Server 2019 ISO
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/b/c/7/bc766694-8398-4258-8e1e-ce4ddb9b3f7d/ExchangeServer2019-x64-CU12.ISO
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Exchange2019DownloadUrl
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    IISURLREWRITEDOWNLOADURL
    Link to IIS URL Rewrite Module needed for Exchange 2016 and 2019
    Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/1/2/8/128E2E22-C1B9-44A4-BE2A-5859ED1D4592/rewrite_amd64_en-US.msi
 
    Set with: `Set-PSFConfig -FullName automatedlab.IisUrlRewriteDownloadUrl
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    INVOKELABCOMMANDRETRIES
    Number of retries for Invoke-LabCommand
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 3
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.InvokeLabCommandRetries
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    INVOKELABCOMMANDRETRYINTERVALINSECONDS
    Retry interval for Invoke-LabCommand
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 10
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.InvokeLabCommandRetryIntervalInSeconds -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    LABAPPDATAROOT
    Root folder to Labs, Assets and Stores
    Data type: System.Management.Automation.PSObject
 
    Hidden?: False
 
    Default value: $HOME/.automatedlab
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.LabAppDataRoot -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    LABFILENAME
    The file name for the deserialized labs. Do not change unless you know what
    you are doing.
    Data type: System.String
 
    Hidden?: False
 
    Default value: Lab.xml
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.LabFileName -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    LABSOURCESLOCATION
    Data type: System.String
 
    Hidden?: False
 
    Default value:
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.LabSourcesLocation -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    LABSOURCESMAXFILESIZEMB
    The default file size for Sync-LabAzureLabSources
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 50
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.LabSourcesMaxFileSizeMb
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    LABSOURCESSYNCINTERVALDAYS
    Interval in days for lab sources auto-sync
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 60
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.LabSourcesSyncIntervalDays
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    MACADDRESSPREFIX
    The MAC address prefix for Hyper-V labs
Data type: System.String
 
    Hidden?: False
 
    Default value: 0017FB
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.MacAddressPrefix -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    MACHINEFILENAME
    The file name for the deserialized machines. Do not change unless you know
    what you are doing.
    Data type: System.String
 
    Hidden?: False
 
    Default value: Machines.xml
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.MachineFileName -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    MAXPSSESSIONSPERVM
    Maximum number of sessions per VM
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 5
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.MaxPSSessionsPerVM -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    MINIMUMAZUREMODULEVERSION
    The minimum expected Azure module version
Data type: System.String
 
    Hidden?: False
 
    Default value: 4.1.0
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.MinimumAzureModuleVersion
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    NOTIFICATIONS.NOTIFICATIONPROVIDERS.IFTTT.EVENTNAME
    IFTTT Event Name
Data type: System.String
 
    Hidden?: False
 
    Default value: The name of your IFTTT event
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Notifications.NotificationProviders.Ifttt.EventName -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    NOTIFICATIONS.NOTIFICATIONPROVIDERS.IFTTT.KEY
    IFTTT Key Name
Data type: System.String
 
    Hidden?: False
 
    Default value: Your IFTTT key here
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Notifications.NotificationProviders.Ifttt.Key -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    NOTIFICATIONS.NOTIFICATIONPROVIDERS.MAIL.CC
    A list of default CC recipients
Data type: System.Object[]
 
    Hidden?: False
 
    Default value: Recipients here
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Notifications.NotificationProviders.Mail.CC -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    NOTIFICATIONS.NOTIFICATIONPROVIDERS.MAIL.FROM
    Your sender address
Data type: System.String
 
    Hidden?: False
 
    Default value: @localhost
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Notifications.NotificationProviders.Mail.From -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    NOTIFICATIONS.NOTIFICATIONPROVIDERS.MAIL.PORT
    Port of your SMTP Server
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 25
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Notifications.NotificationProviders.Mail.Port -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    NOTIFICATIONS.NOTIFICATIONPROVIDERS.MAIL.PRIORITY
    Priority of your message
Data type: System.String
 
    Hidden?: False
 
    Default value: Normal
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Notifications.NotificationProviders.Mail.Priority -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    NOTIFICATIONS.NOTIFICATIONPROVIDERS.MAIL.SMTPSERVER
    Adress of your SMTP server
Data type: System.String
 
    Hidden?: False
 
    Default value: your SMTP server here
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Notifications.NotificationProviders.Mail.SmtpServer -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    NOTIFICATIONS.NOTIFICATIONPROVIDERS.MAIL.TO
    A list of default recipients
Data type: System.Object[]
 
    Hidden?: False
 
    Default value: Recipients here
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Notifications.NotificationProviders.Mail.To -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    NOTIFICATIONS.NOTIFICATIONPROVIDERS.TOAST.IMAGE
    The image for your toast notification
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://raw.githubusercontent.com/AutomatedLab/AutomatedLab/master/Assets/Automated-Lab_icon512.png
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Notifications.NotificationProviders.Toast.Image -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    NOTIFICATIONS.NOTIFICATIONPROVIDERS.VOICE.CULTURE
    Voice culture, needs to be available and defaults to en-us
    Data type: System.String
 
    Hidden?: False
 
    Default value: en-us
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Notifications.NotificationProviders.Voice.Culture -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    NOTIFICATIONS.NOTIFICATIONPROVIDERS.VOICE.GENDER
    Gender of voice to use
Data type: System.String
 
    Hidden?: False
 
    Default value: female
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Notifications.NotificationProviders.Voice.Gender -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    NOTIFICATIONS.SUBSCRIBEDPROVIDERS
    List of subscribed providers
Data type: System.Object[]
 
    Hidden?: False
 
    Default value: Toast
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Notifications.SubscribedProviders -Value <YourValue> -PassThru
    | Register-PSFConfig`
 
    OFFICEDEPLOYMENTTOOL
    Link to Microsoft Office deployment tool
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/6c1eeb25-cf8b-41d9-8d0d-cc1dbc032140/officedeploymenttool_18827-20140.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.OfficeDeploymentTool -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    OPENSSHURI
    Link to OpenSSH binaries
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://github.com/PowerShell/Win32-OpenSSH/releases/download/v7.6.0.0p1-Beta/OpenSSH-Win64.zip
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.OpenSshUri -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    OSROOT
    Host operating system root, used mostly with file transfers. Do not modify
    if not requried.
    Data type: System.String
 
    Hidden?: True
 
    Default value: /
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.OsRoot -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    OVERRIDEPOWERPLAN
    On Windows: Indicates that power settings will be set to High Power during
    lab deployment
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: True
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.OverridePowerPlan -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    PRODUCTKEYFILEPATH
    Destination of the ProductKeys file for Windows products
    Data type: System.Management.Automation.PSObject
 
    Hidden?: False
 
    Default value: $HOME/.automatedlab/Assets/ProductKeys.xml
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.ProductKeyFilePath -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    PRODUCTKEYFILEPATHCUSTOM
    Destination of the ProductKeysCustom file for Windows products
    Data type: System.Management.Automation.PSObject
 
    Hidden?: False
 
    Default value: $HOME/.automatedlab/Assets/ProductKeysCustom.xml
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.ProductKeyFilePathCustom
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    REPORTVIEWER2015
    SQL Server Report Viewer 2015
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/A/1/2/A129F694-233C-4C7C-860F-F73139CF2E01/ENU/x86/ReportViewer.msi
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.ReportViewer2015 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    REQUIREDAZMODULES
    Required Az modules
Data type: System.Object[]
 
    Hidden?: False
 
    Default value: System.Collections.Hashtable System.Collections.Hashtable
    System.Collections.Hashtable System.Collections.Hashtable
    System.Collections.Hashtable System.Collections.Hashtable
    System.Collections.Hashtable
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.RequiredAzModules -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    REQUIREDAZSTACKMODULES
    Required Az Stack Hub modules
Data type: System.Object[]
 
    Hidden?: False
 
    Default value: System.Collections.Hashtable System.Collections.Hashtable
    System.Collections.Hashtable System.Collections.Hashtable
    System.Collections.Hashtable System.Collections.Hashtable
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.RequiredAzStackModules
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    SENDFUNCTIONTELEMETRY
    Indicates if function call telemetry is sent
Data type: System.Boolean
 
    Hidden?: True
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SendFunctionTelemetry -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SETLOCALINTRANETSITES
    All, Forest, Domain, None
Data type: System.String
 
    Hidden?: False
 
    Default value: All
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SetLocalIntranetSites -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SHAREPOINT2013KEY
    SP 2013 trial key
Data type: System.String
 
    Hidden?: False
 
    Default value: N3MDM-DXR3H-JD7QH-QKKCR-BY2Y7
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SharePoint2013Key -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SHAREPOINT2013PREREQUISITES
    List of prerequisite urls for SP2013
Data type: System.Object[]
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/E/2/1/E21644B5-2DF2-47C2-91BD-63C560427900/NDP452-KB2901907-x86-x64-AllOS-ENU.exe
    http://download.microsoft.com/download/9/1/3/9138773A-505D-43E2-AC08-9A77E1E0490B/1033/x64/sqlncli.msi
    http://download.microsoft.com/download/8/F/9/8F93DBBD-896B-4760-AC81-646F61363A6D/WcfDataServices.exe
    http://download.microsoft.com/download/9/1/D/91DA8796-BE1D-46AF-8489-663AB7811517/setup_msipc_x64.msi
    http://download.microsoft.com/download/E/0/0/E0060D8F-2354-4871-9596-DC78538799CC/Synchronization.msi
    http://download.microsoft.com/download/1/C/A/1CAA41C7-88B9-42D6-9E11-3C655656DAB1/WcfDataServices.exe
    http://download.microsoft.com/download/0/1/D/01D06854-CA0C-46F1-ADBA-EBF86010DCC6/r2/MicrosoftIdentityExtensions-64.msi
    http://download.microsoft.com/download/D/7/2/D72FD747-69B6-40B7-875B-C2B40A6B2BDD/Windows6.1-KB974405-x64.msu
    http://download.microsoft.com/download/A/6/7/A678AB47-496B-4907-B3D4-0A2D280A13C0/WindowsServerAppFabricSetup_x64.exe
    http://download.microsoft.com/download/7/B/5/7B51D8D1-20FD-4BF0-87C7-4714F5A1C313/AppFabric1.1-RTM-KB2671763-x64-ENU.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SharePoint2013Prerequisites
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    SHAREPOINT2016KEY
    SP 2016 trial key
Data type: System.String
 
    Hidden?: False
 
    Default value: NQGJR-63HC8-XCRQH-MYVCH-3J3QR
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SharePoint2016Key -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SHAREPOINT2016PREREQUISITES
    List of prerequisite urls for SP2013
Data type: System.Object[]
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/B/E/D/BED73AAC-3C8A-43F5-AF4F-EB4FEA6C8F3A/ENU/x64/sqlncli.msi
    https://download.microsoft.com/download/3/C/F/3CF781F5-7D29-4035-9265-C34FF2369FA2/setup_msipc_x64.exe
    https://download.microsoft.com/download/B/9/D/B9D6E014-C949-4A1E-BA6B-2E0DEBA23E54/SyncSetup_en.x64.zip
    https://download.microsoft.com/download/1/C/A/1CAA41C7-88B9-42D6-9E11-3C655656DAB1/WcfDataServices.exe
    https://download.microsoft.com/download/0/1/D/01D06854-CA0C-46F1-ADBA-EBF86010DCC6/rtm/MicrosoftIdentityExtensions-64.msi
    https://download.microsoft.com/download/A/6/7/A678AB47-496B-4907-B3D4-0A2D280A13C0/WindowsServerAppFabricSetup_x64.exe
    https://download.microsoft.com/download/F/1/0/F1093AF6-E797-4CA8-A9F6-FC50024B385C/AppFabric-KB3092423-x64-ENU.exe
    https://download.microsoft.com/download/5/7/2/57249A3A-19D6-4901-ACCE-80924ABEB267/ENU/x64/msodbcsql.msi
    https://download.microsoft.com/download/8/b/7/8b79adc2-162c-4cf4-a200-3aeaadc455bf/NDP462-KB3151800-x86-x64-AllOS-ENU.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SharePoint2016Prerequisites
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    SHAREPOINT2019KEY
    SP 2019 trial key
Data type: System.String
 
    Hidden?: False
 
    Default value: M692G-8N2JP-GG8B2-2W2P7-YY7J6
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SharePoint2019Key -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SHAREPOINT2019PREREQUISITES
    List of prerequisite urls for SP2013
Data type: System.Object[]
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/F/3/C/F3C64941-22A0-47E9-BC9B-1A19B4CA3E88/ENU/x64/sqlncli.msi
    https://download.microsoft.com/download/3/C/F/3CF781F5-7D29-4035-9265-C34FF2369FA2/setup_msipc_x64.exe
    https://download.microsoft.com/download/E/0/0/E0060D8F-2354-4871-9596-DC78538799CC/Synchronization.msi
    https://download.microsoft.com/download/1/C/A/1CAA41C7-88B9-42D6-9E11-3C655656DAB1/WcfDataServices.exe
    https://download.microsoft.com/download/0/1/D/01D06854-CA0C-46F1-ADBA-EBF86010DCC6/rtm/MicrosoftIdentityExtensions-64.msi
    https://download.microsoft.com/download/A/6/7/A678AB47-496B-4907-B3D4-0A2D280A13C0/WindowsServerAppFabricSetup_x64.exe
    https://download.microsoft.com/download/F/1/0/F1093AF6-E797-4CA8-A9F6-FC50024B385C/AppFabric-KB3092423-x64-ENU.exe
    https://download.microsoft.com/download/5/7/2/57249A3A-19D6-4901-ACCE-80924ABEB267/ENU/x64/msodbcsql.msi
    https://download.microsoft.com/download/f/3/a/f3a6af84-da23-40a5-8d1c-49cc10c8e76f/NDP472-KB4054530-x86-x64-AllOS-ENU.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SharePoint2019Prerequisites
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    SKIPHOSTFILEMODIFICATION
    Indicates that the hosts file should not be modified when deploying a new lab.
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SkipHostFileModification
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    SKIPSYSINTERNALS
    Set to true to skip downloading Sysinternals
Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SkipSysInternals -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQL2016MANAGEMENTSTUDIO
    Link to SSMS 2016
Data type: System.String
 
    Hidden?: False
 
    Default value: https://go.microsoft.com/fwlink/?LinkID=840946
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Sql2016ManagementStudio
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    SQL2017MANAGEMENTSTUDIO
    Link to SSMS 2017 18.2
Data type: System.String
 
    Hidden?: False
 
    Default value: https://go.microsoft.com/fwlink/?linkid=2099720
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Sql2017ManagementStudio
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    SQL2017SSRS
    Download link to SSRS 2017
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/E/6/4/E6477A2A-9B58-40F7-8AD6-62BB8491EA78/SQLServerReportingServices.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Sql2017SSRS -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQL2019MANAGEMENTSTUDIO
    Link to SSMS latest
Data type: System.String
 
    Hidden?: False
 
    Default value: https://aka.ms/ssmsfullsetup
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Sql2019ManagementStudio
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    SQL2019SSRS
    Download link to SSRS 2019
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/1/a/a/1aaa9177-3578-4931-b8f3-373b24f63342/SQLServerReportingServices.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Sql2019SSRS -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQL2022MANAGEMENTSTUDIO
    Link to SSMS latest
Data type: System.String
 
    Hidden?: False
 
    Default value: https://aka.ms/ssmsfullsetup
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Sql2022ManagementStudio
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    SQL2022SSRS
    Download link to SSRS 2022
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/8/3/2/832616ff-af64-42b5-a0b1-5eb07f71dec9/SQLServerReportingServices.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Sql2022SSRS -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQLCLRTYPE2014
    Download link to SQL Server Clr Types v2014, used with SCOM
    Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/6/7/8/67858AF1-B1B3-48B1-87C4-4483503E71DC/ENU/x64/SQLSysClrTypes.msi
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SqlClrType2014 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQLCLRTYPE2016
    Download link to SQL Server Clr Types v2016, used with SCOM
    Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/6/4/5/645B2661-ABE3-41A4-BC2D-34D9A10DD303/ENU/x64/SQLSysClrTypes.msi
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SqlClrType2016 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQLCLRTYPE2019
    Download link to SQL Server Clr Types v2019, used with SCOM
    Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/d/d/1/dd194c5c-d859-49b8-ad64-5cbdcbb9b7bd/SQLSysClrTypes.msi
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SqlClrType2019 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQLCOMMANDLINEUTILS
    Download Link for SQL Commandline Utils, used with SCVMM
    Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/C/8/8/C88C2E51-8D23-4301-9F4B-64C8E2F163C5/x64/MsSqlCmdLnUtils.msi
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SqlCommandLineUtils -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQLODBC11
    Download Link for SQL ODBC Driver 11, used with SCVMM
    Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/5/7/2/57249A3A-19D6-4901-ACCE-80924ABEB267/ENU/x64/msodbcsql.msi
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SqlOdbc11 -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    SQLODBC13
    Download Link for SQL ODBC Driver 13, used with SCVMM
    Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/D/5/E/D5EEF288-A277-45C8-855B-8E2CB7E25B96/x64/msodbcsql.msi
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SqlOdbc13 -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    SQLSERVER2012
    Link to SQL sample DB for SQL 2012
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://github.com/Microsoft/sql-server-samples/releases/download/adventureworks/AdventureWorks2012.bak
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SQLServer2012 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQLSERVER2014
    Link to SQL sample DB for SQL 2014
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://github.com/Microsoft/sql-server-samples/releases/download/adventureworks/AdventureWorks2014.bak
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SQLServer2014 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQLSERVER2016
    Link to SQL sample DB for SQL 2016
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SQLServer2016 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQLSERVER2017
    Link to SQL sample DB for SQL 2017
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SQLServer2017 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQLSERVER2019
    Link to SQL sample DB for SQL 2019
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SQLServer2019 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQLSERVER2022
    Link to SQL sample DB for SQL 2022
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SQLServer2022 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SQLSERVERNATIVECLIENT2012
    Download link to SQL Native Client v2012, used with Dynamics and ConfigMgr
    Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/B/E/D/BED73AAC-3C8A-43F5-AF4F-EB4FEA6C8F3A/ENU/x64/sqlncli.msi
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SqlServerNativeClient2012
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    SQLSERVERREPORTBUILDER
    Download link to SQL Server Report Builder
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/5/E/B/5EB40744-DC0A-47C0-8B0A-1830E74D3C23/ReportBuilder.msi
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SqlServerReportBuilder
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    SQLSMO2016
    Download link to SQL Server Share Management Objects v2016, used with Dynamics
    Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/6/4/5/645B2661-ABE3-41A4-BC2D-34D9A10DD303/ENU/x64/SharedManagementObjects.msi
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SqlSmo2016 -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SUPPORTGEN2VMS
    Indicates that Gen2 VMs are supported
Data type: System.Boolean
 
    Hidden?: False
 
    Default value: True
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SupportGen2VMs -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    SWITCHDEPLOYMENTINPROGRESSPATH
    The file indicating that VM switches are being deployed in case multiple lab
    deployments are started in parallel
    Data type: System.Management.Automation.PSObject
 
    Hidden?: False
 
    Default value: $HOME/.automatedlab/VSwitchDeploymentInProgress.txt
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.SwitchDeploymentInProgressPath -Value <YourValue> -PassThru |
    Register-PSFConfig`
 
    SYSINTERNALSDOWNLOADURL
    Link to download of SysInternals
Data type: System.String
 
    Hidden?: False
 
    Default value: https://download.sysinternals.com/files/SysinternalsSuite.zip
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SysInternalsDownloadUrl
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    SYSINTERNALSURL
    Link to SysInternals to check for newer versions
Data type: System.String
 
    Hidden?: False
 
    Default value: https://technet.microsoft.com/en-us/sysinternals/bb842062
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.SysInternalsUrl -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    TIMEOUT_CONFIGURATIONMANAGERINSTALLATION
    Timeout in minutes to wait for the installation of Configuration Manager.
    Default value 60.
    Data type: System.Int32
 
    Hidden?: False
 
    Default value: 60
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Timeout_ConfigurationManagerInstallation -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    TIMEOUT_DCPROMOTIONADWSREADY
    Timeout in minutes for availability of ADWS after DC Promo
    Data type: System.Int32
 
    Hidden?: False
 
    Default value: 20
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Timeout_DcPromotionAdwsReady
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    TIMEOUT_DCPROMOTIONRESTARTAFTERDCPROMO
    Timeout in minutes for restart after DC Promo
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 60
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Timeout_DcPromotionRestartAfterDcpromo -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    TIMEOUT_INSTALLLABCAINSTALLATION
    Timeout in minutes for CA setup
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 40
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Timeout_InstallLabCAInstallation -Value <YourValue> -PassThru |
    Register-PSFConfig`
 
    TIMEOUT_RESTARTLABMACHINE_SHUTDOWN
    Timeout in minutes for Restart-LabVm
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 30
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Timeout_RestartLabMachine_Shutdown -Value <YourValue> -PassThru
    | Register-PSFConfig`
 
    TIMEOUT_SQL2008INSTALLATION
    Timeout in minutes for SQL 2008
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 90
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Timeout_Sql2008Installation
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    TIMEOUT_SQL2012INSTALLATION
    Timeout in minutes for SQL 2012
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 90
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Timeout_Sql2012Installation
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    TIMEOUT_SQL2014INSTALLATION
    Timeout in minutes for SQL 2014
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 90
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Timeout_Sql2014Installation
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    TIMEOUT_STARTLABMACHINE_ONLINE
    Timeout in minutes for Start-LabVm
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 60
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Timeout_StartLabMachine_Online -Value <YourValue> -PassThru |
    Register-PSFConfig`
 
    TIMEOUT_STOPLABMACHINE_SHUTDOWN
    Timeout in minutes for Stop-LabVm
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 30
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Timeout_StopLabMachine_Shutdown -Value <YourValue> -PassThru |
    Register-PSFConfig`
 
    TIMEOUT_TESTPORTINSECONDS
    Timeout in seconds for Test-Port
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 2
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.Timeout_TestPortInSeconds
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    TIMEOUT_VISUALSTUDIO2013INSTALLATION
    Timeout in minutes for VS 2013
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 90
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Timeout_VisualStudio2013Installation -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    TIMEOUT_VISUALSTUDIO2015INSTALLATION
    Timeout in minutes for VS 2015
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 90
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Timeout_VisualStudio2015Installation -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    TIMEOUT_WAITLABMACHINE_ONLINE
    Timeout in minutes for Wait-LabVm
Data type: System.Int32
 
    Hidden?: False
 
    Default value: 60
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.Timeout_WaitLabMachine_Online -Value <YourValue> -PassThru |
    Register-PSFConfig`
 
    USELATESTAZUREPROVIDERAPI
    Indicates that the latest provider API versions available in the labs region
    should be used
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: True
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.UseLatestAzureProviderApi
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    VALIDATIONSETTINGS
    Validation settings for lab validation. Please do not modify unless you know
    what you are doing.
    Data type: System.Collections.Hashtable
 
    Hidden?: False
 
    Default value: System.Collections.Hashtable
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.ValidationSettings -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    VMCONNECTDESKTOPSIZE
    The default resolution for Hyper-V's VMConnect.exe
Data type: System.String
 
    Hidden?: False
 
    Default value: 1366, 768
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.VMConnectDesktopSize -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    VMCONNECTFULLSCREEN
    Enable full screen mode for VMConnect.exe
Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.VMConnectFullScreen -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    VMCONNECTREDIRECTEDDRIVES
    Drives to mount in a VMConnect session. Use '*' for all drives or a
    semicolon seperated list.
    Data type: System.String
 
    Hidden?: False
 
    Default value: none
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.VMConnectRedirectedDrives
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    VMCONNECTUSEALLMONITORS
    Use all monitors for VMConnect.exe
Data type: System.Boolean
 
    Hidden?: False
 
    Default value: False
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.VMConnectUseAllMonitors
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    VMCONNECTWRITECONFIGFILE
    Enable the writing of VMConnect config files by default
    Data type: System.Boolean
 
    Hidden?: False
 
    Default value: True
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.VMConnectWriteConfigFile
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    VMDEPLOYMENTFILESFOLDER
    Folder local to each VM which contains temporary files during deployment,
    logs and such. Will use ExecutionContext.InvokeCommand.ExpandString() to
    ensure xplat capabilities.
    Data type: System.String
 
    Hidden?: False
 
    Default value:
    $([Environment]::GetFolderPath('ApplicationData'))/DeployDebug
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.VMDeploymentFilesFolder
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    VMPATH
    VM storage location
Data type:
 
    Hidden?: False
 
    Default value:
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.VmPath -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    WACDOWNLOADURL
    Windows Admin Center Download URL
Data type: System.String
 
    Hidden?: False
 
    Default value: http://aka.ms/WACDownload
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.WacDownloadUrl -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    WACMSINTERMEDIATECACERT
    Windows Admin Center Code-Signing Cert Intermediate CA cert URL
    Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://www.microsoft.com/pkiops/certs/MicCodSigPCA2011_2011-07-08.crt
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.WacMsIntermediateCaCert
    -Value <YourValue> -PassThru | Register-PSFConfig`
 
    WINDOWSADK
    Download Link for Windows ADK, used with SCVMM
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/2/d/9/2d9c8902-3fcd-48a6-a22a-432b08bed61e/ADK/adksetup.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.WindowsAdk -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    WINDOWSADKPE
    Download Link for Windows ADK PE, used with SCVMM
Data type: System.String
 
    Hidden?: False
 
    Default value:
    https://download.microsoft.com/download/5/5/6/556e01ec-9d78-417d-b1e1-d83a2eff20bc/ADKWinPEAddons/adkwinpesetup.exe
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.WindowsAdkPe -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    WINRMMAXCONCURRENTOPERATIONSPERUSER
    CAREFUL! Fiddling with the defaults will likely result in errors if you do
    not know what you are doing! Configure a different number of per-user
    concurrent operations on all lab machines if necessary.
    Data type: System.Int32
 
    Hidden?: False
 
    Default value: 1500
 
    Set with: `Set-PSFConfig -FullName
    AutomatedLab.WinRmMaxConcurrentOperationsPerUser -Value <YourValue>
    -PassThru | Register-PSFConfig`
 
    WINRMMAXCONNECTIONS
    CAREFUL! Fiddling with the defaults will likely result in errors if you do
    not know what you are doing! Configure a different max number of connections
    on all lab machines if necessary.
    Data type: System.Int32
 
    Hidden?: False
 
    Default value: 300
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.WinRmMaxConnections -Value
    <YourValue> -PassThru | Register-PSFConfig`
 
    WINRMMAXENVELOPESIZEKB
    CAREFUL! Fiddling with the defaults will likely result in errors if you do
    not know what you are doing! Configure a different envelope size on all lab
    machines if necessary.
    Data type: System.Int32
 
    Hidden?: False
 
    Default value: 500
 
    Set with: `Set-PSFConfig -FullName AutomatedLab.WinRmMaxEnvelopeSizeKb
    -Value <YourValue> -PassThru | Register-PSFConfig`
    AutomatedLab can do more than just create an on-premises or a cloud lab -
    you can also connect your labs through an IPSEC VPN.
 
    PREREQUISITES
    - Two labs. At least one lab needs to be an Azure-based lab. The second lab
    can be on-premises or on Azure
    - OR: One lab and one IPSEC VPN Gateway using a pre-shared key, e.g. to
    accommodate your environment at another cloud provider
    - If using an on-premises lab: A machine with the Routing role (
 
    -LabVm -Role Routing
 
    ) - Non-overlapping address spaces for each lab and (at the moment)
    different domains for each lab
    - 10-30 minutes of time to wait for the connection to be made
 
    HOW DOES IT WORK
    Connecting the labs is very simple. There are three cmdlets related to lab
    connections:
 
 
    Connect-Lab
    Restore-LabConnection
    Disconnect-Lab
 
 
 
    CONNECT-LAB
    The first cmdlet allows you to actually connect two labs together. You
    simply need the lab names for this to work.
 
 
    Get-Lab -List
    Connect-Lab -SourceLab OnPremTest -DestinationLab AzureTest -Verbose
 
 
    Assuming your labs are OnPremTest and AzureTest Connect-Lab will now attempt
    to do the following: - Extend your Azure address spaces to accommodate
    gateway subnets
    - Create Virtual Network Gateways and Local Network Gateways, Gateway
    Connections and the necessary public IP address
    - Configure your on-premises routing VM with a site-to-site interface that
    connects to the Local Network Gateway on Azure using a pre-shared key
    - Configure a static route to your destination address spaces
    - Configure a DNS conditional forwarder for your remote lab domain
 
    All this can take between 10 and 15 minutes, depending on how long it takes
    to create the Gateway resources on Azure.
 
    Connecting two Azure-based labs works similarly with the only difference
    being that you do not need a routing machine. Instead, the appropriate
    network gateways will be created in both resource groups, allowing you to
    automatically configure a VPN connection across subscription and region
    boundaries.
 
    In order to connect your on-premises lab to any IPSEC VPN gateway with a
    pre-shared key, use the second parameter set:
 
 
    Connect-Lab -SourceLab OnPremises -DestinationIpAddress 1.2.3.4 -PreSharedKey "SomePsk!" -AddressSpace "10.10.0.0/16","192.168.27.0/24"
 
 
    The destination IP needs to be either a static public IP or a resolvable
    hostname of your remote VPN gateway. The pre-shared key needs to match you
    gateway's key. For any address spaces that should be routed through your VPN
    connection originating in your lab, just specify them comma-separated.
 
 
    RESTORE-LABCONNECTION
    If your own public IP address changes or you experience connectivity issues
    within your lab environment, chances are that either the public IP of your
    Azure gateway or of your on-premises lab have changed. Using the cmdlet
    Restore-LabConnection, we take measures to correct these basic issues:
 
 
    Restore-LabConnection -SourceLab OnPremisesLab -DestinationLab AzureLab
 
 
    Restore-LabConnection will reconfigure any IP addresses that might have
    changed in order to restore the connection.
 
 
    DISCONNECT-LAB
    If you want to disconnect your lab and discard the resources that have been
    created, just call the cmdlet Disconnect-Lab. This will undo all steps that
    were previously taken in Connect-Lab.
 
Summary
    Adding native roles to AutomatedLab requires modification of the class
    library in addition to modifying the PowerShell Code to include a new role.
    As this is not very user-friendly, the concept of custom roles has been introduced.
    Using custom roles, you can quickly add new roles to AutomatedLab by just
    copying some files to the LabSources\CustomRoles folder. These modifications
    do not require forking and updating AutomatedLab, and can be done using just PowerShell.
    Custom roles can be anything from a simple script running on the lab VMs to
    a complex orchestration running on the lab host as well as the guests. A
    very simple example that explains all the features of custom roles is the
    DemoCustomRole
    .
    At the moment, the following custom roles exist: - CM-2002, CM-1902 to
    deploy System Center Configuration Manager
    - LabBuilder to deploy a REST API using polaris on a nested Hyper-V which
    can be used to deploy labs
    - MDT
    - Exchange2016, Exchange2019 to deploy the respective Exchange version
    - NuGetServer to deploy a simple ASP.NET page that includes the NuGet.Server package
    - PowerShellWebAccess to enable PowerShell Web Access (PSWA) on a VM
    - ProGet5 to install Inedo ProGet
 
    THE CONCEPT IN SHORT
    SIMPLE CUSTOM ROLE
    Defining a new custom role is as simple as that: - Create a new folder in
    `LabSources\CustomRoles` named after your role, for example `TestRole`.
    - Create a PS1 file in the newly created folder with the same name as the
    folder, for example `TestRole.ps1`.
    You are done. Now the AutomatedLab cmdlet `Get-LabInstallationActivity` will
    pick up that new role when using the parameter CustomRole (if PowerShell
    auto-complete is quick enough and does not time out). That role can be
    passed to a machine then:
 
    $role = Get-LabInstallationActivity -CustomRole TestRole
    Add-LabMachineDefinition -Name TestServer -PostInstallationActivity $role
 
    During the deployment, AutomatedLab sends the TestRole folder to the virtual
    machine and runs the script `TestRole.ps1` there remotely. This is the most
    simple implementation. There are no parameters, just a single script and no
    local activities.
 
    CUSTOM ROLE PARAMETERS
    Parameters can be defined as well like this:
 
    $role = Get-LabInstallationActivity -CustomRole TestRole -Properties @{ param1 = 'Test'; param2 = 100}
 
    AutomatedLab will throw an error if the custom role script's parameters do
    not match the hashtable defined. It also checks for mandatory parameters in
    the script and throws an error if these are not assigned in the properties hashtable.
    If you use HostStart and / or HostEnd scripts, AutomatedLab verifies the
    properties hashtable against all these scripts. The hashtable will be
    filtered before invoking the scripts and splatting the parameters. The
    DemoCustomRole shows this.
 
    PASSING ALONG VARIABLES AND FUNCTIONS
    If role parameters are not enough, remember that you can also use the
    parameters `Variable` and `Function` with `Get-LabInstallationActivity` in
    order to send variables and functions to your remote machines. Just keep in
    mind that those are used only for the VMs, and not in the HostStart and
    HostEnd scripts. Since roles are executed in the context of a lab, the
    script-scoped variable `$data` is available and contains the entire lab's
    information.
 
    ## Role Definition
    $role = Get-LabInstallationActivity -CustomRole TestRole -Variable (Get-Variable -Name var1,var2,var3) -Function (Get-Command -Name Get-StringSection)
     
    ## Sample content in TestRole.ps1
    Write-Host "Deserialized content of `$var1: $var1"
    Write-Host "Function result: $((Get-StringSection aabbcc 2) -join '-')"
 
    RUNNING LOCAL ACTIVITIES ON THE HOST AS PART OF A CUSTOM ROLE
    Quite often in order to install a role you need some files from the internet
    but the VMs are not internet connected. For that the custom role feature
    looks for two scripts in the custom role folder: - HostStart.ps1 (invoked locally)
    - <CustomRoleName>.ps1 (invoked remotely on the VM)
    - HostEnd.ps1 (invoked locally)
    The HostStart script is run before anything is triggered on the VM and the
    HostEnd script after the custom role script has been invoked on the VM. It
    is not mandatory to have all three scripts. You can have a custom role with
    just a HostStart script running locally and no custom role script or with
    just a custom role script and nothing that runs on the host. A good example
    is the MDT custom role.
    When using locally-executed scripts, make good use of the helpful
    AutomatedLab cmdlets: - `Get-Lab` retrieves information about a running
    (imported) lab
    - `Get-LabVm` retrieves VM objects - allthough most of our cmdlets can work
    with VM names as well
    - `Get-LabInternetFile` and `Install-LabSoftwarePackage` to download and
    install content within your role
    - `Invoke-LabDscConfiguration` to configure VMs using DSC for even more
    elaborate scenarios
 
    MORE COMPLEX CUSTOM ROLE
    As AutomatedLab copies the whole folder to the machine the role is assigned
    to, you can also have a script that calls other scripts. For example
    TestRole.ps1 could look like this:
 
    & $PSScriptRoot\Init.ps1
    & $PSScriptRoot\Install.ps1
    & $PSScriptRoot\Customizations.ps1
 
    CUSTOM ROLE TESTS
    Pester tests are now available for Custom Roles! Use `New-LabPesterTest` to
    create the stub test harness like this:
 
    New-LabPesterTest -Role MyCustomRole -IsCustomRole -Path $global:LabSources\CustomRoles\MyCustomRole
 
    The same pattern can be used for HostStart and HostEnd as well. You do not
    have to put all the logic in just one file.
 
    DEMO ROLES
    AutomatedLab comes with some some roles. *
    DemoCustomRole
    : This is a easy sample that shows how the parameter handling works and how
    the files are related to each other. *
    MDT
    that is invoked on the lab VM. *
    ProGet5
    : This role installs an Inedo ProGet server, also without a custom role
    script. All the orchestration is done locally on the host. Getting lab
    notifications from the AutomatedLab notification hub is very easy. The
    default notification method on Windows 10/Server 2016 is a toast
    notification in the notification center. Install-Lab already makes use of
    the notification hub to send a notification each time a lab starts and
    finishes installing.
 
    The current providers that can be used to send notifications are Toast,
    IFTTT and Mail. All provider-related settings can be accessed from the
    module manifest of the module AutomatedLabNotifications. To subscribe to one
    or more providers, simply add them to the NotificationProviders key of the
    AutomatedLab module manifest.
 
    To use the notification hub in your own scripts, you can use the function:
 
 
    Send-ALNotification -Activity 'Your activity' -Message 'Your detailed message here' -Provider Toast,Ifttt
 
 
    The module AutomatedLabNotification knows all it's providers by looking at
    it's module manifest. To add your own, custom provider, you only need to add
    it to this list as well as create a PowerShell script called
    Send-AL<YourProviderName>Notification in the modules Private subfolder. This
    script needs to contain the function Send-AL<YourProviderName>Notification
    and this function needs to implement the Parameters Activity and Message.
 
    Example:
 
 
    function Send-ALCustomProviderNotification
    {
    param
        (
            [Parameter(Mandatory = $true)]
            [System.String]
            $Activity,
     
            [Parameter(Mandatory = $true)]
            [System.String]
            $Message
        )
    }
 
    To store user-specific settings like keys, ports, ... make use of the
    PrivateData hashtable inside the module manifest of
    AutomatedLabNotification:
 
 
    PrivateData = @{
     
            Ifttt = @{
                 
                Key = "Your IFTTT key here"
                EventName = "The name of your IFTTT event"
            }
     
            Mail = @{
                To = "Your recipient array here"
                CC = "Your CC array here"
                SmtpServer = "Your SMTP server here"
                From = "Your sender here"
                Priority = "Normal"
                Port = 25
            }
     
            Toast = @{
                Provider = 'AutomatedLab'
            }
     
        }
 
 
    To work with IFTTT, simply create a Webhook applet
    (https://ifttt.com/maker_webhooks). You can find your key here:
    https://ifttt.com/services/maker_webhooks/settings. You also need the event
    name of your applet.
 
    Last but not least: If you think of a cool provider, just develop it and
    send us your pull request!
 
Renaming used resources
    AutomatedLab offers the ability to select different resource names for your
    lab machines as well as virtual switches. While this feature is mainly
    intended for on-premises hypervisors like Hyper-V, Azure-based labs can also
    make use of the new resource naming.
    This feature is very useful for classroom deployments if students are using
    a shared hypervisor, as the same lab can be deployed multiple times.
    Both `Add-LabVirtualNetworkDefinition` as well as `Add-LabMachineDefinition`
    can use the `ResourceName` parameter.
    *
    Important: This feature does not overcome the boundaries of networking on
    Hyper-V. Remember to use non-overlapping address spaces for each lab
    network, as shown in the example.
 
    For various reasons, AutomatedLab uses Internal virtual switches on Hyper-V.
    *
 
    EXAMPLE
    foreach ($studentNumber in (1..10))
    {
        New-LabDefinition -Name "$($studentNumber)POSH" -DefaultVirtualizationEngine HyperV
        Add-LabVirtualNetworkDefinition -Name VMNet -ResourceName "$($studentNumber)VMNet" -AddressSpace "192.168.$($studentNumber).0/24"
        Add-LabMachineDefinition -Name DC01 -ResourceName "$($studentNumber)DC01" -Roles RootDC -Domain contoso.com -OperatingSystem 'Windows Server 2016 Datacenter'
        Install-Lab
    }
 
    In the sample, the resources deployed on Hyper-V will be prefixed with
    Studentxx, while each student uses the VM host name to interact with the
    machine. Specifying a resource name for the virtual network adapter in this
    case would not be necessary, as the default adapter name is equal to the lab
    name.
 
Running AutomatedLab on a Hyper-V Cluster
    While AutomatedLab was not designed to work with CIM sessions, you can
    install AutomatedLab on one or more cluster nodes.
    To use AutomatedLab on a clustered Hyper-V, e.g. an S2D cluster, go about
    the configuration like you normally would! The main difference is: Your VM
    path should now be a CSV (cluster-shared volume), and it is probably a good
    idea to store your ISO files either on a network share or in another CSV.
 
    New-LabDefinition -Name IsOnCluster -DefaultVirtualizationEngine HyperV -VmPath C:\ClusterStorage\ALVMS
     
    Add-LabVirtualNetworkDefinition -Name ClusterNet -AddressSpace 172.16.0.0/24 -HyperVProperties @{SwitchType = 'External'; AdapterName = 'eth0'}
    Add-LabMachineDefinition -Name test -Memory 4GB -OperatingSystem 'Windows Server 2019 Datacenter' -Network ClusterNet -IpAddress 172.16.0.199
    Install-Lab
 
    All lab VMs will automatically be added as a cluster role, and removed
    properly when the lab or the VM is removed. To disable this behavior, the
    setting `DoNotAddVmsToCluster` has been added. To change this setting:
 
    ## Disable auto-add
    Set-PSFConfig -FullName AutomatedLab.DoNotAddVmsToCluster -Value $true -PassThru | Register-PSFConfig
    ## Enable auto-add - default
    Set-PSFConfig -FullName AutomatedLab.DoNotAddVmsToCluster -Value $false -PassThru | Register-PSFConfig
 
    Activities like live migrations depend on your configuration of course. You
    will not be able to live-migrate a VM that is connected to internal switches
    - the rules still apply ;)
 
Use Powershell Desired State Configuration (DSC)
    `Invoke-LabDSCConfiguration` is the counterpart to `Invoke-LabCommand`. As
    described in
    Running custom commands using `Invoke-LabCommand`
    , `Invoke-LabCommand` is a very powerful cmdlet to customize your lab
    environment after the initial deployment. `Invoke-LabDSCConfiguration` can
    be even more powerful if your customizations can be achieved using
    PowerShell DSC.
    `Invoke-LabDSCConfiguration` offers the same level of comfort as
    `Invoke-LabCommand`, maybe even more as it handles also some of the
    complexities coming with DSC. You do not have to care about authentication,
    copying resources or configuring the Local Configuration Manager (if in push mode).
    > Note: If you are not familiar with DSC, please consult the documentation
    published on MSDN
    Windows PowerShell Desired State Configuration Overview
    .
    In order to use `Invoke-LabDSCConfiguration`, you have to define a local
    configuration on your host machine and you must have the required DSC
    resources available on your host machine as well. To demonstrate how
    `Invoke-LabDSCConfiguration` works, this article features two demos. The
    first is extremely simple and does not use any non-standard DSC resources.
    The second is much more complex, uses the
    `xWebAdministration`
    DSC Resource and configuration data.
 
    DEMO 1
    This configuration is just creating a single file with whatever content you
    define in the configuration data. The MOF file is created locally on the
    host in \LabSources\DscConfigurations. The MOF file is then pushed to the
    lab machines specified by the ComputerName parameter and the Local
    Configuration Manager (LCM) is configured accordingly with default values.
    The configuration will be applied each 15 minutes on the lab VMs unless you
    re-configure the LCM or overwrite the configuration.
    `Import-Lab` is used to make the lab data available in a new PowerShell
    session.
 
    PowerShell
    Import-lab -Name POSH -NoValidation
     
    configuration Demo1
    {
        File TestFile1
        {
            DestinationPath = 'C:\TestFile1.txt'
            Ensure = 'Present'
            Contents = $ConfigurationData.FileContent
        }
    }
     
    $ConfigurationData = @{
        AllNodes = @()
        FileContent = '123'
    }
     
    Invoke-LabDscConfiguration -Configuration (Get-Command -Name Demo1) `
    -ConfigurationData $ConfigurationData -ComputerName poshfs1
 
    To re-apply an existing configuration on a lab machine, you can use this
    command:
 
    PowerShell
    Invoke-LabDscConfiguration -ComputerName poshfs1 -UseExisting
 
    DEMO 2
    In next example, a web site is configured on two lab machines using the DSC
    resource `xWebAdministration`. `Invoke-LabDSCConfiguration` pushes the
    configuration including the DSC resource to all machines specified.
    The `xWebAdministration` DSC resource is required on the host computer. If
    this is not there, you can install it right from the PowerShell Gallery like
    this:
 
    PowerShell
    Install-Module -Name xWebAdministration
 
    This demo configuration was taken from the
    `xWebAdministration`
    main page and slightly modified.
    > Note: The function `Get-DscConfigurationImportedResource` is used to
    discover all the DSC resources used within a configuration so you do not
    have to care about that.
 
    PowerShell
    Configuration Sample_xWebsite_FromConfigurationData
    {
        # Import the module that defines custom resources
        Import-DscResource -Module xWebAdministration
     
        # Dynamically find the applicable nodes from configuration data
        Node $AllNodes.where{$_.Role -eq "Web"}.NodeName
        {
            File DemoFile
            {
                DestinationPath = 'C:\BakeryWebsite\index.html'
                Ensure = 'Present'
                Type = 'File'
                Contents = 'Test Web Site'
                Force = $true
            }
            # Install the IIS role
            WindowsFeature IIS
            {
                Ensure = "Present"
                Name = "Web-Server"
     
            }
     
            WindowsFeature IISManagement
            {
                Ensure = "Present"
                Name = "Web-Mgmt-Tools"
            }
             
            # Install the ASP .NET 4.5 role
            WindowsFeature AspNet45
            {
                Ensure = "Present"
                Name = "Web-Asp-Net45"
            }
     
            # Stop an existing website (set up in Sample_xWebsite_Default)
            xWebsite DefaultSite
            {
                Ensure = "Present"
                Name = "Default Web Site"
                State = "Stopped"
                PhysicalPath = $Node.DefaultWebSitePath
                DependsOn = "[WindowsFeature]IIS"
            }
     
            # Copy the website content
            File WebContent
            {
                Ensure = "Present"
                SourcePath = $Node.SourcePath
                DestinationPath = $Node.DestinationPath
                Recurse = $true
                Type = "Directory"
                DependsOn = "[WindowsFeature]AspNet45"
            }
     
            # Create a new website
            xWebsite BakeryWebSite
            {
                Ensure = "Present"
                Name = $Node.WebsiteName
                State = "Started"
                PhysicalPath = $Node.DestinationPath
                DependsOn = "[File]WebContent"
            }
        }
    }
     
    ## Content of configuration data file (e.g. ConfigurationData.psd1) could be:
    ## Hashtable to define the environmental data
    $ConfigurationData = @{
        # Node specific data
        AllNodes = @(
           # All the WebServer has following identical information
           @{
                NodeName = "*"
                WebsiteName = "FourthCoffee"
                SourcePath = "C:\BakeryWebsite\"
                DestinationPath = "C:\inetpub\FourthCoffee"
                DefaultWebSitePath = "C:\inetpub\wwwroot"
           },
           @{
                NodeName = "poshdc1.contoso.com"
                Role = "Web"
            },
           @{
                NodeName = "poshdc2.contoso.com"
                Role = "Web"
            }
        )
    }
    ## Pass the configuration data to configuration as follows:
    ##Sample_xWebsite_FromConfigurationData -ConfigurationData $ConfigurationData -OutputPath C:\DscConfigs
     
    Invoke-LabDscConfiguration -Configuration (Get-Command -Name Sample_xWebsite_FromConfigurationData) -ConfigurationData $ConfigurationData -ComputerName poshdc1