pspulumiyaml.azurenative.costmanagement.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionCostmanagementGetScheduledActionByScope
{
    param (
        [parameter(mandatory=$False,HelpMessage='The scope associated with scheduled action operations. This includes ''subscriptions/{subscriptionId}'' for subscription scope, ''subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for resourceGroup scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}'' for Billing Account scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}'' for Department scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}'' for EnrollmentAccount scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}'' for BillingProfile scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/invoiceSections/{invoiceSectionId}'' for InvoiceSection scope, ''providers/Microsoft.CostManagement/externalBillingAccounts/{externalBillingAccountName}'' for External Billing Account scope and ''providers/Microsoft.CostManagement/externalSubscriptions/{externalSubscriptionName}'' for External Subscription scope.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='Scheduled action name.)')]
        [string]
        $name
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:costmanagement:getScheduledActionByScope -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionCostmanagementGetReportByResourceGroupName
{
    param (
        [parameter(mandatory=$False,HelpMessage='Report Name.)')]
        [string]
        $reportName,
        [parameter(mandatory=$False,HelpMessage='Azure Resource Group Name.)')]
        [string]
        $resourceGroupName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:costmanagement:getReportByResourceGroupName -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionCostmanagementGetSetting
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the setting. Allowed values: myscope)')]
        [string]
        $settingName
    )

    process
    {
        $arguments = @{}
        $arguments["settingName"] = $settingName

        $functionObject = Invoke-PulumiFunction -Name azure-native:costmanagement:getSetting -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionCostmanagementGetReportByBillingAccount
{
    param (
        [parameter(mandatory=$False,HelpMessage='Report Name.)')]
        [string]
        $reportName,
        [parameter(mandatory=$False,HelpMessage='BillingAccount ID)')]
        [string]
        $billingAccountId
    )

    process
    {
        $arguments = @{}
        $arguments["billingAccountId"] = $billingAccountId
        $arguments["reportName"] = $reportName

        $functionObject = Invoke-PulumiFunction -Name azure-native:costmanagement:getReportByBillingAccount -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionCostmanagementGetScheduledAction
{
    param (
        [parameter(mandatory=$False,HelpMessage='Scheduled action name.)')]
        [string]
        $name
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:costmanagement:getScheduledAction -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionCostmanagementGetExport
{
    param (
        [parameter(mandatory=$False,HelpMessage='May be used to expand the properties within an export. Currently only ''runHistory'' is supported and will return information for the last 10 executions of the export.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The scope associated with export operations. This includes ''/subscriptions/{subscriptionId}/'' for subscription scope, ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for resourceGroup scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}'' for Billing Account scope and ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}'' for Department scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}'' for EnrollmentAccount scope, ''/providers/Microsoft.Management/managementGroups/{managementGroupId} for Management Group scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}'' for billingProfile scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}/invoiceSections/{invoiceSectionId}'' for invoiceSection scope, and ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/customers/{customerId}'' specific for partners.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='Export Name.)')]
        [string]
        $exportName
    )

    process
    {
        $arguments = @{}
        $arguments["exportName"] = $exportName
        $arguments["scope"] = $scope

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:costmanagement:getExport -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionCostmanagementGetReport
{
    param (
        [parameter(mandatory=$False,HelpMessage='Report Name.)')]
        [string]
        $reportName
    )

    process
    {
        $arguments = @{}
        $arguments["reportName"] = $reportName

        $functionObject = Invoke-PulumiFunction -Name azure-native:costmanagement:getReport -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionCostmanagementGetCostAllocationRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Cost allocation rule name. The name cannot include spaces or any non alphanumeric characters other than ''_'' and ''-''. The max length is 260 characters.)')]
        [string]
        $ruleName,
        [parameter(mandatory=$False,HelpMessage='BillingAccount ID)')]
        [string]
        $billingAccountId
    )

    process
    {
        $arguments = @{}
        $arguments["billingAccountId"] = $billingAccountId
        $arguments["ruleName"] = $ruleName

        $functionObject = Invoke-PulumiFunction -Name azure-native:costmanagement:getCostAllocationRule -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionCostmanagementGetViewByScope
{
    param (
        [parameter(mandatory=$False,HelpMessage='The scope associated with view operations. This includes ''subscriptions/{subscriptionId}'' for subscription scope, ''subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for resourceGroup scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}'' for Billing Account scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}'' for Department scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}'' for EnrollmentAccount scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}'' for BillingProfile scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/invoiceSections/{invoiceSectionId}'' for InvoiceSection scope, ''providers/Microsoft.Management/managementGroups/{managementGroupId}'' for Management Group scope, ''providers/Microsoft.CostManagement/externalBillingAccounts/{externalBillingAccountName}'' for External Billing Account scope and ''providers/Microsoft.CostManagement/externalSubscriptions/{externalSubscriptionName}'' for External Subscription scope.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='View name)')]
        [string]
        $viewName
    )

    process
    {
        $arguments = @{}
        $arguments["scope"] = $scope
        $arguments["viewName"] = $viewName

        $functionObject = Invoke-PulumiFunction -Name azure-native:costmanagement:getViewByScope -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionCostmanagementGetView
{
    param (
        [parameter(mandatory=$False,HelpMessage='View name)')]
        [string]
        $viewName
    )

    process
    {
        $arguments = @{}
        $arguments["viewName"] = $viewName

        $functionObject = Invoke-PulumiFunction -Name azure-native:costmanagement:getView -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionCostmanagementGetCloudConnector
{
    param (
        [parameter(mandatory=$False,HelpMessage='May be used to expand the collectionInfo property. By default, collectionInfo is not included.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='Connector Name.)')]
        [string]
        $connectorName
    )

    process
    {
        $arguments = @{}
        $arguments["connectorName"] = $connectorName

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:costmanagement:getCloudConnector -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionCostmanagementGetReportByDepartment
{
    param (
        [parameter(mandatory=$False,HelpMessage='Report Name.)')]
        [string]
        $reportName,
        [parameter(mandatory=$False,HelpMessage='Department ID)')]
        [string]
        $departmentId
    )

    process
    {
        $arguments = @{}
        $arguments["departmentId"] = $departmentId
        $arguments["reportName"] = $reportName

        $functionObject = Invoke-PulumiFunction -Name azure-native:costmanagement:getReportByDepartment -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class ReportRecurrencePeriod
{
    [string] $from
    [string] $to
}
function New-AzureNativeTypeCostmanagementReportRecurrencePeriod
{
    param (
        [parameter(mandatory=$False,HelpMessage='The start date of recurrence.)')]
        [string]
        $from,
        [parameter(mandatory=$False,HelpMessage='The end date of recurrence.)')]
        [string]
        $to
    )

    process
    {
        return $([ReportRecurrencePeriod]$PSBoundParameters)
    }
}
class ReportSchedule
{
    [ReportRecurrencePeriod] $recurrencePeriod
    [ArgumentCompletions('Daily', 'Weekly', 'Monthly', 'Annually')]
    [string] $recurrence
    [ArgumentCompletions('Active', 'Inactive')]
    [string] $status
}
function New-AzureNativeTypeCostmanagementReportSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Has start and end date of the recurrence. The start date must be in future. If present, the end date must be greater than start date.)')]
        [ReportRecurrencePeriod]
        $recurrencePeriod,
        [parameter(mandatory=$False,HelpMessage='The schedule recurrence.)')]
        [string]
        [ArgumentCompletions('Daily', 'Weekly', 'Monthly', 'Annually')]
        $recurrence,
        [parameter(mandatory=$False,HelpMessage='The status of the schedule. Whether active or not. If inactive, the report''s scheduled execution is paused.)')]
        [string]
        [ArgumentCompletions('Active', 'Inactive')]
        $status
    )

    process
    {
        return $([ReportSchedule]$PSBoundParameters)
    }
}
class ReportDeliveryDestination
{
    [string] $container
    [string] $rootFolderPath
    [string] $resourceId
}
function New-AzureNativeTypeCostmanagementReportDeliveryDestination
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the container where reports will be uploaded.)')]
        [string]
        $container,
        [parameter(mandatory=$False,HelpMessage='The name of the directory where reports will be uploaded.)')]
        [string]
        $rootFolderPath,
        [parameter(mandatory=$False,HelpMessage='The resource id of the storage account where reports will be delivered.)')]
        [string]
        $resourceId
    )

    process
    {
        return $([ReportDeliveryDestination]$PSBoundParameters)
    }
}
class ReportDeliveryInfo
{
    [ReportDeliveryDestination] $destination
}
function New-AzureNativeTypeCostmanagementReportDeliveryInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='Has destination for the report being delivered.)')]
        [ReportDeliveryDestination]
        $destination
    )

    process
    {
        return $([ReportDeliveryInfo]$PSBoundParameters)
    }
}
class ReportGrouping
{
    [ArgumentCompletions('Tag', 'Dimension')]
    [string] $type
    [string] $name
}
function New-AzureNativeTypeCostmanagementReportGrouping
{
    param (
        [parameter(mandatory=$False,HelpMessage='Has type of the column to group.)')]
        [string]
        [ArgumentCompletions('Tag', 'Dimension')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The name of the column to group.)')]
        [string]
        $name
    )

    process
    {
        return $([ReportGrouping]$PSBoundParameters)
    }
}
class ReportComparisonExpression
{
    [string] $name
    [string[]] $values
    [ArgumentCompletions('In', 'Contains')]
    [string] $operator
}
function New-AzureNativeTypeCostmanagementReportComparisonExpression
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the column to use in comparison.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Array of values to use for comparison)')]
        [string[]]
        $values,
        [parameter(mandatory=$False,HelpMessage='The operator to use for comparison.)')]
        [string]
        [ArgumentCompletions('In', 'Contains')]
        $operator
    )

    process
    {
        return $([ReportComparisonExpression]$PSBoundParameters)
    }
}
class ReportFilter
{
    [ReportFilter[]] $or
    [ReportComparisonExpression] $dimension
    [ReportComparisonExpression] $tag
    [ReportFilter[]] $and
    [ReportFilter] $not
}
function New-AzureNativeTypeCostmanagementReportFilter
{
    param (
        [parameter(mandatory=$False,HelpMessage='The logical "OR" expression. Must have at least 2 items.)')]
        $or,
        [parameter(mandatory=$False,HelpMessage='Has comparison expression for a dimension)')]
        [ReportComparisonExpression]
        $dimension,
        [parameter(mandatory=$False,HelpMessage='Has comparison expression for a tag)')]
        [ReportComparisonExpression]
        $tag,
        [parameter(mandatory=$False,HelpMessage='The logical "AND" expression. Must have at least 2 items.)')]
        $and,
        [parameter(mandatory=$False,HelpMessage='The logical "NOT" expression.)')]
        [ReportFilter]
        $not
    )

    process
    {
        return $([ReportFilter]$PSBoundParameters)
    }
}
class ReportDatasetConfiguration
{
    [string[]] $columns
}
function New-AzureNativeTypeCostmanagementReportDatasetConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Array of column names to be included in the report. Any valid report column name is allowed. If not provided, then report includes all columns.)')]
        [string[]]
        $columns
    )

    process
    {
        return $([ReportDatasetConfiguration]$PSBoundParameters)
    }
}
class ReportDataset
{
    [ReportGrouping[]] $grouping
    [ArgumentCompletions('Daily', 'Hourly')]
    [string] $granularity
    [object] $aggregation
    [ReportFilter] $filter
    [ReportDatasetConfiguration] $configuration
}
class ReportAggregation
{
    [string] $name
    [ArgumentCompletions('Avg', 'Max', 'Min', 'Sum')]
    [string] $function
}
function New-AzureNativeTypeCostmanagementReportAggregation
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the column to aggregate.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the aggregation function to use.)')]
        [string]
        [ArgumentCompletions('Avg', 'Max', 'Min', 'Sum')]
        $function
    )

    process
    {
        return $([ReportAggregation]$PSBoundParameters)
    }
}
function New-AzureNativeTypeCostmanagementReportDataset
{
    param (
        [parameter(mandatory=$False,HelpMessage='Array of group by expression to use in the report. Report can have up to 2 group by clauses.)')]
        $grouping,
        [parameter(mandatory=$False,HelpMessage='The granularity of rows in the report.)')]
        [string]
        [ArgumentCompletions('Daily', 'Hourly')]
        $granularity,
        [parameter(mandatory=$False,HelpMessage='Dictionary of aggregation expression to use in the report. The key of each item in the dictionary is the alias for the aggregated column. Report can have up to 2 aggregation clauses.)')]
        [ReportAggregation]
        $aggregation,
        [parameter(mandatory=$False,HelpMessage='Has filter expression to use in the report.)')]
        [ReportFilter]
        $filter,
        [parameter(mandatory=$False,HelpMessage='Has configuration information for the data in the report. The configuration will be ignored if aggregation and grouping are provided.)')]
        [ReportDatasetConfiguration]
        $configuration
    )

    process
    {
        return $([ReportDataset]$PSBoundParameters)
    }
}
class ReportTimePeriod
{
    [string] $from
    [string] $to
}
function New-AzureNativeTypeCostmanagementReportTimePeriod
{
    param (
        [parameter(mandatory=$False,HelpMessage='The start date to pull data from.)')]
        [string]
        $from,
        [parameter(mandatory=$False,HelpMessage='The end date to pull data to.)')]
        [string]
        $to
    )

    process
    {
        return $([ReportTimePeriod]$PSBoundParameters)
    }
}
class ReportDefinition
{
    [ReportDataset] $dataset
    [ArgumentCompletions('WeekToDate', 'MonthToDate', 'Custom')]
    [string] $timeframe
    [ArgumentCompletions('Usage')]
    [string] $type
    [ReportTimePeriod] $timePeriod
}
function New-AzureNativeTypeCostmanagementReportDefinition
{
    param (
        [parameter(mandatory=$False,HelpMessage='Has definition for data in this report.)')]
        [ReportDataset]
        $dataset,
        [parameter(mandatory=$False,HelpMessage='The time frame for pulling data for the report. If custom, then a specific time period must be provided.)')]
        [string]
        [ArgumentCompletions('WeekToDate', 'MonthToDate', 'Custom')]
        $timeframe,
        [parameter(mandatory=$False,HelpMessage='The type of the report.)')]
        [string]
        [ArgumentCompletions('Usage')]
        $type,
        [parameter(mandatory=$False,HelpMessage='Has time period for pulling data for the report.)')]
        [ReportTimePeriod]
        $timePeriod
    )

    process
    {
        return $([ReportDefinition]$PSBoundParameters)
    }
}
function New-AzureNativeCostmanagementReport
{
    [Alias('azure_native_costmanagement_report')]
    param (
        [parameter(mandatory=$False,HelpMessage='Has schedule information for the report.)')]
        [ReportSchedule]
        $schedule,
        [parameter(mandatory=$False,HelpMessage='Has delivery information for the report.)')]
        [ReportDeliveryInfo]
        $deliveryInfo,
        [parameter(mandatory=$False,HelpMessage='Report Name.)')]
        [string]
        $reportName,
        [parameter(mandatory=$False,HelpMessage='Has definition for the report.)')]
        [ReportDefinition]
        $definition,
        [parameter(mandatory=$False,HelpMessage='The format of the report being delivered.)')]
        [string]
        [ArgumentCompletions('Csv')]
        $format,
        [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:costmanagement:Report")

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeCostmanagementReportByBillingAccount
{
    [Alias('azure_native_costmanagement_reportbybillingaccount')]
    param (
        [parameter(mandatory=$False,HelpMessage='BillingAccount ID)')]
        [string]
        $billingAccountId,
        [parameter(mandatory=$False,HelpMessage='Has schedule information for the report.)')]
        [ReportSchedule]
        $schedule,
        [parameter(mandatory=$False,HelpMessage='Report Name.)')]
        [string]
        $reportName,
        [parameter(mandatory=$False,HelpMessage='Has delivery information for the report.)')]
        [ReportDeliveryInfo]
        $deliveryInfo,
        [parameter(mandatory=$False,HelpMessage='The format of the report being delivered.)')]
        [string]
        [ArgumentCompletions('Csv')]
        $format,
        [parameter(mandatory=$False,HelpMessage='Has definition for the report.)')]
        [ReportDefinition]
        $definition,
        [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:costmanagement:ReportByBillingAccount")

        $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["billingAccountId"] = $billingAccountId
        $resource.properties["definition"] = $definition
        $resource.properties["deliveryInfo"] = $deliveryInfo

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ReportConfigTimePeriod
{
    [string] $from
    [string] $to
}
function New-AzureNativeTypeCostmanagementReportConfigTimePeriod
{
    param (
        [parameter(mandatory=$False,HelpMessage='The start date to pull data from.)')]
        [string]
        $from,
        [parameter(mandatory=$False,HelpMessage='The end date to pull data to.)')]
        [string]
        $to
    )

    process
    {
        return $([ReportConfigTimePeriod]$PSBoundParameters)
    }
}
class ReportConfigComparisonExpression
{
    [string] $name
    [string[]] $values
    [ArgumentCompletions('In', 'Contains')]
    [string] $operator
}
function New-AzureNativeTypeCostmanagementReportConfigComparisonExpression
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the column to use in comparison.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Array of values to use for comparison)')]
        [string[]]
        $values,
        [parameter(mandatory=$False,HelpMessage='The operator to use for comparison.)')]
        [string]
        [ArgumentCompletions('In', 'Contains')]
        $operator
    )

    process
    {
        return $([ReportConfigComparisonExpression]$PSBoundParameters)
    }
}
class ReportConfigFilter
{
    [ReportConfigComparisonExpression] $dimensions
    [ReportConfigFilter[]] $or
    [ReportConfigFilter[]] $and
    [ReportConfigComparisonExpression] $tags
    [ReportConfigComparisonExpression] $tagKey
    [ReportConfigComparisonExpression] $tagValue
}
function New-AzureNativeTypeCostmanagementReportConfigFilter
{
    param (
        [parameter(mandatory=$False,HelpMessage='Has comparison expression for a dimension)')]
        [ReportConfigComparisonExpression]
        $dimensions,
        [parameter(mandatory=$False,HelpMessage='The logical "OR" expression. Must have at least 2 items.)')]
        $or,
        [parameter(mandatory=$False,HelpMessage='The logical "AND" expression. Must have at least 2 items.)')]
        $and,
        [parameter(mandatory=$False,HelpMessage='Has comparison expression for a tag)')]
        [ReportConfigComparisonExpression]
        $tags,
        [parameter(mandatory=$False,HelpMessage='Has comparison expression for a tag key)')]
        [ReportConfigComparisonExpression]
        $tagKey,
        [parameter(mandatory=$False,HelpMessage='Has comparison expression for a tag value)')]
        [ReportConfigComparisonExpression]
        $tagValue
    )

    process
    {
        return $([ReportConfigFilter]$PSBoundParameters)
    }
}
class ReportConfigGrouping
{
    [ArgumentCompletions('Tag', 'Dimension')]
    [string] $type
    [string] $name
}
function New-AzureNativeTypeCostmanagementReportConfigGrouping
{
    param (
        [parameter(mandatory=$False,HelpMessage='Has type of the column to group.)')]
        [string]
        [ArgumentCompletions('Tag', 'Dimension')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The name of the column to group. This version supports subscription lowest possible grain.)')]
        [string]
        $name
    )

    process
    {
        return $([ReportConfigGrouping]$PSBoundParameters)
    }
}
class ReportConfigSorting
{
    [string] $name
    [string] $direction
}
function New-AzureNativeTypeCostmanagementReportConfigSorting
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the column to sort.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Direction of sort.)')]
        [string]
        $direction
    )

    process
    {
        return $([ReportConfigSorting]$PSBoundParameters)
    }
}
class ReportConfigDatasetConfiguration
{
    [string[]] $columns
}
function New-AzureNativeTypeCostmanagementReportConfigDatasetConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Array of column names to be included in the report. Any valid report column name is allowed. If not provided, then report includes all columns.)')]
        [string[]]
        $columns
    )

    process
    {
        return $([ReportConfigDatasetConfiguration]$PSBoundParameters)
    }
}
class ReportConfigDataset
{
    [ReportConfigFilter] $filter
    [ReportConfigGrouping[]] $grouping
    [ReportConfigSorting[]] $sorting
    [ArgumentCompletions('Daily', 'Monthly')]
    [string] $granularity
    [object] $aggregation
    [ReportConfigDatasetConfiguration] $configuration
}
class ReportConfigAggregation
{
    [string] $name
    [ArgumentCompletions('Avg', 'Max', 'Min', 'Sum')]
    [string] $function
}
function New-AzureNativeTypeCostmanagementReportConfigAggregation
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the column to aggregate.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The name of the aggregation function to use.)')]
        [string]
        [ArgumentCompletions('Avg', 'Max', 'Min', 'Sum')]
        $function
    )

    process
    {
        return $([ReportConfigAggregation]$PSBoundParameters)
    }
}
function New-AzureNativeTypeCostmanagementReportConfigDataset
{
    param (
        [parameter(mandatory=$False,HelpMessage='Has filter expression to use in the report.)')]
        [ReportConfigFilter]
        $filter,
        [parameter(mandatory=$False,HelpMessage='Array of group by expression to use in the report. Report can have up to 2 group by clauses.)')]
        $grouping,
        [parameter(mandatory=$False,HelpMessage='Array of order by expression to use in the report.)')]
        $sorting,
        [parameter(mandatory=$False,HelpMessage='The granularity of rows in the report.)')]
        [string]
        [ArgumentCompletions('Daily', 'Monthly')]
        $granularity,
        [parameter(mandatory=$False,HelpMessage='Dictionary of aggregation expression to use in the report. The key of each item in the dictionary is the alias for the aggregated column. Report can have up to 2 aggregation clauses.)')]
        [ReportConfigAggregation]
        $aggregation,
        [parameter(mandatory=$False,HelpMessage='Has configuration information for the data in the report. The configuration will be ignored if aggregation and grouping are provided.)')]
        [ReportConfigDatasetConfiguration]
        $configuration
    )

    process
    {
        return $([ReportConfigDataset]$PSBoundParameters)
    }
}
function New-AzureNativeCostmanagementView
{
    [Alias('azure_native_costmanagement_view')]
    param (
        [parameter(mandatory=$False,HelpMessage='User input name of the view. Required.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='The type of the report. Usage represents actual usage, forecast represents forecasted data and UsageAndForecast represents both usage and forecasted data. Actual usage and forecasted data can be differentiated based on dates.)')]
        [string]
        [ArgumentCompletions('Usage')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The time frame for pulling data for the report. If custom, then a specific time period must be provided.)')]
        [string]
        [ArgumentCompletions('WeekToDate', 'MonthToDate', 'YearToDate', 'Custom')]
        $timeframe,
        [parameter(mandatory=$False,HelpMessage='Has time period for pulling data for the report.)')]
        [ReportConfigTimePeriod]
        $timePeriod,
        [parameter(mandatory=$False,HelpMessage='Metric to use when displaying costs.)')]
        [string]
        [ArgumentCompletions('ActualCost', 'AmortizedCost', 'AHUB')]
        $metric,
        [parameter(mandatory=$False,HelpMessage='List of KPIs to show in Cost Analysis UI.)')]
        $kpis,
        [parameter(mandatory=$False,HelpMessage='Has definition for data in this report config.)')]
        [ReportConfigDataset]
        $dataSet,
        [parameter(mandatory=$False,HelpMessage='Show costs accumulated over time.)')]
        [string]
        [ArgumentCompletions('true', 'false')]
        $accumulated,
        [parameter(mandatory=$False,HelpMessage='Cost Management scope to save the view on. This includes ''subscriptions/{subscriptionId}'' for subscription scope, ''subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for resourceGroup scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}'' for Billing Account scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}'' for Department scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}'' for EnrollmentAccount scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}'' for BillingProfile scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/invoiceSections/{invoiceSectionId}'' for InvoiceSection scope, ''providers/Microsoft.Management/managementGroups/{managementGroupId}'' for Management Group scope, ''/providers/Microsoft.CostManagement/externalBillingAccounts/{externalBillingAccountName}'' for ExternalBillingAccount scope, and ''/providers/Microsoft.CostManagement/externalSubscriptions/{externalSubscriptionName}'' for ExternalSubscription scope.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='View name)')]
        [string]
        $viewName,
        [parameter(mandatory=$False,HelpMessage='Configuration of 3 sub-views in the Cost Analysis UI.)')]
        $pivots,
        [parameter(mandatory=$False,HelpMessage='Chart type of the main view in Cost Analysis. Required.)')]
        [string]
        [ArgumentCompletions('Area', 'Line', 'StackedColumn', 'GroupedColumn', 'Table')]
        $chart,
        [parameter(mandatory=$False,HelpMessage='eTag of the resource. To handle concurrent update scenario, this field will be used to determine whether the user is updating the latest version or not.)')]
        [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:costmanagement:View")

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeCostmanagementCloudConnector
{
    [Alias('azure_native_costmanagement_cloudconnector')]
    param (
        [parameter(mandatory=$False,HelpMessage='Identifying source report. (For AWS this is a CUR report name, defined with Daily and with Resources))')]
        [string]
        $reportId,
        [parameter(mandatory=$False,HelpMessage='Billing SubscriptionId)')]
        [string]
        $subscriptionId,
        [parameter(mandatory=$False,HelpMessage='Credentials authentication key (eg AWS ARN))')]
        [string]
        $credentialsKey,
        [parameter(mandatory=$False,HelpMessage='Default ManagementGroupId)')]
        [string]
        $defaultManagementGroupId,
        [parameter(mandatory=$False,HelpMessage='Connector DisplayName)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='Connector Name.)')]
        [string]
        $connectorName,
        [parameter(mandatory=$False,HelpMessage='Credentials secret (eg AWS ExternalId))')]
        [string]
        $credentialsSecret,
        [parameter(mandatory=$False,HelpMessage='Connector kind (eg aws))')]
        [string]
        $kind,
        [parameter(mandatory=$False,HelpMessage='Connector billing model)')]
        [string]
        [ArgumentCompletions('trial', 'autoUpgrade', 'premium', 'expired')]
        $billingModel,
        [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:costmanagement:CloudConnector")

        $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
        }

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ExportDeliveryDestination
{
    [string] $container
    [string] $rootFolderPath
    [string] $resourceId
}
function New-AzureNativeTypeCostmanagementExportDeliveryDestination
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the container where exports will be uploaded.)')]
        [string]
        $container,
        [parameter(mandatory=$False,HelpMessage='The name of the directory where exports will be uploaded.)')]
        [string]
        $rootFolderPath,
        [parameter(mandatory=$False,HelpMessage='The resource id of the storage account where exports will be delivered.)')]
        [string]
        $resourceId
    )

    process
    {
        return $([ExportDeliveryDestination]$PSBoundParameters)
    }
}
class ExportDeliveryInfo
{
    [ExportDeliveryDestination] $destination
}
function New-AzureNativeTypeCostmanagementExportDeliveryInfo
{
    param (
        [parameter(mandatory=$False,HelpMessage='Has destination for the export being delivered.)')]
        [ExportDeliveryDestination]
        $destination
    )

    process
    {
        return $([ExportDeliveryInfo]$PSBoundParameters)
    }
}
class ExportRecurrencePeriod
{
    [string] $from
    [string] $to
}
function New-AzureNativeTypeCostmanagementExportRecurrencePeriod
{
    param (
        [parameter(mandatory=$False,HelpMessage='The start date of recurrence.)')]
        [string]
        $from,
        [parameter(mandatory=$False,HelpMessage='The end date of recurrence.)')]
        [string]
        $to
    )

    process
    {
        return $([ExportRecurrencePeriod]$PSBoundParameters)
    }
}
class ExportSchedule
{
    [ExportRecurrencePeriod] $recurrencePeriod
    [ArgumentCompletions('Daily', 'Weekly', 'Monthly', 'Annually')]
    [string] $recurrence
    [ArgumentCompletions('Active', 'Inactive')]
    [string] $status
}
function New-AzureNativeTypeCostmanagementExportSchedule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Has start and end date of the recurrence. The start date must be in future. If present, the end date must be greater than start date.)')]
        [ExportRecurrencePeriod]
        $recurrencePeriod,
        [parameter(mandatory=$False,HelpMessage='The schedule recurrence.)')]
        [string]
        [ArgumentCompletions('Daily', 'Weekly', 'Monthly', 'Annually')]
        $recurrence,
        [parameter(mandatory=$False,HelpMessage='The status of the export''s schedule. If ''Inactive'', the export''s schedule is paused.)')]
        [string]
        [ArgumentCompletions('Active', 'Inactive')]
        $status
    )

    process
    {
        return $([ExportSchedule]$PSBoundParameters)
    }
}
class ExportDatasetConfiguration
{
    [string[]] $columns
}
function New-AzureNativeTypeCostmanagementExportDatasetConfiguration
{
    param (
        [parameter(mandatory=$False,HelpMessage='Array of column names to be included in the export. If not provided then the export will include all available columns. The available columns can vary by customer channel (see examples).)')]
        [string[]]
        $columns
    )

    process
    {
        return $([ExportDatasetConfiguration]$PSBoundParameters)
    }
}
class ExportDataset
{
    [ExportDatasetConfiguration] $configuration
    [ArgumentCompletions('Daily', 'Hourly')]
    [string] $granularity
}
function New-AzureNativeTypeCostmanagementExportDataset
{
    param (
        [parameter(mandatory=$False,HelpMessage='The export dataset configuration.)')]
        [ExportDatasetConfiguration]
        $configuration,
        [parameter(mandatory=$False,HelpMessage='The granularity of rows in the export. Currently only ''Daily'' is supported.)')]
        [string]
        [ArgumentCompletions('Daily', 'Hourly')]
        $granularity
    )

    process
    {
        return $([ExportDataset]$PSBoundParameters)
    }
}
class ExportTimePeriod
{
    [string] $from
    [string] $to
}
function New-AzureNativeTypeCostmanagementExportTimePeriod
{
    param (
        [parameter(mandatory=$False,HelpMessage='The start date for export data.)')]
        [string]
        $from,
        [parameter(mandatory=$False,HelpMessage='The end date for export data.)')]
        [string]
        $to
    )

    process
    {
        return $([ExportTimePeriod]$PSBoundParameters)
    }
}
class ExportDefinition
{
    [ArgumentCompletions('WeekToDate', 'MonthToDate', 'Custom')]
    [string] $timeframe
    [ArgumentCompletions('Usage', 'ActualCost', 'AmortizedCost')]
    [string] $type
    [ExportDataset] $dataSet
    [ExportTimePeriod] $timePeriod
}
function New-AzureNativeTypeCostmanagementExportDefinition
{
    param (
        [parameter(mandatory=$False,HelpMessage='The time frame for pulling data for the export. If custom, then a specific time period must be provided.)')]
        [string]
        [ArgumentCompletions('WeekToDate', 'MonthToDate', 'Custom')]
        $timeframe,
        [parameter(mandatory=$False,HelpMessage='The type of the export. Note that ''Usage'' is equivalent to ''ActualCost'' and is applicable to exports that do not yet provide data for charges or amortization for service reservations.)')]
        [string]
        [ArgumentCompletions('Usage', 'ActualCost', 'AmortizedCost')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The definition for data in the export.)')]
        [ExportDataset]
        $dataSet,
        [parameter(mandatory=$False,HelpMessage='Has time period for pulling data for the export.)')]
        [ExportTimePeriod]
        $timePeriod
    )

    process
    {
        return $([ExportDefinition]$PSBoundParameters)
    }
}
function New-AzureNativeCostmanagementExport
{
    [Alias('azure_native_costmanagement_export')]
    param (
        [parameter(mandatory=$False,HelpMessage='eTag of the resource. To handle concurrent update scenario, this field will be used to determine whether the user is updating the latest version or not.)')]
        [string]
        $eTag,
        [parameter(mandatory=$False,HelpMessage='Export Name.)')]
        [string]
        $exportName,
        [parameter(mandatory=$False,HelpMessage='Has delivery information for the export.)')]
        [ExportDeliveryInfo]
        $deliveryInfo,
        [parameter(mandatory=$False,HelpMessage='The format of the export being delivered. Currently only ''Csv'' is supported.)')]
        [string]
        [ArgumentCompletions('Csv')]
        $format,
        [parameter(mandatory=$False,HelpMessage='Has schedule information for the export.)')]
        [ExportSchedule]
        $schedule,
        [parameter(mandatory=$False,HelpMessage='The scope associated with export operations. This includes ''/subscriptions/{subscriptionId}/'' for subscription scope, ''/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for resourceGroup scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}'' for Billing Account scope and ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}'' for Department scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}'' for EnrollmentAccount scope, ''/providers/Microsoft.Management/managementGroups/{managementGroupId} for Management Group scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}'' for billingProfile scope, ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}/invoiceSections/{invoiceSectionId}'' for invoiceSection scope, and ''/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/customers/{customerId}'' specific for partners.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='Has the definition for the export.)')]
        [ExportDefinition]
        $definition,
        [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:costmanagement:Export")

        $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["definition"] = $definition
        $resource.properties["deliveryInfo"] = $deliveryInfo
        $resource.properties["scope"] = $scope

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class ScheduleProperties
{
    [string] $startDate
    [string[]] $daysOfWeek
    [string[]] $weeksOfMonth
    [int] $hourOfDay
    [ArgumentCompletions('Daily', 'Weekly', 'Monthly')]
    [string] $frequency
    [string] $endDate
    [int] $dayOfMonth
}
function New-AzureNativeTypeCostmanagementScheduleProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The start date and time of the scheduled action (UTC).)')]
        [string]
        $startDate,
        [parameter(mandatory=$False,HelpMessage='Day names in english on which cost analysis data will be emailed. This property is applicable when frequency is Weekly or Monthly.)')]
        $daysOfWeek,
        [parameter(mandatory=$False,HelpMessage='Weeks in which cost analysis data will be emailed. This property is applicable when frequency is Monthly and used in combination with daysOfWeek.)')]
        $weeksOfMonth,
        [parameter(mandatory=$False,HelpMessage='UTC time at which cost analysis data will be emailed.)')]
        [int]
        $hourOfDay,
        [parameter(mandatory=$False,HelpMessage='Frequency of the schedule.)')]
        [string]
        [ArgumentCompletions('Daily', 'Weekly', 'Monthly')]
        $frequency,
        [parameter(mandatory=$False,HelpMessage='The end date and time of the scheduled action (UTC).)')]
        [string]
        $endDate,
        [parameter(mandatory=$False,HelpMessage='UTC day on which cost analysis data will be emailed. Must be between 1 and 31. This property is applicable when frequency is Monthly and overrides weeksOfMonth or daysOfWeek.)')]
        [int]
        $dayOfMonth
    )

    process
    {
        return $([ScheduleProperties]$PSBoundParameters)
    }
}
class FileDestination
{
    [string[]] $fileFormats
}
function New-AzureNativeTypeCostmanagementFileDestination
{
    param (
        [parameter(mandatory=$False,HelpMessage='Destination of the view data. Currently only csv format is supported.)')]
        $fileFormats
    )

    process
    {
        return $([FileDestination]$PSBoundParameters)
    }
}
class NotificationProperties
{
    [string] $message
    [string[]] $to
    [string] $subject
}
function New-AzureNativeTypeCostmanagementNotificationProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Optional message to be added in the email. Length is limited to 250 characters.)')]
        [string]
        $message,
        [parameter(mandatory=$False,HelpMessage='Array of email addresses.)')]
        [string[]]
        $to,
        [parameter(mandatory=$False,HelpMessage='Subject of the email. Length is limited to 70 characters.)')]
        [string]
        $subject
    )

    process
    {
        return $([NotificationProperties]$PSBoundParameters)
    }
}
function New-AzureNativeCostmanagementScheduledActionByScope
{
    [Alias('azure_native_costmanagement_scheduledactionbyscope')]
    param (
        [parameter(mandatory=$False,HelpMessage='Schedule of the scheduled action.)')]
        [ScheduleProperties]
        $schedule,
        [parameter(mandatory=$False,HelpMessage='Kind of the scheduled action.)')]
        [string]
        [ArgumentCompletions('Email')]
        $kind,
        [parameter(mandatory=$False,HelpMessage='Cost analysis viewId used for scheduled action. For example, ''/providers/Microsoft.CostManagement/views/swaggerExample'')')]
        [string]
        $viewId,
        [parameter(mandatory=$False,HelpMessage='Scheduled action name.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='Cost Management scope like ''subscriptions/{subscriptionId}'' for subscription scope, ''subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for resourceGroup scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}'' for Billing Account scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}'' for Department scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}'' for EnrollmentAccount scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}'' for BillingProfile scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/invoiceSections/{invoiceSectionId}'' for InvoiceSection scope, ''/providers/Microsoft.CostManagement/externalBillingAccounts/{externalBillingAccountName}'' for ExternalBillingAccount scope, and ''/providers/Microsoft.CostManagement/externalSubscriptions/{externalSubscriptionName}'' for ExternalSubscription scope.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='Scheduled action name.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Destination format of the view data.)')]
        [FileDestination]
        $fileDestination,
        [parameter(mandatory=$False,HelpMessage='Status of the scheduled action.)')]
        [string]
        [ArgumentCompletions('Disabled', 'Enabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='Notification properties based on scheduled action kind.)')]
        [NotificationProperties]
        $notification,
        [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:costmanagement:ScheduledActionByScope")

        $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["displayName"] = $displayName
        $resource.properties["notification"] = $notification
        $resource.properties["schedule"] = $schedule
        $resource.properties["scope"] = $scope
        $resource.properties["status"] = $status
        $resource.properties["viewId"] = $viewId

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeCostmanagementReportByDepartment
{
    [Alias('azure_native_costmanagement_reportbydepartment')]
    param (
        [parameter(mandatory=$False,HelpMessage='Has schedule information for the report.)')]
        [ReportSchedule]
        $schedule,
        [parameter(mandatory=$False,HelpMessage='Report Name.)')]
        [string]
        $reportName,
        [parameter(mandatory=$False,HelpMessage='Has delivery information for the report.)')]
        [ReportDeliveryInfo]
        $deliveryInfo,
        [parameter(mandatory=$False,HelpMessage='The format of the report being delivered.)')]
        [string]
        [ArgumentCompletions('Csv')]
        $format,
        [parameter(mandatory=$False,HelpMessage='Department ID)')]
        [string]
        $departmentId,
        [parameter(mandatory=$False,HelpMessage='Has definition for the report.)')]
        [ReportDefinition]
        $definition,
        [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:costmanagement:ReportByDepartment")

        $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["definition"] = $definition
        $resource.properties["deliveryInfo"] = $deliveryInfo
        $resource.properties["departmentId"] = $departmentId

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeCostmanagementSetting
{
    [Alias('azure_native_costmanagement_setting')]
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the setting. Allowed values: myscope)')]
        [string]
        $settingName,
        [parameter(mandatory=$False,HelpMessage='Sets the default scope the current user will see when they sign into Azure Cost Management in the Azure portal.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='Indicates what scope Cost Management in the Azure portal should default to. Allowed values: LastUsed.)')]
        [string]
        $startOn,
        [parameter(mandatory=$False,HelpMessage='Array of scopes with additional details used by Cost Management in the Azure portal.)')]
        $cache,
        [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:costmanagement:Setting")

        $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["scope"] = $scope

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeCostmanagementReportByResourceGroupName
{
    [Alias('azure_native_costmanagement_reportbyresourcegroupname')]
    param (
        [parameter(mandatory=$False,HelpMessage='Azure Resource Group Name.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Has schedule information for the report.)')]
        [ReportSchedule]
        $schedule,
        [parameter(mandatory=$False,HelpMessage='Report Name.)')]
        [string]
        $reportName,
        [parameter(mandatory=$False,HelpMessage='Has delivery information for the report.)')]
        [ReportDeliveryInfo]
        $deliveryInfo,
        [parameter(mandatory=$False,HelpMessage='The format of the report being delivered.)')]
        [string]
        [ArgumentCompletions('Csv')]
        $format,
        [parameter(mandatory=$False,HelpMessage='Has definition for the report.)')]
        [ReportDefinition]
        $definition,
        [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:costmanagement:ReportByResourceGroupName")

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class CostAllocationProportion
{
    [string] $name
    [int] $percentage
}
function New-AzureNativeTypeCostmanagementCostAllocationProportion
{
    param (
        [parameter(mandatory=$False,HelpMessage='Target resource for cost allocation)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Percentage of source cost to allocate to this resource. This value can be specified to two decimal places and the total percentage of all resources in this rule must sum to 100.00.)')]
        [int]
        $percentage
    )

    process
    {
        return $([CostAllocationProportion]$PSBoundParameters)
    }
}
class TargetCostAllocationResource
{
    [string] $name
    [ArgumentCompletions('Dimension', 'Tag')]
    [string] $resourceType
    [ArgumentCompletions('FixedProportion')]
    [string] $policyType
    [CostAllocationProportion[]] $values
}
function New-AzureNativeTypeCostmanagementTargetCostAllocationResource
{
    param (
        [parameter(mandatory=$False,HelpMessage='If resource type is dimension, this must be either ResourceGroupName or SubscriptionId. If resource type is tag, this must be a valid Azure tag)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Type of resources contained in this cost allocation rule)')]
        [string]
        [ArgumentCompletions('Dimension', 'Tag')]
        $resourceType,
        [parameter(mandatory=$False,HelpMessage='Method of cost allocation for the rule)')]
        [string]
        [ArgumentCompletions('FixedProportion')]
        $policyType,
        [parameter(mandatory=$False,HelpMessage='Target resources for cost allocation. This list cannot contain more than 25 values.)')]
        $values
    )

    process
    {
        return $([TargetCostAllocationResource]$PSBoundParameters)
    }
}
class SourceCostAllocationResource
{
    [string] $name
    [ArgumentCompletions('Dimension', 'Tag')]
    [string] $resourceType
    [string[]] $values
}
function New-AzureNativeTypeCostmanagementSourceCostAllocationResource
{
    param (
        [parameter(mandatory=$False,HelpMessage='If resource type is dimension, this must be either ResourceGroupName or SubscriptionId. If resource type is tag, this must be a valid Azure tag)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Type of resources contained in this cost allocation rule)')]
        [string]
        [ArgumentCompletions('Dimension', 'Tag')]
        $resourceType,
        [parameter(mandatory=$False,HelpMessage='Source Resources for cost allocation. This list cannot contain more than 25 values.)')]
        [string[]]
        $values
    )

    process
    {
        return $([SourceCostAllocationResource]$PSBoundParameters)
    }
}
class CostAllocationRuleDetails
{
    [TargetCostAllocationResource[]] $targetResources
    [SourceCostAllocationResource[]] $sourceResources
}
function New-AzureNativeTypeCostmanagementCostAllocationRuleDetails
{
    param (
        [parameter(mandatory=$False,HelpMessage='Target resources for cost allocation. At this time, this list can contain no more than one element.)')]
        $targetResources,
        [parameter(mandatory=$False,HelpMessage='Source resources for cost allocation. At this time, this list can contain no more than one element.)')]
        $sourceResources
    )

    process
    {
        return $([CostAllocationRuleDetails]$PSBoundParameters)
    }
}
class CostAllocationRuleProperties
{
    [ArgumentCompletions('NotActive', 'Active', 'Processing')]
    [string] $status
    [CostAllocationRuleDetails] $details
    [string] $description
}
function New-AzureNativeTypeCostmanagementCostAllocationRuleProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Status of the rule)')]
        [string]
        [ArgumentCompletions('NotActive', 'Active', 'Processing')]
        $status,
        [parameter(mandatory=$False,HelpMessage='Resource information for the cost allocation rule)')]
        [CostAllocationRuleDetails]
        $details,
        [parameter(mandatory=$False,HelpMessage='Description of a cost allocation rule.)')]
        [string]
        $description
    )

    process
    {
        return $([CostAllocationRuleProperties]$PSBoundParameters)
    }
}
function New-AzureNativeCostmanagementCostAllocationRule
{
    [Alias('azure_native_costmanagement_costallocationrule')]
    param (
        [parameter(mandatory=$False,HelpMessage='Cost allocation rule properties)')]
        [CostAllocationRuleProperties]
        $properties,
        [parameter(mandatory=$False,HelpMessage='Cost allocation rule name. The name cannot include spaces or any non alphanumeric characters other than ''_'' and ''-''. The max length is 260 characters.)')]
        [string]
        $ruleName,
        [parameter(mandatory=$False,HelpMessage='BillingAccount ID)')]
        [string]
        $billingAccountId,
        [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:costmanagement:CostAllocationRule")

        $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["billingAccountId"] = $billingAccountId

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeCostmanagementScheduledAction
{
    [Alias('azure_native_costmanagement_scheduledaction')]
    param (
        [parameter(mandatory=$False,HelpMessage='Schedule of the scheduled action.)')]
        [ScheduleProperties]
        $schedule,
        [parameter(mandatory=$False,HelpMessage='Kind of the scheduled action.)')]
        [string]
        [ArgumentCompletions('Email')]
        $kind,
        [parameter(mandatory=$False,HelpMessage='Cost analysis viewId used for scheduled action. For example, ''/providers/Microsoft.CostManagement/views/swaggerExample'')')]
        [string]
        $viewId,
        [parameter(mandatory=$False,HelpMessage='Scheduled action name.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='Cost Management scope like ''subscriptions/{subscriptionId}'' for subscription scope, ''subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for resourceGroup scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}'' for Billing Account scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}'' for Department scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}'' for EnrollmentAccount scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}'' for BillingProfile scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/invoiceSections/{invoiceSectionId}'' for InvoiceSection scope, ''/providers/Microsoft.CostManagement/externalBillingAccounts/{externalBillingAccountName}'' for ExternalBillingAccount scope, and ''/providers/Microsoft.CostManagement/externalSubscriptions/{externalSubscriptionName}'' for ExternalSubscription scope.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='Scheduled action name.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Destination format of the view data.)')]
        [FileDestination]
        $fileDestination,
        [parameter(mandatory=$False,HelpMessage='Status of the scheduled action.)')]
        [string]
        [ArgumentCompletions('Disabled', 'Enabled')]
        $status,
        [parameter(mandatory=$False,HelpMessage='Notification properties based on scheduled action kind.)')]
        [NotificationProperties]
        $notification,
        [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:costmanagement:ScheduledAction")

        $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["displayName"] = $displayName
        $resource.properties["notification"] = $notification
        $resource.properties["schedule"] = $schedule
        $resource.properties["status"] = $status
        $resource.properties["viewId"] = $viewId

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeCostmanagementViewByScope
{
    [Alias('azure_native_costmanagement_viewbyscope')]
    param (
        [parameter(mandatory=$False,HelpMessage='User input name of the view. Required.)')]
        [string]
        $displayName,
        [parameter(mandatory=$False,HelpMessage='The type of the report. Usage represents actual usage, forecast represents forecasted data and UsageAndForecast represents both usage and forecasted data. Actual usage and forecasted data can be differentiated based on dates.)')]
        [string]
        [ArgumentCompletions('Usage')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The time frame for pulling data for the report. If custom, then a specific time period must be provided.)')]
        [string]
        [ArgumentCompletions('WeekToDate', 'MonthToDate', 'YearToDate', 'Custom')]
        $timeframe,
        [parameter(mandatory=$False,HelpMessage='Has time period for pulling data for the report.)')]
        [ReportConfigTimePeriod]
        $timePeriod,
        [parameter(mandatory=$False,HelpMessage='Metric to use when displaying costs.)')]
        [string]
        [ArgumentCompletions('ActualCost', 'AmortizedCost', 'AHUB')]
        $metric,
        [parameter(mandatory=$False,HelpMessage='List of KPIs to show in Cost Analysis UI.)')]
        $kpis,
        [parameter(mandatory=$False,HelpMessage='Has definition for data in this report config.)')]
        [ReportConfigDataset]
        $dataSet,
        [parameter(mandatory=$False,HelpMessage='Show costs accumulated over time.)')]
        [string]
        [ArgumentCompletions('true', 'false')]
        $accumulated,
        [parameter(mandatory=$False,HelpMessage='Cost Management scope to save the view on. This includes ''subscriptions/{subscriptionId}'' for subscription scope, ''subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}'' for resourceGroup scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}'' for Billing Account scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}'' for Department scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}'' for EnrollmentAccount scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}'' for BillingProfile scope, ''providers/Microsoft.Billing/billingAccounts/{billingAccountId}/invoiceSections/{invoiceSectionId}'' for InvoiceSection scope, ''providers/Microsoft.Management/managementGroups/{managementGroupId}'' for Management Group scope, ''/providers/Microsoft.CostManagement/externalBillingAccounts/{externalBillingAccountName}'' for ExternalBillingAccount scope, and ''/providers/Microsoft.CostManagement/externalSubscriptions/{externalSubscriptionName}'' for ExternalSubscription scope.)')]
        [string]
        $scope,
        [parameter(mandatory=$False,HelpMessage='View name)')]
        [string]
        $viewName,
        [parameter(mandatory=$False,HelpMessage='Configuration of 3 sub-views in the Cost Analysis UI.)')]
        $pivots,
        [parameter(mandatory=$False,HelpMessage='Chart type of the main view in Cost Analysis. Required.)')]
        [string]
        [ArgumentCompletions('Area', 'Line', 'StackedColumn', 'GroupedColumn', 'Table')]
        $chart,
        [parameter(mandatory=$False,HelpMessage='eTag of the resource. To handle concurrent update scenario, this field will be used to determine whether the user is updating the latest version or not.)')]
        [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:costmanagement:ViewByScope")

        $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["scope"] = $scope
        $resource.properties["timeframe"] = $timeframe
        $resource.properties["type"] = $type

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

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

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

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

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

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

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

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

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

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

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