Public/Add-pseAzTableRowUsingSAS.ps1
function Add-pseAzTableRowUsingSAS { <# .SYNOPSIS Adds a new row to an Azure Table Storage using a Shared Access Signature (SAS) token. .DESCRIPTION This function allows you to add a new row to an Azure Table Storage using a SAS token for authentication. You can specify the table name, storage account, SAS token, partition key, row key, a list of properties to add, and the method (default is 'Put'). .PARAMETER TableName The name of the Azure Table to add the row to. .PARAMETER StorageAccount The name of the Azure Storage Account containing the table. .PARAMETER SASToken The Shared Access Signature (SAS) token for authenticating with the Azure Table Storage. .PARAMETER PartitionKey (Optional) The partition key for the new row. Default is '1'. .PARAMETER Key The row key for the new row. .PARAMETER PropertyList An array of properties to add. Each property should be in the format of a key-value pair. .EXAMPLE Add a new row to the table: $PropertyListFilter = @{ Device_Name = 'CRES-1234' Owner = 'owen.heaume' DeviceType = 'Faculty' } write-host "Adding new row to table [$tablename]" -ForegroundColor DarkCyan Add-pseAzTableRowUsingSAS -TableName $tablename -storageAccount $storageAccount -sastoken $sasWriteToken -key 'C3P0' -PropertyList $PropertyListFilter .NOTES Author : owen.heaume Version : 1.0.0 - Initial release #> [cmdletbinding()] param ( [Parameter(Mandatory = $true)] [string]$TableName, [Parameter(Mandatory = $true)] [string]$StorageAccount, [Parameter(Mandatory = $true)] [string]$SasToken, [parameter(Mandatory = $false)] [string]$PartitionKey = '1', [Parameter(Mandatory = $true)] [string]$Key, [Parameter(Mandatory = $true)] [array]$PropertyList ) Write-Verbose "Adding row to $tableName" $method = 'put' $resource = "$tableName(PartitionKey='$partitionkey',RowKey='$key')" $table_url = "https://$storageAccount.table.core.windows.net/$resource$sasToken" $GMTTime = (Get-Date).ToUniversalTime().toString('R') $headers = @{ 'x-ms-date' = $GMTTime; Accept = 'application/json;odata=nometadata' } $body = $PropertyList | ConvertTo-Json Try { Invoke-RestMethod -Method $method -Uri $table_url -Headers $headers -ContentType application/json -Body $body -UseBasicParsing | Out-Null Write-Verbose "OK" } catch [System.Net.WebException] { if ($_.Exception.Message -contains "The remote server returned an error: (404) Not Found.") { Write-Error "Table [$TableName] not found. Please check that the table exists and that you have not made a typo. $_" } elseif ($_.Exception.Message -match "The remote name could not be resolved") { Write-Error "Storage account [$StorageAccount] not found. Please check that the storage account exists and that you have not made a typo. $_" } else { # Handle other WebExceptions Write-Error "A WebException occurred: $_.Exception.Message)" } } catch { Write-Error "An error occurred: $_" } } |