Search code examples
powershellmicrosoft-graph-apiazure-storage-account

PowerShell REST DELETE from Azure Storage Account Table


im struggling with an REST Method to DELETE an Entry via PowerShell from an Azure Storage Account. Im authenticating with an SharedAccessSignature (SAS) (has rights for read, write and delete) to create entries but i dont get this to work to also DELETE entries. Has anyone created an PowerShell script to delete form Azure Storage Account Tables from PowerShell yet and could send me an code snippet on how to do this?

Im not using the PowerShell Module im using the "Invoke-WebRequest" CMDlet. Im new to REST APIs so maybe i just dont have the right idea? For the entry creation im using the URI in the Invoke-WebRequest call to give the SAS Token as authentication but changing the "-Method POST" to "-Method DELETE" does not worked.

Thanks for your help


Solution

  • To delete the table by using REST method, make use of below sample query if helpful:

    • Instead of using "Invoke-WebRequest", make use of "Invoke-RestMethod" like below
    function DeleteTableEntity($TableName,$PartitionKey,$RowKey) {
    $resource = "$tableName(PartitionKey='$PartitionKey',RowKey='$Rowkey')"
    $table_url = "https://$storageAccount.table.core.windows.net/$resource"
    $GMTTime = (Get-Date).ToUniversalTime().toString('R')
    $stringToSign = "$GMTTime`n/$storageAccount/$resource"
    $hmacsha = New-Object System.Security.Cryptography.HMACSHA256
    $hmacsha.key = [Convert]::FromBase64String($accesskey)
    $signature = $hmacsha.ComputeHash([Text.Encoding]::UTF8.GetBytes($stringToSign))
    $signature = [Convert]::ToBase64String($signature)
    $headers = @{
    'x-ms-date' = $GMTTime
    Authorization = "SharedKeyLite " + $storageAccount + ":" + $signature
    Accept = "application/json;odata=minimalmetadata"
    'If-Match' = "*"
    }
    $item = Invoke-RestMethod -Method DELETE -Uri $table_url -Headers $headers -ContentType application/http
    }
    

    For more in detail, please refer below link:

    Use Azure Table Storage via PowerShell and the Rest API - GCITS

    • Otherwise, you can install PowerShell module, and make use of below script like below:
    $resourceGroup = 'ResourceGroupName'
    $storageAccountName = 'StorageAccountName'
    $storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroup -Name $storageAccountName
    $ctx = $storageAccount.Context
    $tables = (Get-AzStorageTable -Context $Ctx).name
    ForEach ($table in $tables) {
    Remove-AzStorageTable –Name $table –Context $ctx -Force
    }
    

    For more in detail, please refer below link:

    Delete all tables in Azure storage using powershell | Mike Says Meh.