不等待成功响应的网站的Powershell预热脚本

时间:2019-03-02 10:01:14

标签: powershell

我有以下预热脚本,该脚本非常适合我的应用程序(具有多个工作进程的IIS应用程序)。需要对24台服务器进行大约1200个请求才能充分预热它们。

我的问题是,由于请求正在等待请求成功返回,因此大约需要25分钟才能完成。

是否有一种方法可以仅触发请求并继续执行而无需等待响应?

这是使用以下命令的powershell即时通讯

$Site = 'http://myipaddress173.28.36.20:1155/api/uri' #, 'http://173.28.20.78:1155/api/uri'
@($Site) | % {
Write-Host "Warming up $($_)"
$i=0
Do {
    $res = Invoke-RestMethod $_ -Method Post -ContentType 'application/json' -Headers @{Authorization="Bearer GHDSBBSXHHX637373dg"; Host="myurl.com"} -Body '{"accountId": 0,"domain":"my","language":"en"}'
    Write-Host "$i = $($_)"
    $i++
} While ($i -le 1200)

1 个答案:

答案 0 :(得分:0)

是的,每个请求都在单独的线程中完成。但是您的命令在这里也与我有关。我假设您实际上并未使用此代码http://myipaddress173.28.36.20:1155/api/uri,并且“ MyIPaddress”是剪切/粘贴错误。

另外,您似乎对实际结果并不真正感兴趣,而这1200似乎只是您试图针对同一地址生成1200次匹配。那真的是你想要的吗?我的建议是:

# Force to an array, even if just one.
$Site = @('http://myipaddress173.28.36.20:1155/api/uri',http://173.28.20.78:1155/api/uri')

@($Site) | % {
   Write-Host "Warming up $($_)"
   $i=0

$Body = @{
"accountId": 0
"domain":"my"
"language":"en"}

$Headers = @{
Authorization="Bearer GHDSBBSXHHX637373dg"
Host="myurl.com"} 

$commands = "Invoke-RestMethod $_ -Method Post -ContentType 'application/json' -Headers $headers -Body $body"

Do {
    invoke-command $command -ComputerName localhost
    Write-Host "$i = $($_)"
#  Suggest adding a sleep here..
#  sleep -seconds 1
    $i++
} While ($i -le 1200)

现在,这会将1200次发布到特定的URL(如果我正确执行了代码),然后继续浏览下一个。

此功能可以使您的计算机从慢速运行到爬网,因为它在一瞬间就产生了很多许多网站点击(并且可能导致服务器在一段时间内遭受拒绝服务, (但很短)),以及耗尽客户端可以自由建立连接的出站端口数量。