繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM