pspulumiyaml.azurenative.devtestlab.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionDevtestlabListVirtualMachineApplicableSchedules
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual machine.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:listVirtualMachineApplicableSchedules -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabListLabVhds
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $name
    )

    process
    {
        $arguments = @{}
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:listLabVhds -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetServiceRunner
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the service runner.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getServiceRunner -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetVirtualMachineRdpFileContents
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual machine.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getVirtualMachineRdpFileContents -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetServiceFabric
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($expand=applicableSchedule)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the service fabric.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["userName"] = $userName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getServiceFabric -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetVirtualMachine
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($expand=artifacts,computeVm,networkInterface,applicableSchedule)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual machine.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getVirtualMachine -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetGlobalSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=status)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getGlobalSchedule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetVirtualMachineSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=status)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual machine.)')]
        [string]
        $virtualMachineName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["virtualMachineName"] = $virtualMachineName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getVirtualMachineSchedule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=description)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the policy.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the policy set.)')]
        [string]
        $policySetName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["policySetName"] = $policySetName
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getPolicy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetDisk
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=diskType)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the disk.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["userName"] = $userName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getDisk -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetCustomImage
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=vm)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the custom image.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getCustomImage -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=status)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getSchedule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetLab
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=defaultStorageAccount)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getLab -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabListServiceFabricApplicableSchedules
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the service fabric.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["userName"] = $userName

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:listServiceFabricApplicableSchedules -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetFormula
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=description)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the formula.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getFormula -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabListScheduleApplicable
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:listScheduleApplicable -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetUser
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=identity)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getUser -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetSecret
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=value)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the secret.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["userName"] = $userName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getSecret -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetServiceFabricSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=status)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the service fabric.)')]
        [string]
        $serviceFabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["serviceFabricName"] = $serviceFabricName
        $arguments["userName"] = $userName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getServiceFabricSchedule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetVirtualNetwork
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($expand=externalSubnets)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getVirtualNetwork -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetArtifactSource
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=displayName)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the artifact source.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getArtifactSource -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetEnvironment
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=deploymentProperties)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the environment.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["userName"] = $userName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getEnvironment -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetNotificationChannel
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=webHookUrl)'')')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the notification channel.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["labName"] = $labName
        $arguments["name"] = $name
        $arguments["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'expand')
        {
            $arguments["expand"] = $expand
        }

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:getNotificationChannel -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class NotificationSettings
{
    [string] $emailRecipient
    [int] $timeInMinutes
    [string] $notificationLocale
    [string] $webhookUrl
    [ArgumentCompletions('Enabled', 'Disabled')]
    [string] $status
}
function New-AzureNativeTypeDevtestlabNotificationSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='The email recipient to send notifications to (can be a list of semi-colon separated email addresses).)')]
        [string]
        $emailRecipient,
        [parameter(mandatory=$False,HelpMessage='Time in minutes before event at which notification will be sent.)')]
        [int]
        $timeInMinutes,
        [parameter(mandatory=$False,HelpMessage='The locale to use when sending a notification (fallback for unsupported languages is EN).)')]
        [string]
        $notificationLocale,
        [parameter(mandatory=$False,HelpMessage='The webhook URL to which the notification will be sent.)')]
        [string]
        $webhookUrl,
        [parameter(mandatory=$False,HelpMessage='If notifications are enabled for this schedule (i.e. Enabled, Disabled).)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $status
    )

    process
    {
        return $([NotificationSettings]$PSBoundParameters)
    }
}
class WeekDetails
{
    [string] $time
    [string[]] $weekdays
}
function New-AzureNativeTypeDevtestlabWeekDetails
{
    param (
        [parameter(mandatory=$False,HelpMessage='The time of the day the schedule will occur.)')]
        [string]
        $time,
        [parameter(mandatory=$False,HelpMessage='The days of the week for which the schedule is set (e.g. Sunday, Monday, Tuesday, etc.).)')]
        [string[]]
        $weekdays
    )

    process
    {
        return $([WeekDetails]$PSBoundParameters)
    }
}
class DayDetails
{
    [string] $time
}
function New-AzureNativeTypeDevtestlabDayDetails
{
    param (
        [parameter(mandatory=$False,HelpMessage='The time of day the schedule will occur.)')]
        [string]
        $time
    )

    process
    {
        return $([DayDetails]$PSBoundParameters)
    }
}
class HourDetails
{
    [int] $minute
}
function New-AzureNativeTypeDevtestlabHourDetails
{
    param (
        [parameter(mandatory=$False,HelpMessage='Minutes of the hour the schedule will run.)')]
        [int]
        $minute
    )

    process
    {
        return $([HourDetails]$PSBoundParameters)
    }
}
function New-AzureNativeDevtestlabGlobalSchedule
{
    [Alias('azure_native_devtestlab_globalschedule')]
    param (
        [parameter(mandatory=$False,HelpMessage='The task type of the schedule (e.g. LabVmsShutdownTask, LabVmAutoStart).)')]
        [string]
        $taskType,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Notification settings.)')]
        [NotificationSettings]
        $notificationSettings,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur only some days of the week, specify the weekly recurrence.)')]
        [WeekDetails]
        $weeklyRecurrence,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur once each day of the week, specify the daily recurrence.)')]
        [DayDetails]
        $dailyRecurrence,
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur multiple times a day, specify the hourly recurrence.)')]
        [HourDetails]
        $hourlyRecurrence,
        [parameter(mandatory=$False,HelpMessage='The time zone ID (e.g. Pacific Standard time).)')]
        [string]
        $timeZoneId,
        [parameter(mandatory=$False,HelpMessage='The resource ID to which the schedule belongs)')]
        [string]
        $targetResourceId,
        [parameter(mandatory=$False,HelpMessage='The status of the schedule (i.e. Enabled, Disabled))')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:GlobalSchedule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'taskType')
        {
            $resource.properties["taskType"] = $taskType
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'notificationSettings')
        {
            $resource.properties["notificationSettings"] = $notificationSettings
        }

        if($PSBoundParameters.Keys -icontains 'weeklyRecurrence')
        {
            $resource.properties["weeklyRecurrence"] = $weeklyRecurrence
        }

        if($PSBoundParameters.Keys -icontains 'dailyRecurrence')
        {
            $resource.properties["dailyRecurrence"] = $dailyRecurrence
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'hourlyRecurrence')
        {
            $resource.properties["hourlyRecurrence"] = $hourlyRecurrence
        }

        if($PSBoundParameters.Keys -icontains 'timeZoneId')
        {
            $resource.properties["timeZoneId"] = $timeZoneId
        }

        if($PSBoundParameters.Keys -icontains 'targetResourceId')
        {
            $resource.properties["targetResourceId"] = $targetResourceId
        }

        if($PSBoundParameters.Keys -icontains 'status')
        {
            $resource.properties["status"] = $status
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class LabSupportProperties
{
    [ArgumentCompletions('Enabled', 'Disabled')]
    [string] $enabled
    [string] $markdown
}
function New-AzureNativeTypeDevtestlabLabSupportProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Is the lab support banner active/enabled at this time?)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='The markdown text (if any) that this lab displays in the UI. If left empty/null, nothing will be shown.)')]
        [string]
        $markdown
    )

    process
    {
        return $([LabSupportProperties]$PSBoundParameters)
    }
}
class LabAnnouncementProperties
{
    [string] $markdown
    [string] $expirationDate
    [bool] $expired
    [ArgumentCompletions('Enabled', 'Disabled')]
    [string] $enabled
    [string] $title
}
function New-AzureNativeTypeDevtestlabLabAnnouncementProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The markdown text (if any) that this lab displays in the UI. If left empty/null, nothing will be shown.)')]
        [string]
        $markdown,
        [parameter(mandatory=$False,HelpMessage='The time at which the announcement expires (null for never))')]
        [string]
        $expirationDate,
        [parameter(mandatory=$False,HelpMessage='Has this announcement expired?)')]
        [bool]
        $expired,
        [parameter(mandatory=$False,HelpMessage='Is the lab announcement active/enabled at this time?)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='The plain text title for the lab announcement)')]
        [string]
        $title
    )

    process
    {
        return $([LabAnnouncementProperties]$PSBoundParameters)
    }
}
function New-AzureNativeDevtestlabLab
{
    [Alias('azure_native_devtestlab_lab')]
    param (
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The ordered list of artifact resource IDs that should be applied on all Windows VM creations by default, prior to the artifacts specified by the user.)')]
        [string[]]
        $mandatoryArtifactsResourceIdsWindows,
        [parameter(mandatory=$False,HelpMessage='The properties of any lab support message associated with this lab)')]
        [LabSupportProperties]
        $support,
        [parameter(mandatory=$False,HelpMessage='The ordered list of artifact resource IDs that should be applied on all Linux VM creations by default, prior to the artifacts specified by the user.)')]
        [string[]]
        $mandatoryArtifactsResourceIdsLinux,
        [parameter(mandatory=$False,HelpMessage='The access rights to be granted to the user when provisioning an environment)')]
        [string]
        [ArgumentCompletions('Reader', 'Contributor')]
        $environmentPermission,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Extended properties of the lab used for experimental features)')]
        [hashtable]
        $extendedProperties,
        [parameter(mandatory=$False,HelpMessage='The setting to enable usage of premium data disks.
When its value is ''Enabled'', creation of standard or premium data disks is allowed.
When its value is ''Disabled'', only creation of standard data disks is allowed.)'
)]
        [string]
        [ArgumentCompletions('Disabled', 'Enabled')]
        $premiumDataDisks,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Type of storage used by the lab. It can be either Premium or Standard. Default is Premium.)')]
        [string]
        [ArgumentCompletions('Standard', 'Premium', 'StandardSSD')]
        $labStorageType,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The properties of any lab announcement associated with this lab)')]
        [LabAnnouncementProperties]
        $announcement,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:Lab")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'mandatoryArtifactsResourceIdsWindows')
        {
            $resource.properties["mandatoryArtifactsResourceIdsWindows"] = $mandatoryArtifactsResourceIdsWindows
        }

        if($PSBoundParameters.Keys -icontains 'support')
        {
            $resource.properties["support"] = $support
        }

        if($PSBoundParameters.Keys -icontains 'mandatoryArtifactsResourceIdsLinux')
        {
            $resource.properties["mandatoryArtifactsResourceIdsLinux"] = $mandatoryArtifactsResourceIdsLinux
        }

        if($PSBoundParameters.Keys -icontains 'environmentPermission')
        {
            $resource.properties["environmentPermission"] = $environmentPermission
        }

        if($PSBoundParameters.Keys -icontains 'extendedProperties')
        {
            $resource.properties["extendedProperties"] = $extendedProperties
        }

        if($PSBoundParameters.Keys -icontains 'premiumDataDisks')
        {
            $resource.properties["premiumDataDisks"] = $premiumDataDisks
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'labStorageType')
        {
            $resource.properties["labStorageType"] = $labStorageType
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'announcement')
        {
            $resource.properties["announcement"] = $announcement
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabServiceFabric
{
    [Alias('azure_native_devtestlab_servicefabric')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The resource id of the environment under which the service fabric resource is present)')]
        [string]
        $environmentId,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the service fabric.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The backing service fabric resource''s id)')]
        [string]
        $externalServiceFabricId,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:ServiceFabric")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["userName"] = $userName

        if($PSBoundParameters.Keys -icontains 'environmentId')
        {
            $resource.properties["environmentId"] = $environmentId
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'externalServiceFabricId')
        {
            $resource.properties["externalServiceFabricId"] = $externalServiceFabricId
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabServiceFabricSchedule
{
    [Alias('azure_native_devtestlab_servicefabricschedule')]
    param (
        [parameter(mandatory=$False,HelpMessage='The task type of the schedule (e.g. LabVmsShutdownTask, LabVmAutoStart).)')]
        [string]
        $taskType,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The name of the service fabric.)')]
        [string]
        $serviceFabricName,
        [parameter(mandatory=$False,HelpMessage='The resource ID to which the schedule belongs)')]
        [string]
        $targetResourceId,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The status of the schedule (i.e. Enabled, Disabled))')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Notification settings.)')]
        [NotificationSettings]
        $notificationSettings,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur once each day of the week, specify the daily recurrence.)')]
        [DayDetails]
        $dailyRecurrence,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur only some days of the week, specify the weekly recurrence.)')]
        [WeekDetails]
        $weeklyRecurrence,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The time zone ID (e.g. Pacific Standard time).)')]
        [string]
        $timeZoneId,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur multiple times a day, specify the hourly recurrence.)')]
        [HourDetails]
        $hourlyRecurrence,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:ServiceFabricSchedule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["serviceFabricName"] = $serviceFabricName
        $resource.properties["userName"] = $userName

        if($PSBoundParameters.Keys -icontains 'taskType')
        {
            $resource.properties["taskType"] = $taskType
        }

        if($PSBoundParameters.Keys -icontains 'targetResourceId')
        {
            $resource.properties["targetResourceId"] = $targetResourceId
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'status')
        {
            $resource.properties["status"] = $status
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'notificationSettings')
        {
            $resource.properties["notificationSettings"] = $notificationSettings
        }

        if($PSBoundParameters.Keys -icontains 'dailyRecurrence')
        {
            $resource.properties["dailyRecurrence"] = $dailyRecurrence
        }

        if($PSBoundParameters.Keys -icontains 'weeklyRecurrence')
        {
            $resource.properties["weeklyRecurrence"] = $weeklyRecurrence
        }

        if($PSBoundParameters.Keys -icontains 'timeZoneId')
        {
            $resource.properties["timeZoneId"] = $timeZoneId
        }

        if($PSBoundParameters.Keys -icontains 'hourlyRecurrence')
        {
            $resource.properties["hourlyRecurrence"] = $hourlyRecurrence
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabVirtualMachineSchedule
{
    [Alias('azure_native_devtestlab_virtualmachineschedule')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the virtual machine.)')]
        [string]
        $virtualMachineName,
        [parameter(mandatory=$False,HelpMessage='The task type of the schedule (e.g. LabVmsShutdownTask, LabVmAutoStart).)')]
        [string]
        $taskType,
        [parameter(mandatory=$False,HelpMessage='The resource ID to which the schedule belongs)')]
        [string]
        $targetResourceId,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The status of the schedule (i.e. Enabled, Disabled))')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Notification settings.)')]
        [NotificationSettings]
        $notificationSettings,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur once each day of the week, specify the daily recurrence.)')]
        [DayDetails]
        $dailyRecurrence,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur only some days of the week, specify the weekly recurrence.)')]
        [WeekDetails]
        $weeklyRecurrence,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The time zone ID (e.g. Pacific Standard time).)')]
        [string]
        $timeZoneId,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur multiple times a day, specify the hourly recurrence.)')]
        [HourDetails]
        $hourlyRecurrence,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:VirtualMachineSchedule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["virtualMachineName"] = $virtualMachineName

        if($PSBoundParameters.Keys -icontains 'taskType')
        {
            $resource.properties["taskType"] = $taskType
        }

        if($PSBoundParameters.Keys -icontains 'targetResourceId')
        {
            $resource.properties["targetResourceId"] = $targetResourceId
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'status')
        {
            $resource.properties["status"] = $status
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'notificationSettings')
        {
            $resource.properties["notificationSettings"] = $notificationSettings
        }

        if($PSBoundParameters.Keys -icontains 'dailyRecurrence')
        {
            $resource.properties["dailyRecurrence"] = $dailyRecurrence
        }

        if($PSBoundParameters.Keys -icontains 'weeklyRecurrence')
        {
            $resource.properties["weeklyRecurrence"] = $weeklyRecurrence
        }

        if($PSBoundParameters.Keys -icontains 'timeZoneId')
        {
            $resource.properties["timeZoneId"] = $timeZoneId
        }

        if($PSBoundParameters.Keys -icontains 'hourlyRecurrence')
        {
            $resource.properties["hourlyRecurrence"] = $hourlyRecurrence
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class UserIdentity
{
    [string] $principalId
    [string] $appId
    [string] $tenantId
    [string] $principalName
    [string] $objectId
}
function New-AzureNativeTypeDevtestlabUserIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='Set to the principal Id of the client JWT making the request. Service principal will not have the principal Id.)')]
        [string]
        $principalId,
        [parameter(mandatory=$False,HelpMessage='Set to the app Id of the client JWT making the request.)')]
        [string]
        $appId,
        [parameter(mandatory=$False,HelpMessage='Set to the tenant ID of the client JWT making the request.)')]
        [string]
        $tenantId,
        [parameter(mandatory=$False,HelpMessage='Set to the principal name / UPN of the client JWT making the request.)')]
        [string]
        $principalName,
        [parameter(mandatory=$False,HelpMessage='Set to the object Id of the client JWT making the request. Not all users have object Id. For CSP (reseller) scenarios for example, object Id is not available.)')]
        [string]
        $objectId
    )

    process
    {
        return $([UserIdentity]$PSBoundParameters)
    }
}
class UserSecretStore
{
    [string] $keyVaultUri
    [string] $keyVaultId
}
function New-AzureNativeTypeDevtestlabUserSecretStore
{
    param (
        [parameter(mandatory=$False,HelpMessage='The URI of the user''s Key vault.)')]
        [string]
        $keyVaultUri,
        [parameter(mandatory=$False,HelpMessage='The ID of the user''s Key vault.)')]
        [string]
        $keyVaultId
    )

    process
    {
        return $([UserSecretStore]$PSBoundParameters)
    }
}
function New-AzureNativeDevtestlabUser
{
    [Alias('azure_native_devtestlab_user')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The identity of the user.)')]
        [UserIdentity]
        $identity,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The secret store of the user.)')]
        [UserSecretStore]
        $secretStore,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:User")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'identity')
        {
            $resource.properties["identity"] = $identity
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'secretStore')
        {
            $resource.properties["secretStore"] = $secretStore
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabVirtualNetwork
{
    [Alias('azure_native_devtestlab_virtualnetwork')]
    param (
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The description of the virtual network.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The allowed subnets of the virtual network.)')]
        $allowedSubnets,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual network.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The subnet overrides of the virtual network.)')]
        $subnetOverrides,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The Microsoft.Network resource identifier of the virtual network.)')]
        [string]
        $externalProviderResourceId,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:VirtualNetwork")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'allowedSubnets')
        {
            $resource.properties["allowedSubnets"] = $allowedSubnets
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'subnetOverrides')
        {
            $resource.properties["subnetOverrides"] = $subnetOverrides
        }

        if($PSBoundParameters.Keys -icontains 'externalProviderResourceId')
        {
            $resource.properties["externalProviderResourceId"] = $externalProviderResourceId
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class CustomImagePropertiesFromPlan
{
    [string] $offer
    [string] $publisher
    [string] $id
}
function New-AzureNativeTypeDevtestlabCustomImagePropertiesFromPlan
{
    param (
        [parameter(mandatory=$False,HelpMessage='The offer for the plan from the marketplace image the custom image is derived from)')]
        [string]
        $offer,
        [parameter(mandatory=$False,HelpMessage='The publisher for the plan from the marketplace image the custom image is derived from)')]
        [string]
        $publisher,
        [parameter(mandatory=$False,HelpMessage='The id of the plan, equivalent to name of the plan)')]
        [string]
        $id
    )

    process
    {
        return $([CustomImagePropertiesFromPlan]$PSBoundParameters)
    }
}
class CustomImagePropertiesCustom
{
    [string] $imageName
    [bool] $sysPrep
    [ArgumentCompletions('Windows', 'Linux', 'None')]
    [string] $osType
}
function New-AzureNativeTypeDevtestlabCustomImagePropertiesCustom
{
    param (
        [parameter(mandatory=$False,HelpMessage='The image name.)')]
        [string]
        $imageName,
        [parameter(mandatory=$False,HelpMessage='Indicates whether sysprep has been run on the VHD.)')]
        [bool]
        $sysPrep,
        [parameter(mandatory=$False,HelpMessage='The OS type of the custom image (i.e. Windows, Linux))')]
        [string]
        [ArgumentCompletions('Windows', 'Linux', 'None')]
        $osType
    )

    process
    {
        return $([CustomImagePropertiesCustom]$PSBoundParameters)
    }
}
class WindowsOsInfo
{
    [ArgumentCompletions('NonSysprepped', 'SysprepRequested', 'SysprepApplied')]
    [string] $windowsOsState
}
function New-AzureNativeTypeDevtestlabWindowsOsInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='The state of the Windows OS (i.e. NonSysprepped, SysprepRequested, SysprepApplied).)')]
        [string]
        [ArgumentCompletions('NonSysprepped', 'SysprepRequested', 'SysprepApplied')]
        $windowsOsState
    )

    process
    {
        return $([WindowsOsInfo]$PSBoundParameters)
    }
}
class LinuxOsInfo
{
    [ArgumentCompletions('NonDeprovisioned', 'DeprovisionRequested', 'DeprovisionApplied')]
    [string] $linuxOsState
}
function New-AzureNativeTypeDevtestlabLinuxOsInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='The state of the Linux OS (i.e. NonDeprovisioned, DeprovisionRequested, DeprovisionApplied).)')]
        [string]
        [ArgumentCompletions('NonDeprovisioned', 'DeprovisionRequested', 'DeprovisionApplied')]
        $linuxOsState
    )

    process
    {
        return $([LinuxOsInfo]$PSBoundParameters)
    }
}
class CustomImagePropertiesFromVm
{
    [WindowsOsInfo] $windowsOsInfo
    [string] $sourceVmId
    [LinuxOsInfo] $linuxOsInfo
}
function New-AzureNativeTypeDevtestlabCustomImagePropertiesFromVm
{
    param (
        [parameter(mandatory=$False,HelpMessage='The Windows OS information of the VM.)')]
        [WindowsOsInfo]
        $windowsOsInfo,
        [parameter(mandatory=$False,HelpMessage='The source vm identifier.)')]
        [string]
        $sourceVmId,
        [parameter(mandatory=$False,HelpMessage='The Linux OS information of the VM.)')]
        [LinuxOsInfo]
        $linuxOsInfo
    )

    process
    {
        return $([CustomImagePropertiesFromVm]$PSBoundParameters)
    }
}
function New-AzureNativeDevtestlabCustomImage
{
    [Alias('azure_native_devtestlab_customimage')]
    param (
        [parameter(mandatory=$False,HelpMessage='The Managed Image Id backing the custom image.)')]
        [string]
        $managedImageId,
        [parameter(mandatory=$False,HelpMessage='Whether or not the custom images underlying offer/plan has been enabled for programmatic deployment)')]
        [bool]
        $isPlanAuthorized,
        [parameter(mandatory=$False,HelpMessage='The author of the custom image.)')]
        [string]
        $author,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Storage information about the plan related to this custom image)')]
        [CustomImagePropertiesFromPlan]
        $customImagePlan,
        [parameter(mandatory=$False,HelpMessage='The Managed Snapshot Id backing the custom image.)')]
        [string]
        $managedSnapshotId,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The VHD from which the image is to be created.)')]
        [CustomImagePropertiesCustom]
        $vhd,
        [parameter(mandatory=$False,HelpMessage='The name of the custom image.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The description of the custom image.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The virtual machine from which the image is to be created.)')]
        [CustomImagePropertiesFromVm]
        $vm,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='Storage information about the data disks present in the custom image)')]
        $dataDiskStorageInfo,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:CustomImage")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'managedImageId')
        {
            $resource.properties["managedImageId"] = $managedImageId
        }

        if($PSBoundParameters.Keys -icontains 'isPlanAuthorized')
        {
            $resource.properties["isPlanAuthorized"] = $isPlanAuthorized
        }

        if($PSBoundParameters.Keys -icontains 'author')
        {
            $resource.properties["author"] = $author
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'customImagePlan')
        {
            $resource.properties["customImagePlan"] = $customImagePlan
        }

        if($PSBoundParameters.Keys -icontains 'managedSnapshotId')
        {
            $resource.properties["managedSnapshotId"] = $managedSnapshotId
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'vhd')
        {
            $resource.properties["vhd"] = $vhd
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'vm')
        {
            $resource.properties["vm"] = $vm
        }

        if($PSBoundParameters.Keys -icontains 'dataDiskStorageInfo')
        {
            $resource.properties["dataDiskStorageInfo"] = $dataDiskStorageInfo
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabArtifactSource
{
    [Alias('azure_native_devtestlab_artifactsource')]
    param (
        [parameter(mandatory=$False,HelpMessage='The artifact source''s display name.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='The security token to authenticate to the artifact source.)')]
        [string]
        $securityToken,
        [parameter(mandatory=$False,HelpMessage='The artifact source''s branch reference.)')]
        [string]
        $branchRef,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Indicates if the artifact source is enabled (values: Enabled, Disabled).)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='The folder containing Azure Resource Manager templates.)')]
        [string]
        $armTemplateFolderPath,
        [parameter(mandatory=$False,HelpMessage='The name of the artifact source.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The folder containing artifacts.)')]
        [string]
        $folderPath,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The artifact source''s type.)')]
        [string]
        [ArgumentCompletions('VsoGit', 'GitHub', 'StorageAccount')]
        $sourceType,
        [parameter(mandatory=$False,HelpMessage='The artifact source''s URI.)')]
        [string]
        $uri,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:ArtifactSource")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'displayName')
        {
            $resource.properties["displayName"] = $displayName
        }

        if($PSBoundParameters.Keys -icontains 'securityToken')
        {
            $resource.properties["securityToken"] = $securityToken
        }

        if($PSBoundParameters.Keys -icontains 'branchRef')
        {
            $resource.properties["branchRef"] = $branchRef
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'status')
        {
            $resource.properties["status"] = $status
        }

        if($PSBoundParameters.Keys -icontains 'armTemplateFolderPath')
        {
            $resource.properties["armTemplateFolderPath"] = $armTemplateFolderPath
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'folderPath')
        {
            $resource.properties["folderPath"] = $folderPath
        }

        if($PSBoundParameters.Keys -icontains 'sourceType')
        {
            $resource.properties["sourceType"] = $sourceType
        }

        if($PSBoundParameters.Keys -icontains 'uri')
        {
            $resource.properties["uri"] = $uri
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class InboundNatRule
{
    [int] $backendPort
    [ArgumentCompletions('Tcp', 'Udp')]
    [string] $transportProtocol
    [int] $frontendPort
}
function New-AzureNativeTypeDevtestlabInboundNatRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The port to which the external traffic will be redirected.)')]
        [int]
        $backendPort,
        [parameter(mandatory=$False,HelpMessage='The transport protocol for the endpoint.)')]
        [string]
        [ArgumentCompletions('Tcp', 'Udp')]
        $transportProtocol,
        [parameter(mandatory=$False,HelpMessage='The external endpoint port of the inbound connection. Possible values range between 1 and 65535, inclusive. If unspecified, a value will be allocated automatically.)')]
        [int]
        $frontendPort
    )

    process
    {
        return $([InboundNatRule]$PSBoundParameters)
    }
}
class SharedPublicIpAddressConfiguration
{
    [InboundNatRule[]] $inboundNatRules
}
function New-AzureNativeTypeDevtestlabSharedPublicIpAddressConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The incoming NAT rules)')]
        $inboundNatRules
    )

    process
    {
        return $([SharedPublicIpAddressConfiguration]$PSBoundParameters)
    }
}
class NetworkInterfaceProperties
{
    [string] $rdpAuthority
    [string] $privateIpAddress
    [string] $publicIpAddressId
    [string] $virtualNetworkId
    [string] $subnetId
    [SharedPublicIpAddressConfiguration] $sharedPublicIpAddressConfiguration
    [string] $sshAuthority
    [string] $publicIpAddress
    [string] $dnsName
}
function New-AzureNativeTypeDevtestlabNetworkInterfaceProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The RdpAuthority property is a server DNS host name or IP address followed by the service port number for RDP (Remote Desktop Protocol).)')]
        [string]
        $rdpAuthority,
        [parameter(mandatory=$False,HelpMessage='The private IP address.)')]
        [string]
        $privateIpAddress,
        [parameter(mandatory=$False,HelpMessage='The resource ID of the public IP address.)')]
        [string]
        $publicIpAddressId,
        [parameter(mandatory=$False,HelpMessage='The resource ID of the virtual network.)')]
        [string]
        $virtualNetworkId,
        [parameter(mandatory=$False,HelpMessage='The resource ID of the sub net.)')]
        [string]
        $subnetId,
        [parameter(mandatory=$False,HelpMessage='The configuration for sharing a public IP address across multiple virtual machines.)')]
        [SharedPublicIpAddressConfiguration]
        $sharedPublicIpAddressConfiguration,
        [parameter(mandatory=$False,HelpMessage='The SshAuthority property is a server DNS host name or IP address followed by the service port number for SSH.)')]
        [string]
        $sshAuthority,
        [parameter(mandatory=$False,HelpMessage='The public IP address.)')]
        [string]
        $publicIpAddress,
        [parameter(mandatory=$False,HelpMessage='The DNS name.)')]
        [string]
        $dnsName
    )

    process
    {
        return $([NetworkInterfaceProperties]$PSBoundParameters)
    }
}
class GalleryImageReference
{
    [string] $offer
    [string] $version
    [string] $publisher
    [string] $sku
    [string] $osType
}
function New-AzureNativeTypeDevtestlabGalleryImageReference
{
    param (
        [parameter(mandatory=$False,HelpMessage='The offer of the gallery image.)')]
        [string]
        $offer,
        [parameter(mandatory=$False,HelpMessage='The version of the gallery image.)')]
        [string]
        $version,
        [parameter(mandatory=$False,HelpMessage='The publisher of the gallery image.)')]
        [string]
        $publisher,
        [parameter(mandatory=$False,HelpMessage='The SKU of the gallery image.)')]
        [string]
        $sku,
        [parameter(mandatory=$False,HelpMessage='The OS type of the gallery image.)')]
        [string]
        $osType
    )

    process
    {
        return $([GalleryImageReference]$PSBoundParameters)
    }
}
function New-AzureNativeDevtestlabVirtualMachine
{
    [Alias('azure_native_devtestlab_virtualmachine')]
    param (
        [parameter(mandatory=$False,HelpMessage='Storage type to use for virtual machine (i.e. Standard, Premium).)')]
        [string]
        $storageType,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The network interface properties.)')]
        [NetworkInterfaceProperties]
        $networkInterface,
        [parameter(mandatory=$False,HelpMessage='Indicates whether another user can take ownership of the virtual machine)')]
        [bool]
        $allowClaim,
        [parameter(mandatory=$False,HelpMessage='The id of the plan associated with the virtual machine image)')]
        [string]
        $planId,
        [parameter(mandatory=$False,HelpMessage='The user name of the virtual machine.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The Microsoft Azure Marketplace image reference of the virtual machine.)')]
        [GalleryImageReference]
        $galleryImageReference,
        [parameter(mandatory=$False,HelpMessage='The object identifier of the owner of the virtual machine.)')]
        [string]
        $ownerObjectId,
        [parameter(mandatory=$False,HelpMessage='New or existing data disks to attach to the virtual machine after creation)')]
        $dataDiskParameters,
        [parameter(mandatory=$False,HelpMessage='The creation date of the virtual machine.)')]
        [string]
        $createdDate,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual machine.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The size of the virtual machine.)')]
        [string]
        $size,
        [parameter(mandatory=$False,HelpMessage='The artifacts to be installed on the virtual machine.)')]
        $artifacts,
        [parameter(mandatory=$False,HelpMessage='The expiration date for VM.)')]
        [string]
        $expirationDate,
        [parameter(mandatory=$False,HelpMessage='The SSH key of the virtual machine administrator.)')]
        [string]
        $sshKey,
        [parameter(mandatory=$False,HelpMessage='Indicates whether this virtual machine uses an SSH key for authentication.)')]
        [bool]
        $isAuthenticationWithSshKey,
        [parameter(mandatory=$False,HelpMessage='The notes of the virtual machine.)')]
        [string]
        $notes,
        [parameter(mandatory=$False,HelpMessage='Virtual Machine schedules to be created)')]
        $scheduleParameters,
        [parameter(mandatory=$False,HelpMessage='The custom image identifier of the virtual machine.)')]
        [string]
        $customImageId,
        [parameter(mandatory=$False,HelpMessage='Indicates whether the virtual machine is to be created without a public IP address.)')]
        [bool]
        $disallowPublicIpAddress,
        [parameter(mandatory=$False,HelpMessage='The user principal name of the virtual machine owner.)')]
        [string]
        $ownerUserPrincipalName,
        [parameter(mandatory=$False,HelpMessage='The password of the virtual machine administrator.)')]
        [string]
        $password,
        [parameter(mandatory=$False,HelpMessage='The resource ID of the environment that contains this virtual machine, if any.)')]
        [string]
        $environmentId,
        [parameter(mandatory=$False,HelpMessage='The lab virtual network identifier of the virtual machine.)')]
        [string]
        $labVirtualNetworkId,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The lab subnet name of the virtual machine.)')]
        [string]
        $labSubnetName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:VirtualMachine")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'storageType')
        {
            $resource.properties["storageType"] = $storageType
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'networkInterface')
        {
            $resource.properties["networkInterface"] = $networkInterface
        }

        if($PSBoundParameters.Keys -icontains 'allowClaim')
        {
            $resource.properties["allowClaim"] = $allowClaim
        }

        if($PSBoundParameters.Keys -icontains 'planId')
        {
            $resource.properties["planId"] = $planId
        }

        if($PSBoundParameters.Keys -icontains 'userName')
        {
            $resource.properties["userName"] = $userName
        }

        if($PSBoundParameters.Keys -icontains 'galleryImageReference')
        {
            $resource.properties["galleryImageReference"] = $galleryImageReference
        }

        if($PSBoundParameters.Keys -icontains 'ownerObjectId')
        {
            $resource.properties["ownerObjectId"] = $ownerObjectId
        }

        if($PSBoundParameters.Keys -icontains 'dataDiskParameters')
        {
            $resource.properties["dataDiskParameters"] = $dataDiskParameters
        }

        if($PSBoundParameters.Keys -icontains 'createdDate')
        {
            $resource.properties["createdDate"] = $createdDate
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'size')
        {
            $resource.properties["size"] = $size
        }

        if($PSBoundParameters.Keys -icontains 'artifacts')
        {
            $resource.properties["artifacts"] = $artifacts
        }

        if($PSBoundParameters.Keys -icontains 'expirationDate')
        {
            $resource.properties["expirationDate"] = $expirationDate
        }

        if($PSBoundParameters.Keys -icontains 'sshKey')
        {
            $resource.properties["sshKey"] = $sshKey
        }

        if($PSBoundParameters.Keys -icontains 'isAuthenticationWithSshKey')
        {
            $resource.properties["isAuthenticationWithSshKey"] = $isAuthenticationWithSshKey
        }

        if($PSBoundParameters.Keys -icontains 'notes')
        {
            $resource.properties["notes"] = $notes
        }

        if($PSBoundParameters.Keys -icontains 'scheduleParameters')
        {
            $resource.properties["scheduleParameters"] = $scheduleParameters
        }

        if($PSBoundParameters.Keys -icontains 'customImageId')
        {
            $resource.properties["customImageId"] = $customImageId
        }

        if($PSBoundParameters.Keys -icontains 'disallowPublicIpAddress')
        {
            $resource.properties["disallowPublicIpAddress"] = $disallowPublicIpAddress
        }

        if($PSBoundParameters.Keys -icontains 'ownerUserPrincipalName')
        {
            $resource.properties["ownerUserPrincipalName"] = $ownerUserPrincipalName
        }

        if($PSBoundParameters.Keys -icontains 'password')
        {
            $resource.properties["password"] = $password
        }

        if($PSBoundParameters.Keys -icontains 'environmentId')
        {
            $resource.properties["environmentId"] = $environmentId
        }

        if($PSBoundParameters.Keys -icontains 'labVirtualNetworkId')
        {
            $resource.properties["labVirtualNetworkId"] = $labVirtualNetworkId
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'labSubnetName')
        {
            $resource.properties["labSubnetName"] = $labSubnetName
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class ArmTemplateParameterProperties
{
    [string] $name
    [string] $value
}
function New-AzureNativeTypeDevtestlabArmTemplateParameterProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the template parameter.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The value of the template parameter.)')]
        [string]
        $value
    )

    process
    {
        return $([ArmTemplateParameterProperties]$PSBoundParameters)
    }
}
class EnvironmentDeploymentProperties
{
    [ArmTemplateParameterProperties[]] $parameters
    [string] $armTemplateId
}
function New-AzureNativeTypeDevtestlabEnvironmentDeploymentProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The parameters of the Azure Resource Manager template.)')]
        $parameters,
        [parameter(mandatory=$False,HelpMessage='The Azure Resource Manager template''s identifier.)')]
        [string]
        $armTemplateId
    )

    process
    {
        return $([EnvironmentDeploymentProperties]$PSBoundParameters)
    }
}
function New-AzureNativeDevtestlabEnvironment
{
    [Alias('azure_native_devtestlab_environment')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The display name of the Azure Resource Manager template that produced the environment.)')]
        [string]
        $armTemplateDisplayName,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The deployment properties of the environment.)')]
        [EnvironmentDeploymentProperties]
        $deploymentProperties,
        [parameter(mandatory=$False,HelpMessage='The name of the environment.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:Environment")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["userName"] = $userName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'armTemplateDisplayName')
        {
            $resource.properties["armTemplateDisplayName"] = $armTemplateDisplayName
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'deploymentProperties')
        {
            $resource.properties["deploymentProperties"] = $deploymentProperties
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabNotificationChannel
{
    [Alias('azure_native_devtestlab_notificationchannel')]
    param (
        [parameter(mandatory=$False,HelpMessage='The webhook URL to send notifications to.)')]
        [string]
        $webHookUrl,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The locale to use when sending a notification (fallback for unsupported languages is EN).)')]
        [string]
        $notificationLocale,
        [parameter(mandatory=$False,HelpMessage='Description of notification.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The list of event for which this notification is enabled.)')]
        $events,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The email recipient to send notifications to (can be a list of semi-colon separated email addresses).)')]
        [string]
        $emailRecipient,
        [parameter(mandatory=$False,HelpMessage='The name of the notification channel.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:NotificationChannel")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'webHookUrl')
        {
            $resource.properties["webHookUrl"] = $webHookUrl
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'notificationLocale')
        {
            $resource.properties["notificationLocale"] = $notificationLocale
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'events')
        {
            $resource.properties["events"] = $events
        }

        if($PSBoundParameters.Keys -icontains 'emailRecipient')
        {
            $resource.properties["emailRecipient"] = $emailRecipient
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabSecret
{
    [Alias('azure_native_devtestlab_secret')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The name of the secret.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The value of the secret for secret creation.)')]
        [string]
        $value,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:Secret")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["userName"] = $userName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'value')
        {
            $resource.properties["value"] = $value
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class FormulaPropertiesFromVm
{
    [string] $labVmId
}
function New-AzureNativeTypeDevtestlabFormulaPropertiesFromVm
{
    param (
        [parameter(mandatory=$False,HelpMessage='The identifier of the VM from which a formula is to be created.)')]
        [string]
        $labVmId
    )

    process
    {
        return $([FormulaPropertiesFromVm]$PSBoundParameters)
    }
}
class ScheduleCreationParameter
{
    [string] $taskType
    [object] $tags
    [WeekDetails] $weeklyRecurrence
    [string] $targetResourceId
    [DayDetails] $dailyRecurrence
    [string] $name
    [HourDetails] $hourlyRecurrence
    [string] $timeZoneId
    [ArgumentCompletions('Enabled', 'Disabled')]
    [string] $status
    [NotificationSettings] $notificationSettings
}
function New-AzureNativeTypeDevtestlabScheduleCreationParameter
{
    param (
        [parameter(mandatory=$False,HelpMessage='The task type of the schedule (e.g. LabVmsShutdownTask, LabVmAutoStart).)')]
        [string]
        $taskType,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur only some days of the week, specify the weekly recurrence.)')]
        [WeekDetails]
        $weeklyRecurrence,
        [parameter(mandatory=$False,HelpMessage='The resource ID to which the schedule belongs)')]
        [string]
        $targetResourceId,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur once each day of the week, specify the daily recurrence.)')]
        [DayDetails]
        $dailyRecurrence,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual machine or environment)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur multiple times a day, specify the hourly recurrence.)')]
        [HourDetails]
        $hourlyRecurrence,
        [parameter(mandatory=$False,HelpMessage='The time zone ID (e.g. Pacific Standard time).)')]
        [string]
        $timeZoneId,
        [parameter(mandatory=$False,HelpMessage='The status of the schedule (i.e. Enabled, Disabled))')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='Notification settings.)')]
        [NotificationSettings]
        $notificationSettings
    )

    process
    {
        return $([ScheduleCreationParameter]$PSBoundParameters)
    }
}
class AttachNewDataDiskOptions
{
    [ArgumentCompletions('Standard', 'Premium', 'StandardSSD')]
    [string] $diskType
    [string] $diskName
    [int] $diskSizeGiB
}
function New-AzureNativeTypeDevtestlabAttachNewDataDiskOptions
{
    param (
        [parameter(mandatory=$False,HelpMessage='The storage type for the disk (i.e. Standard, Premium).)')]
        [string]
        [ArgumentCompletions('Standard', 'Premium', 'StandardSSD')]
        $diskType,
        [parameter(mandatory=$False,HelpMessage='The name of the disk to be attached.)')]
        [string]
        $diskName,
        [parameter(mandatory=$False,HelpMessage='Size of the disk to be attached in Gibibytes.)')]
        [int]
        $diskSizeGiB
    )

    process
    {
        return $([AttachNewDataDiskOptions]$PSBoundParameters)
    }
}
class DataDiskProperties
{
    [ArgumentCompletions('None', 'ReadOnly', 'ReadWrite')]
    [string] $hostCaching
    [string] $existingLabDiskId
    [AttachNewDataDiskOptions] $attachNewDataDiskOptions
}
function New-AzureNativeTypeDevtestlabDataDiskProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Caching option for a data disk (i.e. None, ReadOnly, ReadWrite).)')]
        [string]
        [ArgumentCompletions('None', 'ReadOnly', 'ReadWrite')]
        $hostCaching,
        [parameter(mandatory=$False,HelpMessage='Specifies the existing lab disk id to attach to virtual machine.)')]
        [string]
        $existingLabDiskId,
        [parameter(mandatory=$False,HelpMessage='Specifies options to attach a new disk to the virtual machine.)')]
        [AttachNewDataDiskOptions]
        $attachNewDataDiskOptions
    )

    process
    {
        return $([DataDiskProperties]$PSBoundParameters)
    }
}
class BulkCreationParameters
{
    [int] $instanceCount
}
function New-AzureNativeTypeDevtestlabBulkCreationParameters
{
    param (
        [parameter(mandatory=$False,HelpMessage='The number of virtual machine instances to create.)')]
        [int]
        $instanceCount
    )

    process
    {
        return $([BulkCreationParameters]$PSBoundParameters)
    }
}
class ArtifactParameterProperties
{
    [string] $name
    [string] $value
}
function New-AzureNativeTypeDevtestlabArtifactParameterProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the artifact parameter.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The value of the artifact parameter.)')]
        [string]
        $value
    )

    process
    {
        return $([ArtifactParameterProperties]$PSBoundParameters)
    }
}
class ArtifactInstallProperties
{
    [string] $artifactId
    [ArtifactParameterProperties[]] $parameters
    [string] $status
    [string] $vmExtensionStatusMessage
    [string] $deploymentStatusMessage
    [string] $artifactTitle
    [string] $installTime
}
function New-AzureNativeTypeDevtestlabArtifactInstallProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The artifact''s identifier.)')]
        [string]
        $artifactId,
        [parameter(mandatory=$False,HelpMessage='The parameters of the artifact.)')]
        $parameters,
        [parameter(mandatory=$False,HelpMessage='The status of the artifact.)')]
        [string]
        $status,
        [parameter(mandatory=$False,HelpMessage='The status message from the virtual machine extension.)')]
        [string]
        $vmExtensionStatusMessage,
        [parameter(mandatory=$False,HelpMessage='The status message from the deployment.)')]
        [string]
        $deploymentStatusMessage,
        [parameter(mandatory=$False,HelpMessage='The artifact''s title.)')]
        [string]
        $artifactTitle,
        [parameter(mandatory=$False,HelpMessage='The time that the artifact starts to install on the virtual machine.)')]
        [string]
        $installTime
    )

    process
    {
        return $([ArtifactInstallProperties]$PSBoundParameters)
    }
}
class LabVirtualMachineCreationParameter
{
    [bool] $disallowPublicIpAddress
    [ScheduleCreationParameter[]] $scheduleParameters
    [string] $name
    [DataDiskProperties[]] $dataDiskParameters
    [string] $createdDate
    [bool] $isAuthenticationWithSshKey
    [string] $storageType
    [string] $labVirtualNetworkId
    [string] $customImageId
    [string] $password
    [string] $ownerUserPrincipalName
    [string] $location
    [string] $notes
    [NetworkInterfaceProperties] $networkInterface
    [GalleryImageReference] $galleryImageReference
    [string] $expirationDate
    [string] $size
    [bool] $allowClaim
    [BulkCreationParameters] $bulkCreationParameters
    [string] $ownerObjectId
    [object] $tags
    [string] $labSubnetName
    [string] $userName
    [string] $planId
    [ArtifactInstallProperties[]] $artifacts
    [string] $sshKey
    [string] $environmentId
}
function New-AzureNativeTypeDevtestlabLabVirtualMachineCreationParameter
{
    param (
        [parameter(mandatory=$False,HelpMessage='Indicates whether the virtual machine is to be created without a public IP address.)')]
        [bool]
        $disallowPublicIpAddress,
        [parameter(mandatory=$False,HelpMessage='Virtual Machine schedules to be created)')]
        $scheduleParameters,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual machine or environment)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='New or existing data disks to attach to the virtual machine after creation)')]
        $dataDiskParameters,
        [parameter(mandatory=$False,HelpMessage='The creation date of the virtual machine.)')]
        [string]
        $createdDate,
        [parameter(mandatory=$False,HelpMessage='Indicates whether this virtual machine uses an SSH key for authentication.)')]
        [bool]
        $isAuthenticationWithSshKey,
        [parameter(mandatory=$False,HelpMessage='Storage type to use for virtual machine (i.e. Standard, Premium).)')]
        [string]
        $storageType,
        [parameter(mandatory=$False,HelpMessage='The lab virtual network identifier of the virtual machine.)')]
        [string]
        $labVirtualNetworkId,
        [parameter(mandatory=$False,HelpMessage='The custom image identifier of the virtual machine.)')]
        [string]
        $customImageId,
        [parameter(mandatory=$False,HelpMessage='The password of the virtual machine administrator.)')]
        [string]
        $password,
        [parameter(mandatory=$False,HelpMessage='The user principal name of the virtual machine owner.)')]
        [string]
        $ownerUserPrincipalName,
        [parameter(mandatory=$False,HelpMessage='The location of the new virtual machine or environment)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The notes of the virtual machine.)')]
        [string]
        $notes,
        [parameter(mandatory=$False,HelpMessage='The network interface properties.)')]
        [NetworkInterfaceProperties]
        $networkInterface,
        [parameter(mandatory=$False,HelpMessage='The Microsoft Azure Marketplace image reference of the virtual machine.)')]
        [GalleryImageReference]
        $galleryImageReference,
        [parameter(mandatory=$False,HelpMessage='The expiration date for VM.)')]
        [string]
        $expirationDate,
        [parameter(mandatory=$False,HelpMessage='The size of the virtual machine.)')]
        [string]
        $size,
        [parameter(mandatory=$False,HelpMessage='Indicates whether another user can take ownership of the virtual machine)')]
        [bool]
        $allowClaim,
        [parameter(mandatory=$False,HelpMessage='The number of virtual machine instances to create.)')]
        [BulkCreationParameters]
        $bulkCreationParameters,
        [parameter(mandatory=$False,HelpMessage='The object identifier of the owner of the virtual machine.)')]
        [string]
        $ownerObjectId,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The lab subnet name of the virtual machine.)')]
        [string]
        $labSubnetName,
        [parameter(mandatory=$False,HelpMessage='The user name of the virtual machine.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The id of the plan associated with the virtual machine image)')]
        [string]
        $planId,
        [parameter(mandatory=$False,HelpMessage='The artifacts to be installed on the virtual machine.)')]
        $artifacts,
        [parameter(mandatory=$False,HelpMessage='The SSH key of the virtual machine administrator.)')]
        [string]
        $sshKey,
        [parameter(mandatory=$False,HelpMessage='The resource ID of the environment that contains this virtual machine, if any.)')]
        [string]
        $environmentId
    )

    process
    {
        return $([LabVirtualMachineCreationParameter]$PSBoundParameters)
    }
}
function New-AzureNativeDevtestlabFormula
{
    [Alias('azure_native_devtestlab_formula')]
    param (
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The OS type of the formula.)')]
        [string]
        $osType,
        [parameter(mandatory=$False,HelpMessage='The description of the formula.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the formula.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Information about a VM from which a formula is to be created.)')]
        [FormulaPropertiesFromVm]
        $vm,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The content of the formula.)')]
        [LabVirtualMachineCreationParameter]
        $formulaContent,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:Formula")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'osType')
        {
            $resource.properties["osType"] = $osType
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'vm')
        {
            $resource.properties["vm"] = $vm
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'formulaContent')
        {
            $resource.properties["formulaContent"] = $formulaContent
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
class IdentityProperties
{
    [string] $principalId
    [string] $clientSecretUrl
    [string] $tenantId
    [ArgumentCompletions('None', 'SystemAssigned', 'UserAssigned', 'SystemAssigned,UserAssigned')]
    [string] $type
}
function New-AzureNativeTypeDevtestlabIdentityProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The principal id of resource identity.)')]
        [string]
        $principalId,
        [parameter(mandatory=$False,HelpMessage='The client secret URL of the identity.)')]
        [string]
        $clientSecretUrl,
        [parameter(mandatory=$False,HelpMessage='The tenant identifier of resource.)')]
        [string]
        $tenantId,
        [parameter(mandatory=$False,HelpMessage='Managed identity.)')]
        [string]
        [ArgumentCompletions('None', 'SystemAssigned', 'UserAssigned', 'SystemAssigned,UserAssigned')]
        $type
    )

    process
    {
        return $([IdentityProperties]$PSBoundParameters)
    }
}
function New-AzureNativeDevtestlabServiceRunner
{
    [Alias('azure_native_devtestlab_servicerunner')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The identity of the resource.)')]
        [IdentityProperties]
        $identity,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the service runner.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:ServiceRunner")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'identity')
        {
            $resource.properties["identity"] = $identity
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabSchedule
{
    [Alias('azure_native_devtestlab_schedule')]
    param (
        [parameter(mandatory=$False,HelpMessage='The task type of the schedule (e.g. LabVmsShutdownTask, LabVmAutoStart).)')]
        [string]
        $taskType,
        [parameter(mandatory=$False,HelpMessage='The resource ID to which the schedule belongs)')]
        [string]
        $targetResourceId,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The status of the schedule (i.e. Enabled, Disabled))')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Notification settings.)')]
        [NotificationSettings]
        $notificationSettings,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur once each day of the week, specify the daily recurrence.)')]
        [DayDetails]
        $dailyRecurrence,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur only some days of the week, specify the weekly recurrence.)')]
        [WeekDetails]
        $weeklyRecurrence,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The time zone ID (e.g. Pacific Standard time).)')]
        [string]
        $timeZoneId,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur multiple times a day, specify the hourly recurrence.)')]
        [HourDetails]
        $hourlyRecurrence,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:Schedule")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'taskType')
        {
            $resource.properties["taskType"] = $taskType
        }

        if($PSBoundParameters.Keys -icontains 'targetResourceId')
        {
            $resource.properties["targetResourceId"] = $targetResourceId
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'status')
        {
            $resource.properties["status"] = $status
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'notificationSettings')
        {
            $resource.properties["notificationSettings"] = $notificationSettings
        }

        if($PSBoundParameters.Keys -icontains 'dailyRecurrence')
        {
            $resource.properties["dailyRecurrence"] = $dailyRecurrence
        }

        if($PSBoundParameters.Keys -icontains 'weeklyRecurrence')
        {
            $resource.properties["weeklyRecurrence"] = $weeklyRecurrence
        }

        if($PSBoundParameters.Keys -icontains 'timeZoneId')
        {
            $resource.properties["timeZoneId"] = $timeZoneId
        }

        if($PSBoundParameters.Keys -icontains 'hourlyRecurrence')
        {
            $resource.properties["hourlyRecurrence"] = $hourlyRecurrence
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabDisk
{
    [Alias('azure_native_devtestlab_disk')]
    param (
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The resource ID of the VM to which this disk is leased.)')]
        [string]
        $leasedByLabVmId,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The host caching policy of the disk (i.e. None, ReadOnly, ReadWrite).)')]
        [string]
        $hostCaching,
        [parameter(mandatory=$False,HelpMessage='When backed by managed disk, this is the ID of the compute disk resource.)')]
        [string]
        $managedDiskId,
        [parameter(mandatory=$False,HelpMessage='The storage type for the disk (i.e. Standard, Premium).)')]
        [string]
        [ArgumentCompletions('Standard', 'Premium', 'StandardSSD')]
        $diskType,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the disk.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='When backed by a blob, the storage account where the blob is.)')]
        [string]
        $storageAccountId,
        [parameter(mandatory=$False,HelpMessage='The size of the disk in Gibibytes.)')]
        [int]
        $diskSizeGiB,
        [parameter(mandatory=$False,HelpMessage='When backed by a blob, the name of the VHD blob without extension.)')]
        [string]
        $diskBlobName,
        [parameter(mandatory=$False,HelpMessage='When backed by a blob, the URI of underlying blob.)')]
        [string]
        $diskUri,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:Disk")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["userName"] = $userName

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        if($PSBoundParameters.Keys -icontains 'leasedByLabVmId')
        {
            $resource.properties["leasedByLabVmId"] = $leasedByLabVmId
        }

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'hostCaching')
        {
            $resource.properties["hostCaching"] = $hostCaching
        }

        if($PSBoundParameters.Keys -icontains 'managedDiskId')
        {
            $resource.properties["managedDiskId"] = $managedDiskId
        }

        if($PSBoundParameters.Keys -icontains 'diskType')
        {
            $resource.properties["diskType"] = $diskType
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'storageAccountId')
        {
            $resource.properties["storageAccountId"] = $storageAccountId
        }

        if($PSBoundParameters.Keys -icontains 'diskSizeGiB')
        {
            $resource.properties["diskSizeGiB"] = $diskSizeGiB
        }

        if($PSBoundParameters.Keys -icontains 'diskBlobName')
        {
            $resource.properties["diskBlobName"] = $diskBlobName
        }

        if($PSBoundParameters.Keys -icontains 'diskUri')
        {
            $resource.properties["diskUri"] = $diskUri
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabPolicy
{
    [Alias('azure_native_devtestlab_policy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The fact name of the policy (e.g. LabVmCount, LabVmSize, MaxVmsAllowedPerLab, etc.)')]
        [string]
        [ArgumentCompletions('UserOwnedLabVmCount', 'UserOwnedLabPremiumVmCount', 'LabVmCount', 'LabPremiumVmCount', 'LabVmSize', 'GalleryImage', 'UserOwnedLabVmCountInSubnet', 'LabTargetCost', 'EnvironmentTemplate', 'ScheduleEditPermission')]
        $factName,
        [parameter(mandatory=$False,HelpMessage='The threshold of the policy (i.e. a number for MaxValuePolicy, and a JSON array of values for AllowedValuesPolicy).)')]
        [string]
        $threshold,
        [parameter(mandatory=$False,HelpMessage='The description of the policy.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The status of the policy.)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='The evaluator type of the policy (i.e. AllowedValuesPolicy, MaxValuePolicy).)')]
        [string]
        [ArgumentCompletions('AllowedValuesPolicy', 'MaxValuePolicy')]
        $evaluatorType,
        [parameter(mandatory=$False,HelpMessage='The name of the policy.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the policy set.)')]
        [string]
        $policySetName,
        [parameter(mandatory=$False,HelpMessage='The fact data of the policy.)')]
        [string]
        $factData,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(HelpMessage='Specifies a list of named output properties that should be treated as secrets, which means they will be encrypted. It augments the list of values that Pulumi detects, based on secret inputs to the resource.')]
        [string[]]
        $PulumiSecretOutputs,
        [parameter(HelpMessage='The aliases parameter provides a list of aliases for a resource or component resource. If youre changing the name, type, or parent path of a resource or component resource, you can add the old name to the list of aliases for a resource to ensure that existing resources will be migrated to the new name instead of being deleted and replaced with the new named resource.')]
        [string[]]
        $PulumiAliases,
        [parameter(HelpMessage='The customTimeouts parameter provides a set of custom timeouts for create, update, and delete operations on a resource. These timeouts are specified using a duration string such as 5m (5 minutes), 40s (40 seconds), or 1d (1 day). Supported duration units are ns, us (or µs), ms, s, m, and h (nanoseconds, microseconds, milliseconds, seconds, minutes, and hours, respectively).')]
        [pulumicustomtimeouts]
        $PulumiCustomTimeouts,
        [parameter(HelpMessage='Setting the PulumiDeleteBeforeReplace parameter to true means that Pulumi will delete the existing resource before creating its replacement. Be aware that this behavior has a cascading impact on dependencies so more resources may be replaced, which can lead to downtime. However, this option may be necessary for some resources that manage scarce resources behind the scenes, and/or resources that cannot exist side-by-side.')]
        [bool]
        $PulumiDeleteBeforeReplace,
        [parameter(HelpMessage='Creates a list of explicit dependencies between resources.The DependsOn parameter ensures that resource creation, update, and deletion operations are done in the correct order.')]
        [object[]]
        $PulumiDependsOn,
        [parameter(HelpMessage='Specifies a list of properties that Pulumi will ignore when it updates existing resources. Any properties specified in this list that are also specified in the resources arguments will only be used when creating the resource.')]
        [string[]]
        $PulumiIgnoreChanges,
        [parameter(HelpMessage='Imports an existing cloud resource so that Pulumi can manage it. To import a resource, first specify the PulumiImport parameter with the resources ID')]
        [string]
        $PulumiImport = [NullString]::Value,
        [parameter(HelpMessage='Specifies a parent for a resource. It is used to associate children with the parents that encapsulate or are responsible for them.')]
        [object]
        $PulumiParent = [NullString]::Value,
        [parameter(HelpMessage='Marks a resource as protected. A protected resource cannot be deleted directly, and it will be an error to do a Pulumi deployment which tries to delete a protected resource for any reason.')]
        [bool]
        $PulumiProtect,
        [parameter(HelpMessage='Sets a provider for the resource. The default is to inherit this value from the parent resource, and to use the ambient provider specified by Pulumi configuration for resources without a parent.')]
        [object]
        $PulumiProvider = [NullString]::Value,
        [parameter(HelpMessage='Sets a list of providers for the resource and its children. This list is combined with resource parents providers lists. If no value is provided, the providers list is identical to the parent. When determining which provider to use for a resource, the providers list is used if provider is not supplied.')]
        [object[]]
        $PulumiProviders,
        [parameter(HelpMessage='Used to indicate that changes to certain properties on a resource should force a replacement of the resource instead of an in-place update. Typically users rely on the resource provider to make this decision based on whether the input property is one that the provider knows how to update in place, or if not, requires a replacement to modify. However, there are cases where users want to replace a resource on a change to an input property even if the resource provider itself doesnt believe it has to replace the resource.')]
        [string[]]
        $PulumiReplaceOnChanges,
        [parameter(HelpMessage='Marks a resource to be retained. If this option is set then Pulumi will not call through to the resource providers Delete method when deleting or replacing the resource during pulumi up or pulumi destroy. As a result, the resource will not be deleted from the backing cloud provider, but will be removed from the Pulumi state.')]
        [bool]
        $PulumiRetainOnDelete,
        [parameter(HelpMessage='Specifies a provider version to use when operating on a resource. This version overrides the version information inferred from the current package. This option should be used rarely.')]
        [string]
        $PulumiProviderVersion = [NullString]::Value
    )

    process
    {
        $resource = [pulumiresource]::new($pulumiid, "azure-native:devtestlab:Policy")

        $resource.options.additionalSecretOutputs = $PulumiSecretOutputs
        $resource.options.aliases = $PulumiAliases
        $resource.options.customTimeouts = $PulumiCustomTimeouts
        $resource.options.deleteBeforeReplace = $PulumiDeleteBeforeReplace
        $resource.options.ignoreChanges = $PulumiIgnoreChanges
        $resource.options.import = if([string]::IsNullOrEmpty($PulumiImport)) { [NullString]::Value } else { $PulumiImport }
        $resource.options.protect = $PulumiProtect
        $resource.options.replaceOnChanges = $PulumiReplaceOnChanges
        $resource.options.retainOnDelete = $PulumiRetainOnDelete
        $resource.options.version = if([string]::IsNullOrEmpty($PulumiProviderVersion)) { [NullString]::Value } else { $PulumiProviderVersion }

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.options.dependson += $Dependency.Reference()
            } else
            {
                $resource.options.dependson += $Dependency
            }
        }
        if($PulumiParent -is [pulumiresource])
        {
            $resource.options.parent = $PulumiParent.Reference()
        } else
        {
            $resource.options.parent = $PulumiParent
        }
        foreach($provider in $PulumiProviders)
        {
            if($provider -is [pulumiprovider])
            {
                $resource.options.providers += $provider.Reference()
            } else
            {
                $resource.options.providers += $provider
            }
        }
        if($PulumiProvider -is [pulumiprovider])
        {
            $resource.options.provider = $PulumiProvider.Reference()
        } else
        {
            $resource.options.provider = $PulumiProvider
        }
        $resource.properties["labName"] = $labName
        $resource.properties["policySetName"] = $policySetName
        $resource.properties["resourceGroupName"] = $resourceGroupName

        if($PSBoundParameters.Keys -icontains 'tags')
        {
            $resource.properties["tags"] = $tags
        }

        if($PSBoundParameters.Keys -icontains 'factName')
        {
            $resource.properties["factName"] = $factName
        }

        if($PSBoundParameters.Keys -icontains 'threshold')
        {
            $resource.properties["threshold"] = $threshold
        }

        if($PSBoundParameters.Keys -icontains 'description')
        {
            $resource.properties["description"] = $description
        }

        if($PSBoundParameters.Keys -icontains 'status')
        {
            $resource.properties["status"] = $status
        }

        if($PSBoundParameters.Keys -icontains 'evaluatorType')
        {
            $resource.properties["evaluatorType"] = $evaluatorType
        }

        if($PSBoundParameters.Keys -icontains 'name')
        {
            $resource.properties["name"] = $name
        }

        if($PSBoundParameters.Keys -icontains 'factData')
        {
            $resource.properties["factData"] = $factData
        }

        if($PSBoundParameters.Keys -icontains 'location')
        {
            $resource.properties["location"] = $location
        }

        $global:pulumiresources += $resource
        return $resource
    }
}