你知道有時候你問的問題的答案是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
幾乎立即發射。
使用xmlhttprequest,或使用PowerShell cmdlet下載'reboot'。我會在一兩個小時內回答一個例子。 – rojo
如果你可以請給我一個例子,我將不勝感激。 – Destroconut