2016-04-29 40 views
1

因此,我将一个批处理文件放在一起,以便在启动时运行少量进程,其中一个是执行某个程序的重启这组过程的结束。我一直在寻找如何在Windows命令行中做到这一点,但我需要能够做到这一点,而无需打开浏览器。我需要的是在不打开浏览器的情况下在下面的URL中执行重新启动。从命令行执行URL而无需在windows中打开浏览器

http://192.168.1.100/cgi-bin/reboot 

我试过的所有东西都打开了一个新的浏览器窗口。如果可能的话,我不想下载任何东西来获取这些信息。感谢您的任何建议。

+0

使用xmlhttprequest,或使用PowerShell cmdlet下载'reboot'。我会在一两个小时内回答一个例子。 – rojo

+0

如果你可以请给我一个例子,我将不胜感激。 – Destroconut

回答

2

你知道有时候你问的问题的答案是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 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对象。 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,因此它应该在更多的计算机上运行。也可能使用.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的溶液2慢。加载一秒钟或两秒钟(如果自Windows上次重新启动以来没有加载,则需要几秒钟);而cscript.exe几乎立即发射。

+0

感谢您的详细回复。正在重新启动的机器不是Windows机器,我想我应该在原题中说过。我将尝试你的第二个和第三个解决方案,看看哪一个最适合我所寻找的。 – Destroconut

+0

@Destroconut什么是判决? – rojo

+0

当我尝试运行powershell脚本时,powershell应用程序窗口打开,然后很快关闭,但所需的结果不存在。此外,它打开得很快,我可以阅读文本,看看发生了什么。我可能不得不将所有东西都卷走......不想这样做。 – Destroconut

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 -help),并且将返回错误代码为批处理文件的错误处理。

+0

感谢您的建议,我会尝试它,让你现在它是如何结果。 – Destroconut

+0

我真的很想找到一种方法来完成这个任务,而不需要额外的下载,因为我将不得不把这个放在多台机器上,我可能无法下载到。 – Destroconut

+0

'Invoke-WebRequest'对于Windows 10(也可能是8.x?)可以正常工作,但是从批处理脚本调用时,我使用的每台Windows 7机器都默认使用PowerShell版本2。 – rojo

1

我不认为Windows具有该功能。

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

相关问题