2016-04-29 39 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,但不會顯示任何東西也許。

相關問題