所以我把一个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
),并将返回批处理文件错误处理的错误代码。