Checks/Azure/Test-StorageEnsureFileSharesSoftDeleteIsEnabled.ps1

function Test-StorageEnsureFileSharesSoftDeleteIsEnabled {
    <#
    .SYNOPSIS
        Tests if soft delete is enabled for Azure File Shares.

    .DESCRIPTION
        Ensures that soft delete is enabled for Azure File Shares to protect
        against accidental or malicious deletion of important data.

    .PARAMETER CheckMetadata
        Hashtable containing check metadata from AzureChecks.json.

    .OUTPUTS
        [CIEMScanResult[]] Array of scan result objects.
    #>

    [CmdletBinding()]
    [OutputType([CIEMScanResult[]])]
    param(
        [Parameter(Mandatory)]
        [hashtable]$CheckMetadata
    )

    $ErrorActionPreference = 'Stop'

    foreach ($subscriptionId in $script:StorageService.Keys) {
        $storageData = $script:StorageService[$subscriptionId]

        foreach ($account in $storageData.StorageAccounts) {
            $accountName = $account.name
            $resourceId = $account.id

            # Get file service configuration for this account
            $fileService = $storageData.FileServices[$accountName]

            if (-not $fileService) {
                # File service may not be configured or accessible
                $status = 'FAIL'
                $statusExtended = "Storage account '$accountName' file service configuration could not be retrieved. File share soft delete status is unknown."
            }
            else {
                # Strict mode safe property access
                $shareDeleteRetentionPolicy = if ($fileService.PSObject.Properties['properties'] -and
                    $fileService.properties.PSObject.Properties['shareDeleteRetentionPolicy']) {
                    $fileService.properties.shareDeleteRetentionPolicy
                }
                else {
                    $null
                }
                $isEnabled = if ($shareDeleteRetentionPolicy -and $shareDeleteRetentionPolicy.PSObject.Properties['enabled']) {
                    $shareDeleteRetentionPolicy.enabled
                }
                else {
                    $false
                }
                $retentionDays = if ($shareDeleteRetentionPolicy -and $shareDeleteRetentionPolicy.PSObject.Properties['days']) {
                    $shareDeleteRetentionPolicy.days
                }
                else {
                    0
                }

                if ($isEnabled -eq $true) {
                    $status = 'PASS'
                    $statusExtended = "Storage account '$accountName' has file share soft delete enabled with $retentionDays days retention."
                }
                else {
                    $status = 'FAIL'
                    $statusExtended = "Storage account '$accountName' does not have file share soft delete enabled. Enable soft delete to protect against accidental deletion."
                }
            }

            [CIEMScanResult]::Create($CheckMetadata, $status, $statusExtended, $resourceId, $accountName, $account.location)
        }
    }
}