ご質問の回答がnot necessarily the answer you needであることは時々知っていますか?私はあの時代の一つかもしれないという曖昧な疑惑を持っています。
これは再起動しようとしているWindowsマシンの場合、リモートホストが提供するCGIスクリプトを使用せずにリモートで再起動できます。起動しているPCでログインしているアカウントにもリモートPCの権限がある場合は、shutdown
コマンドで再起動をトリガーできます。
shutdown /m \\remotePC /r /t 0
Do shutdown /?
詳細については、cmdコンソールを参照してください。認証する必要がある場合は、代わりにwmic
を使用できます。私が間違っていた場合は
wmic /node:remotePC /user:remotePCadmin /password:remotePCpass process call create "shutdown -r -t 0"
は、ここにあなたが尋ねた質問への答えです。リモートCGIスクリプトを実行する最も速い方法は、Windows Script Host(VBScriptまたはJScript)でXMLHTTPRequestを使用することです。ここに例があります。何が価値があるために
@if (@CodeSection == @Batch) @then
@echo off & setlocal
set "URL=http://192.168.1.100/cgi-bin/reboot"
cscript /nologo /e:jscript "%~f0" "%URL%"
goto :EOF
@end // end batch/begin JScript chimera
var x = WSH.CreateObject("Microsoft.XMLHTTP");
x.open("GET",WSH.Arguments(0),true);
x.setRequestHeader('User-Agent','XMLHTTP/1.0');
x.send('');
while (x.readyState != 4) WSH.Sleep(50);
必要に応じて、あなたもx.responseText
を解析することができます。フラットテキストとしてスクラップしたり、それを階層DOMオブジェクトとして評価することもできます。 This answer demonstratesそのような解析。そして、ちょうど十分に得ることができないなら、here are more examples。
効率を犠牲にしてより簡単な方法を使用したい場合は、PowerShellコマンドを呼び出すことができます。
@echo off & setlocal
set "URL=http://192.168.1.100/cgi-bin/reboot"
powershell "ipmo BitsTransfer; Start-BitsTransfer \"%URL%\" \"%temp%\a\""
del /q "%temp%\a"
goto :EOF
おそらく代わりに、一時ファイルを避けるためにInvoke-WebRequest
を使用することができますが、Invoke-WebRequest
はPowerShellのバージョン3以降が必要です。 Start-BitsTransfer
はPowerShellバージョン2で動作するため、より多くのコンピュータで動作するはずです。 [System.Net]::WebRequest
.NETクラスを使用することもできますが、HTTPヘッダーを取得してからWebサーバーにWebページを提供することに進むために必要なすべてのオブジェクトを少し複雑にします。好奇心が強い場合は、次のようになります。
powershell "[void](new-object IO.StreamReader([Net.WebRequest]::Create(\"%URL%\").GetResponse().GetResponseStream())).ReadToEnd()"
私は単純なものとは言えません。簡単に読みやすくするためのハイブリッド形式では:
<# : batch portion
@echo off & setlocal
set "URL=http://192.168.1.100/cgi-bin/reboot"
powershell -noprofile "iex (${%~f0} | out-string)"
goto :EOF
: end batch/begin PowerShell hybrid chimera #>
$request = [Net.WebRequest]::Create($env:URL)
$response = $request.GetResponse()
$stream = $response.GetResponseStream()
$reader = new-object IO.StreamReader($stream)
[void]$reader.ReadToEnd()
いずれの場合も、任意のPowerShellの解決策は、第二またはこの回答の上部近くのJScriptソリューションよりも2遅くなります。 powershell.exe
には2〜2秒かかります(実際には、Windowsが最後に再起動されてからロードされていない場合は数秒です)。 cscript.exe
はほぼ即座に発火する。
xmlhttprequestを使用するか、PowerShellコマンドレットを使用して 'reboot'をダウンロードします。私は1時間か2分で例を挙げて答えます。 – rojo
もしあなたが私にそれを感謝したい例を与えてくださいできます。 – Destroconut