pspulumiyaml.azurenative.automation.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionAutomationGetWatcher
{
    param (
        [parameter(mandatory=$False,HelpMessage='The watcher name.)')]
        [string]
        $watcherName,
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["watcherName"] = $watcherName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getWatcher -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetWebhook
{
    param (
        [parameter(mandatory=$False,HelpMessage='The webhook name.)')]
        [string]
        $webhookName,
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["webhookName"] = $webhookName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getWebhook -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName,
        [parameter(mandatory=$False,HelpMessage='The schedule name.)')]
        [string]
        $scheduleName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["scheduleName"] = $scheduleName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getSchedule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetHybridRunbookWorker
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName,
        [parameter(mandatory=$False,HelpMessage='The hybrid runbook worker id)')]
        [string]
        $hybridRunbookWorkerId,
        [parameter(mandatory=$False,HelpMessage='The hybrid runbook worker group name)')]
        [string]
        $hybridRunbookWorkerGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["hybridRunbookWorkerGroupName"] = $hybridRunbookWorkerGroupName
        $arguments["hybridRunbookWorkerId"] = $hybridRunbookWorkerId
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getHybridRunbookWorker -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationListKeyByAutomationAccount
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:listKeyByAutomationAccount -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetRunbook
{
    param (
        [parameter(mandatory=$False,HelpMessage='The runbook name.)')]
        [string]
        $runbookName,
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["runbookName"] = $runbookName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getRunbook -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetSoftwareUpdateConfigurationByName
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName,
        [parameter(mandatory=$False,HelpMessage='The name of the software update configuration to be created.)')]
        [string]
        $softwareUpdateConfigurationName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["softwareUpdateConfigurationName"] = $softwareUpdateConfigurationName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getSoftwareUpdateConfigurationByName -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetDscConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='The configuration name.)')]
        [string]
        $configurationName,
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["configurationName"] = $configurationName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getDscConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetDscNodeConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName,
        [parameter(mandatory=$False,HelpMessage='The Dsc node configuration name.)')]
        [string]
        $nodeConfigurationName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["nodeConfigurationName"] = $nodeConfigurationName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getDscNodeConfiguration -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetPrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection.)')]
        [string]
        $privateEndpointConnectionName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["privateEndpointConnectionName"] = $privateEndpointConnectionName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getPrivateEndpointConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetConnectionType
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName,
        [parameter(mandatory=$False,HelpMessage='The name of connection type.)')]
        [string]
        $connectionTypeName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["connectionTypeName"] = $connectionTypeName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getConnectionType -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of connection.)')]
        [string]
        $connectionName,
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["connectionName"] = $connectionName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetModule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName,
        [parameter(mandatory=$False,HelpMessage='The module name.)')]
        [string]
        $moduleName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["moduleName"] = $moduleName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getModule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetPython2Package
{
    param (
        [parameter(mandatory=$False,HelpMessage='The python package name.)')]
        [string]
        $packageName,
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["packageName"] = $packageName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getPython2Package -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetAutomationAccount
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getAutomationAccount -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetJobSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The job schedule name.)')]
        [string]
        $jobScheduleId,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["jobScheduleId"] = $jobScheduleId
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getJobSchedule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetSourceControl
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of source control.)')]
        [string]
        $sourceControlName,
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["sourceControlName"] = $sourceControlName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getSourceControl -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetCertificate
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of certificate.)')]
        [string]
        $certificateName,
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["certificateName"] = $certificateName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getCertificate -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetCredential
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of credential.)')]
        [string]
        $credentialName,
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["credentialName"] = $credentialName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getCredential -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetVariable
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of variable.)')]
        [string]
        $variableName,
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["variableName"] = $variableName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getVariable -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionAutomationGetHybridRunbookWorkerGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of an Azure Resource group.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the automation account.)')]
        [string]
        $automationAccountName,
        [parameter(mandatory=$False,HelpMessage='The hybrid runbook worker group name)')]
        [string]
        $hybridRunbookWorkerGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["automationAccountName"] = $automationAccountName
        $arguments["hybridRunbookWorkerGroupName"] = $hybridRunbookWorkerGroupName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:automation:getHybridRunbookWorkerGroup -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class ContentHash
{
    [string] $value
    [string] $algorithm
}
function New-AzureNativeTypeAutomationContentHash
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets expected hash value of the content.)')]
        [string]
        $value,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the content hash algorithm used to hash the content.)')]
        [string]
        $algorithm
    )

    process
    {
        return $([ContentHash]$PSBoundParameters)
    }
}
class ContentLink
{
    [string] $uri
    [string] $version
    [ContentHash] $contentHash
}
function New-AzureNativeTypeAutomationContentLink
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the uri of the runbook content.)')]
        [string]
        $uri,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the version of the content.)')]
        [string]
        $version,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the hash.)')]
        [ContentHash]
        $contentHash
    )

    process
    {
        return $([ContentLink]$PSBoundParameters)
    }
}
class RunbookDraft
{
    [bool] $inEdit
    [string] $lastModifiedTime
    [object] $parameters
    [ContentLink] $draftContentLink
    [string[]] $outputTypes
    [string] $creationTime
}
class RunbookParameter
{
    [string] $type
    [int] $position
    [bool] $isMandatory
    [string] $defaultValue
}
function New-AzureNativeTypeAutomationRunbookParameter
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the type of the parameter.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='Get or sets the position of the parameter.)')]
        [int]
        $position,
        [parameter(mandatory=$False,HelpMessage='Gets or sets a Boolean value to indicate whether the parameter is mandatory or not.)')]
        [bool]
        $isMandatory,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the default value of parameter.)')]
        [string]
        $defaultValue
    )

    process
    {
        return $([RunbookParameter]$PSBoundParameters)
    }
}
function New-AzureNativeTypeAutomationRunbookDraft
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets whether runbook is in edit mode.)')]
        [bool]
        $inEdit,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the last modified time of the runbook draft.)')]
        [string]
        $lastModifiedTime,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the runbook draft parameters.)')]
        [RunbookParameter]
        $parameters,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the draft runbook content link.)')]
        [ContentLink]
        $draftContentLink,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the runbook output types.)')]
        [string[]]
        $outputTypes,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the creation time of the runbook draft.)')]
        [string]
        $creationTime
    )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class RunbookAssociationProperty
{
    [string] $name
}
function New-AzureNativeTypeAutomationRunbookAssociationProperty
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the name of the runbook.)')]
        [string]
        $name
    )

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class PrivateLinkServiceConnectionStateProperty
{
    [string] $description
    [string] $status
}
function New-AzureNativeTypeAutomationPrivateLinkServiceConnectionStateProperty
{
    param (
        [parameter(mandatory=$False,HelpMessage='The private link service connection description.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='The private link service connection status.)')]
        [string]
        $status
    )

    process
    {
        return $([PrivateLinkServiceConnectionStateProperty]$PSBoundParameters)
    }
}
class PrivateEndpointProperty
{
    [string] $id
}
function New-AzureNativeTypeAutomationPrivateEndpointProperty
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource id of the private endpoint.)')]
        [string]
        $id
    )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class KeyVaultProperties
{
    [string] $keyVersion
    [string] $keyName
    [string] $keyvaultUri
}
function New-AzureNativeTypeAutomationKeyVaultProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The key version of the key used to encrypt data.)')]
        [string]
        $keyVersion,
        [parameter(mandatory=$False,HelpMessage='The name of key used to encrypt data.)')]
        [string]
        $keyName,
        [parameter(mandatory=$False,HelpMessage='The URI of the key vault key used to encrypt data.)')]
        [string]
        $keyvaultUri
    )

    process
    {
        return $([KeyVaultProperties]$PSBoundParameters)
    }
}
class EncryptionPropertiesIdentity
{
    [object] $userAssignedIdentity
}
function New-AzureNativeTypeAutomationEncryptionPropertiesIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='The user identity used for CMK. It will be an ARM resource id in the form: ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}''.)')]
        $userAssignedIdentity
    )

    process
    {
        return $([EncryptionPropertiesIdentity]$PSBoundParameters)
    }
}
class EncryptionProperties
{
    [KeyVaultProperties] $keyVaultProperties
    [ArgumentCompletions('Microsoft.Automation', 'Microsoft.Keyvault')]
    [object] $keySource
    [EncryptionPropertiesIdentity] $identity
}
function New-AzureNativeTypeAutomationEncryptionProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Key vault properties.)')]
        [KeyVaultProperties]
        $keyVaultProperties,
        [parameter(mandatory=$False,HelpMessage='Encryption Key Source)')]
        $keySource,
        [parameter(mandatory=$False,HelpMessage='User identity used for CMK.)')]
        [EncryptionPropertiesIdentity]
        $identity
    )

    process
    {
        return $([EncryptionProperties]$PSBoundParameters)
    }
}
class Sku
{
    [ArgumentCompletions('Free', 'Basic')]
    [string] $name
    [int] $capacity
    [string] $family
}
function New-AzureNativeTypeAutomationSku
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the SKU name of the account.)')]
        [string]
        [ArgumentCompletions('Free', 'Basic')]
        $name,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the SKU capacity.)')]
        [int]
        $capacity,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the SKU family.)')]
        [string]
        $family
    )

    process
    {
        return $([Sku]$PSBoundParameters)
    }
}
class Identity
{
    [ArgumentCompletions('SystemAssigned', 'UserAssigned', 'SystemAssigned, UserAssigned', 'None')]
    [object] $type
    [object] $userAssignedIdentities
}
function New-AzureNativeTypeAutomationIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='The identity type.)')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The list of user identities associated with the resource. The user identity dictionary key references will be ARM resource ids in the form: ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}''.)')]
        [object]
        $userAssignedIdentities
    )

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

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ConnectionTypeAssociationProperty
{
    [string] $name
}
function New-AzureNativeTypeAutomationConnectionTypeAssociationProperty
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the name of the connection type.)')]
        [string]
        $name
    )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class AdvancedScheduleMonthlyOccurrence
{
    [ArgumentCompletions('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')]
    [string] $day
    [int] $occurrence
}
function New-AzureNativeTypeAutomationAdvancedScheduleMonthlyOccurrence
{
    param (
        [parameter(mandatory=$False,HelpMessage='Day of the occurrence. Must be one of monday, tuesday, wednesday, thursday, friday, saturday, sunday.)')]
        [string]
        [ArgumentCompletions('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')]
        $day,
        [parameter(mandatory=$False,HelpMessage='Occurrence of the week within the month. Must be between 1 and 5)')]
        [int]
        $occurrence
    )

    process
    {
        return $([AdvancedScheduleMonthlyOccurrence]$PSBoundParameters)
    }
}
class AdvancedSchedule
{
    [int[]] $monthDays
    [AdvancedScheduleMonthlyOccurrence[]] $monthlyOccurrences
    [string[]] $weekDays
}
function New-AzureNativeTypeAutomationAdvancedSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Days of the month that the job should execute on. Must be between 1 and 31.)')]
        [int[]]
        $monthDays,
        [parameter(mandatory=$False,HelpMessage='Occurrences of days within a month.)')]
        $monthlyOccurrences,
        [parameter(mandatory=$False,HelpMessage='Days of the week that the job should execute on.)')]
        [string[]]
        $weekDays
    )

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ContentSource
{
    [string] $version
    [ArgumentCompletions('embeddedContent', 'uri')]
    [string] $type
    [string] $value
    [ContentHash] $hash
}
function New-AzureNativeTypeAutomationContentSource
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the version of the content.)')]
        [string]
        $version,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the content source type.)')]
        [string]
        [ArgumentCompletions('embeddedContent', 'uri')]
        $type,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the value of the content. This is based on the content source type.)')]
        [string]
        $value,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the hash.)')]
        [ContentHash]
        $hash
    )

    process
    {
        return $([ContentSource]$PSBoundParameters)
    }
}
class DscConfigurationParameter
{
    [string] $type
    [int] $position
    [bool] $isMandatory
    [string] $defaultValue
}
function New-AzureNativeTypeAutomationDscConfigurationParameter
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the type of the parameter.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='Get or sets the position of the parameter.)')]
        [int]
        $position,
        [parameter(mandatory=$False,HelpMessage='Gets or sets a Boolean value to indicate whether the parameter is mandatory or not.)')]
        [bool]
        $isMandatory,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the default value of parameter.)')]
        [string]
        $defaultValue
    )

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ScheduleAssociationProperty
{
    [string] $name
}
function New-AzureNativeTypeAutomationScheduleAssociationProperty
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the name of the Schedule.)')]
        [string]
        $name
    )

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class RunAsCredentialAssociationProperty
{
    [string] $name
}
function New-AzureNativeTypeAutomationRunAsCredentialAssociationProperty
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the name of the credential.)')]
        [string]
        $name
    )

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class DscConfigurationAssociationProperty
{
    [string] $name
}
function New-AzureNativeTypeAutomationDscConfigurationAssociationProperty
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the name of the Dsc configuration.)')]
        [string]
        $name
    )

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class SUCScheduleProperties
{
    [ArgumentCompletions('OneTime', 'Day', 'Hour', 'Week', 'Month', 'Minute')]
    [string] $frequency
    [string] $startTime
    [AdvancedSchedule] $advancedSchedule
    [string] $nextRun
    [string] $timeZone
    [int] $expiryTimeOffsetMinutes
    [bool] $isEnabled
    [int] $interval
    [string] $description
    [string] $creationTime
    [string] $expiryTime
    [string] $lastModifiedTime
    [int] $nextRunOffsetMinutes
}
function New-AzureNativeTypeAutomationSUCScheduleProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the frequency of the schedule.)')]
        [string]
        [ArgumentCompletions('OneTime', 'Day', 'Hour', 'Week', 'Month', 'Minute')]
        $frequency,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the start time of the schedule.)')]
        [string]
        $startTime,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the advanced schedule.)')]
        [AdvancedSchedule]
        $advancedSchedule,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the next run time of the schedule.)')]
        [string]
        $nextRun,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the time zone of the schedule.)')]
        [string]
        $timeZone,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the expiry time''s offset in minutes.)')]
        [int]
        $expiryTimeOffsetMinutes,
        [parameter(mandatory=$False,HelpMessage='Gets or sets a value indicating whether this schedule is enabled.)')]
        [bool]
        $isEnabled,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the interval of the schedule.)')]
        [int]
        $interval,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the description.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the creation time.)')]
        [string]
        $creationTime,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the end time of the schedule.)')]
        [string]
        $expiryTime,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the last modified time.)')]
        [string]
        $lastModifiedTime,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the next run time''s offset in minutes.)')]
        [int]
        $nextRunOffsetMinutes
    )

    process
    {
        return $([SUCScheduleProperties]$PSBoundParameters)
    }
}
class ErrorResponse
{
    [string] $code
    [string] $message
}
function New-AzureNativeTypeAutomationErrorResponse
{
    param (
        [parameter(mandatory=$False,HelpMessage='Error code)')]
        [string]
        $code,
        [parameter(mandatory=$False,HelpMessage='Error message indicating why the operation failed.)')]
        [string]
        $message
    )

    process
    {
        return $([ErrorResponse]$PSBoundParameters)
    }
}
class TaskProperties
{
    [object] $parameters
    [string] $source
}
function New-AzureNativeTypeAutomationTaskProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the parameters of the task.)')]
        [hashtable]
        $parameters,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the name of the runbook.)')]
        [string]
        $source
    )

    process
    {
        return $([TaskProperties]$PSBoundParameters)
    }
}
class SoftwareUpdateConfigurationTasks
{
    [TaskProperties] $preTask
    [TaskProperties] $postTask
}
function New-AzureNativeTypeAutomationSoftwareUpdateConfigurationTasks
{
    param (
        [parameter(mandatory=$False,HelpMessage='Pre task properties.)')]
        [TaskProperties]
        $preTask,
        [parameter(mandatory=$False,HelpMessage='Post task properties.)')]
        [TaskProperties]
        $postTask
    )

    process
    {
        return $([SoftwareUpdateConfigurationTasks]$PSBoundParameters)
    }
}
class LinuxProperties
{
    [string] $rebootSetting
    [string[]] $excludedPackageNameMasks
    [string[]] $includedPackageNameMasks
    [ArgumentCompletions('Unclassified', 'Critical', 'Security', 'Other')]
    [string] $includedPackageClassifications
}
function New-AzureNativeTypeAutomationLinuxProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Reboot setting for the software update configuration.)')]
        [string]
        $rebootSetting,
        [parameter(mandatory=$False,HelpMessage='packages excluded from the software update configuration.)')]
        [string[]]
        $excludedPackageNameMasks,
        [parameter(mandatory=$False,HelpMessage='packages included from the software update configuration.)')]
        [string[]]
        $includedPackageNameMasks,
        [parameter(mandatory=$False,HelpMessage='Update classifications included in the software update configuration.)')]
        [string]
        [ArgumentCompletions('Unclassified', 'Critical', 'Security', 'Other')]
        $includedPackageClassifications
    )

    process
    {
        return $([LinuxProperties]$PSBoundParameters)
    }
}
class NonAzureQueryProperties
{
    [string] $functionAlias
    [string] $workspaceId
}
function New-AzureNativeTypeAutomationNonAzureQueryProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Log Analytics Saved Search name.)')]
        [string]
        $functionAlias,
        [parameter(mandatory=$False,HelpMessage='Workspace Id for Log Analytics in which the saved Search is resided.)')]
        [string]
        $workspaceId
    )

    process
    {
        return $([NonAzureQueryProperties]$PSBoundParameters)
    }
}
class TagSettingsProperties
{
    [object] $tags
    [ArgumentCompletions('All', 'Any')]
    [object] $filterOperator
}
function New-AzureNativeTypeAutomationTagSettingsProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Dictionary of tags with its list of values.)')]
        [object]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Filter VMs by Any or All specified tags.)')]
        $filterOperator
    )

    process
    {
        return $([TagSettingsProperties]$PSBoundParameters)
    }
}
class AzureQueryProperties
{
    [string[]] $scope
    [string[]] $locations
    [TagSettingsProperties] $tagSettings
}
function New-AzureNativeTypeAutomationAzureQueryProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of Subscription or Resource Group ARM Ids.)')]
        [string[]]
        $scope,
        [parameter(mandatory=$False,HelpMessage='List of locations to scope the query to.)')]
        [string[]]
        $locations,
        [parameter(mandatory=$False,HelpMessage='Tag settings for the VM.)')]
        [TagSettingsProperties]
        $tagSettings
    )

    process
    {
        return $([AzureQueryProperties]$PSBoundParameters)
    }
}
class TargetProperties
{
    [NonAzureQueryProperties[]] $nonAzureQueries
    [AzureQueryProperties[]] $azureQueries
}
function New-AzureNativeTypeAutomationTargetProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of non Azure queries in the software update configuration.)')]
        $nonAzureQueries,
        [parameter(mandatory=$False,HelpMessage='List of Azure queries in the software update configuration.)')]
        $azureQueries
    )

    process
    {
        return $([TargetProperties]$PSBoundParameters)
    }
}
class WindowsProperties
{
    [string[]] $excludedKbNumbers
    [string] $rebootSetting
    [string[]] $includedKbNumbers
    [ArgumentCompletions('Unclassified', 'Critical', 'Security', 'UpdateRollup', 'FeaturePack', 'ServicePack', 'Definition', 'Tools', 'Updates')]
    [string] $includedUpdateClassifications
}
function New-AzureNativeTypeAutomationWindowsProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='KB numbers excluded from the software update configuration.)')]
        [string[]]
        $excludedKbNumbers,
        [parameter(mandatory=$False,HelpMessage='Reboot setting for the software update configuration.)')]
        [string]
        $rebootSetting,
        [parameter(mandatory=$False,HelpMessage='KB numbers included from the software update configuration.)')]
        [string[]]
        $includedKbNumbers,
        [parameter(mandatory=$False,HelpMessage='Update classification included in the software update configuration. A comma separated string with required values)')]
        [string]
        [ArgumentCompletions('Unclassified', 'Critical', 'Security', 'UpdateRollup', 'FeaturePack', 'ServicePack', 'Definition', 'Tools', 'Updates')]
        $includedUpdateClassifications
    )

    process
    {
        return $([WindowsProperties]$PSBoundParameters)
    }
}
class UpdateConfiguration
{
    [string] $duration
    [ArgumentCompletions('Windows', 'Linux')]
    [object] $operatingSystem
    [LinuxProperties] $linux
    [string[]] $azureVirtualMachines
    [string[]] $nonAzureComputerNames
    [TargetProperties] $targets
    [WindowsProperties] $windows
}
function New-AzureNativeTypeAutomationUpdateConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Maximum time allowed for the software update configuration run. Duration needs to be specified using the format PT[n]H[n]M[n]S as per ISO8601)')]
        [string]
        $duration,
        [parameter(mandatory=$False,HelpMessage='operating system of target machines)')]
        $operatingSystem,
        [parameter(mandatory=$False,HelpMessage='Linux specific update configuration.)')]
        [LinuxProperties]
        $linux,
        [parameter(mandatory=$False,HelpMessage='List of azure resource Ids for azure virtual machines targeted by the software update configuration.)')]
        [string[]]
        $azureVirtualMachines,
        [parameter(mandatory=$False,HelpMessage='List of names of non-azure machines targeted by the software update configuration.)')]
        [string[]]
        $nonAzureComputerNames,
        [parameter(mandatory=$False,HelpMessage='Group targets for the software update configuration.)')]
        [TargetProperties]
        $targets,
        [parameter(mandatory=$False,HelpMessage='Windows specific update configuration.)')]
        [WindowsProperties]
        $windows
    )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class FieldDefinition
{
    [bool] $isEncrypted
    [string] $type
    [bool] $isOptional
}
function New-AzureNativeTypeAutomationFieldDefinition
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the isEncrypted flag of the connection field definition.)')]
        [bool]
        $isEncrypted,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the type of the connection field definition.)')]
        [string]
        $type,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the isOptional flag of the connection field definition.)')]
        [bool]
        $isOptional
    )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class SourceControlSecurityTokenProperties
{
    [string] $accessToken
    [ArgumentCompletions('PersonalAccessToken', 'Oauth')]
    [string] $tokenType
    [string] $refreshToken
}
function New-AzureNativeTypeAutomationSourceControlSecurityTokenProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The access token.)')]
        [string]
        $accessToken,
        [parameter(mandatory=$False,HelpMessage='The token type. Must be either PersonalAccessToken or Oauth.)')]
        [string]
        [ArgumentCompletions('PersonalAccessToken', 'Oauth')]
        $tokenType,
        [parameter(mandatory=$False,HelpMessage='The refresh token.)')]
        [string]
        $refreshToken
    )

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

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

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

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

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

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

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

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

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

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

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

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

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

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