无需在Windows中打开浏览器即可从命令行执行URL

时间:2016-04-29 20:47:32

标签: windows batch-file

因此,我将一个批处理文件放在一起,在启动时运行,执行少量进程,其中一个是在进程集结束时执行某个程序的重启。我一直在寻找如何在Windows命令行中执行此操作,但我需要能够在不打开浏览器的情况下执行此操作。我需要的是在不打开浏览器的情况下在以下URL中执行重启。

http://192.168.1.100/cgi-bin/reboot

我尝试过的所有内容都打开了一个新的浏览器窗口。如果可能的话,我不想下载任何内容以便在Windows中进行此操作。感谢您的任何建议。

4 个答案:

答案 0 :(得分:3)

您知道有时问题的答案是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脚本宿主(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解决方案慢一两秒。 powershell.exe需要一两秒才能加载(如果自上次重启Windows以来未加载,则需要几秒钟);而cscript.exe几乎立即开火。

答案 1 :(得分:1)

如果您无法下载任何内容,则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),并将返回错误代码以进行批处理文件错误处理。

答案 2 :(得分:1)

我不认为Windows会附带该功能。

尝试制作一个可以打开浏览器Windows的VBscript,但不会显示任何内容。

答案 3 :(得分:0)

要直接从Win CMD处理URL响应,

powershell "Invoke-WebRequest -Uri <url>"

要保存服务器对文件的响应:

powershell "Invoke-WebRequest -Uri <url> -outfile <file.ext>"

.NET解决方案;来自Win CMD:

powershell "[System.Net.Webclient]::new().DownloadString(\"<URL>\")"
相关问题