2009-12-31 28 views
52

Tôi có một trang web được lưu trữ trên hộp Windows mà tôi cần đảm bảo được tải ít nhất một lần/ngày. kế hoạch hiện tại của tôi là tạo ra một nhiệm vụ lên kế hoạch mở Internet Explorer và truy cập các URL:Phương pháp được đề xuất để tải URL thông qua tác vụ theo lịch trên Windows

"C:\Program Files\Internet Explorer\iexplore.exe" myurl.com/script_to_run_daily.aspx 

Đây là đơn giản để cài đặt và hoạt động tốt, nhưng nó đập vào mắt tôi như một hack bởi vì Internet Explorer thực sự có để mở và nhấn URL này. Tôi không cần bất kỳ đầu vào trở lại từ trang này, nó chỉ đơn giản là lưu trữ dữ liệu lưu trữ trong các tập tin khi nó nhấn.

Có cách nào thực hiện điều này không? Trong trường hợp nó quan trọng, đây là một trang web VB.net.

Cảm ơn trước!

+0

Trong khi tập lệnh VB thích hợp là cách tốt hơn để bạn có thể muốn lưu ý rằng có thể dừng tác vụ nếu nó chạy lâu hơn một giờ trong tab cài đặt của Trình lập lịch tác vụ. –

Trả lời

106

Như đã chỉ ra bởi Remus Rusanu, PowerShell sẽ là con đường để đi. Dưới đây là một đơn giản một-liner mà bạn có thể sử dụng để tạo một nhiệm vụ theo lịch trình, mà không cần phải viết một file .ps1 riêng biệt:

powershell -ExecutionPolicy unrestricted -Command "(New-Object Net.WebClient) 
              .DownloadString(\"http://localhost/cron.aspx\")" 

Bạn có thể tạo ra các nhiệm vụ theo lịch trình như thế này:

schtasks /create /tn "MyAppDailyUpdate" /tr "powershell -ExecutionPolicy unrestricted 
     -Command \"(New-Object Net.WebClient) 
       .DownloadString(\\\"http://localhost/cron.aspx\\\")\"" /sc DAILY /ru System 

này ví dụ thiết lập nhiệm vụ chạy hàng ngày - tham khảo schtasks.exe documentation để có thêm tùy chọn.

+0

Bạn có một ví dụ bao gồm một chuỗi truy vấn (và thoát khỏi một ampsersand không?) –

+0

@PaulGeorge thay thế ký hiệu bằng^và nên thực hiện thủ thuật. –

+5

Điều này làm việc cho tôi, dấu nháy đơn, không thay đổi thành dấu và: powershell -ExecutionPolicy unrestricted -Command "(New-Object Net.WebClient) .DownloadString ('http: //localhost/cron.aspx? Var1 = cat & var2 = dog') " –

5

Có các phiên bản Windows của các công cụ yêu cầu http dòng lệnh phổ biến nhất, chẳng hạn như cURLwget. Bạn chắc chắn có thể tạo ra một nhiệm vụ theo lịch trình mà sẽ chạy một trong những điều này. Tôi cũng đã thực hiện điều này từ bên trong một kịch bản Windows Scripting Host, nếu bạn cần lặp lại hoặc tạo các tham số URL khi đang di chuyển hoặc một số thông số như vậy.

+0

+1 cho curl và wget –

+0

+1 cho nhiều tùy chọn tuyệt vời, tôi đặc biệt thích ý tưởng Windows Scripting Host, nhưng đã đi với giải pháp của Rick kể từ khi anh ta đi thêm dặm w/giải pháp hoàn chỉnh. Cảm ơn những ý tưởng cho tương lai mặc dù! –

38

Bạn có thể lên lịch một tập lệnh PowerShell. PS là khá mạnh mẽ và cung cấp cho bạn truy cập vào toàn bộ. Net Framework, cộng với thay đổi. Dưới đây là ví dụ:

$request = [System.Net.WebRequest]::Create("http://www.example.com") 
$response = $request.GetResponse() 
$response.Close() 
+0

Đây là giải pháp sạch nhất – Liam

+0

giải pháp tốt đẹp nó hoạt động –

17

Một tùy chọn khác là VB Script. Ví dụ (save as file.vbs):

sSrcUrl = "http://yourdomain.com/yourfile.aspx" 
sDestFolder = "C:\yourfolder\" 
sImageFile = "filename.txt" 
set oHTTP = WScript.CreateObject("MSXML2.ServerXMLHTTP") 
oHTTP.open "GET", sSrcUrl, False 
oHTTP.send "" 
set oStream = createobject("adodb.stream") 
Const adTypeBinary = 1 
Const adSaveCreateOverWrite = 2 
oStream.type = adTypeBinary 
oStream.open 
oStream.write oHTTP.responseBody 
oStream.savetofile sDestFolder & sImageFile, adSaveCreateOverWrite 
set oStream = nothing 
set oHTTP = nothing 
WScript.Echo "Done..." 
+0

Ah, tôi đã nghĩ về VBScript. Ý tưởng tuyệt vời. +1 và chấp nhận cho bạn. Những người khác đã có những ý tưởng tuyệt vời quá, nhưng bạn đã làm công việc khó khăn của trình bày một giải pháp hoàn chỉnh! Rất cám ơn Rick! –

+0

Tôi sẽ làm như thế nào trong máy chủ ubuntu? thay thế cho vbs? java? –

5

This SuperUser.com answer đơn giản hơn rất nhiều.

cmd /c start http://example.com/somePage.html 

Cụ thể hơn, dưới đây là cách có vẻ trong một nhiệm vụ Windows Scheduled:

enter image description here

Mặc dù, điều này có khả năng chạy mặc định của trình duyệt được cấu hình ở chế độ nền. Nếu nó phải là IE, thì cần được cấu hình. Đây có thể là lựa chọn tốt nhất. Thật tốt khi có giải pháp chạy trực tiếp dưới dạng bước Hành động của Tác vụ. Tất cả thông tin đều ở ngay đó. Thậm chí tốt hơn nếu nó là terse, vì vậy bạn có thể thấy hầu hết các lệnh mà không cần cuộn qua hộp văn bản.

wget/CURL - tốt thay thế

Nếu bất cứ điều gì, wget sẽ là một lựa chọn tốt để cmd..start..url. I'm not the first to think of this. Nhược điểm là bạn phải tải xuống WGET cho Windows để nó hoạt động - nó không phải là một giải pháp out-of-the-box. Nhưng WGET là nhẹ hơn và quan trọng là cung cấp cho bạn nhiều hơn điện. Bạn có thể gửi nhiều loại cuộc gọi URL khác.Điều này bao gồm các phương thức HTTP khác nhau như POST, tiêu đề tùy chỉnh và hơn thế nữa. Curl là một lựa chọn tốt, thay vì Wget - chúng có các tính năng khác nhau, nhiều sự chồng chéo.

PowerShell - không được khuyến khích

PowerShell, có thể được coi là một lựa chọn "nhẹ", nhưng bạn cũng đang tải lên một PowerShell (Net AppDomain) trong đó có một chút chậm trễ, và cũng là chỉ huy lâu hơn rất nhiều và do đó khó nhớ hơn nếu bạn thường xuyên làm điều này. Vì vậy PowerShell không phải là lựa chọn tốt nhất.

VBScript - không được khuyến khích

Rõ ràng, VBScript là ít recommendable. Bạn có nhiều hơn nữa bạn sẽ cần phải nhớ, và kịch bản là khá lớn. Trừ khi bạn có các bước khác đảm bảo một tập lệnh, không có một tài nguyên hoàn toàn riêng biệt chỉ để thực hiện điều gì đó bạn có thể thực hiện trực tiếp trong Task Scheduled.

Ngoài ra, xem câu hỏi tương tự:

+0

Hi @Todd, giải pháp này sẽ mở một trình duyệt không chạy ở chế độ nền – MichaelMao

+0

Thao tác nền không phải là yêu cầu của op. Mặc dù đó là đủ dễ dàng để làm với cmd, tôi sẽ nghĩ rằng, kết hợp với các tùy chọn này. – Todd

+0

Bạn nói đúng, tôi thiếu – MichaelMao

8

Tính đến PowerShell 5.0, curl là một bí danh cho Invoke-WebRequest, vì vậy bạn có thể tạo một Scheduled Task như sau:

Action: Start a program 
Program/script: powershell 
Add arguments: curl http://www.example.com/foo/bar 

Bạn cũng có thể sử dụng Invoke-WebRequest, nhưng curl ngắn gọn hơn.

+0

Như thường lệ, câu trả lời đúng luôn là cuối cùng. Sử dụng cmd/c sẽ mở một cửa sổ trình duyệt mà bạn không nhất thiết muốn – Hypersapien

Các vấn đề liên quan