どうぞ。あらかじめ支払う。:) 質問に直接答えるには、for
ループを使用してサーバーをループし、portqry
それぞれに対して a を実行します。 編集:あなたが見つけた PowerShell スニペットは、PortQry 依存関係を取り除くのに役立ちます。
@echo off
setlocal
set "servers=dev1 dev2 dev3 test1 test2 test2:8080 prod prod:443"
for %%I in (%servers%) do (
for /f "tokens=1,2 delims=:" %%a in ("%%I") do (
set "port=%%~b"
if not defined port set "port=80"
setlocal enabledelayedexpansion
call :handshake "%%~a" "!port!" && (
echo %%a port !port!: OK
) || (
echo %%a port !port!: Error
)
endlocal
)
)
goto :EOF
:handshake <server> <port>
powershell "$t=new-object Net.Sockets.TcpClient;$c=$t.BeginConnect('%~1',%~2,{},{});if($c.AsyncWaitHandle.WaitOne(1000)){$t.EndConnect($c);exit 0};exit 1"
exit /b %ERRORLEVEL%
PortQry 2.0を使用した元のソリューションは次のとおりです。
@echo off
setlocal
set "servers=dev1 dev2 dev3 test1 test2 test2:8080 prod prod:443"
for %%I in (%servers%) do (
for /f "tokens=1,2 delims=:" %%a in ("%%I") do (
set "port=%%~b"
if not defined port set "port=80"
setlocal enabledelayedexpansion
portqry -n "%%~a" -e "!port!" >NUL 2>NUL && (
echo %%a port !port!: OK
) || (
echo %%a port !port!: Error
)
endlocal
)
)
テストするのが Web サービスだけである場合は、別の方法でこれを行う方が理にかなっている可能性があります。COM オブジェクトを使用して、その依存関係Microsoft.XMLHTTP
を取り除くことができます。portqry
このようにして取得された応答は、HTTP サービスにより関連したものになります。(たとえば、ポート 8080 で実行されている VNC サーバーがあり、代わりに Web サービスがリッスンしていると予想されるportqry
場合、失敗を返す必要があるときに、おそらく成功を返すでしょう。)
とにかく、これを .bat スクリプトとして保存し、お好みで調整してください。
@if (@CodeSection == @Batch) @then
@echo off
setlocal
set "servers=dev1 dev2 dev3 test1 test2 test2:8080 prod prod:443"
for %%I in (%servers%) do (
for /f "tokens=1,2 delims=:" %%a in ("%%I") do (
set "port=%%~b"
if not defined port set "port=80"
setlocal enabledelayedexpansion
cscript /nologo /e:JScript "%~f0" "%%~a" "!port!" && (
echo %%a port !port!: OK
) || (
echo %%a port !port!: Error
)
endlocal
)
)
goto :EOF
@end // end batch / begin JScript chimera
var server = WSH.Arguments(0),
port = WSH.Arguments(1),
protocol = port == 443 ? 'https' : 'http',
URL = protocol + '://' + server + ':' + port + '/',
XHR = WSH.CreateObject('Microsoft.XMLHTTP');
XHR.open('GET', URL);
XHR.setRequestHeader('User-Agent','XMLHTTP/1.0');
XHR.send('');
while (XHR.readyState != 4) WSH.Sleep(25);
WSH.Quit(XHR.status - 200);