pspulumiyaml.azurenative.storage.psm1

using module pspulumiyaml
function Invoke-AzureNativeFunctionStorageGetBlobContainerImmutabilityPolicy
{
    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
    )

    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-AzureNativeFunctionStorageGetQueue
{
    param (
        [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='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
    )

    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-AzureNativeFunctionStorageGetFileShare
{
    param (
        [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='Optional, used to expand the properties within share''s properties.)')]
        [string]
        $expand,
        [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
    )

    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-AzureNativeFunctionStorageGetTableServiceProperties
{
    param (
        [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=$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
    )

    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-AzureNativeFunctionStorageListLocalUserKeys
{
    param (
        [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,
        [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
    )

    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-AzureNativeFunctionStorageGetLocalUser
{
    param (
        [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,
        [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
    )

    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-AzureNativeFunctionStorageGetStorageAccount
{
    param (
        [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,
        [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
    )

    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-AzureNativeFunctionStorageListStorageAccountServiceSAS
{
    param (
        [parameter(mandatory=$False,HelpMessage='The end of row key.)')]
        [string]
        $rowKeyEnd,
        [parameter(mandatory=$False,HelpMessage='The response header override for cache control.)')]
        [string]
        $cacheControl,
        [parameter(mandatory=$False,HelpMessage='The response header override for content type.)')]
        [string]
        $contentType,
        [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 start of partition key.)')]
        [string]
        $partitionKeyStart,
        [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 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 disposition.)')]
        [string]
        $contentDisposition,
        [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]
        [ValidateSet('r', 'd', 'w', 'l', 'a', 'c', 'u', 'p')]
        $permissions,
        [parameter(mandatory=$False,HelpMessage='The end of partition key.)')]
        [string]
        $partitionKeyEnd,
        [parameter(mandatory=$False,HelpMessage='The start of row key.)')]
        [string]
        $rowKeyStart,
        [parameter(mandatory=$False,HelpMessage='The time at which the shared access signature becomes invalid.)')]
        [string]
        $sharedAccessExpiryTime,
        [parameter(mandatory=$False,HelpMessage='The response header override for content encoding.)')]
        [string]
        $contentEncoding,
        [parameter(mandatory=$False,HelpMessage='The signed services accessible with the service SAS. Possible values include: Blob (b), Container (c), File (f), Share (s).)')]
        [string]
        [ValidateSet('b', 'c', 'f', 's')]
        $resource,
        [parameter(mandatory=$False,HelpMessage='The time at which the SAS becomes valid.)')]
        [string]
        $sharedAccessStartTime,
        [parameter(mandatory=$False,HelpMessage='The response header override for content language.)')]
        [string]
        $contentLanguage,
        [parameter(mandatory=$False,HelpMessage='The canonical path to the signed resource.)')]
        [string]
        $canonicalizedResource,
        [parameter(mandatory=$False,HelpMessage='The protocol permitted for a request made with the account SAS.)')]
        $protocols,
        [parameter(mandatory=$False,HelpMessage='The key to sign the account SAS token with.)')]
        [string]
        $keyToSign
    )

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:listStorageAccountServiceSAS -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
function Invoke-AzureNativeFunctionStorageGetFileServiceProperties
{
    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 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
    )

    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-AzureNativeFunctionStorageGetBlobServiceProperties
{
    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 blob Service within the specified storage account. Blob Service Name must be ''default'')')]
        [string]
        $blobServicesName,
        [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
    )

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

    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-AzureNativeFunctionStorageGetManagementPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='The name of the Storage Account Management Policy. It should always be ''default'')')]
        [string]
        $managementPolicyName,
        [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
    )

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

    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-AzureNativeFunctionStorageGetPrivateEndpointConnection
{
    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 private endpoint connection associated with the Azure resource)')]
        [string]
        $privateEndpointConnectionName,
        [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
    )

    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 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 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
    )

    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-AzureNativeFunctionStorageGetQueueServiceProperties
{
    param (
        [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='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
    )

    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-AzureNativeFunctionStorageGetTable
{
    param (
        [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=$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
    )

    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-AzureNativeFunctionStorageGetObjectReplicationPolicy
{
    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 ID of object replication policy or ''default'' if the policy ID is unknown.)')]
        [string]
        $objectReplicationPolicyId,
        [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
    )

    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-AzureNativeFunctionStorageListStorageAccountKeys
{
    param (
        [parameter(mandatory=$False,HelpMessage='Specifies type of the key to be listed. Possible value is kerb.)')]
        [string]
        $expand,
        [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
    )

    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-AzureNativeFunctionStorageListStorageAccountSAS
{
    param (
        [parameter(mandatory=$False,HelpMessage='The time at which the shared access signature becomes invalid.)')]
        [string]
        $sharedAccessExpiryTime,
        [parameter(mandatory=$False,HelpMessage='The signed services accessible with the account SAS. Possible values include: Blob (b), Queue (q), Table (t), File (f).)')]
        [string]
        [ValidateSet('b', 'q', 't', 'f')]
        $services,
        [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 protocol permitted for a request made with the account SAS.)')]
        $protocols,
        [parameter(mandatory=$False,HelpMessage='The time at which the SAS becomes valid.)')]
        [string]
        $sharedAccessStartTime,
        [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]
        [ValidateSet('r', 'd', 'w', 'l', 'a', 'c', 'u', 'p')]
        $permissions,
        [parameter(mandatory=$False,HelpMessage='The key to sign the account SAS token with.)')]
        [string]
        $keyToSign,
        [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]
        [ValidateSet('s', 'c', 'o')]
        $resourceTypes,
        [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 name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName
    )

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

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

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

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

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

        $functionObject = Invoke-PulumiFunction -Name azure-native:storage:listStorageAccountSAS -variableName $([guid]::NewGuid().Guid) -Arguments $arguments
        return $functionObject
    }
}
class CorsRule
{
    [string[]] $allowedOrigins
    [string[]] $allowedMethods
    [string[]] $allowedHeaders
    [int] $maxAgeInSeconds
    [string[]] $exposedHeaders
}
function New-AzureNativeTypeStorageCorsRule
{
    param (
        [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,
        [parameter(mandatory=$False,HelpMessage='Required if CorsRule element is present. A list of response headers to expose to CORS clients.)')]
        [string[]]
        $exposedHeaders
    )

    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)
    }
}
function New-AzureNativeStorageQueueServiceProperties
{
    [Alias('azure_native_storage_queueserviceproperties')]
    param (
        [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=$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='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,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["accountName"] = $accountName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageTableServiceProperties
{
    [Alias('azure_native_storage_tableserviceproperties')]
    param (
        [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=$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,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $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
    }
}
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 LastAccessTimeTrackingPolicy
{
    [bool] $enable
    [int] $trackingGranularityInDays
    [ArgumentCompletions('AccessTimeTracking')]
    [string] $name
    [string[]] $blobType
}
function New-AzureNativeTypeStorageLastAccessTimeTrackingPolicy
{
    param (
        [parameter(mandatory=$False,HelpMessage='When set to true last access time based tracking is enabled.)')]
        [bool]
        $enable,
        [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='Name of the policy. The valid value is AccessTimeTracking. This field is currently read only)')]
        [string]
        [ValidateSet('AccessTimeTracking')]
        $name,
        [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
    )

    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)
    }
}
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)
    }
}
function New-AzureNativeStorageBlobServiceProperties
{
    [Alias('azure_native_storage_blobserviceproperties')]
    param (
        [parameter(mandatory=$False,HelpMessage='The blob service properties for container soft delete.)')]
        [DeleteRetentionPolicy]
        $containerDeleteRetentionPolicy,
        [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=$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='Deprecated in favor of isVersioningEnabled property.)')]
        [bool]
        $automaticSnapshotPolicyEnabled,
        [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='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 property to configure last access time based tracking policy.)')]
        [LastAccessTimeTrackingPolicy]
        $lastAccessTimeTrackingPolicy,
        [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='The blob service properties for blob restore policy.)')]
        [RestorePolicyProperties]
        $restorePolicy,
        [parameter(mandatory=$False,HelpMessage='Versioning is enabled if set to true.)')]
        [bool]
        $isVersioningEnabled,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["accountName"] = $accountName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class BlobInventoryPolicyFilter
{
    [bool] $includeSnapshots
    [string[]] $blobTypes
    [string[]] $prefixMatch
    [bool] $includeBlobVersions
}
function New-AzureNativeTypeStorageBlobInventoryPolicyFilter
{
    param (
        [parameter(mandatory=$False,HelpMessage='Includes blob snapshots in blob inventory when value set to true.)')]
        [bool]
        $includeSnapshots,
        [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='An array of strings for blob prefixes to be matched.)')]
        [string[]]
        $prefixMatch,
        [parameter(mandatory=$False,HelpMessage='Includes blob versions in blob inventory when value set to true.)')]
        [bool]
        $includeBlobVersions
    )

    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
{
    [BlobInventoryPolicyDefinition] $definition
    [bool] $enabled
    [string] $name
}
function New-AzureNativeTypeStorageBlobInventoryPolicyRule
{
    param (
        [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,
        [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
    )

    process
    {
        return $([BlobInventoryPolicyRule]$PSBoundParameters)
    }
}
class BlobInventoryPolicySchema
{
    [ArgumentCompletions('Inventory')]
    [string] $type
    [string] $destination
    [BlobInventoryPolicyRule[]] $rules
    [bool] $enabled
}
function New-AzureNativeTypeStorageBlobInventoryPolicySchema
{
    param (
        [parameter(mandatory=$False,HelpMessage='The valid value is Inventory)')]
        [string]
        [ValidateSet('Inventory')]
        $type,
        [parameter(mandatory=$False,HelpMessage='Container name where blob inventory files are stored. Must be pre-created.)')]
        [string]
        $destination,
        [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 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=$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,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $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-AzureNativeStorageStorageAccountStaticWebsite
{
    [Alias('azure_native_storage_storageaccountstaticwebsite')]
    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 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=$False,HelpMessage='The name of the storage account within the specified resource group.)')]
        [string]
        $accountName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $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-AzureNativeStorageLocalUser
{
    [Alias('azure_native_storage_localuser')]
    param (
        [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 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='Optional, local user ssh authorized keys for SFTP.)')]
        $sshAuthorizedKeys,
        [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='Indicates whether shared key exists. Set it to false to remove existing shared key.)')]
        [bool]
        $hasSharedKey,
        [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='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["accountName"] = $accountName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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

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

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

    process
    {
        return $([PrivateLinkServiceConnectionState]$PSBoundParameters)
    }
}
function New-AzureNativeStoragePrivateEndpointConnection
{
    [Alias('azure_native_storage_privateendpointconnection')]
    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='A collection of information about the state of the connection between service consumer and provider.)')]
        [PrivateLinkServiceConnectionState]
        $privateLinkServiceConnectionState,
        [parameter(mandatory=$False,HelpMessage='The name of the private endpoint connection associated with the Azure resource)')]
        [string]
        $privateEndpointConnectionName,
        [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,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $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
    }
}
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 provider for the encryption scope. Possible values (case-insensitive): Microsoft.Storage, Microsoft.KeyVault.)')]
        [string]
        [ValidateSet('Microsoft.Storage', 'Microsoft.KeyVault')]
        $source,
        [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 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 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='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [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 state of the encryption scope. Possible values (case-insensitive): Enabled, Disabled.)')]
        [string]
        [ValidateSet('Enabled', 'Disabled')]
        $state,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["accountName"] = $accountName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageQueue
{
    [Alias('azure_native_storage_queue')]
    param (
        [parameter(mandatory=$False,HelpMessage='A name-value pair that represents queue metadata.)')]
        [hashtable]
        $metadata,
        [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='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,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["accountName"] = $accountName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageTable
{
    [Alias('azure_native_storage_table')]
    param (
        [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=$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,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["accountName"] = $accountName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageBlobContainerImmutabilityPolicy
{
    [Alias('azure_native_storage_blobcontainerimmutabilitypolicy')]
    param (
        [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 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 immutabilityPolicy within the specified storage account. ImmutabilityPolicy Name must be ''default'')')]
        [string]
        $immutabilityPolicyName,
        [parameter(mandatory=$False,HelpMessage='The immutability period for the blobs in the container since the policy creation, in days.)')]
        [int]
        $immutabilityPeriodSinceCreationInDays,
        [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 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,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["accountName"] = $accountName
        $resource.properties["containerName"] = $containerName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageObjectReplicationPolicy
{
    [Alias('azure_native_storage_objectreplicationpolicy')]
    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='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=$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 object replication rules.)')]
        $rules,
        [parameter(mandatory=$False,HelpMessage='Required. Destination account name.)')]
        [string]
        $destinationAccount,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["accountName"] = $accountName
        $resource.properties["destinationAccount"] = $destinationAccount
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["sourceAccount"] = $sourceAccount

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageBlob
{
    [Alias('azure_native_storage_blob')]
    param (
        [parameter(mandatory=$False,HelpMessage='A map of custom blob metadata.)')]
        [hashtable]
        $metadata,
        [parameter(mandatory=$False,HelpMessage='Specifies the storage account in which to create the storage container.)')]
        [string]
        $accountName,
        [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 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 content type of the storage blob. Defaults to `application/octet-stream`.)')]
        [string]
        $contentType,
        [parameter(mandatory=$False,HelpMessage='The type of the storage blob to be created. Defaults to ''Block''.)')]
        $type,
        [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 name of the resource group within the user''s subscription.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $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 'accessTier')
        {
            $resource.properties["accessTier"] = $accessTier
        }

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
function New-AzureNativeStorageFileShare
{
    [Alias('azure_native_storage_fileshare')]
    param (
        [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='A name-value pair to associate with the share as metadata.)')]
        [hashtable]
        $metadata,
        [parameter(mandatory=$False,HelpMessage='The property is for NFS share only. The default is NoRootSquash.)')]
        [string]
        [ValidateSet('NoRootSquash', 'RootSquash', 'AllSquash')]
        $rootSquash,
        [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='Access tier for specific share. GpV2 account can choose between TransactionOptimized (default), Hot, and Cool. FileStorage account can choose Premium.)')]
        [string]
        [ValidateSet('TransactionOptimized', 'Hot', 'Cool', 'Premium')]
        $accessTier,
        [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]
        [ValidateSet('SMB', 'NFS')]
        $enabledProtocols,
        [parameter(mandatory=$False,HelpMessage='Optional, used to create a snapshot.)')]
        [string]
        $expand,
        [parameter(mandatory=$False,HelpMessage='The name of the resource group within the user''s subscription. The name is case insensitive.)')]
        [string]
        $resourceGroupName,
        [parameter(mandatory,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["accountName"] = $accountName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
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]
        [ValidateSet('Standard_LRS', 'Standard_GRS', 'Standard_RAGRS', 'Standard_ZRS', 'Premium_LRS', 'Premium_ZRS', 'Standard_GZRS', 'Standard_RAGZRS')]
        $name
    )

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

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

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

    process
    {
        return $([ExtendedLocation]$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]
        [ValidateSet('Service', 'Account')]
        $keyType
    )

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

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

    process
    {
        return $([KeyVaultProperties]$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
{
    [EncryptionServices] $services
    [KeyVaultProperties] $keyVaultProperties
    [bool] $requireInfrastructureEncryption
    [EncryptionIdentity] $encryptionIdentity
    [ArgumentCompletions('Microsoft.Storage', 'Microsoft.Keyvault')]
    [string] $keySource
}
function New-AzureNativeTypeStorageEncryption
{
    param (
        [parameter(mandatory=$False,HelpMessage='List of services which support encryption.)')]
        [EncryptionServices]
        $services,
        [parameter(mandatory=$False,HelpMessage='Properties provided by key vault.)')]
        [KeyVaultProperties]
        $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 identity to be used with service-side encryption at rest.)')]
        [EncryptionIdentity]
        $encryptionIdentity,
        [parameter(mandatory=$False,HelpMessage='The encryption keySource (provider). Possible values (case-insensitive): Microsoft.Storage, Microsoft.Keyvault)')]
        [string]
        [ValidateSet('Microsoft.Storage', 'Microsoft.Keyvault')]
        $keySource
    )

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

    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 NetworkRuleSet
{
    [ArgumentCompletions('None', 'Logging', 'Metrics', 'AzureServices')]
    [string] $bypass
    [ResourceAccessRule[]] $resourceAccessRules
    [ArgumentCompletions('Allow', 'Deny')]
    [object] $defaultAction
    [VirtualNetworkRule[]] $virtualNetworkRules
    [IPRule[]] $ipRules
}
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]
        [ValidateSet('None', 'Logging', 'Metrics', 'AzureServices')]
        $bypass,
        [parameter(mandatory=$False,HelpMessage='Sets the resource access rules)')]
        $resourceAccessRules,
        [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
    )

    process
    {
        return $([NetworkRuleSet]$PSBoundParameters)
    }
}
class RoutingPreference
{
    [bool] $publishInternetEndpoints
    [bool] $publishMicrosoftEndpoints
    [ArgumentCompletions('MicrosoftRouting', 'InternetRouting')]
    [string] $routingChoice
}
function New-AzureNativeTypeStorageRoutingPreference
{
    param (
        [parameter(mandatory=$False,HelpMessage='A boolean flag which indicates whether internet routing storage endpoints are to be published)')]
        [bool]
        $publishInternetEndpoints,
        [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]
        [ValidateSet('MicrosoftRouting', 'InternetRouting')]
        $routingChoice
    )

    process
    {
        return $([RoutingPreference]$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]
        [ValidateSet('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]
        [ValidateSet('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)
    }
}
function New-AzureNativeStorageStorageAccount
{
    [Alias('azure_native_storage_storageaccount')]
    param (
        [parameter(mandatory=$False,HelpMessage='Required. Indicates the type of storage account.)')]
        [string]
        [ValidateSet('Storage', 'StorageV2', 'BlobStorage', 'FileStorage', 'BlockBlobStorage')]
        $kind,
        [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='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 SKU name.)')]
        [Sku]
        $sku,
        [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='Set the minimum TLS version to be permitted on requests to storage. The default interpretation is TLS 1.0 for this property.)')]
        [string]
        [ValidateSet('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='Allow large file shares if sets to Enabled. It cannot be disabled once it is enabled.)')]
        [string]
        [ValidateSet('Disabled', 'Enabled')]
        $largeFileSharesState,
        [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='Provides the identity based authentication settings for Azure Files.)')]
        [AzureFilesIdentityBasedAuthentication]
        $azureFilesIdentityBasedAuthentication,
        [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='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='Not applicable. Azure Storage encryption is enabled for all storage accounts and cannot be disabled.)')]
        [Encryption]
        $encryption,
        [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='KeyPolicy assigned to the storage account.)')]
        [KeyPolicy]
        $keyPolicy,
        [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='Network rule set)')]
        [NetworkRuleSet]
        $networkRuleSet,
        [parameter(mandatory=$False,HelpMessage='Maintains information about the network routing choice opted by the user for data transfer)')]
        [RoutingPreference]
        $routingPreference,
        [parameter(mandatory=$False,HelpMessage='NFS 3.0 protocol support enabled if set to true.)')]
        [bool]
        $enableNfsV3,
        [parameter(mandatory=$False,HelpMessage='SasPolicy assigned to the storage account.)')]
        [SasPolicy]
        $sasPolicy,
        [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='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,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["kind"] = $kind
        $resource.properties["resourceGroupName"] = $resourceGroupName
        $resource.properties["sku"] = $sku

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        $global:pulumiresources += $resource
        return $resource
    }
}
class TagFilter
{
    [string] $value
    [string] $name
    [string] $op
}
function New-AzureNativeTypeStorageTagFilter
{
    param (
        [parameter(mandatory=$False,HelpMessage='This is the filter tag value field used for tag based filtering, it can have 0 - 256 characters)')]
        [string]
        $value,
        [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
    )

    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] $tierToArchive
    [DateAfterCreation] $tierToCool
    [DateAfterCreation] $delete
}
function New-AzureNativeTypeStorageManagementPolicyVersion
{
    param (
        [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,
        [parameter(mandatory=$False,HelpMessage='The function to delete the blob version)')]
        [DateAfterCreation]
        $delete
    )

    process
    {
        return $([ManagementPolicyVersion]$PSBoundParameters)
    }
}
class DateAfterModification
{
    [int] $daysAfterLastAccessTimeGreaterThan
    [int] $daysAfterModificationGreaterThan
}
function New-AzureNativeTypeStorageDateAfterModification
{
    param (
        [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,
        [parameter(mandatory=$False,HelpMessage='Value indicating the age in days after last modification)')]
        [int]
        $daysAfterModificationGreaterThan
    )

    process
    {
        return $([DateAfterModification]$PSBoundParameters)
    }
}
class ManagementPolicyBaseBlob
{
    [DateAfterModification] $tierToCool
    [DateAfterModification] $tierToArchive
    [bool] $enableAutoTierToHotFromCool
    [DateAfterModification] $delete
}
function New-AzureNativeTypeStorageManagementPolicyBaseBlob
{
    param (
        [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,
        [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 delete the blob)')]
        [DateAfterModification]
        $delete
    )

    process
    {
        return $([ManagementPolicyBaseBlob]$PSBoundParameters)
    }
}
class ManagementPolicySnapShot
{
    [DateAfterCreation] $tierToArchive
    [DateAfterCreation] $tierToCool
    [DateAfterCreation] $delete
}
function New-AzureNativeTypeStorageManagementPolicySnapShot
{
    param (
        [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,
        [parameter(mandatory=$False,HelpMessage='The function to delete the blob snapshot)')]
        [DateAfterCreation]
        $delete
    )

    process
    {
        return $([ManagementPolicySnapShot]$PSBoundParameters)
    }
}
class ManagementPolicyAction
{
    [ManagementPolicyVersion] $version
    [ManagementPolicyBaseBlob] $baseBlob
    [ManagementPolicySnapShot] $snapshot
}
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 base blob)')]
        [ManagementPolicyBaseBlob]
        $baseBlob,
        [parameter(mandatory=$False,HelpMessage='The management policy action for snapshot)')]
        [ManagementPolicySnapShot]
        $snapshot
    )

    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
{
    [ManagementPolicyDefinition] $definition
    [ArgumentCompletions('Lifecycle')]
    [string] $type
    [bool] $enabled
    [string] $name
}
function New-AzureNativeTypeStorageManagementPolicyRule
{
    param (
        [parameter(mandatory=$False,HelpMessage='An object that defines the Lifecycle rule.)')]
        [ManagementPolicyDefinition]
        $definition,
        [parameter(mandatory=$False,HelpMessage='The valid value is Lifecycle)')]
        [string]
        [ValidateSet('Lifecycle')]
        $type,
        [parameter(mandatory=$False,HelpMessage='Rule is enabled if set to true.)')]
        [bool]
        $enabled,
        [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
    )

    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 Management Policy. It should always be ''default'')')]
        [string]
        $managementPolicyName,
        [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 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,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $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
    }
}
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
{
    [Multichannel] $multichannel
    [string] $channelEncryption
    [string] $authenticationMethods
    [string] $kerberosTicketEncryption
    [string] $versions
}
function New-AzureNativeTypeStorageSmbSetting
{
    param (
        [parameter(mandatory=$False,HelpMessage='Multichannel setting. Applies to Premium FileStorage only.)')]
        [Multichannel]
        $multichannel,
        [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='SMB authentication methods supported by server. Valid values are NTLMv2, Kerberos. Should be passed as a string with delimiter '';''.)')]
        [string]
        $authenticationMethods,
        [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='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
    )

    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 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='Protocol settings for file service)')]
        [ProtocolSettings]
        $protocolSettings,
        [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='The file service properties for share soft delete.)')]
        [DeleteRetentionPolicy]
        $shareDeleteRetentionPolicy,
        [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,HelpMessage='The reference to call when you want to make a dependency to another resource')]
        [string]
        $pulumiid,
        [parameter(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["accountName"] = $accountName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

        $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 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='A name-value pair to associate with the container as metadata.)')]
        [hashtable]
        $metadata,
        [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='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(mandatory,HelpMessage='Pass in the resources you make to make this resource dependant on')]
        [object]
        $DependsOn
    )

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

        foreach($Dependency in $DependsOn)
        {
            if($Dependency -is [pulumiresource])
            {
                $resource.dependson += $Dependency.Reference()
            } else
            {
                $resource.dependson += $Dependency
            }
        }
        $resource.properties["accountName"] = $accountName
        $resource.properties["resourceGroupName"] = $resourceGroupName

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

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

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

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

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

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