【问题标题】:Invoke-WebRequest on all Azure app service instances在所有 Azure 应用服务实例上调用 WebRequest
【发布时间】:2020-07-17 08:32:08
【问题描述】:

我想调用所有 azure 应用服务实例的 url 列表

Invoke-WebRequest -UseBasicParsing -uri $url -Method Get

此命令不适用于多个 Web 应用实例

我尝试了以下脚本,它运行并显示所有实例和网站状态的资源 ID 200 OK

  $webSiteInstances = Get-AzureRmResource -ResourceGroupName $rg -ResourceType 

  Microsoft.Web/sites/instances -Name $webapp -ApiVersion 2016-03-01

 foreach ($instance in $webSiteInstances)
 {
 $instanceId = $instance.Name

"Going to enumerate all processes on {0} instance" -f $instanceId

$processList =  Get-AzureRmResource -ApiVersion 2016-03-01 -ResourceId $resourceID

foreach ($process in $processList){
    Invoke-WebRequest -UseBasicParsing -uri $url -Method Get
}

}

问题是我不确定它是否真的为每个实例运行,如果不是,我该怎么做?

【问题讨论】:

    标签: azure-web-app-service invoke-webrequest


    【解决方案1】:

    要请求 Web 应用程序的特定实例,您需要在请求中添加一个 cookie 以通过使用实例名称设置 ARRAffinity cookie 来瞄准特定实例,请参阅 here

    所以你的脚本应该如下所示,它在我这边运行良好。

    $groupname = "xxxxxx"
    $webappname = "joyweba"
    $url = "https://joyweba.azurewebsites.net"
    
    $webSiteInstances = Get-AzureRmResource -ResourceGroupName $groupname -ResourceType Microsoft.Web/sites/instances -Name $webappname -ApiVersion 2016-03-01
    
    foreach ($instance in $webSiteInstances)
    {
        $instanceId = $instance.Name
    
        "Going to enumerate all processes on {0} instance" -f $instanceId
    
        $s = New-Object Microsoft.PowerShell.Commands.WebRequestSession
        $c = New-Object System.Net.Cookie('ARRAffinity',$instanceId,'/',"$webappname.azurewebsites.net")
        $s.Cookies.Add($c)
    
        Invoke-WebRequest -UseBasicParsing -Method Get -Uri $url -WebSession $s
    }
    

    我的网络应用中有三个实例,如果你通过 fiddler 捕获请求,那就更清楚了。

    【讨论】:

    • 是的,这似乎只有在应用服务上实际打开会话亲和性时才有效:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多