We need to stop the azure VM because azure cast each running cast based on used .hence we created powershell scripts to start to stop the Vms based on running .
param(
     [Parameter (Mandatory = $false)]
     [object] $WebhookData
 )
 $WebhookData  
  
 if($WebhookData){
     $parameters=(ConvertFrom-Json -InputObject $WebhookData.RequestBody) 
     if($parameters.callBackUri) {$callBackUri=$parameters.callBackUri}
 }
$VMAction=$parameters.VMAction
Write-Output $VMAction
$ResourceGroupName="ResourceGroupName"
$VirtualMachines="VirtualMachines"
$tenantId="tenantId"
$date = Get-Date
$day = [int]$date.day
Write-Host "Set int date........."
Write-Host 'Day of the month........'$day 
foreach ($VirtualMachine in $VirtualMachines)  
{
    Write-Output "Loop Running for Running for $($VirtualMachine)"
    #$myVirtualMachine = Get-AzAnalysisServicesServer -ResourceGroupName $ResourceGroupName -Name $VirtualMachine
	$pscredential = Get-AutomationPSCredential -Name 'dlake-pipeline-spn'
    Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId
	$VMDetail = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $VirtualMachine  -Status
       
	foreach ($VMStatus in $VMDetail.Statuses)
	{ 
		  if ($VMStatus.Code -match "PowerState/")
		  {
			$VMStatusDetail = $VMStatus.DisplayStatus
		  }
		  else
		  {
			$VMStatusDetail = "Not Found"
		  }
}
	
	
    if (!$VMDetail)
    {
        Write-Error "$($VirtualMachine) not found in $($ResourceGroupName)"
        return
    }
    else
    {
        Write-Output "Current status of $($VirtualMachine): $($VMStatusDetail)"
    }
	#Start Azure VM
    if (($VMAction -eq "Start" -And $VMStatusDetail -eq "VM deallocated"))
    {
        Write-Output "Now starting $($VirtualMachine)"
        $null = Start-AzVM -ResourceGroupName $ResourceGroupName -Name $VirtualMachine
    }
    # Stop Azure VM
    elseif(($VMAction -eq "Stop" -And $VMStatusDetail -eq "VM running"))
    {
		Write-Output "Now Ready to stop $($VirtualMachine)"
		if ($day -ge 4)
		{
		    Write-Output "Now stopping $($VirtualMachine)"
			Write-Output "If block for stopping Server..day greater than $($day)" 
		    $null = Stop-AzVM -ResourceGroupName $ResourceGroupName -Name $VirtualMachine -Force
        }			
    }
	$body = [ordered]@{
    output = @{Message = "Success"}
    statusCode = "200"
    }
$bodyJson = $body | ConvertTo-Json
if($callBackUri){
    Invoke-WebRequest -Uri $callBackUri -UseBasicParsing -Method Post -Body $bodyJson -ContentType "application/json"
}
}
We can use above scripts and please create credential using SPN on azure active directly else its will ask each time to auththe resource
