你知道有时候你问的问题的答案是not necessarily the answer you need?我有一个模糊的怀疑,这可能是其中一个时代。
如果这是您尝试重新启动的Windows计算机,则可以远程重新启动它,而无需使用远程主机提供的CGI脚本。如果您在触发PC上登录的帐户也具有远程PC上的权限,则可以使用shutdown
命令触发重新启动。
shutdown /m \\remotePC /r /t 0
在cmd控制台中执行shutdown /?
以获取更多信息。或者,如果您必须进行身份验证,则可以使用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,因此它应该在更多的计算机上运行。也可能使用.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慢。加载一秒钟或两秒钟(如果自Windows上次重新启动以来没有加载,则需要几秒钟);而cscript.exe
几乎立即发射。
使用xmlhttprequest,或使用PowerShell cmdlet下载'reboot'。我会在一两个小时内回答一个例子。 – rojo
如果你可以请给我一个例子,我将不胜感激。 – Destroconut