pspulumiyaml.azurenative.devtestlab.psm1

using module pspulumiyaml
function Invoke-AzureNativeFunctionDevtestlabGetGlobalSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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
    )

    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-AzureNativeFunctionDevtestlabGetEnvironment
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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 user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName
    )

    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-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 user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName
    )

    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-AzureNativeFunctionDevtestlabGetServiceFabricSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the service fabric.)')]
        [string]
        $serviceFabricName,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='Specify the $expand query. Example: ''properties($select=status)'')')]
        [string]
        $expand
    )

    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-AzureNativeFunctionDevtestlabGetFormula
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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
    )

    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-AzureNativeFunctionDevtestlabGetPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the policy set.)')]
        [string]
        $policySetName,
        [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
    )

    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-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-AzureNativeFunctionDevtestlabGetDisk
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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 user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName
    )

    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-AzureNativeFunctionDevtestlabGetUser
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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
    )

    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-AzureNativeFunctionDevtestlabListLabVhds
{
    param (
        [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

        $functionObject = Invoke-PulumiFunction -Name azure-native:devtestlab:listLabVhds -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetVirtualMachineSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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 virtual machine.)')]
        [string]
        $virtualMachineName,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName
    )

    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-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-AzureNativeFunctionDevtestlabGetArtifactSource
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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
    )

    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-AzureNativeFunctionDevtestlabGetVirtualMachine
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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
    )

    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-AzureNativeFunctionDevtestlabGetSecret
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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 user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName
    )

    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-AzureNativeFunctionDevtestlabGetCustomImage
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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
    )

    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-AzureNativeFunctionDevtestlabGetNotificationChannel
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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
    )

    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
    }
}
function Invoke-AzureNativeFunctionDevtestlabGetLab
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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
    )

    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-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-AzureNativeFunctionDevtestlabGetVirtualNetwork
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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
    )

    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-AzureNativeFunctionDevtestlabGetServiceFabric
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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 user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName
    )

    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-AzureNativeFunctionDevtestlabGetSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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
    )

    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
    }
}
class NotificationSettings
{
    [ValidateSet('Enabled', 'Disabled')]
    [string] $status
    [ValidateSet('Enabled', 'Disabled')]
    [string] $webhookUrl
    [ValidateSet('Enabled', 'Disabled')]
    [int] $timeInMinutes
    [ValidateSet('Enabled', 'Disabled')]
    [string] $notificationLocale
    [ValidateSet('Enabled', 'Disabled')]
    [string] $emailRecipient
}
function New-AzureNativeTypeDevtestlabNotificationSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='If notifications are enabled for this schedule (i.e. Enabled, Disabled).)')]
        [string]
        [ValidateSet('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='The webhook URL to which the notification will be sent.)')]
        [string]
        $webhookUrl,
        [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 email recipient to send notifications to (can be a list of semi-colon separated email addresses).)')]
        [string]
        $emailRecipient
    )

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

    process
    {
        return $([WeekDetails]$PSBoundParameters)
    }
}
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 tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Notification settings.)')]
        [NotificationSettings]
        $notificationSettings,
        [parameter(mandatory=$False,HelpMessage='The time zone ID (e.g. Pacific Standard time).)')]
        [string]
        $timeZoneId,
        [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 multiple times a day, specify the hourly recurrence.)')]
        [HourDetails]
        $hourlyRecurrence,
        [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='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The status of the schedule (i.e. Enabled, Disabled))')]
        [string]
        [ValidateSet('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [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
    )

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

        $resource.properties["labName"] = $labName
        $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 'timeZoneId')
        {
            $resource.properties["timeZoneId"] = $timeZoneId
        }

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

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

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

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

        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
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabDisk
{
    [Alias('azure_native_devtestlab_disk')]
    param (
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The host caching policy of the disk (i.e. None, ReadOnly, ReadWrite).)')]
        [string]
        $hostCaching,
        [parameter(mandatory=$False,HelpMessage='The resource ID of the VM to which this disk is leased.)')]
        [string]
        $leasedByLabVmId,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='When backed by a blob, the URI of underlying blob.)')]
        [string]
        $diskUri,
        [parameter(mandatory=$False,HelpMessage='The storage type for the disk (i.e. Standard, Premium).)')]
        [string]
        [ValidateSet('Standard', 'Premium', 'StandardSSD')]
        $diskType,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='When backed by a blob, the storage account where the blob is.)')]
        [string]
        $storageAccountId,
        [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 managed disk, this is the ID of the compute disk resource.)')]
        [string]
        $managedDiskId,
        [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 size of the disk in Gibibytes.)')]
        [int]
        $diskSizeGiB,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid
    )

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

        $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 'hostCaching')
        {
            $resource.properties["hostCaching"] = $hostCaching
        }

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class LabSupportProperties
{
    [ValidateSet('Enabled', 'Disabled')]
    [string] $enabled
    [ValidateSet('Enabled', 'Disabled')]
    [string] $markdown
}
function New-AzureNativeTypeDevtestlabLabSupportProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Is the lab support banner active/enabled at this time?)')]
        [string]
        [ValidateSet('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
    [ValidateSet('Enabled', 'Disabled')]
    [string] $enabled
    [ValidateSet('Enabled', 'Disabled')]
    [string] $title
    [ValidateSet('Enabled', 'Disabled')]
    [bool] $expired
}
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='Is the lab announcement active/enabled at this time?)')]
        [string]
        [ValidateSet('Enabled', 'Disabled')]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='The plain text title for the lab announcement)')]
        [string]
        $title,
        [parameter(mandatory=$False,HelpMessage='Has this announcement expired?)')]
        [bool]
        $expired
    )

    process
    {
        return $([LabAnnouncementProperties]$PSBoundParameters)
    }
}
function New-AzureNativeDevtestlabLab
{
    [Alias('azure_native_devtestlab_lab')]
    param (
        [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]
        [ValidateSet('Disabled', 'Enabled')]
        $premiumDataDisks,
        [parameter(mandatory=$False,HelpMessage='Extended properties of the lab used for experimental features)')]
        [hashtable]
        $extendedProperties,
        [parameter(mandatory=$False,HelpMessage='Type of storage used by the lab. It can be either Premium or Standard. Default is Premium.)')]
        [string]
        [ValidateSet('Standard', 'Premium', 'StandardSSD')]
        $labStorageType,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The access rights to be granted to the user when provisioning an environment)')]
        [string]
        [ValidateSet('Reader', 'Contributor')]
        $environmentPermission,
        [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 Windows VM creations by default, prior to the artifacts specified by the user.)')]
        [string[]]
        $mandatoryArtifactsResourceIdsWindows,
        [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 Linux VM creations by default, prior to the artifacts specified by the user.)')]
        [string[]]
        $mandatoryArtifactsResourceIdsLinux,
        [parameter(mandatory=$False,HelpMessage='The properties of any lab announcement associated with this lab)')]
        [LabAnnouncementProperties]
        $announcement,
        [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
    )

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

        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabNotificationChannel
{
    [Alias('azure_native_devtestlab_notificationchannel')]
    param (
        [parameter(mandatory=$False,HelpMessage='The list of event for which this notification is enabled.)')]
        $events,
        [parameter(mandatory=$False,HelpMessage='The webhook URL to send notifications to.)')]
        [string]
        $webHookUrl,
        [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 locale to use when sending a notification (fallback for unsupported languages is EN).)')]
        [string]
        $notificationLocale,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Description of notification.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The name of the notification channel.)')]
        [string]
        $name,
        [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
    )

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

        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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

        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-AzureNativeDevtestlabPolicy
{
    [Alias('azure_native_devtestlab_policy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The evaluator type of the policy (i.e. AllowedValuesPolicy, MaxValuePolicy).)')]
        [string]
        [ValidateSet('AllowedValuesPolicy', 'MaxValuePolicy')]
        $evaluatorType,
        [parameter(mandatory=$False,HelpMessage='The fact name of the policy (e.g. LabVmCount, LabVmSize, MaxVmsAllowedPerLab, etc.)')]
        [string]
        [ValidateSet('UserOwnedLabVmCount', 'UserOwnedLabPremiumVmCount', 'LabVmCount', 'LabPremiumVmCount', 'LabVmSize', 'GalleryImage', 'UserOwnedLabVmCountInSubnet', 'LabTargetCost', 'EnvironmentTemplate', 'ScheduleEditPermission')]
        $factName,
        [parameter(mandatory=$False,HelpMessage='The name of the policy set.)')]
        [string]
        $policySetName,
        [parameter(mandatory=$False,HelpMessage='The status of the policy.)')]
        [string]
        [ValidateSet('Enabled', 'Disabled')]
        $status,
        [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 fact data of the policy.)')]
        [string]
        $factData,
        [parameter(mandatory=$False,HelpMessage='The description of the policy.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The name of the policy.)')]
        [string]
        $name,
        [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 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
    )

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

        $resource.properties["labName"] = $labName
        $resource.properties["policySetName"] = $policySetName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class InboundNatRule
{
    [int] $backendPort
    [ValidateSet('Tcp', 'Udp')]
    [string] $transportProtocol
    [ValidateSet('Tcp', 'Udp')]
    [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]
        [ValidateSet('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] $sshAuthority
    [SharedPublicIpAddressConfiguration] $sharedPublicIpAddressConfiguration
    [string] $rdpAuthority
    [string] $publicIpAddressId
    [string] $subnetId
    [string] $privateIpAddress
    [string] $publicIpAddress
    [string] $dnsName
    [string] $virtualNetworkId
}
function New-AzureNativeTypeDevtestlabNetworkInterfaceProperties
{
    param (
        [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 configuration for sharing a public IP address across multiple virtual machines.)')]
        [SharedPublicIpAddressConfiguration]
        $sharedPublicIpAddressConfiguration,
        [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 resource ID of the public IP address.)')]
        [string]
        $publicIpAddressId,
        [parameter(mandatory=$False,HelpMessage='The resource ID of the sub net.)')]
        [string]
        $subnetId,
        [parameter(mandatory=$False,HelpMessage='The private IP address.)')]
        [string]
        $privateIpAddress,
        [parameter(mandatory=$False,HelpMessage='The public IP address.)')]
        [string]
        $publicIpAddress,
        [parameter(mandatory=$False,HelpMessage='The DNS name.)')]
        [string]
        $dnsName,
        [parameter(mandatory=$False,HelpMessage='The resource ID of the virtual network.)')]
        [string]
        $virtualNetworkId
    )

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

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

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

        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $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 status of the schedule (i.e. Enabled, Disabled))')]
        [string]
        [ValidateSet('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Notification settings.)')]
        [NotificationSettings]
        $notificationSettings,
        [parameter(mandatory=$False,HelpMessage='The time zone ID (e.g. Pacific Standard time).)')]
        [string]
        $timeZoneId,
        [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 multiple times a day, specify the hourly recurrence.)')]
        [HourDetails]
        $hourlyRecurrence,
        [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 tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The resource ID to which the schedule belongs)')]
        [string]
        $targetResourceId,
        [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 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 lab.)')]
        [string]
        $labName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid
    )

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

        $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 'status')
        {
            $resource.properties["status"] = $status
        }

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

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

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

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

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

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

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

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

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

        $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 tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [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 deployment properties of the environment.)')]
        [EnvironmentDeploymentProperties]
        $deploymentProperties,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The display name of the Azure Resource Manager template that produced the environment.)')]
        [string]
        $armTemplateDisplayName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid
    )

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

        $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 'location')
        {
            $resource.properties["location"] = $location
        }

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabServiceFabric
{
    [Alias('azure_native_devtestlab_servicefabric')]
    param (
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [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 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 resource id of the environment under which the service fabric resource is present)')]
        [string]
        $environmentId,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid
    )

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

        $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 'location')
        {
            $resource.properties["location"] = $location
        }

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabSecret
{
    [Alias('azure_native_devtestlab_secret')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the secret.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $userName,
        [parameter(mandatory=$False,HelpMessage='The value of the secret for secret creation.)')]
        [string]
        $value,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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 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
    )

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

        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["userName"] = $userName

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabVirtualNetwork
{
    [Alias('azure_native_devtestlab_virtualnetwork')]
    param (
        [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 Microsoft.Network resource identifier of the virtual network.)')]
        [string]
        $externalProviderResourceId,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [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 subnet overrides of the virtual network.)')]
        $subnetOverrides,
        [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
    )

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

        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

        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 'subnetOverrides')
        {
            $resource.properties["subnetOverrides"] = $subnetOverrides
        }

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ScheduleCreationParameter
{
    [DayDetails] $dailyRecurrence
    [WeekDetails] $weeklyRecurrence
    [NotificationSettings] $notificationSettings
    [ValidateSet('Enabled', 'Disabled')]
    [string] $status
    [ValidateSet('Enabled', 'Disabled')]
    [HourDetails] $hourlyRecurrence
    [ValidateSet('Enabled', 'Disabled')]
    [string] $taskType
    [ValidateSet('Enabled', 'Disabled')]
    [string] $timeZoneId
    [ValidateSet('Enabled', 'Disabled')]
    [object] $tags
    [ValidateSet('Enabled', 'Disabled')]
    [string] $name
    [ValidateSet('Enabled', 'Disabled')]
    [string] $targetResourceId
}
function New-AzureNativeTypeDevtestlabScheduleCreationParameter
{
    param (
        [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='Notification settings.)')]
        [NotificationSettings]
        $notificationSettings,
        [parameter(mandatory=$False,HelpMessage='The status of the schedule (i.e. Enabled, Disabled))')]
        [string]
        [ValidateSet('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur multiple times a day, specify the hourly recurrence.)')]
        [HourDetails]
        $hourlyRecurrence,
        [parameter(mandatory=$False,HelpMessage='The task type of the schedule (e.g. LabVmsShutdownTask, LabVmAutoStart).)')]
        [string]
        $taskType,
        [parameter(mandatory=$False,HelpMessage='The time zone ID (e.g. Pacific Standard time).)')]
        [string]
        $timeZoneId,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual machine or environment)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The resource ID to which the schedule belongs)')]
        [string]
        $targetResourceId
    )

    process
    {
        return $([ScheduleCreationParameter]$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 AttachNewDataDiskOptions
{
    [ValidateSet('None', 'ReadOnly', 'ReadWrite')]
    [int] $diskSizeGiB
    [ValidateSet('None', 'ReadOnly', 'ReadWrite')]
    [string] $diskName
    [ValidateSet('Standard', 'Premium', 'StandardSSD')]
    [string] $diskType
}
function New-AzureNativeTypeDevtestlabAttachNewDataDiskOptions
{
    param (
        [parameter(mandatory=$False,HelpMessage='Size of the disk to be attached in Gibibytes.)')]
        [int]
        $diskSizeGiB,
        [parameter(mandatory=$False,HelpMessage='The name of the disk to be attached.)')]
        [string]
        $diskName,
        [parameter(mandatory=$False,HelpMessage='The storage type for the disk (i.e. Standard, Premium).)')]
        [string]
        [ValidateSet('Standard', 'Premium', 'StandardSSD')]
        $diskType
    )

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

    process
    {
        return $([DataDiskProperties]$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] $vmExtensionStatusMessage
    [ArtifactParameterProperties[]] $parameters
    [string] $artifactTitle
    [string] $installTime
    [string] $artifactId
    [string] $status
    [string] $deploymentStatusMessage
}
function New-AzureNativeTypeDevtestlabArtifactInstallProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The status message from the virtual machine extension.)')]
        [string]
        $vmExtensionStatusMessage,
        [parameter(mandatory=$False,HelpMessage='The parameters of the artifact.)')]
        $parameters,
        [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,
        [parameter(mandatory=$False,HelpMessage='The artifact''s identifier.)')]
        [string]
        $artifactId,
        [parameter(mandatory=$False,HelpMessage='The status of the artifact.)')]
        [string]
        $status,
        [parameter(mandatory=$False,HelpMessage='The status message from the deployment.)')]
        [string]
        $deploymentStatusMessage
    )

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

    process
    {
        return $([LabVirtualMachineCreationParameter]$PSBoundParameters)
    }
}
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)
    }
}
function New-AzureNativeDevtestlabFormula
{
    [Alias('azure_native_devtestlab_formula')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The OS type of the formula.)')]
        [string]
        $osType,
        [parameter(mandatory=$False,HelpMessage='The content of the formula.)')]
        [LabVirtualMachineCreationParameter]
        $formulaContent,
        [parameter(mandatory=$False,HelpMessage='Information about a VM from which a formula is to be created.)')]
        [FormulaPropertiesFromVm]
        $vm,
        [parameter(mandatory=$False,HelpMessage='The name of the lab.)')]
        [string]
        $labName,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The description of the formula.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The name of the formula.)')]
        [string]
        $name,
        [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
    )

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

        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class WindowsOsInfo
{
    [ValidateSet('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]
        [ValidateSet('NonSysprepped', 'SysprepRequested', 'SysprepApplied')]
        $windowsOsState
    )

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

    process
    {
        return $([CustomImagePropertiesCustom]$PSBoundParameters)
    }
}
class CustomImagePropertiesFromPlan
{
    [string] $id
    [string] $offer
    [string] $publisher
}
function New-AzureNativeTypeDevtestlabCustomImagePropertiesFromPlan
{
    param (
        [parameter(mandatory=$False,HelpMessage='The id of the plan, equivalent to name of the plan)')]
        [string]
        $id,
        [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
    )

    process
    {
        return $([CustomImagePropertiesFromPlan]$PSBoundParameters)
    }
}
function New-AzureNativeDevtestlabCustomImage
{
    [Alias('azure_native_devtestlab_customimage')]
    param (
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The Managed Snapshot Id backing the custom image.)')]
        [string]
        $managedSnapshotId,
        [parameter(mandatory=$False,HelpMessage='The virtual machine from which the image is to be created.)')]
        [CustomImagePropertiesFromVm]
        $vm,
        [parameter(mandatory=$False,HelpMessage='The Managed Image Id backing the custom image.)')]
        [string]
        $managedImageId,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [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 name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The VHD from which the image is to be created.)')]
        [CustomImagePropertiesCustom]
        $vhd,
        [parameter(mandatory=$False,HelpMessage='The description of the custom image.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The name of the custom image.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The author of the custom image.)')]
        [string]
        $author,
        [parameter(mandatory=$False,HelpMessage='Storage information about the data disks present in the custom image)')]
        $dataDiskStorageInfo,
        [parameter(mandatory=$False,HelpMessage='Storage information about the plan related to this custom image)')]
        [CustomImagePropertiesFromPlan]
        $customImagePlan,
        [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
    )

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

        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class IdentityProperties
{
    [string] $clientSecretUrl
    [string] $tenantId
    [ValidateSet('None', 'SystemAssigned', 'UserAssigned', 'SystemAssigned,UserAssigned')]
    [string] $type
    [ValidateSet('None', 'SystemAssigned', 'UserAssigned', 'SystemAssigned,UserAssigned')]
    [string] $principalId
}
function New-AzureNativeTypeDevtestlabIdentityProperties
{
    param (
        [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]
        [ValidateSet('None', 'SystemAssigned', 'UserAssigned', 'SystemAssigned,UserAssigned')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The principal id of resource identity.)')]
        [string]
        $principalId
    )

    process
    {
        return $([IdentityProperties]$PSBoundParameters)
    }
}
function New-AzureNativeDevtestlabServiceRunner
{
    [Alias('azure_native_devtestlab_servicerunner')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the service runner.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [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,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid
    )

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

        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabVirtualMachineSchedule
{
    [Alias('azure_native_devtestlab_virtualmachineschedule')]
    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='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Notification settings.)')]
        [NotificationSettings]
        $notificationSettings,
        [parameter(mandatory=$False,HelpMessage='The time zone ID (e.g. Pacific Standard time).)')]
        [string]
        $timeZoneId,
        [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 multiple times a day, specify the hourly recurrence.)')]
        [HourDetails]
        $hourlyRecurrence,
        [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='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The status of the schedule (i.e. Enabled, Disabled))')]
        [string]
        [ValidateSet('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the virtual machine.)')]
        [string]
        $virtualMachineName,
        [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
    )

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

        $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 'tags')
        {
            $resource.properties["tags"] = $tags
        }

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

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

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

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

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

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

        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
        }

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabGlobalSchedule
{
    [Alias('azure_native_devtestlab_globalschedule')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [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='If the schedule will occur only some days of the week, specify the weekly recurrence.)')]
        [WeekDetails]
        $weeklyRecurrence,
        [parameter(mandatory=$False,HelpMessage='Notification settings.)')]
        [NotificationSettings]
        $notificationSettings,
        [parameter(mandatory=$False,HelpMessage='The status of the schedule (i.e. Enabled, Disabled))')]
        [string]
        [ValidateSet('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='If the schedule will occur multiple times a day, specify the hourly recurrence.)')]
        [HourDetails]
        $hourlyRecurrence,
        [parameter(mandatory=$False,HelpMessage='The task type of the schedule (e.g. LabVmsShutdownTask, LabVmAutoStart).)')]
        [string]
        $taskType,
        [parameter(mandatory=$False,HelpMessage='The time zone ID (e.g. Pacific Standard time).)')]
        [string]
        $timeZoneId,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The name of the schedule.)')]
        [string]
        $name,
        [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
    )

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

        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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

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

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

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

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

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

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

    process
    {
        return $([UserSecretStore]$PSBoundParameters)
    }
}
class UserIdentity
{
    [string] $tenantId
    [string] $principalName
    [string] $principalId
    [string] $objectId
    [string] $appId
}
function New-AzureNativeTypeDevtestlabUserIdentity
{
    param (
        [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 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 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,
        [parameter(mandatory=$False,HelpMessage='Set to the app Id of the client JWT making the request.)')]
        [string]
        $appId
    )

    process
    {
        return $([UserIdentity]$PSBoundParameters)
    }
}
function New-AzureNativeDevtestlabUser
{
    [Alias('azure_native_devtestlab_user')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the user profile.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The secret store of the user.)')]
        [UserSecretStore]
        $secretStore,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [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,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid
    )

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

        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeDevtestlabArtifactSource
{
    [Alias('azure_native_devtestlab_artifactsource')]
    param (
        [parameter(mandatory=$False,HelpMessage='The folder containing Azure Resource Manager templates.)')]
        [string]
        $armTemplateFolderPath,
        [parameter(mandatory=$False,HelpMessage='Indicates if the artifact source is enabled (values: Enabled, Disabled).)')]
        [string]
        [ValidateSet('Enabled', 'Disabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The tags of the resource.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The artifact source''s type.)')]
        [string]
        [ValidateSet('VsoGit', 'GitHub', 'StorageAccount')]
        $sourceType,
        [parameter(mandatory=$False,HelpMessage='The artifact source''s branch reference.)')]
        [string]
        $branchRef,
        [parameter(mandatory=$False,HelpMessage='The folder containing artifacts.)')]
        [string]
        $folderPath,
        [parameter(mandatory=$False,HelpMessage='The location of the resource.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The security token to authenticate to the artifact source.)')]
        [string]
        $securityToken,
        [parameter(mandatory=$False,HelpMessage='The artifact source''s display name.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='The name of the artifact source.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The artifact source''s URI.)')]
        [string]
        $uri,
        [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
    )

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

        $resource.properties["labName"] = $labName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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

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

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

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

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

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

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