从命令行执行URL,而不用在Windows中打开浏览器

所以我把一个batch file放在一起,在启动时运行,执行less量进程,其中一个是在进程结束时执行某个程序的重新启动。 我一直在寻找如何在Windows命令行中做到这一点,但我需要能够做到这一点,而无需打开浏览器。 我需要的是在下面的URL中执行重新启动,根本不打开浏览器。

http://192.168.1.100/cgi-bin/reboot 

我试过的所有东西都打开了一个新的浏览器窗口。 如果可能的话,我不想下载任何东西来实现这个function。 感谢您的任何build议。

你知道有时候你问的答案不一定是你需要的答案吗? 我有一个模糊的怀疑,这可能是其中一个时代。

如果这是您试图重新启动的Windows计算机,则可以远程重新启动它,而无需使用远程主机提供的CGI脚本。 如果您在触发PC上登录的帐户也具有远程PC上的权限,则可以使用shutdown命令触发重新启动。

 shutdown /m \\remotePC /r /t 0 

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对象。 这个答案演示了这样的解析。 如果你得不到足够的, 这里有更多的例子 。


如果您希望以牺牲效率为代价简化一些操作,则可以调用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解决方案慢一两秒。 powershell.exe需要一两秒钟的时间才能加载(事实上,自从Windows上次重新启动以来,如果它没有被加载的话,实际上是几秒钟)。 而cscript.exe几乎立即触发。

我不认为Windows具有该功能。

尝试做一个VBscript,将打开浏览器的Windows,但不会显示任何东西也许。

如果你不能下载任何东西,那么Windows PowerShell是最好的选择。 您可以从PS脚本文件中调用它,也可以直接从批处理文件中的命令行调用它:

 powershell.exe -noprofile -command "Invoke-WebRequest -Uri http://192.168.1.100/cgi-bin/reboot" 

您也可以考虑Curl这种类型的过程。 在Windows中没有相同的东西,所以需要下载。

 curl http://192.168.1.100/cgi-bin/reboot 

Curl不会打开浏览器窗口,并且有很好的命令行选项(请参阅curl -help ),并将返回批处理文件错误处理的错误代码。