高级应用程序的Powershell在Azure Web应用程序上重新启动

问题描述:

可以使用Restart-Azure Rm Web App PowerShell重新启动Web应用程序,但这将同时重新启动计划中的所有服务器,从而缩短停机时间。高级应用程序的Powershell在Azure Web应用程序上重新启动

Azure门户具有“高级应用程序重新启动”功能,该功能在重新启动各个实例之间使用时间延迟。

有没有办法从PowerShell调用它?

+0

有任何更新,如果你觉得我的回答是有用/有帮助。请将其标记为答案,以便其他人可以从中受益。 –

根据您的描述,我建议您可以首先使用Get-AzureRmResource命令在您的Web应用程序中查找每个实例的进程。然后你可以使用Remove-AzureRmResource来停止这些进程。然后,当您访问Azure Web应用程序时,Azure会自动创建新实例的进程以运行您的应用程序。

更多细节,你可以参考下面的PowerShell代码:

Login-AzureRmAccount 
Select-AzureRmSubscription -SubscriptionId '{your subscriptionid}' 

$siteName = "{sitename}" 
$rgGroup = "{groupname}" 

$webSiteInstances = @() 

#This gives you list of instances 
$webSiteInstances = Get-AzureRmResource -ResourceGroupName $rgGroup -ResourceType Microsoft.Web/sites/instances -ResourceName $siteName -ApiVersion 2015-11-01 

$sub = (Get-AzureRmContext).Subscription.SubscriptionId 

foreach ($instance in $webSiteInstances) 
{ 
    $instanceId = $instance.Name 
    "Going to enumerate all processes on {0} instance" -f $instanceId 

    # This gives you list of processes running 
    # on a particular instance 
    $processList = Get-AzureRmResource ` 
        -ResourceId /subscriptions/$sub/resourceGroups/$rgGroup/providers/Microsoft.Web/sites/$sitename/instances/$instanceId/processes ` 
        -ApiVersion 2015-08-01 

    foreach ($process in $processList) 
    {    
     if ($process.Properties.Name -eq "w3wp") 
     {    
      $resourceId = "/subscriptions/$sub/resourceGroups/$rgGroup/providers/Microsoft.Web/sites/$sitename/instances/$instanceId/processes/" + $process.Properties.Id    
      $processInfoJson = Get-AzureRmResource -ResourceId $resourceId -ApiVersion 2015-08-01          

      # is_scm_site is a property which is set 
      # on the worker process for the KUDU 

       $computerName = $processInfoJson.Properties.Environment_variables.COMPUTERNAME 

       if ($processInfoJson.Properties.is_scm_site -ne $true) 
      { 
       $computerName = $processInfoJson.Properties.Environment_variables.COMPUTERNAME 
       "Instance ID" + $instanceId + "is for " + $computerName 

       "Going to stop this process " + $processInfoJson.Name + " with PID " + $processInfoJson.Properties.Id 

       # Remove-AzureRMResource finally STOPS the worker process 
       $result = Remove-AzureRmResource -ResourceId $resourceId -ApiVersion 2015-08-01 -Force 

       if ($result -eq $true) 
       { 
        "Process {0} stopped " -f $processInfoJson.Properties.Id 
       } 
      }  
     } 

    } 
} 

结果: enter image description here

+0

这是一种很好的,可行的方法实现。希望在某些时候它只是Restart- Azure Rm Web App cmdlet的一个选项。 –