pspulumiyaml.azurenative.storage.psm1

using module @{ ModuleName = "PSPulumiYaml"; ModuleVersion = "0.0.3"; GUID = "909344e0-a08f-45f6-8177-80e36bb2ba58" }
function Invoke-AzureNativeFunctionStorageGetQueueServiceProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Queue Service within the specified storage account. Queue Service Name must be ''default'')')]
        [string]
        $queueServiceName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["queueServiceName"] = $queueServiceName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getQueueServiceProperties -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetObjectReplicationPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The ID of object replication policy or ''default'' if the policy ID is unknown.)')]
        [string]
        $objectReplicationPolicyId,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["objectReplicationPolicyId"] = $objectReplicationPolicyId
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getObjectReplicationPolicy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetFileShare
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Optional, used to expand the properties within share''s properties.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the file share within the specified storage account. File share names must be between 3 and 63 characters in length and use numbers, lower-case letters and dash (-) only. Every dash (-) character must be immediately preceded and followed by a letter or number.)')]
        [string]
        $shareName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["shareName"] = $shareName

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getFileShare -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetEncryptionScope
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the encryption scope within the specified storage account. Encryption scope names must be between 3 and 63 characters in length and use numbers, lower-case letters and dash (-) only. Every dash (-) character must be immediately preceded and followed by a letter or number.)')]
        [string]
        $encryptionScopeName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["encryptionScopeName"] = $encryptionScopeName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getEncryptionScope -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetBlobContainerImmutabilityPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the blob container within the specified storage account. Blob container names must be between 3 and 63 characters in length and use numbers, lower-case letters and dash (-) only. Every dash (-) character must be immediately preceded and followed by a letter or number.)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the blob container immutabilityPolicy within the specified storage account. ImmutabilityPolicy Name must be ''default'')')]
        [string]
        $immutabilityPolicyName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["containerName"] = $containerName
        $arguments["immutabilityPolicyName"] = $immutabilityPolicyName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getBlobContainerImmutabilityPolicy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetTableServiceProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Table Service within the specified storage account. Table Service Name must be ''default'')')]
        [string]
        $tableServiceName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["tableServiceName"] = $tableServiceName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getTableServiceProperties -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetFileServiceProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the file Service within the specified storage account. File Service Name must be "default")')]
        [string]
        $fileServicesName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["fileServicesName"] = $fileServicesName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getFileServiceProperties -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetPrivateEndpointConnection
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection associated with the Azure resource)')]
        [string]
        $privateEndpointConnectionName
    )

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getPrivateEndpointConnection -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetBlobContainer
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the blob container within the specified storage account. Blob container names must be between 3 and 63 characters in length and use numbers, lower-case letters and dash (-) only. Every dash (-) character must be immediately preceded and followed by a letter or number.)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["containerName"] = $containerName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getBlobContainer -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetTable
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A table name must be unique within a storage account and must be between 3 and 63 characters.The name must comprise of only alphanumeric characters and it cannot begin with a numeric character.)')]
        [string]
        $tableName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["tableName"] = $tableName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getTable -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetQueue
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='A queue name must be unique within a storage account and must be between 3 and 63 characters.The name must comprise of lowercase alphanumeric and dash(-) characters only, it should begin and end with an alphanumeric character and it cannot have two consecutive dash(-) characters.)')]
        [string]
        $queueName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["queueName"] = $queueName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getQueue -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageListLocalUserKeys
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of local user. The username must contain lowercase letters and numbers only. It must be unique only within the storage account.)')]
        [string]
        $username,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["username"] = $username

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:listLocalUserKeys -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetStorageAccount
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='May be used to expand the properties within account''s properties. By default, data is not included when fetching properties. Currently we only support geoReplicationStats and blobRestoreStatus.)')]
        [string]
        $expand
    )

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

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getStorageAccount -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageListStorageAccountKeys
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Specifies type of the key to be listed. Possible value is kerb.)')]
        [string]
        $expand
    )

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

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:listStorageAccountKeys -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetBlobInventoryPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the storage account blob inventory policy. It should always be ''default'')')]
        [string]
        $blobInventoryPolicyName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["blobInventoryPolicyName"] = $blobInventoryPolicyName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getBlobInventoryPolicy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetLocalUser
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of local user. The username must contain lowercase letters and numbers only. It must be unique only within the storage account.)')]
        [string]
        $username,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["username"] = $username

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getLocalUser -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageListStorageAccountSAS
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The signed services accessible with the account SAS. Possible values include: Blob (b), Queue (q), Table (t), File (f).)')]
        [string]
        [ArgumentCompletions('b', 'q', 't', 'f')]
        $services,
        [parameter(mandatory=$False,HelpMessage='The signed resource types that are accessible with the account SAS. Service (s): Access to service-level APIs; Container (c): Access to container-level APIs; Object (o): Access to object-level APIs for blobs, queue messages, table entities, and files.)')]
        [string]
        [ArgumentCompletions('s', 'c', 'o')]
        $resourceTypes,
        [parameter(mandatory=$False,HelpMessage='The key to sign the account SAS token with.)')]
        [string]
        $keyToSign,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The protocol permitted for a request made with the account SAS.)')]
        $protocols,
        [parameter(mandatory=$False,HelpMessage='The signed permissions for the account SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).)')]
        [string]
        [ArgumentCompletions('r', 'd', 'w', 'l', 'a', 'c', 'u', 'p')]
        $permissions,
        [parameter(mandatory=$False,HelpMessage='The time at which the SAS becomes valid.)')]
        [string]
        $sharedAccessStartTime,
        [parameter(mandatory=$False,HelpMessage='An IP address or a range of IP addresses from which to accept requests.)')]
        [string]
        $iPAddressOrRange,
        [parameter(mandatory=$False,HelpMessage='The time at which the shared access signature becomes invalid.)')]
        [string]
        $sharedAccessExpiryTime
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["permissions"] = $permissions
        $arguments["resourceGroupName"] = $resourceGroupName
        $arguments["resourceTypes"] = $resourceTypes
        $arguments["services"] = $services
        $arguments["sharedAccessExpiryTime"] = $sharedAccessExpiryTime

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

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

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

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:listStorageAccountSAS -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetManagementPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Storage Account Management Policy. It should always be ''default'')')]
        [string]
        $managementPolicyName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["managementPolicyName"] = $managementPolicyName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getManagementPolicy -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetBlobServiceProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the blob Service within the specified storage account. Blob Service Name must be ''default'')')]
        [string]
        $blobServicesName
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["blobServicesName"] = $blobServicesName
        $arguments["resourceGroupName"] = $resourceGroupName

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:getBlobServiceProperties -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageListStorageAccountServiceSAS
{
    param (
        [parameter(mandatory=$False,HelpMessage='The time at which the SAS becomes valid.)')]
        [string]
        $sharedAccessStartTime,
        [parameter(mandatory=$False,HelpMessage='The response header override for cache control.)')]
        [string]
        $cacheControl,
        [parameter(mandatory=$False,HelpMessage='The key to sign the account SAS token with.)')]
        [string]
        $keyToSign,
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A unique value up to 64 characters in length that correlates to an access policy specified for the container, queue, or table.)')]
        [string]
        $identifier,
        [parameter(mandatory=$False,HelpMessage='The response header override for content language.)')]
        [string]
        $contentLanguage,
        [parameter(mandatory=$False,HelpMessage='An IP address or a range of IP addresses from which to accept requests.)')]
        [string]
        $iPAddressOrRange,
        [parameter(mandatory=$False,HelpMessage='The signed permissions for the service SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).)')]
        [string]
        [ArgumentCompletions('r', 'd', 'w', 'l', 'a', 'c', 'u', 'p')]
        $permissions,
        [parameter(mandatory=$False,HelpMessage='The start of row key.)')]
        [string]
        $rowKeyStart,
        [parameter(mandatory=$False,HelpMessage='The response header override for content disposition.)')]
        [string]
        $contentDisposition,
        [parameter(mandatory=$False,HelpMessage='The end of partition key.)')]
        [string]
        $partitionKeyEnd,
        [parameter(mandatory=$False,HelpMessage='The response header override for content type.)')]
        [string]
        $contentType,
        [parameter(mandatory=$False,HelpMessage='The end of row key.)')]
        [string]
        $rowKeyEnd,
        [parameter(mandatory=$False,HelpMessage='The signed services accessible with the service SAS. Possible values include: Blob (b), Container (c), File (f), Share (s).)')]
        [string]
        [ArgumentCompletions('b', 'c', 'f', 's')]
        $resource,
        [parameter(mandatory=$False,HelpMessage='The time at which the shared access signature becomes invalid.)')]
        [string]
        $sharedAccessExpiryTime,
        [parameter(mandatory=$False,HelpMessage='The protocol permitted for a request made with the account SAS.)')]
        $protocols,
        [parameter(mandatory=$False,HelpMessage='The canonical path to the signed resource.)')]
        [string]
        $canonicalizedResource,
        [parameter(mandatory=$False,HelpMessage='The response header override for content encoding.)')]
        [string]
        $contentEncoding,
        [parameter(mandatory=$False,HelpMessage='The start of partition key.)')]
        [string]
        $partitionKeyStart
    )

    process
    {
        $arguments = @{}
        $arguments["accountName"] = $accountName
        $arguments["canonicalizedResource"] = $canonicalizedResource
        $arguments["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:listStorageAccountServiceSAS -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class DeleteRetentionPolicy
{
    [bool] $enabled
    [int] $days
}
function New-AzureNativeTypeStorageDeleteRetentionPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='Indicates whether DeleteRetentionPolicy is enabled.)')]
        [bool]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='Indicates the number of days that the deleted item should be retained. The minimum specified value can be 1 and the maximum value can be 365.)')]
        [int]
        $days
    )

    process
    {
        return $([DeleteRetentionPolicy]$PSBoundParameters)
    }
}
class CorsRule
{
    [string[]] $exposedHeaders
    [string[]] $allowedOrigins
    [string[]] $allowedMethods
    [string[]] $allowedHeaders
    [int] $maxAgeInSeconds
}
function New-AzureNativeTypeStorageCorsRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Required if CorsRule element is present. A list of response headers to expose to CORS clients.)')]
        [string[]]
        $exposedHeaders,
        [parameter(mandatory=$False,HelpMessage='Required if CorsRule element is present. A list of origin domains that will be allowed via CORS, or "*" to allow all domains)')]
        [string[]]
        $allowedOrigins,
        [parameter(mandatory=$False,HelpMessage='Required if CorsRule element is present. A list of HTTP methods that are allowed to be executed by the origin.)')]
        [string[]]
        $allowedMethods,
        [parameter(mandatory=$False,HelpMessage='Required if CorsRule element is present. A list of headers allowed to be part of the cross-origin request.)')]
        [string[]]
        $allowedHeaders,
        [parameter(mandatory=$False,HelpMessage='Required if CorsRule element is present. The number of seconds that the client/browser should cache a preflight response.)')]
        [int]
        $maxAgeInSeconds
    )

    process
    {
        return $([CorsRule]$PSBoundParameters)
    }
}
class CorsRules
{
    [CorsRule[]] $corsRules
}
function New-AzureNativeTypeStorageCorsRules
{
    param (
        [parameter(mandatory=$False,HelpMessage='The List of CORS rules. You can include up to five CorsRule elements in the request. )')]
        $corsRules
    )

    process
    {
        return $([CorsRules]$PSBoundParameters)
    }
}
class Multichannel
{
    [bool] $enabled
}
function New-AzureNativeTypeStorageMultichannel
{
    param (
        [parameter(mandatory=$False,HelpMessage='Indicates whether multichannel is enabled)')]
        [bool]
        $enabled
    )

    process
    {
        return $([Multichannel]$PSBoundParameters)
    }
}
class SmbSetting
{
    [string] $channelEncryption
    [string] $kerberosTicketEncryption
    [Multichannel] $multichannel
    [string] $versions
    [string] $authenticationMethods
}
function New-AzureNativeTypeStorageSmbSetting
{
    param (
        [parameter(mandatory=$False,HelpMessage='SMB channel encryption supported by server. Valid values are AES-128-CCM, AES-128-GCM, AES-256-GCM. Should be passed as a string with delimiter '';''.)')]
        [string]
        $channelEncryption,
        [parameter(mandatory=$False,HelpMessage='Kerberos ticket encryption supported by server. Valid values are RC4-HMAC, AES-256. Should be passed as a string with delimiter '';'')')]
        [string]
        $kerberosTicketEncryption,
        [parameter(mandatory=$False,HelpMessage='Multichannel setting. Applies to Premium FileStorage only.)')]
        [Multichannel]
        $multichannel,
        [parameter(mandatory=$False,HelpMessage='SMB protocol versions supported by server. Valid values are SMB2.1, SMB3.0, SMB3.1.1. Should be passed as a string with delimiter '';''.)')]
        [string]
        $versions,
        [parameter(mandatory=$False,HelpMessage='SMB authentication methods supported by server. Valid values are NTLMv2, Kerberos. Should be passed as a string with delimiter '';''.)')]
        [string]
        $authenticationMethods
    )

    process
    {
        return $([SmbSetting]$PSBoundParameters)
    }
}
class ProtocolSettings
{
    [SmbSetting] $smb
}
function New-AzureNativeTypeStorageProtocolSettings
{
    param (
        [parameter(mandatory=$False,HelpMessage='Setting for SMB protocol)')]
        [SmbSetting]
        $smb
    )

    process
    {
        return $([ProtocolSettings]$PSBoundParameters)
    }
}
function New-AzureNativeStorageFileServiceProperties
{
    [Alias('azure_native_storage_fileserviceproperties')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the file Service within the specified storage account. File Service Name must be "default")')]
        [string]
        $fileServicesName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The file service properties for share soft delete.)')]
        [DeleteRetentionPolicy]
        $shareDeleteRetentionPolicy,
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='Specifies CORS rules for the File service. You can include up to five CorsRule elements in the request. If no CorsRule elements are included in the request body, all CORS rules will be deleted, and CORS will be disabled for the File service.)')]
        [CorsRules]
        $cors,
        [parameter(mandatory=$False,HelpMessage='Protocol settings for file service)')]
        [ProtocolSettings]
        $protocolSettings,
        [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:storage:FileServiceProperties")

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageFileShare
{
    [Alias('azure_native_storage_fileshare')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the file share within the specified storage account. File share names must be between 3 and 63 characters in length and use numbers, lower-case letters and dash (-) only. Every dash (-) character must be immediately preceded and followed by a letter or number.)')]
        [string]
        $shareName,
        [parameter(mandatory=$False,HelpMessage='The authentication protocol that is used for the file share. Can only be specified when creating a share.)')]
        [string]
        [ArgumentCompletions('SMB', 'NFS')]
        $enabledProtocols,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A name-value pair to associate with the share as metadata.)')]
        [hashtable]
        $metadata,
        [parameter(mandatory=$False,HelpMessage='Optional, used to create a snapshot.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='Access tier for specific share. GpV2 account can choose between TransactionOptimized (default), Hot, and Cool. FileStorage account can choose Premium.)')]
        [string]
        [ArgumentCompletions('TransactionOptimized', 'Hot', 'Cool', 'Premium')]
        $accessTier,
        [parameter(mandatory=$False,HelpMessage='The maximum size of the share, in gigabytes. Must be greater than 0, and less than or equal to 5TB (5120). For Large File Shares, the maximum size is 102400.)')]
        [int]
        $shareQuota,
        [parameter(mandatory=$False,HelpMessage='The property is for NFS share only. The default is NoRootSquash.)')]
        [string]
        [ArgumentCompletions('NoRootSquash', 'RootSquash', 'AllSquash')]
        $rootSquash,
        [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:storage:FileShare")

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class BlobInventoryPolicyFilter
{
    [string[]] $prefixMatch
    [string[]] $blobTypes
    [bool] $includeBlobVersions
    [bool] $includeSnapshots
}
function New-AzureNativeTypeStorageBlobInventoryPolicyFilter
{
    param (
        [parameter(mandatory=$False,HelpMessage='An array of strings for blob prefixes to be matched.)')]
        [string[]]
        $prefixMatch,
        [parameter(mandatory=$False,HelpMessage='An array of predefined enum values. Valid values include blockBlob, appendBlob, pageBlob. Hns accounts does not support pageBlobs.)')]
        [string[]]
        $blobTypes,
        [parameter(mandatory=$False,HelpMessage='Includes blob versions in blob inventory when value set to true.)')]
        [bool]
        $includeBlobVersions,
        [parameter(mandatory=$False,HelpMessage='Includes blob snapshots in blob inventory when value set to true.)')]
        [bool]
        $includeSnapshots
    )

    process
    {
        return $([BlobInventoryPolicyFilter]$PSBoundParameters)
    }
}
class BlobInventoryPolicyDefinition
{
    [BlobInventoryPolicyFilter] $filters
}
function New-AzureNativeTypeStorageBlobInventoryPolicyDefinition
{
    param (
        [parameter(mandatory=$False,HelpMessage='An object that defines the filter set.)')]
        [BlobInventoryPolicyFilter]
        $filters
    )

    process
    {
        return $([BlobInventoryPolicyDefinition]$PSBoundParameters)
    }
}
class BlobInventoryPolicyRule
{
    [string] $name
    [BlobInventoryPolicyDefinition] $definition
    [bool] $enabled
}
function New-AzureNativeTypeStorageBlobInventoryPolicyRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='A rule name can contain any combination of alpha numeric characters. Rule name is case-sensitive. It must be unique within a policy.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='An object that defines the blob inventory policy rule.)')]
        [BlobInventoryPolicyDefinition]
        $definition,
        [parameter(mandatory=$False,HelpMessage='Rule is enabled when set to true.)')]
        [bool]
        $enabled
    )

    process
    {
        return $([BlobInventoryPolicyRule]$PSBoundParameters)
    }
}
class BlobInventoryPolicySchema
{
    [string] $destination
    [ArgumentCompletions('Inventory')]
    [string] $type
    [BlobInventoryPolicyRule[]] $rules
    [bool] $enabled
}
function New-AzureNativeTypeStorageBlobInventoryPolicySchema
{
    param (
        [parameter(mandatory=$False,HelpMessage='Container name where blob inventory files are stored. Must be pre-created.)')]
        [string]
        $destination,
        [parameter(mandatory=$False,HelpMessage='The valid value is Inventory)')]
        [string]
        [ArgumentCompletions('Inventory')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The storage account blob inventory policy rules. The rule is applied when it is enabled.)')]
        $rules,
        [parameter(mandatory=$False,HelpMessage='Policy is enabled if set to true.)')]
        [bool]
        $enabled
    )

    process
    {
        return $([BlobInventoryPolicySchema]$PSBoundParameters)
    }
}
function New-AzureNativeStorageBlobInventoryPolicy
{
    [Alias('azure_native_storage_blobinventorypolicy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the storage account blob inventory policy. It should always be ''default'')')]
        [string]
        $blobInventoryPolicyName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The storage account blob inventory policy object. It is composed of policy rules.)')]
        [BlobInventoryPolicySchema]
        $policy,
        [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:storage:BlobInventoryPolicy")

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageObjectReplicationPolicy
{
    [Alias('azure_native_storage_objectreplicationpolicy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The storage account object replication rules.)')]
        $rules,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='Required. Destination account name.)')]
        [string]
        $destinationAccount,
        [parameter(mandatory=$False,HelpMessage='Required. Source account name.)')]
        [string]
        $sourceAccount,
        [parameter(mandatory=$False,HelpMessage='The ID of object replication policy or ''default'' if the policy ID is unknown.)')]
        [string]
        $objectReplicationPolicyId,
        [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:storage:ObjectReplicationPolicy")

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class RestorePolicyProperties
{
    [bool] $enabled
    [int] $days
}
function New-AzureNativeTypeStorageRestorePolicyProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Blob restore is enabled if set to true.)')]
        [bool]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='how long this blob can be restored. It should be great than zero and less than DeleteRetentionPolicy.days.)')]
        [int]
        $days
    )

    process
    {
        return $([RestorePolicyProperties]$PSBoundParameters)
    }
}
class LastAccessTimeTrackingPolicy
{
    [ArgumentCompletions('AccessTimeTracking')]
    [string] $name
    [int] $trackingGranularityInDays
    [string[]] $blobType
    [bool] $enable
}
function New-AzureNativeTypeStorageLastAccessTimeTrackingPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='Name of the policy. The valid value is AccessTimeTracking. This field is currently read only)')]
        [string]
        [ArgumentCompletions('AccessTimeTracking')]
        $name,
        [parameter(mandatory=$False,HelpMessage='The field specifies blob object tracking granularity in days, typically how often the blob object should be tracked.This field is currently read only with value as 1)')]
        [int]
        $trackingGranularityInDays,
        [parameter(mandatory=$False,HelpMessage='An array of predefined supported blob types. Only blockBlob is the supported value. This field is currently read only)')]
        [string[]]
        $blobType,
        [parameter(mandatory=$False,HelpMessage='When set to true last access time based tracking is enabled.)')]
        [bool]
        $enable
    )

    process
    {
        return $([LastAccessTimeTrackingPolicy]$PSBoundParameters)
    }
}
class ChangeFeed
{
    [bool] $enabled
    [int] $retentionInDays
}
function New-AzureNativeTypeStorageChangeFeed
{
    param (
        [parameter(mandatory=$False,HelpMessage='Indicates whether change feed event logging is enabled for the Blob service.)')]
        [bool]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='Indicates the duration of changeFeed retention in days. Minimum value is 1 day and maximum value is 146000 days (400 years). A null value indicates an infinite retention of the change feed.)')]
        [int]
        $retentionInDays
    )

    process
    {
        return $([ChangeFeed]$PSBoundParameters)
    }
}
function New-AzureNativeStorageBlobServiceProperties
{
    [Alias('azure_native_storage_blobserviceproperties')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The blob service properties for container soft delete.)')]
        [DeleteRetentionPolicy]
        $containerDeleteRetentionPolicy,
        [parameter(mandatory=$False,HelpMessage='Deprecated in favor of isVersioningEnabled property.)')]
        [bool]
        $automaticSnapshotPolicyEnabled,
        [parameter(mandatory=$False,HelpMessage='Specifies CORS rules for the Blob service. You can include up to five CorsRule elements in the request. If no CorsRule elements are included in the request body, all CORS rules will be deleted, and CORS will be disabled for the Blob service.)')]
        [CorsRules]
        $cors,
        [parameter(mandatory=$False,HelpMessage='The blob service properties for blob restore policy.)')]
        [RestorePolicyProperties]
        $restorePolicy,
        [parameter(mandatory=$False,HelpMessage='The blob service property to configure last access time based tracking policy.)')]
        [LastAccessTimeTrackingPolicy]
        $lastAccessTimeTrackingPolicy,
        [parameter(mandatory=$False,HelpMessage='The name of the blob Service within the specified storage account. Blob Service Name must be ''default'')')]
        [string]
        $blobServicesName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Versioning is enabled if set to true.)')]
        [bool]
        $isVersioningEnabled,
        [parameter(mandatory=$False,HelpMessage='The blob service properties for blob soft delete.)')]
        [DeleteRetentionPolicy]
        $deleteRetentionPolicy,
        [parameter(mandatory=$False,HelpMessage='The blob service properties for change feed events.)')]
        [ChangeFeed]
        $changeFeed,
        [parameter(mandatory=$False,HelpMessage='DefaultServiceVersion indicates the default version to use for requests to the Blob service if an incoming request''s version is not specified. Possible values include version 2008-10-27 and all more recent versions.)')]
        [string]
        $defaultServiceVersion,
        [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:storage:BlobServiceProperties")

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageBlob
{
    [Alias('azure_native_storage_blob')]
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the storage account in which to create the storage container.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='A map of custom blob metadata.)')]
        [hashtable]
        $metadata,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The MD5 sum of the blob contents. Cannot be defined if blob type is Append.)')]
        [string]
        $contentMd5,
        [parameter(mandatory=$False,HelpMessage='The content type of the storage blob. Defaults to `application/octet-stream`.)')]
        [string]
        $contentType,
        [parameter(mandatory=$False,HelpMessage='The access tier of the storage blob.)')]
        $accessTier,
        [parameter(mandatory=$False,HelpMessage='The name of the storage container in which this blob should be created.)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='The name of the storage blob. Must be unique within the storage container the blob is located.)')]
        [string]
        $blobName,
        [parameter(mandatory=$False,HelpMessage='An asset to copy to the blob contents. This field cannot be specified for Append blobs.)')]
        $source,
        [parameter(mandatory=$False,HelpMessage='The type of the storage blob to be created. Defaults to ''Block''.)')]
        $type,
        [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:storage:Blob")

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class KeyVaultProperties
{
    [string] $keyVersion
    [string] $keyName
    [string] $keyVaultUri
}
function New-AzureNativeTypeStorageKeyVaultProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The version of KeyVault key.)')]
        [string]
        $keyVersion,
        [parameter(mandatory=$False,HelpMessage='The name of KeyVault key.)')]
        [string]
        $keyName,
        [parameter(mandatory=$False,HelpMessage='The Uri of KeyVault.)')]
        [string]
        $keyVaultUri
    )

    process
    {
        return $([KeyVaultProperties]$PSBoundParameters)
    }
}
class EncryptionService
{
    [bool] $enabled
    [ArgumentCompletions('Service', 'Account')]
    [string] $keyType
}
function New-AzureNativeTypeStorageEncryptionService
{
    param (
        [parameter(mandatory=$False,HelpMessage='A boolean indicating whether or not the service encrypts the data as it is stored.)')]
        [bool]
        $enabled,
        [parameter(mandatory=$False,HelpMessage='Encryption key type to be used for the encryption service. ''Account'' key type implies that an account-scoped encryption key will be used. ''Service'' key type implies that a default service key is used.)')]
        [string]
        [ArgumentCompletions('Service', 'Account')]
        $keyType
    )

    process
    {
        return $([EncryptionService]$PSBoundParameters)
    }
}
class EncryptionServices
{
    [EncryptionService] $table
    [EncryptionService] $file
    [EncryptionService] $blob
    [EncryptionService] $queue
}
function New-AzureNativeTypeStorageEncryptionServices
{
    param (
        [parameter(mandatory=$False,HelpMessage='The encryption function of the table storage service.)')]
        [EncryptionService]
        $table,
        [parameter(mandatory=$False,HelpMessage='The encryption function of the file storage service.)')]
        [EncryptionService]
        $file,
        [parameter(mandatory=$False,HelpMessage='The encryption function of the blob storage service.)')]
        [EncryptionService]
        $blob,
        [parameter(mandatory=$False,HelpMessage='The encryption function of the queue storage service.)')]
        [EncryptionService]
        $queue
    )

    process
    {
        return $([EncryptionServices]$PSBoundParameters)
    }
}
class EncryptionIdentity
{
    [string] $encryptionUserAssignedIdentity
}
function New-AzureNativeTypeStorageEncryptionIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='Resource identifier of the UserAssigned identity to be associated with server-side encryption on the storage account.)')]
        [string]
        $encryptionUserAssignedIdentity
    )

    process
    {
        return $([EncryptionIdentity]$PSBoundParameters)
    }
}
class Encryption
{
    [bool] $requireInfrastructureEncryption
    [KeyVaultProperties] $keyVaultProperties
    [ArgumentCompletions('Microsoft.Storage', 'Microsoft.Keyvault')]
    [string] $keySource
    [EncryptionServices] $services
    [EncryptionIdentity] $encryptionIdentity
}
function New-AzureNativeTypeStorageEncryption
{
    param (
        [parameter(mandatory=$False,HelpMessage='A boolean indicating whether or not the service applies a secondary layer of encryption with platform managed keys for data at rest.)')]
        [bool]
        $requireInfrastructureEncryption,
        [parameter(mandatory=$False,HelpMessage='Properties provided by key vault.)')]
        [KeyVaultProperties]
        $keyVaultProperties,
        [parameter(mandatory=$False,HelpMessage='The encryption keySource (provider). Possible values (case-insensitive): Microsoft.Storage, Microsoft.Keyvault)')]
        [string]
        [ArgumentCompletions('Microsoft.Storage', 'Microsoft.Keyvault')]
        $keySource,
        [parameter(mandatory=$False,HelpMessage='List of services which support encryption.)')]
        [EncryptionServices]
        $services,
        [parameter(mandatory=$False,HelpMessage='The identity to be used with service-side encryption at rest.)')]
        [EncryptionIdentity]
        $encryptionIdentity
    )

    process
    {
        return $([Encryption]$PSBoundParameters)
    }
}
class KeyPolicy
{
    [int] $keyExpirationPeriodInDays
}
function New-AzureNativeTypeStorageKeyPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The key expiration period in days.)')]
        [int]
        $keyExpirationPeriodInDays
    )

    process
    {
        return $([KeyPolicy]$PSBoundParameters)
    }
}
class ExtendedLocation
{
    [ArgumentCompletions('EdgeZone')]
    [string] $type
    [string] $name
}
function New-AzureNativeTypeStorageExtendedLocation
{
    param (
        [parameter(mandatory=$False,HelpMessage='The type of the extended location.)')]
        [string]
        [ArgumentCompletions('EdgeZone')]
        $type,
        [parameter(mandatory=$False,HelpMessage='The name of the extended location.)')]
        [string]
        $name
    )

    process
    {
        return $([ExtendedLocation]$PSBoundParameters)
    }
}
class SasPolicy
{
    [string] $sasExpirationPeriod
    [ArgumentCompletions('Log')]
    [string] $expirationAction
}
function New-AzureNativeTypeStorageSasPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The SAS expiration period, DD.HH:MM:SS.)')]
        [string]
        $sasExpirationPeriod,
        [parameter(mandatory=$False,HelpMessage='The SAS expiration action. Can only be Log.)')]
        [string]
        [ArgumentCompletions('Log')]
        $expirationAction
    )

    process
    {
        return $([SasPolicy]$PSBoundParameters)
    }
}
class Identity
{
    [ArgumentCompletions('None', 'SystemAssigned', 'UserAssigned', 'SystemAssigned,UserAssigned')]
    [string] $type
    [object] $userAssignedIdentities
}
function New-AzureNativeTypeStorageIdentity
{
    param (
        [parameter(mandatory=$False,HelpMessage='The identity type.)')]
        [string]
        [ArgumentCompletions('None', 'SystemAssigned', 'UserAssigned', 'SystemAssigned,UserAssigned')]
        $type,
        [parameter(mandatory=$False,HelpMessage='Gets or sets a list of key value pairs that describe the set of User Assigned identities that will be used with this storage account. The key is the ARM resource identifier of the identity. Only 1 User Assigned identity is permitted here.)')]
        [object]
        $userAssignedIdentities
    )

    process
    {
        return $([Identity]$PSBoundParameters)
    }
}
class ActiveDirectoryProperties
{
    [string] $domainGuid
    [string] $netBiosDomainName
    [string] $azureStorageSid
    [string] $domainSid
    [string] $forestName
    [string] $domainName
}
function New-AzureNativeTypeStorageActiveDirectoryProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the domain GUID.)')]
        [string]
        $domainGuid,
        [parameter(mandatory=$False,HelpMessage='Specifies the NetBIOS domain name.)')]
        [string]
        $netBiosDomainName,
        [parameter(mandatory=$False,HelpMessage='Specifies the security identifier (SID) for Azure Storage.)')]
        [string]
        $azureStorageSid,
        [parameter(mandatory=$False,HelpMessage='Specifies the security identifier (SID).)')]
        [string]
        $domainSid,
        [parameter(mandatory=$False,HelpMessage='Specifies the Active Directory forest to get.)')]
        [string]
        $forestName,
        [parameter(mandatory=$False,HelpMessage='Specifies the primary domain that the AD DNS server is authoritative for.)')]
        [string]
        $domainName
    )

    process
    {
        return $([ActiveDirectoryProperties]$PSBoundParameters)
    }
}
class AzureFilesIdentityBasedAuthentication
{
    [ArgumentCompletions('None', 'AADDS', 'AD')]
    [string] $directoryServiceOptions
    [ActiveDirectoryProperties] $activeDirectoryProperties
}
function New-AzureNativeTypeStorageAzureFilesIdentityBasedAuthentication
{
    param (
        [parameter(mandatory=$False,HelpMessage='Indicates the directory service used.)')]
        [string]
        [ArgumentCompletions('None', 'AADDS', 'AD')]
        $directoryServiceOptions,
        [parameter(mandatory=$False,HelpMessage='Required if choose AD.)')]
        [ActiveDirectoryProperties]
        $activeDirectoryProperties
    )

    process
    {
        return $([AzureFilesIdentityBasedAuthentication]$PSBoundParameters)
    }
}
class Sku
{
    [ArgumentCompletions('Standard_LRS', 'Standard_GRS', 'Standard_RAGRS', 'Standard_ZRS', 'Premium_LRS', 'Premium_ZRS', 'Standard_GZRS', 'Standard_RAGZRS')]
    [string] $name
}
function New-AzureNativeTypeStorageSku
{
    param (
        [parameter(mandatory=$False,HelpMessage='The SKU name. Required for account creation; optional for update. Note that in older versions, SKU name was called accountType.)')]
        [string]
        [ArgumentCompletions('Standard_LRS', 'Standard_GRS', 'Standard_RAGRS', 'Standard_ZRS', 'Premium_LRS', 'Premium_ZRS', 'Standard_GZRS', 'Standard_RAGZRS')]
        $name
    )

    process
    {
        return $([Sku]$PSBoundParameters)
    }
}
class CustomDomain
{
    [string] $name
    [bool] $useSubDomainName
}
function New-AzureNativeTypeStorageCustomDomain
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets or sets the custom domain name assigned to the storage account. Name is the CNAME source.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='Indicates whether indirect CName validation is enabled. Default value is false. This should only be set on updates.)')]
        [bool]
        $useSubDomainName
    )

    process
    {
        return $([CustomDomain]$PSBoundParameters)
    }
}
class RoutingPreference
{
    [bool] $publishMicrosoftEndpoints
    [ArgumentCompletions('MicrosoftRouting', 'InternetRouting')]
    [string] $routingChoice
    [bool] $publishInternetEndpoints
}
function New-AzureNativeTypeStorageRoutingPreference
{
    param (
        [parameter(mandatory=$False,HelpMessage='A boolean flag which indicates whether microsoft routing storage endpoints are to be published)')]
        [bool]
        $publishMicrosoftEndpoints,
        [parameter(mandatory=$False,HelpMessage='Routing Choice defines the kind of network routing opted by the user.)')]
        [string]
        [ArgumentCompletions('MicrosoftRouting', 'InternetRouting')]
        $routingChoice,
        [parameter(mandatory=$False,HelpMessage='A boolean flag which indicates whether internet routing storage endpoints are to be published)')]
        [bool]
        $publishInternetEndpoints
    )

    process
    {
        return $([RoutingPreference]$PSBoundParameters)
    }
}
class VirtualNetworkRule
{
    [ArgumentCompletions('provisioning', 'deprovisioning', 'succeeded', 'failed', 'networkSourceDeleted')]
    [string] $state
    [string] $virtualNetworkResourceId
    [ArgumentCompletions('Allow')]
    [object] $action
}
function New-AzureNativeTypeStorageVirtualNetworkRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Gets the state of virtual network rule.)')]
        [string]
        [ArgumentCompletions('provisioning', 'deprovisioning', 'succeeded', 'failed', 'networkSourceDeleted')]
        $state,
        [parameter(mandatory=$False,HelpMessage='Resource ID of a subnet, for example: /subscriptions/{subscriptionId}/resourceGroups/{groupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}/subnets/{subnetName}.)')]
        [string]
        $virtualNetworkResourceId,
        [parameter(mandatory=$False,HelpMessage='The action of virtual network rule.)')]
        $action
    )

    process
    {
        return $([VirtualNetworkRule]$PSBoundParameters)
    }
}
class IPRule
{
    [string] $iPAddressOrRange
    [ArgumentCompletions('Allow')]
    [object] $action
}
function New-AzureNativeTypeStorageIPRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies the IP or IP range in CIDR format. Only IPV4 address is allowed.)')]
        [string]
        $iPAddressOrRange,
        [parameter(mandatory=$False,HelpMessage='The action of IP ACL rule.)')]
        $action
    )

    process
    {
        return $([IPRule]$PSBoundParameters)
    }
}
class ResourceAccessRule
{
    [string] $tenantId
    [string] $resourceId
}
function New-AzureNativeTypeStorageResourceAccessRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='Tenant Id)')]
        [string]
        $tenantId,
        [parameter(mandatory=$False,HelpMessage='Resource Id)')]
        [string]
        $resourceId
    )

    process
    {
        return $([ResourceAccessRule]$PSBoundParameters)
    }
}
class NetworkRuleSet
{
    [ArgumentCompletions('None', 'Logging', 'Metrics', 'AzureServices')]
    [string] $bypass
    [ArgumentCompletions('Allow', 'Deny')]
    [object] $defaultAction
    [VirtualNetworkRule[]] $virtualNetworkRules
    [IPRule[]] $ipRules
    [ResourceAccessRule[]] $resourceAccessRules
}
function New-AzureNativeTypeStorageNetworkRuleSet
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies whether traffic is bypassed for Logging/Metrics/AzureServices. Possible values are any combination of Logging|Metrics|AzureServices (For example, "Logging, Metrics"), or None to bypass none of those traffics.)')]
        [string]
        [ArgumentCompletions('None', 'Logging', 'Metrics', 'AzureServices')]
        $bypass,
        [parameter(mandatory=$False,HelpMessage='Specifies the default action of allow or deny when no other rules match.)')]
        $defaultAction,
        [parameter(mandatory=$False,HelpMessage='Sets the virtual network rules)')]
        $virtualNetworkRules,
        [parameter(mandatory=$False,HelpMessage='Sets the IP ACL rules)')]
        $ipRules,
        [parameter(mandatory=$False,HelpMessage='Sets the resource access rules)')]
        $resourceAccessRules
    )

    process
    {
        return $([NetworkRuleSet]$PSBoundParameters)
    }
}
function New-AzureNativeStorageStorageAccount
{
    [Alias('azure_native_storage_storageaccount')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='Indicates whether the storage account permits requests to be authorized with the account access key via Shared Key. If false, then all requests, including shared access signatures, must be authorized with Azure Active Directory (Azure AD). The default value is null, which is equivalent to true.)')]
        [bool]
        $allowSharedKeyAccess,
        [parameter(mandatory=$False,HelpMessage='Allow or disallow public access to all blobs or containers in the storage account. The default interpretation is true for this property.)')]
        [bool]
        $allowBlobPublicAccess,
        [parameter(mandatory=$False,HelpMessage='Not applicable. Azure Storage encryption is enabled for all storage accounts and cannot be disabled.)')]
        [Encryption]
        $encryption,
        [parameter(mandatory=$False,HelpMessage='KeyPolicy assigned to the storage account.)')]
        [KeyPolicy]
        $keyPolicy,
        [parameter(mandatory=$False,HelpMessage='Optional. Set the extended location of the resource. If not set, the storage account will be created in Azure main region. Otherwise it will be created in the specified extended location)')]
        [ExtendedLocation]
        $extendedLocation,
        [parameter(mandatory=$False,HelpMessage='Gets or sets a list of key value pairs that describe the resource. These tags can be used for viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key with a length no greater than 128 characters and a value with a length no greater than 256 characters.)')]
        [hashtable]
        $tags,
        [parameter(mandatory=$False,HelpMessage='SasPolicy assigned to the storage account.)')]
        [SasPolicy]
        $sasPolicy,
        [parameter(mandatory=$False,HelpMessage='Allow large file shares if sets to Enabled. It cannot be disabled once it is enabled.)')]
        [string]
        [ArgumentCompletions('Disabled', 'Enabled')]
        $largeFileSharesState,
        [parameter(mandatory=$False,HelpMessage='The identity of the resource.)')]
        [Identity]
        $identity,
        [parameter(mandatory=$False,HelpMessage='Account HierarchicalNamespace enabled if sets to true.)')]
        [bool]
        $isHnsEnabled,
        [parameter(mandatory=$False,HelpMessage='Provides the identity based authentication settings for Azure Files.)')]
        [AzureFilesIdentityBasedAuthentication]
        $azureFilesIdentityBasedAuthentication,
        [parameter(mandatory=$False,HelpMessage='Required. Gets or sets the SKU name.)')]
        [Sku]
        $sku,
        [parameter(mandatory=$False,HelpMessage='Set the minimum TLS version to be permitted on requests to storage. The default interpretation is TLS 1.0 for this property.)')]
        [string]
        [ArgumentCompletions('TLS1_0', 'TLS1_1', 'TLS1_2')]
        $minimumTlsVersion,
        [parameter(mandatory=$False,HelpMessage='Required for storage accounts where kind = BlobStorage. The access tier used for billing.)')]
        $accessTier,
        [parameter(mandatory=$False,HelpMessage='NFS 3.0 protocol support enabled if set to true.)')]
        [bool]
        $enableNfsV3,
        [parameter(mandatory=$False,HelpMessage='Required. Indicates the type of storage account.)')]
        [string]
        [ArgumentCompletions('Storage', 'StorageV2', 'BlobStorage', 'FileStorage', 'BlockBlobStorage')]
        $kind,
        [parameter(mandatory=$False,HelpMessage='Allows https traffic only to storage service if sets to true. The default value is true since API version 2019-04-01.)')]
        [bool]
        $enableHttpsTrafficOnly,
        [parameter(mandatory=$False,HelpMessage='Required. Gets or sets the location of the resource. This will be one of the supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.). The geo region of a resource cannot be changed once it is created, but if an identical geo region is specified on update, the request will succeed.)')]
        [string]
        $location,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='User domain assigned to the storage account. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.)')]
        [CustomDomain]
        $customDomain,
        [parameter(mandatory=$False,HelpMessage='Maintains information about the network routing choice opted by the user for data transfer)')]
        [RoutingPreference]
        $routingPreference,
        [parameter(mandatory=$False,HelpMessage='Network rule set)')]
        [NetworkRuleSet]
        $networkRuleSet,
        [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:storage:StorageAccount")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageBlobContainer
{
    [Alias('azure_native_storage_blobcontainer')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the blob container within the specified storage account. Blob container names must be between 3 and 63 characters in length and use numbers, lower-case letters and dash (-) only. Every dash (-) character must be immediately preceded and followed by a letter or number.)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A name-value pair to associate with the container as metadata.)')]
        [hashtable]
        $metadata,
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='Specifies whether data in the container may be accessed publicly and the level of access.)')]
        $publicAccess,
        [parameter(mandatory=$False,HelpMessage='Default the container to use specified encryption scope for all writes.)')]
        [string]
        $defaultEncryptionScope,
        [parameter(mandatory=$False,HelpMessage='Block override of encryption scope from the container default.)')]
        [bool]
        $denyEncryptionScopeOverride,
        [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:storage:BlobContainer")

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageBlobContainerImmutabilityPolicy
{
    [Alias('azure_native_storage_blobcontainerimmutabilitypolicy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the blob container within the specified storage account. Blob container names must be between 3 and 63 characters in length and use numbers, lower-case letters and dash (-) only. Every dash (-) character must be immediately preceded and followed by a letter or number.)')]
        [string]
        $containerName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the blob container immutabilityPolicy within the specified storage account. ImmutabilityPolicy Name must be ''default'')')]
        [string]
        $immutabilityPolicyName,
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='This property can only be changed for unlocked time-based retention policies. When enabled, new blocks can be written to an append blob while maintaining immutability protection and compliance. Only new blocks can be added and any existing blocks cannot be modified or deleted. This property cannot be changed with ExtendImmutabilityPolicy API)')]
        [bool]
        $allowProtectedAppendWrites,
        [parameter(mandatory=$False,HelpMessage='The immutability period for the blobs in the container since the policy creation, in days.)')]
        [int]
        $immutabilityPeriodSinceCreationInDays,
        [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:storage:BlobContainerImmutabilityPolicy")

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class PrivateLinkServiceConnectionState
{
    [string] $actionRequired
    [ArgumentCompletions('Pending', 'Approved', 'Rejected')]
    [string] $status
    [string] $description
}
function New-AzureNativeTypeStoragePrivateLinkServiceConnectionState
{
    param (
        [parameter(mandatory=$False,HelpMessage='A message indicating if changes on the service provider require any updates on the consumer.)')]
        [string]
        $actionRequired,
        [parameter(mandatory=$False,HelpMessage='Indicates whether the connection has been Approved/Rejected/Removed by the owner of the service.)')]
        [string]
        [ArgumentCompletions('Pending', 'Approved', 'Rejected')]
        $status,
        [parameter(mandatory=$False,HelpMessage='The reason for approval/rejection of the connection.)')]
        [string]
        $description
    )

    process
    {
        return $([PrivateLinkServiceConnectionState]$PSBoundParameters)
    }
}
function New-AzureNativeStoragePrivateEndpointConnection
{
    [Alias('azure_native_storage_privateendpointconnection')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection associated with the Azure resource)')]
        [string]
        $privateEndpointConnectionName,
        [parameter(mandatory=$False,HelpMessage='A collection of information about the state of the connection between service consumer and provider.)')]
        [PrivateLinkServiceConnectionState]
        $privateLinkServiceConnectionState,
        [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:storage:PrivateEndpointConnection")

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageQueue
{
    [Alias('azure_native_storage_queue')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='A queue name must be unique within a storage account and must be between 3 and 63 characters.The name must comprise of lowercase alphanumeric and dash(-) characters only, it should begin and end with an alphanumeric character and it cannot have two consecutive dash(-) characters.)')]
        [string]
        $queueName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A name-value pair that represents queue metadata.)')]
        [hashtable]
        $metadata,
        [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:storage:Queue")

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageQueueServiceProperties
{
    [Alias('azure_native_storage_queueserviceproperties')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the Queue Service within the specified storage account. Queue Service Name must be ''default'')')]
        [string]
        $queueServiceName,
        [parameter(mandatory=$False,HelpMessage='Specifies CORS rules for the Queue service. You can include up to five CorsRule elements in the request. If no CorsRule elements are included in the request body, all CORS rules will be deleted, and CORS will be disabled for the Queue service.)')]
        [CorsRules]
        $cors,
        [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:storage:QueueServiceProperties")

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class TagFilter
{
    [string] $name
    [string] $op
    [string] $value
}
function New-AzureNativeTypeStorageTagFilter
{
    param (
        [parameter(mandatory=$False,HelpMessage='This is the filter tag name, it can have 1 - 128 characters)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='This is the comparison operator which is used for object comparison and filtering. Only == (equality operator) is currently supported)')]
        [string]
        $op,
        [parameter(mandatory=$False,HelpMessage='This is the filter tag value field used for tag based filtering, it can have 0 - 256 characters)')]
        [string]
        $value
    )

    process
    {
        return $([TagFilter]$PSBoundParameters)
    }
}
class ManagementPolicyFilter
{
    [string[]] $blobTypes
    [TagFilter[]] $blobIndexMatch
    [string[]] $prefixMatch
}
function New-AzureNativeTypeStorageManagementPolicyFilter
{
    param (
        [parameter(mandatory=$False,HelpMessage='An array of predefined enum values. Currently blockBlob supports all tiering and delete actions. Only delete actions are supported for appendBlob.)')]
        [string[]]
        $blobTypes,
        [parameter(mandatory=$False,HelpMessage='An array of blob index tag based filters, there can be at most 10 tag filters)')]
        $blobIndexMatch,
        [parameter(mandatory=$False,HelpMessage='An array of strings for prefixes to be match.)')]
        [string[]]
        $prefixMatch
    )

    process
    {
        return $([ManagementPolicyFilter]$PSBoundParameters)
    }
}
class DateAfterCreation
{
    [int] $daysAfterCreationGreaterThan
}
function New-AzureNativeTypeStorageDateAfterCreation
{
    param (
        [parameter(mandatory=$False,HelpMessage='Value indicating the age in days after creation)')]
        [int]
        $daysAfterCreationGreaterThan
    )

    process
    {
        return $([DateAfterCreation]$PSBoundParameters)
    }
}
class ManagementPolicyVersion
{
    [DateAfterCreation] $delete
    [DateAfterCreation] $tierToArchive
    [DateAfterCreation] $tierToCool
}
function New-AzureNativeTypeStorageManagementPolicyVersion
{
    param (
        [parameter(mandatory=$False,HelpMessage='The function to delete the blob version)')]
        [DateAfterCreation]
        $delete,
        [parameter(mandatory=$False,HelpMessage='The function to tier blob version to archive storage. Support blob version currently at Hot or Cool tier)')]
        [DateAfterCreation]
        $tierToArchive,
        [parameter(mandatory=$False,HelpMessage='The function to tier blob version to cool storage. Support blob version currently at Hot tier)')]
        [DateAfterCreation]
        $tierToCool
    )

    process
    {
        return $([ManagementPolicyVersion]$PSBoundParameters)
    }
}
class ManagementPolicySnapShot
{
    [DateAfterCreation] $delete
    [DateAfterCreation] $tierToArchive
    [DateAfterCreation] $tierToCool
}
function New-AzureNativeTypeStorageManagementPolicySnapShot
{
    param (
        [parameter(mandatory=$False,HelpMessage='The function to delete the blob snapshot)')]
        [DateAfterCreation]
        $delete,
        [parameter(mandatory=$False,HelpMessage='The function to tier blob snapshot to archive storage. Support blob snapshot currently at Hot or Cool tier)')]
        [DateAfterCreation]
        $tierToArchive,
        [parameter(mandatory=$False,HelpMessage='The function to tier blob snapshot to cool storage. Support blob snapshot currently at Hot tier)')]
        [DateAfterCreation]
        $tierToCool
    )

    process
    {
        return $([ManagementPolicySnapShot]$PSBoundParameters)
    }
}
class DateAfterModification
{
    [int] $daysAfterModificationGreaterThan
    [int] $daysAfterLastAccessTimeGreaterThan
}
function New-AzureNativeTypeStorageDateAfterModification
{
    param (
        [parameter(mandatory=$False,HelpMessage='Value indicating the age in days after last modification)')]
        [int]
        $daysAfterModificationGreaterThan,
        [parameter(mandatory=$False,HelpMessage='Value indicating the age in days after last blob access. This property can only be used in conjunction with last access time tracking policy)')]
        [int]
        $daysAfterLastAccessTimeGreaterThan
    )

    process
    {
        return $([DateAfterModification]$PSBoundParameters)
    }
}
class ManagementPolicyBaseBlob
{
    [DateAfterModification] $delete
    [bool] $enableAutoTierToHotFromCool
    [DateAfterModification] $tierToCool
    [DateAfterModification] $tierToArchive
}
function New-AzureNativeTypeStorageManagementPolicyBaseBlob
{
    param (
        [parameter(mandatory=$False,HelpMessage='The function to delete the blob)')]
        [DateAfterModification]
        $delete,
        [parameter(mandatory=$False,HelpMessage='This property enables auto tiering of a blob from cool to hot on a blob access. This property requires tierToCool.daysAfterLastAccessTimeGreaterThan.)')]
        [bool]
        $enableAutoTierToHotFromCool,
        [parameter(mandatory=$False,HelpMessage='The function to tier blobs to cool storage. Support blobs currently at Hot tier)')]
        [DateAfterModification]
        $tierToCool,
        [parameter(mandatory=$False,HelpMessage='The function to tier blobs to archive storage. Support blobs currently at Hot or Cool tier)')]
        [DateAfterModification]
        $tierToArchive
    )

    process
    {
        return $([ManagementPolicyBaseBlob]$PSBoundParameters)
    }
}
class ManagementPolicyAction
{
    [ManagementPolicyVersion] $version
    [ManagementPolicySnapShot] $snapshot
    [ManagementPolicyBaseBlob] $baseBlob
}
function New-AzureNativeTypeStorageManagementPolicyAction
{
    param (
        [parameter(mandatory=$False,HelpMessage='The management policy action for version)')]
        [ManagementPolicyVersion]
        $version,
        [parameter(mandatory=$False,HelpMessage='The management policy action for snapshot)')]
        [ManagementPolicySnapShot]
        $snapshot,
        [parameter(mandatory=$False,HelpMessage='The management policy action for base blob)')]
        [ManagementPolicyBaseBlob]
        $baseBlob
    )

    process
    {
        return $([ManagementPolicyAction]$PSBoundParameters)
    }
}
class ManagementPolicyDefinition
{
    [ManagementPolicyFilter] $filters
    [ManagementPolicyAction] $actions
}
function New-AzureNativeTypeStorageManagementPolicyDefinition
{
    param (
        [parameter(mandatory=$False,HelpMessage='An object that defines the filter set.)')]
        [ManagementPolicyFilter]
        $filters,
        [parameter(mandatory=$False,HelpMessage='An object that defines the action set.)')]
        [ManagementPolicyAction]
        $actions
    )

    process
    {
        return $([ManagementPolicyDefinition]$PSBoundParameters)
    }
}
class ManagementPolicyRule
{
    [string] $name
    [ArgumentCompletions('Lifecycle')]
    [string] $type
    [ManagementPolicyDefinition] $definition
    [bool] $enabled
}
function New-AzureNativeTypeStorageManagementPolicyRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='A rule name can contain any combination of alpha numeric characters. Rule name is case-sensitive. It must be unique within a policy.)')]
        [string]
        $name,
        [parameter(mandatory=$False,HelpMessage='The valid value is Lifecycle)')]
        [string]
        [ArgumentCompletions('Lifecycle')]
        $type,
        [parameter(mandatory=$False,HelpMessage='An object that defines the Lifecycle rule.)')]
        [ManagementPolicyDefinition]
        $definition,
        [parameter(mandatory=$False,HelpMessage='Rule is enabled if set to true.)')]
        [bool]
        $enabled
    )

    process
    {
        return $([ManagementPolicyRule]$PSBoundParameters)
    }
}
class ManagementPolicySchema
{
    [ManagementPolicyRule[]] $rules
}
function New-AzureNativeTypeStorageManagementPolicySchema
{
    param (
        [parameter(mandatory=$False,HelpMessage='The Storage Account ManagementPolicies Rules. See more details in: https://docs.microsoft.com/en-us/azure/storage/common/storage-lifecycle-managment-concepts.)')]
        $rules
    )

    process
    {
        return $([ManagementPolicySchema]$PSBoundParameters)
    }
}
function New-AzureNativeStorageManagementPolicy
{
    [Alias('azure_native_storage_managementpolicy')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The Storage Account ManagementPolicy, in JSON format. See more details in: https://docs.microsoft.com/en-us/azure/storage/common/storage-lifecycle-managment-concepts.)')]
        [ManagementPolicySchema]
        $policy,
        [parameter(mandatory=$False,HelpMessage='The name of the Storage Account Management Policy. It should always be ''default'')')]
        [string]
        $managementPolicyName,
        [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:storage:ManagementPolicy")

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageStorageAccountStaticWebsite
{
    [Alias('azure_native_storage_storageaccountstaticwebsite')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The absolute path to a custom webpage that should be used when a request is made which does not correspond to an existing file.)')]
        [string]
        $error404Document,
        [parameter(mandatory=$False,HelpMessage='The webpage that Azure Storage serves for requests to the root of a website or any sub-folder. For example, ''index.html''. The value is case-sensitive.)')]
        [string]
        $indexDocument,
        [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:storage:StorageAccountStaticWebsite")

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageTableServiceProperties
{
    [Alias('azure_native_storage_tableserviceproperties')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='Specifies CORS rules for the Table service. You can include up to five CorsRule elements in the request. If no CorsRule elements are included in the request body, all CORS rules will be deleted, and CORS will be disabled for the Table service.)')]
        [CorsRules]
        $cors,
        [parameter(mandatory=$False,HelpMessage='The name of the Table Service within the specified storage account. Table Service Name must be ''default'')')]
        [string]
        $tableServiceName,
        [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:storage:TableServiceProperties")

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageTable
{
    [Alias('azure_native_storage_table')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='A table name must be unique within a storage account and must be between 3 and 63 characters.The name must comprise of only alphanumeric characters and it cannot begin with a numeric character.)')]
        [string]
        $tableName,
        [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:storage:Table")

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class EncryptionScopeKeyVaultProperties
{
    [string] $keyUri
}
function New-AzureNativeTypeStorageEncryptionScopeKeyVaultProperties
{
    param (
        [parameter(mandatory=$False,HelpMessage='The object identifier for a key vault key object. When applied, the encryption scope will use the key referenced by the identifier to enable customer-managed key support on this encryption scope.)')]
        [string]
        $keyUri
    )

    process
    {
        return $([EncryptionScopeKeyVaultProperties]$PSBoundParameters)
    }
}
function New-AzureNativeStorageEncryptionScope
{
    [Alias('azure_native_storage_encryptionscope')]
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory=$False,HelpMessage='The name of the encryption scope within the specified storage account. Encryption scope names must be between 3 and 63 characters in length and use numbers, lower-case letters and dash (-) only. Every dash (-) character must be immediately preceded and followed by a letter or number.)')]
        [string]
        $encryptionScopeName,
        [parameter(mandatory=$False,HelpMessage='The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.)')]
        [string]
        $accountName,
        [parameter(mandatory=$False,HelpMessage='The state of the encryption scope. Possible values (case-insensitive): Enabled, Disabled.)')]
        [string]
        [ArgumentCompletions('Enabled', 'Disabled')]
        $state,
        [parameter(mandatory=$False,HelpMessage='The key vault properties for the encryption scope. This is a required field if encryption scope ''source'' attribute is set to ''Microsoft.KeyVault''.)')]
        [EncryptionScopeKeyVaultProperties]
        $keyVaultProperties,
        [parameter(mandatory=$False,HelpMessage='A boolean indicating whether or not the service applies a secondary layer of encryption with platform managed keys for data at rest.)')]
        [bool]
        $requireInfrastructureEncryption,
        [parameter(mandatory=$False,HelpMessage='The provider for the encryption scope. Possible values (case-insensitive): Microsoft.Storage, Microsoft.KeyVault.)')]
        [string]
        [ArgumentCompletions('Microsoft.Storage', 'Microsoft.KeyVault')]
        $source,
        [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:storage:EncryptionScope")

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

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

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

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

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

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

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