Norrin Rad
Norrin Rad

Reputation: 991

Clears Tags in Set-AzureRmTag using Automation Account

I'm tying to change a value on a tag, using an automation script. The users will have a startup script, which will change the shutdown tag key from true to false.

When I set the tags individually using the script below it sets the tag value to false. The current setting is true.

When I use the automation script it wipes all the tags, however If I specify the vm in the script the automaton account works and changes the key value from false to true.

I can't see what I'm missing. This is from a webhook and is running as a powershell script, not a workflow.

[CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True)]
        [object]$WebhookData            
    )

    Write-Output "------------------------------------------------"
    Write-Output "`nConnecting to Azure Automation"

    $Connection = Get-AutomationConnection -Name AzureRunAsConnection
    Add-AzureRMAccount -ServicePrincipal -Tenant $Connection.TenantID `
    -ApplicationId $Connection.ApplicationID -CertificateThumbprint $Connection.CertificateThumbprint

    $RunbookVersion = "0.0.17"
    $timeStartUTC     = (Get-Date).ToUniversalTime()

    Write-Output "Workflow started: Runbook Version is $RunbookVersion"
    Write-Output "System time is: $(Get-Date)"

    Write-Output "`nGetting tagged resources"
    Write-Output "------------------------------------------------"

    $ResourceGroupFilter  = ""

    $SupportedEnvironments = "DEV, Test, PREProd, Prod"

    $isWebhookDataNull = $WebhookData -eq $null
    Write-Output "Is webhook data null ? :  $($isWebhookDataNull)"

      # If runbook was called from Webhook, WebhookData will not be null.
    If ($WebhookData -ne $null) {
        # Collect properties of WebhookData
        $WebhookName     =     $WebhookData.WebhookName
        $WebhookHeaders  =     $WebhookData.RequestHeader
        $WebhookBody     =     $WebhookData.RequestBody

        $body = $WebhookBody | ConvertFrom-Json

        $UserEmail = $body.user.email
        Write-Output "Runbook started from webhook '$WebhookName' by '$($body.user.email)' for environment '$($body.environment)'"
        Write-Output "Message body: " $WebhookBody

    }
    else {
        Write-Error "Runbook mean to be started only from webhook."
    }

    If ($body.environment.ToUpper() -eq 'DEV') {       
        $ResourceGroupFilter = 'The-DEV-RG'
    }
    if ($ResourceGroupFilter -eq "") {
     Exit 1
    }
    if($VMRG -eq ''){
        Write-Output "No resource groups matched for selected environment. Webhook cant progress further, exiting.."
        Write-Error "No resource groups matched for selected environment. Webhook cant progress further, exiting.."
        Exit 1
    }   
            $rgs = Get-AzureRmResourceGroup | Where-Object {$_.ResourceGroupName -like "*$rg*"} 
        foreach ($rg in $rgs) 
        {
        $vms = Get-AzureRmVm -ResourceGroupName $rg.ResourceGroupName
            $vms.ForEach({
                $tags = $_.Tags
                $tags['ShutdownSchedule_AllowStop'] = "$False";
                Set-AzureRmResource -ResourceId $_.Id -Tag $tags -Force -Verbose
        })
        }
    ForEach ($vm in $vms) {
        Start-AzureRmVM -Name $vm.Name -ResourceGroupName $vm.ResourceGroupName -Verbose
    }

Thanks in advance :)

Upvotes: 1

Views: 203

Answers (1)

Shui shengbao
Shui shengbao

Reputation: 19195

The root reason is your local Azure Power Shell is latest version, but in Azure automation account, it is not latest version. I test in my lab, older version does not support this.

You need upgrade Azure Power Shell version. More information about this please see this answer.

Upvotes: 1

Related Questions