pspulumiyaml.azurenative.migrate.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionMigrateGetImportCollector
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a Import collector within a project.)')]
        [string]
        $importCollectorName
    )

    process
    {
        $arguments = @{}
        $arguments["importCollectorName"] = $importCollectorName
        $arguments["projectName"] = $projectName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getImportCollector -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetMoveCollection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The Resource Group Name.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The Move Collection Name.)')]
        [string]
        $moveCollectionName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getMoveCollection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetSolutionConfig
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $migrateProjectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that migrate project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a migration solution within a migrate project.)')]
        [string]
        $solutionName
    )

    process
    {
        $arguments = @{}
        $arguments["migrateProjectName"] = $migrateProjectName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["solutionName"] = $solutionName

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getSolutionConfig -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetAssessment
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a group within a project.)')]
        [string]
        $groupName,
        [parameter(mandatory=$False,HelpMessage='Unique name of an assessment within a project.)')]
        [string]
        $assessmentName
    )

    process
    {
        $arguments = @{}
        $arguments["assessmentName"] = $assessmentName
        $arguments["groupName"] = $groupName
        $arguments["projectName"] = $projectName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getAssessment -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetMigrateProject
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that migrate project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $migrateProjectName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getMigrateProject -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetProject
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getProject -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetHyperVCollector
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a Hyper-V collector within a project.)')]
        [string]
        $hyperVCollectorName
    )

    process
    {
        $arguments = @{}
        $arguments["hyperVCollectorName"] = $hyperVCollectorName
        $arguments["projectName"] = $projectName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getHyperVCollector -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetServerCollector
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a Server collector within a project.)')]
        [string]
        $serverCollectorName
    )

    process
    {
        $arguments = @{}
        $arguments["projectName"] = $projectName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["serverCollectorName"] = $serverCollectorName

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getServerCollector -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetPrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a private endpoint connection within a project.)')]
        [string]
        $privateEndpointConnectionName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getPrivateEndpointConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetMoveResource
{
    param (
        [parameter(mandatory=$False,HelpMessage='The Move Resource Name.)')]
        [string]
        $moveResourceName,
        [parameter(mandatory=$False,HelpMessage='The Resource Group Name.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The Move Collection Name.)')]
        [string]
        $moveCollectionName
    )

    process
    {
        $arguments = @{}
        $arguments["moveCollectionName"] = $moveCollectionName
        $arguments["moveResourceName"] = $moveResourceName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getMoveResource -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetProjectKeys
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getProjectKeys -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetGroup
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a group within a project.)')]
        [string]
        $groupName
    )

    process
    {
        $arguments = @{}
        $arguments["groupName"] = $groupName
        $arguments["projectName"] = $projectName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getGroup -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetVMwareCollector
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a VMware collector within a project.)')]
        [string]
        $vmWareCollectorName
    )

    process
    {
        $arguments = @{}
        $arguments["projectName"] = $projectName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["vmWareCollectorName"] = $vmWareCollectorName

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getVMwareCollector -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionMigrateGetSolution
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $migrateProjectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that migrate project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a migration solution within a migrate project.)')]
        [string]
        $solutionName
    )

    process
    {
        $arguments = @{}
        $arguments["migrateProjectName"] = $migrateProjectName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["solutionName"] = $solutionName

        $functionObject = Invoke-PulumiFunction -Name azure-native:migrate:getSolution -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class MoveResourceDependencyOverride
{
    [string] $id
    [string] $targetId
}
function New-AzureNativeTypeMigrateMoveResourceDependencyOverride
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the ARM ID of the dependent resource.)')]
        [string]
        $id,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the resource ARM id of either the MoveResource or the resource ARM ID of
the dependent resource.)'
)]
        [string]
        $targetId
    )

    process
    {
        return $([MoveResourceDependencyOverride]$PSBoundParameters)
    }
}
class MoveResourceProperties
{
    [string] $existingTargetId
    [object] $resourceSettings #todo add class here
    [string] $sourceId
    [MoveResourceDependencyOverride[]] $dependsOnOverrides
}
class NsgReference
{
    [string] $sourceArmResourceId
}
function New-AzureNativeTypeMigrateNsgReference
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets the ARM resource ID of the tracked resource being referenced.)')]
        [string]
        $sourceArmResourceId
    )

    process
    {
        return $([NsgReference]$PSBoundParameters)
    }
}
class SubnetResourceSettings
{
    [string] $name
    [NsgReference] $networkSecurityGroup
    [string] $addressPrefix
}
function New-AzureNativeTypeMigrateSubnetResourceSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the Subnet name.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Defines reference to NSG.)')]
        [NsgReference]
        $networkSecurityGroup,
        [parameter(mandatory=$False,HelpMessage='Gets or sets address prefix for the subnet.)')]
        [string]
        $addressPrefix
    )

    process
    {
        return $([SubnetResourceSettings]$PSBoundParameters)
    }
}
class VirtualNetworkResourceSettings
{
    [string] $targetResourceName
    [string[]] $addressSpace
    [SubnetResourceSettings[]] $subnets
    [string[]] $dnsServers
    [string] $resourceType
    [bool] $enableDdosProtection
}
function New-AzureNativeTypeMigrateVirtualNetworkResourceSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the target Resource name.)')]
        [string]
        $targetResourceName,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the address prefixes for the virtual network.)')]
        [string[]]
        $addressSpace,
        [parameter(mandatory=$False,HelpMessage='Gets or sets List of subnets in a VirtualNetwork.)')]
        $subnets,
        [parameter(mandatory=$False,HelpMessage='Gets or sets DHCPOptions that contains an array of DNS servers available to VMs
deployed in the virtual network.)'
)]
        [string[]]
        $dnsServers,
        [parameter(mandatory=$False,HelpMessage='The resource type. For example, the value can be Microsoft.Compute/virtualMachines.
Expected value is ''Microsoft.Network/virtualNetworks''.)'
)]
        [string]
        $resourceType,
        [parameter(mandatory=$False,HelpMessage='Gets or sets a value indicating whether gets or sets whether the
DDOS protection should be switched on.)'
)]
        [bool]
        $enableDdosProtection
    )

    process
    {
        return $([VirtualNetworkResourceSettings]$PSBoundParameters)
    }
}
function New-AzureNativeTypeMigrateMoveResourceProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the existing target ARM Id of the resource.)')]
        [string]
        $existingTargetId,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the resource settings.)')]
        [VirtualNetworkResourceSettings]
        $resourceSettings,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the Source ARM Id of the resource.)')]
        [string]
        $sourceId,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the move resource dependencies overrides.)')]
        $dependsOnOverrides
    )

    process
    {
        return $([MoveResourceProperties]$PSBoundParameters)
    }
}
function New-AzureNativeMigrateMoveResource
{
    [Alias('azure_native_migrate_moveresource')]
    param (
        [parameter(mandatory=$False,HelpMessage='The Move Resource Name.)')]
        [string]
        $moveResourceName,
        [parameter(mandatory=$False,HelpMessage='The Resource Group Name.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The Move Collection Name.)')]
        [string]
        $moveCollectionName,
        [parameter(mandatory=$False,HelpMessage='Defines the move resource properties.)')]
        [MoveResourceProperties]
        $properties,
        [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:migrate:MoveResource")

        $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["moveCollectionName"] = $moveCollectionName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class MigrateProjectProperties
{
    [ArgumentCompletions('Accepted', 'Creating', 'Deleting', 'Failed', 'Moving', 'Succeeded')]
    [string] $provisioningState
    [string[]] $registeredTools
}
function New-AzureNativeTypeMigrateMigrateProjectProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Provisioning state of the migrate project.)')]
        [string]
        [ArgumentCompletions('Accepted', 'Creating', 'Deleting', 'Failed', 'Moving', 'Succeeded')]
        $provisioningState,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the list of tools registered with the migrate project.)')]
        [string[]]
        $registeredTools
    )

    process
    {
        return $([MigrateProjectProperties]$PSBoundParameters)
    }
}
class MigrateProjectTags
{
    [string] $additionalProperties
}
function New-AzureNativeTypeMigrateMigrateProjectTags
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $additionalProperties
    )

    process
    {
        return $([MigrateProjectTags]$PSBoundParameters)
    }
}
function New-AzureNativeMigrateMigrateProject
{
    [Alias('azure_native_migrate_migrateproject')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that migrate project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the eTag for concurrency control.)')]
        [string]
        $eTag,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the Azure location in which migrate project is created.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the nested properties.)')]
        [MigrateProjectProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the tags.)')]
        [MigrateProjectTags]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $migrateProjectName,
        [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:migrate:MigrateProject")

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class CollectorBodyAgentSpnProperties
{
    [string] $audience
    [string] $authority
    [string] $objectId
    [string] $tenantId
    [string] $applicationId
}
function New-AzureNativeTypeMigrateCollectorBodyAgentSpnProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Intended audience for the service principal.)')]
        [string]
        $audience,
        [parameter(mandatory=$False,HelpMessage='AAD Authority URL which was used to request the token for the service principal.)')]
        [string]
        $authority,
        [parameter(mandatory=$False,HelpMessage='Object Id of the service principal with which the on-premise management/data plane components would communicate with our Azure services.)')]
        [string]
        $objectId,
        [parameter(mandatory=$False,HelpMessage='Tenant Id for the service principal with which the on-premise management/data plane components would communicate with our Azure services.)')]
        [string]
        $tenantId,
        [parameter(mandatory=$False,HelpMessage='Application/client Id for the service principal with which the on-premise management/data plane components would communicate with our Azure services.)')]
        [string]
        $applicationId
    )

    process
    {
        return $([CollectorBodyAgentSpnProperties]$PSBoundParameters)
    }
}
class CollectorAgentProperties
{
    [CollectorBodyAgentSpnProperties] $spnDetails
}
function New-AzureNativeTypeMigrateCollectorAgentProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [CollectorBodyAgentSpnProperties]
        $spnDetails
    )

    process
    {
        return $([CollectorAgentProperties]$PSBoundParameters)
    }
}
class CollectorProperties
{
    [string] $discoverySiteId
    [CollectorAgentProperties] $agentProperties
}
function New-AzureNativeTypeMigrateCollectorProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The ARM id of the discovery service site.)')]
        [string]
        $discoverySiteId,
        [parameter(mandatory=$False,HelpMessage=')')]
        [CollectorAgentProperties]
        $agentProperties
    )

    process
    {
        return $([CollectorProperties]$PSBoundParameters)
    }
}
function New-AzureNativeMigrateServerCollector
{
    [Alias('azure_native_migrate_servercollector')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage=')')]
        [CollectorProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Unique name of a Server collector within a project.)')]
        [string]
        $serverCollectorName,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $eTag,
        [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:migrate:ServerCollector")

        $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["projectName"] = $projectName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class SolutionDetails
{
    [int] $groupCount
    [int] $assessmentCount
    [object] $extendedDetails
}
function New-AzureNativeTypeMigrateSolutionDetails
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the count of groups reported by the solution.)')]
        [int]
        $groupCount,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the count of assessments reported by the solution.)')]
        [int]
        $assessmentCount,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the extended details reported by the solution.)')]
        [hashtable]
        $extendedDetails
    )

    process
    {
        return $([SolutionDetails]$PSBoundParameters)
    }
}
class SolutionProperties
{
    [SolutionDetails] $details
    [string] $cleanupState
    [string] $status
    [string] $tool
    [string] $purpose
    [string] $goal
}
function New-AzureNativeTypeMigrateSolutionProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the details of the solution.)')]
        [SolutionDetails]
        $details,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the cleanup state of the solution.)')]
        [string]
        $cleanupState,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the current status of the solution.)')]
        [string]
        $status,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the tool being used in the solution.)')]
        [string]
        $tool,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the purpose of the solution.)')]
        [string]
        $purpose,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the goal of the solution.)')]
        [string]
        $goal
    )

    process
    {
        return $([SolutionProperties]$PSBoundParameters)
    }
}
function New-AzureNativeMigrateSolution
{
    [Alias('azure_native_migrate_solution')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $migrateProjectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that migrate project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a migration solution within a migrate project.)')]
        [string]
        $solutionName,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the properties of the solution.)')]
        [SolutionProperties]
        $properties,
        [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:migrate:Solution")

        $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["migrateProjectName"] = $migrateProjectName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class Identity
{
    [string] $principalId
    [ArgumentCompletions('None', 'SystemAssigned', 'UserAssigned')]
    [string] $type
    [string] $tenantId
}
function New-AzureNativeTypeMigrateIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the principal id.)')]
        [string]
        $principalId,
        [parameter(mandatory=$False,HelpMessage='The type of identity used for the resource mover service.)')]
        [string]
        [ArgumentCompletions('None', 'SystemAssigned', 'UserAssigned')]
        $type,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the tenant id.)')]
        [string]
        $tenantId
    )

    process
    {
        return $([Identity]$PSBoundParameters)
    }
}
class MoveCollectionProperties
{
    [string] $sourceRegion
    [string] $targetRegion
}
function New-AzureNativeTypeMigrateMoveCollectionProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the source region.)')]
        [string]
        $sourceRegion,
        [parameter(mandatory=$False,HelpMessage='Gets or sets the target region.)')]
        [string]
        $targetRegion
    )

    process
    {
        return $([MoveCollectionProperties]$PSBoundParameters)
    }
}
function New-AzureNativeMigrateMoveCollection
{
    [Alias('azure_native_migrate_movecollection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The Resource Group Name.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Defines the MSI properties of the Move Collection.)')]
        [Identity]
        $identity,
        [parameter(mandatory=$False,HelpMessage='The geo-location where the resource lives.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Defines the move collection properties.)')]
        [MoveCollectionProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Resource tags.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='The Move Collection Name.)')]
        [string]
        $moveCollectionName,
        [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:migrate:MoveCollection")

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeMigrateVMwareCollector
{
    [Alias('azure_native_migrate_vmwarecollector')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a VMware collector within a project.)')]
        [string]
        $vmWareCollectorName,
        [parameter(mandatory=$False,HelpMessage=')')]
        [CollectorProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $eTag,
        [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:migrate:VMwareCollector")

        $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["projectName"] = $projectName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeMigrateHyperVCollector
{
    [Alias('azure_native_migrate_hypervcollector')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a Hyper-V collector within a project.)')]
        [string]
        $hyperVCollectorName,
        [parameter(mandatory=$False,HelpMessage=')')]
        [CollectorProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $eTag,
        [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:migrate:HyperVCollector")

        $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["projectName"] = $projectName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class GroupProperties
{
    [string] $groupType
}
function New-AzureNativeTypeMigrateGroupProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of group.)')]
        [string]
        $groupType
    )

    process
    {
        return $([GroupProperties]$PSBoundParameters)
    }
}
function New-AzureNativeMigrateGroup
{
    [Alias('azure_native_migrate_group')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Unique name of a group within a project.)')]
        [string]
        $groupName,
        [parameter(mandatory=$False,HelpMessage='Properties of the group.)')]
        [GroupProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='For optimistic concurrency control.)')]
        [string]
        $eTag,
        [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:migrate:Group")

        $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["projectName"] = $projectName
        $resource.properties["properties"] = $properties
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class VmUptime
{
    [int] $hoursPerDay
    [int] $daysPerMonth
}
function New-AzureNativeTypeMigrateVmUptime
{
    param (
        [parameter(mandatory=$False,HelpMessage='Number of hours per day for VM uptime.)')]
        [int]
        $hoursPerDay,
        [parameter(mandatory=$False,HelpMessage='Number of days in a month for VM uptime.)')]
        [int]
        $daysPerMonth
    )

    process
    {
        return $([VmUptime]$PSBoundParameters)
    }
}
class AssessmentProperties
{
    [ArgumentCompletions('Unknown', 'MSAZR0003P', 'MSAZR0044P', 'MSAZR0059P', 'MSAZR0060P', 'MSAZR0062P', 'MSAZR0063P', 'MSAZR0064P', 'MSAZR0029P', 'MSAZR0022P', 'MSAZR0023P', 'MSAZR0148P', 'MSAZR0025P', 'MSAZR0036P', 'MSAZR0120P', 'MSAZR0121P', 'MSAZR0122P', 'MSAZR0123P', 'MSAZR0124P', 'MSAZR0125P', 'MSAZR0126P', 'MSAZR0127P', 'MSAZR0128P', 'MSAZR0129P', 'MSAZR0130P', 'MSAZR0111P', 'MSAZR0144P', 'MSAZR0149P', 'MSMCAZR0044P', 'MSMCAZR0059P', 'MSMCAZR0060P', 'MSMCAZR0063P', 'MSMCAZR0120P', 'MSMCAZR0121P', 'MSMCAZR0125P', 'MSMCAZR0128P', 'MSAZRDE0003P', 'MSAZRDE0044P', 'MSAZRUSGOV0003P', 'EA')]
    [string] $azureOfferCode
    [ArgumentCompletions('None', 'RI1Year', 'RI3Year')]
    [string] $reservedInstance
    [ArgumentCompletions('Day', 'Week', 'Month', 'Custom')]
    [string] $timeRange
    [ArgumentCompletions('Unknown', 'LocallyRedundant', 'ZoneRedundant', 'GeoRedundant', 'ReadAccessGeoRedundant')]
    [string] $azureStorageRedundancy
    [int] $discountPercentage
    [int] $scalingFactor
    [ArgumentCompletions('Unknown', 'USD', 'DKK', 'CAD', 'IDR', 'JPY', 'KRW', 'NZD', 'NOK', 'RUB', 'SAR', 'ZAR', 'SEK', 'TRY', 'GBP', 'MXN', 'MYR', 'INR', 'HKD', 'BRL', 'TWD', 'EUR', 'CHF', 'ARS', 'AUD', 'CNY')]
    [string] $currency
    [VmUptime] $vmUptime
    [ArgumentCompletions('InProgress', 'UnderReview', 'Approved')]
    [string] $stage
    [ArgumentCompletions('Unknown', 'Yes', 'No')]
    [string] $azureHybridUseBenefit
    [ArgumentCompletions('PerformanceBased', 'AsOnPremises')]
    [string] $sizingCriterion
    [ArgumentCompletions('Standard', 'Basic')]
    [string] $azurePricingTier
    [ArgumentCompletions('Percentile50', 'Percentile90', 'Percentile95', 'Percentile99')]
    [string] $percentile
    [ArgumentCompletions('Unknown', 'EastAsia', 'SoutheastAsia', 'AustraliaEast', 'AustraliaSoutheast', 'BrazilSouth', 'CanadaCentral', 'CanadaEast', 'WestEurope', 'NorthEurope', 'CentralIndia', 'SouthIndia', 'WestIndia', 'JapanEast', 'JapanWest', 'KoreaCentral', 'KoreaSouth', 'UkWest', 'UkSouth', 'NorthCentralUs', 'EastUs', 'WestUs2', 'SouthCentralUs', 'CentralUs', 'EastUs2', 'WestUs', 'WestCentralUs', 'GermanyCentral', 'GermanyNortheast', 'ChinaNorth', 'ChinaEast', 'USGovArizona', 'USGovTexas', 'USGovIowa', 'USGovVirginia', 'USDoDCentral', 'USDoDEast')]
    [string] $azureLocation
    [string[]] $azureVmFamilies
    [ArgumentCompletions('Unknown', 'Standard', 'Premium', 'StandardSSD', 'StandardOrPremium')]
    [string] $azureDiskType
}
function New-AzureNativeTypeMigrateAssessmentProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Offer code according to which cost estimation is done.)')]
        [string]
        [ArgumentCompletions('Unknown', 'MSAZR0003P', 'MSAZR0044P', 'MSAZR0059P', 'MSAZR0060P', 'MSAZR0062P', 'MSAZR0063P', 'MSAZR0064P', 'MSAZR0029P', 'MSAZR0022P', 'MSAZR0023P', 'MSAZR0148P', 'MSAZR0025P', 'MSAZR0036P', 'MSAZR0120P', 'MSAZR0121P', 'MSAZR0122P', 'MSAZR0123P', 'MSAZR0124P', 'MSAZR0125P', 'MSAZR0126P', 'MSAZR0127P', 'MSAZR0128P', 'MSAZR0129P', 'MSAZR0130P', 'MSAZR0111P', 'MSAZR0144P', 'MSAZR0149P', 'MSMCAZR0044P', 'MSMCAZR0059P', 'MSMCAZR0060P', 'MSMCAZR0063P', 'MSMCAZR0120P', 'MSMCAZR0121P', 'MSMCAZR0125P', 'MSMCAZR0128P', 'MSAZRDE0003P', 'MSAZRDE0044P', 'MSAZRUSGOV0003P', 'EA')]
        $azureOfferCode,
        [parameter(mandatory=$False,HelpMessage='Azure reserved instance.)')]
        [string]
        [ArgumentCompletions('None', 'RI1Year', 'RI3Year')]
        $reservedInstance,
        [parameter(mandatory=$False,HelpMessage='Time range of performance data used to recommend a size.)')]
        [string]
        [ArgumentCompletions('Day', 'Week', 'Month', 'Custom')]
        $timeRange,
        [parameter(mandatory=$False,HelpMessage='Storage Redundancy type offered by Azure.)')]
        [string]
        [ArgumentCompletions('Unknown', 'LocallyRedundant', 'ZoneRedundant', 'GeoRedundant', 'ReadAccessGeoRedundant')]
        $azureStorageRedundancy,
        [parameter(mandatory=$False,HelpMessage='Custom discount percentage to be applied on final costs. Can be in the range [0, 100].)')]
        [int]
        $discountPercentage,
        [parameter(mandatory=$False,HelpMessage='Scaling factor used over utilization data to add a performance buffer for new machines to be created in Azure. Min Value = 1.0, Max value = 1.9, Default = 1.3.)')]
        [int]
        $scalingFactor,
        [parameter(mandatory=$False,HelpMessage='Currency to report prices in.)')]
        [string]
        [ArgumentCompletions('Unknown', 'USD', 'DKK', 'CAD', 'IDR', 'JPY', 'KRW', 'NZD', 'NOK', 'RUB', 'SAR', 'ZAR', 'SEK', 'TRY', 'GBP', 'MXN', 'MYR', 'INR', 'HKD', 'BRL', 'TWD', 'EUR', 'CHF', 'ARS', 'AUD', 'CNY')]
        $currency,
        [parameter(mandatory=$False,HelpMessage='Specify the duration for which the VMs are up in the on-premises environment.)')]
        [VmUptime]
        $vmUptime,
        [parameter(mandatory=$False,HelpMessage='User configurable setting that describes the status of the assessment.)')]
        [string]
        [ArgumentCompletions('InProgress', 'UnderReview', 'Approved')]
        $stage,
        [parameter(mandatory=$False,HelpMessage='AHUB discount on windows virtual machines.)')]
        [string]
        [ArgumentCompletions('Unknown', 'Yes', 'No')]
        $azureHybridUseBenefit,
        [parameter(mandatory=$False,HelpMessage='Assessment sizing criterion.)')]
        [string]
        [ArgumentCompletions('PerformanceBased', 'AsOnPremises')]
        $sizingCriterion,
        [parameter(mandatory=$False,HelpMessage='Pricing tier for Size evaluation.)')]
        [string]
        [ArgumentCompletions('Standard', 'Basic')]
        $azurePricingTier,
        [parameter(mandatory=$False,HelpMessage='Percentile of performance data used to recommend Azure size.)')]
        [string]
        [ArgumentCompletions('Percentile50', 'Percentile90', 'Percentile95', 'Percentile99')]
        $percentile,
        [parameter(mandatory=$False,HelpMessage='Target Azure location for which the machines should be assessed. These enums are the same as used by Compute API.)')]
        [string]
        [ArgumentCompletions('Unknown', 'EastAsia', 'SoutheastAsia', 'AustraliaEast', 'AustraliaSoutheast', 'BrazilSouth', 'CanadaCentral', 'CanadaEast', 'WestEurope', 'NorthEurope', 'CentralIndia', 'SouthIndia', 'WestIndia', 'JapanEast', 'JapanWest', 'KoreaCentral', 'KoreaSouth', 'UkWest', 'UkSouth', 'NorthCentralUs', 'EastUs', 'WestUs2', 'SouthCentralUs', 'CentralUs', 'EastUs2', 'WestUs', 'WestCentralUs', 'GermanyCentral', 'GermanyNortheast', 'ChinaNorth', 'ChinaEast', 'USGovArizona', 'USGovTexas', 'USGovIowa', 'USGovVirginia', 'USDoDCentral', 'USDoDEast')]
        $azureLocation,
        [parameter(mandatory=$False,HelpMessage='List of azure VM families.)')]
        $azureVmFamilies,
        [parameter(mandatory=$False,HelpMessage='Storage type selected for this disk.)')]
        [string]
        [ArgumentCompletions('Unknown', 'Standard', 'Premium', 'StandardSSD', 'StandardOrPremium')]
        $azureDiskType
    )

    process
    {
        return $([AssessmentProperties]$PSBoundParameters)
    }
}
function New-AzureNativeMigrateAssessment
{
    [Alias('azure_native_migrate_assessment')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='For optimistic concurrency control.)')]
        [string]
        $eTag,
        [parameter(mandatory=$False,HelpMessage='Unique name of an assessment within a project.)')]
        [string]
        $assessmentName,
        [parameter(mandatory=$False,HelpMessage='Properties of the assessment.)')]
        [AssessmentProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Unique name of a group within a project.)')]
        [string]
        $groupName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [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:migrate:Assessment")

        $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["groupName"] = $groupName
        $resource.properties["projectName"] = $projectName
        $resource.properties["properties"] = $properties
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ImportCollectorProperties
{
    [string] $discoverySiteId
}
function New-AzureNativeTypeMigrateImportCollectorProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $discoverySiteId
    )

    process
    {
        return $([ImportCollectorProperties]$PSBoundParameters)
    }
}
function New-AzureNativeMigrateImportCollector
{
    [Alias('azure_native_migrate_importcollector')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage=')')]
        [ImportCollectorProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Unique name of a Import collector within a project.)')]
        [string]
        $importCollectorName,
        [parameter(mandatory=$False,HelpMessage=')')]
        [string]
        $eTag,
        [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:migrate:ImportCollector")

        $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["projectName"] = $projectName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class PrivateLinkServiceConnectionState
{
    [string] $description
    [string] $status
    [string] $actionsRequired
}
function New-AzureNativeTypeMigratePrivateLinkServiceConnectionState
{
    param (
        [parameter(mandatory=$False,HelpMessage='Description of the private endpoint connection.)')]
        [string]
        $description,
        [parameter(mandatory=$False,HelpMessage='Connection status of the private endpoint connection.)')]
        [string]
        $status,
        [parameter(mandatory=$False,HelpMessage='Actions required on the private endpoint connection.)')]
        [string]
        $actionsRequired
    )

    process
    {
        return $([PrivateLinkServiceConnectionState]$PSBoundParameters)
    }
}
class PrivateEndpointConnectionProperties
{
    [PrivateLinkServiceConnectionState] $privateLinkServiceConnectionState
}
function New-AzureNativeTypeMigratePrivateEndpointConnectionProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='State of the private endpoint connection.)')]
        [PrivateLinkServiceConnectionState]
        $privateLinkServiceConnectionState
    )

    process
    {
        return $([PrivateEndpointConnectionProperties]$PSBoundParameters)
    }
}
function New-AzureNativeMigratePrivateEndpointConnection
{
    [Alias('azure_native_migrate_privateendpointconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Properties of the private endpoint endpoint connection.)')]
        [PrivateEndpointConnectionProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Unique name of a private endpoint connection within a project.)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='For optimistic concurrency control.)')]
        [string]
        $eTag,
        [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:migrate: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["projectName"] = $projectName
        $resource.properties["properties"] = $properties
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ProjectProperties
{
    [string] $assessmentSolutionId
    [string] $customerWorkspaceLocation
    [string] $customerStorageAccountArmId
    [ArgumentCompletions('Active', 'Inactive')]
    [string] $projectStatus
    [string] $customerWorkspaceId
    [string] $publicNetworkAccess
}
function New-AzureNativeTypeMigrateProjectProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Assessment solution ARM id tracked by Microsoft.Migrate/migrateProjects.)')]
        [string]
        $assessmentSolutionId,
        [parameter(mandatory=$False,HelpMessage='Location of service map workspace created by customer.)')]
        [string]
        $customerWorkspaceLocation,
        [parameter(mandatory=$False,HelpMessage='The ARM id of the storage account used for interactions when public access is disabled.)')]
        [string]
        $customerStorageAccountArmId,
        [parameter(mandatory=$False,HelpMessage='Assessment project status.)')]
        [string]
        [ArgumentCompletions('Active', 'Inactive')]
        $projectStatus,
        [parameter(mandatory=$False,HelpMessage='The ARM id of service map workspace created by customer.)')]
        [string]
        $customerWorkspaceId,
        [parameter(mandatory=$False,HelpMessage='This value can be set to ''enabled'' to avoid breaking changes on existing customer resources and templates. If set to ''disabled'', traffic over public interface is not allowed, and private endpoint connections would be the exclusive access method.)')]
        [string]
        $publicNetworkAccess
    )

    process
    {
        return $([ProjectProperties]$PSBoundParameters)
    }
}
function New-AzureNativeMigrateProject
{
    [Alias('azure_native_migrate_project')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Resource Group that project is part of.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='For optimistic concurrency control.)')]
        [string]
        $eTag,
        [parameter(mandatory=$False,HelpMessage='Azure location in which project is created.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='Properties of the project.)')]
        [ProjectProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Tags provided by Azure Tagging service.)')]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Name of the Azure Migrate project.)')]
        [string]
        $projectName,
        [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:migrate:Project")

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

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

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

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

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

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