Public/Update-AzStorageTableRow.ps1
function Update-AzStorageTableRow { <# .SYNOPSIS Updates a table entity .DESCRIPTION Updates a table entity. To work with this cmdlet, you need first retrieve an entity with one of the Get-AzureStorageTableRow cmdlets available and store in an object, change the necessary properties and then perform the update passing this modified entity back, through Pipeline or as argument. Notice that this cmdlet accepts only one entity per execution. This cmdlet cannot update Partition Key and/or RowKey because it uses those two values to locate the entity to update it, if this operation is required please delete the old entity and add the new one with the updated values instead. .PARAMETER Table Table object of type Microsoft.WindowsAzure.Commands.Common.Storage.ResourceModel.AzureStorageTable where the entity exists .PARAMETER Entity The entity/row with new values to perform the update. .EXAMPLE # Updating an entity $saContext = (Get-AzStorageAccount -ResourceGroupName $resourceGroup -Name $storageAccount).Context $table = Get-AzStorageTable -Name $tableName -Context $saContext [string]$filter = [Microsoft.WindowsAzure.Storage.Table.TableQuery]::GenerateFilterCondition("firstName",[Microsoft.WindowsAzure.Storage.Table.QueryComparisons]::Equal,"User1") $person = Get-AzStorageTableRowByCustomFilter -table $table -customFilter $filter $person.lastName = "New Last Name" $person | Update-AzStorageTableRow -table $table #> [CmdletBinding()] param ( [Parameter(Mandatory=$true)] $table, [Parameter(Mandatory=$true,ValueFromPipeline=$true)] $entity ) # Only one entity at a time can be updated $updatedEntityList = @() $updatedEntityList += $entity if ($updatedEntityList.Count -gt 1) { throw "Update operation can happen on only one entity at a time, not in a list/array of entities." } $updatedEntity = New-Object -TypeName "Microsoft.WindowsAzure.Storage.Table.DynamicTableEntity" -ArgumentList $entity.PartitionKey, $entity.RowKey # Iterating over PS Object properties to add to the updated entity foreach ($prop in $entity.psobject.Properties) { if (($prop.name -ne "PartitionKey") -and ($prop.name -ne "RowKey") -and ($prop.name -ne "Timestamp") -and ($prop.name -ne "Etag") -and ($prop.name -ne "TableTimestamp")) { $updatedEntity.Properties.Add($prop.name, $prop.Value) } } $updatedEntity.ETag = $entity.Etag # Updating the dynamic table entity to the table return ($table.CloudTable.ExecuteAsync((invoke-expression "[Microsoft.WindowsAzure.Storage.Table.TableOperation]::InsertOrMerge(`$updatedEntity)"))) } |