[英]Execute a URL from a command line without opening a browser in windows
因此,我将一个批处理文件放在一起,以在启动时运行,该文件执行少量进程,其中之一是在一组进程结束时执行某个程序的重新启动。 我一直在寻找如何在 Windows 的命令行中执行此操作的方法,但我需要能够在不打开浏览器的情况下执行此操作。 我需要的是在以下 url 中执行重启,而根本不打开浏览器。
http://192.168.1.100/cgi-bin/reboot
我尝试过的一切都打开了一个新的浏览器窗口。 如果可能的话,我不想下载任何东西来让它在 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 -help
不会打开浏览器窗口,并且具有很好的命令行选项(请参阅curl -help
),并且会返回错误代码以进行批处理文件错误处理。
您知道有时您提出的问题的答案不一定是您需要的答案吗? 我有一个模糊的怀疑,这可能是其中之一。
如果这是您尝试重新启动的 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 脚本宿主(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 服务器为网页提供服务所需的所有对象时会有些复杂。 如果你很好奇,它看起来像这样:
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 带有该功能。
尝试制作一个可以打开浏览器 Windows 但可能不会显示任何内容的 VBscript。
从 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>\")"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.