2013-07-05 28 views
7

Tôi chỉ muốn gọi một URL với công cụ lập lịch biểu tác vụ trên Windows Server 2008 và Tập lệnh Powershell.Gọi một URL với Script Powershell theo lịch trình

Vì vậy, tôi đã phát triển kịch bản sau đây:

$url = "http://example.com" 

$log_file = "${Env:USERPROFILE}\Desktop\Planification.log" 
$date = get-date -UFormat "%d/%m/%Y %R" 
"$date [INFO] Exécution de $url" >> $log_file 

$request = [System.Net.WebRequest]::Create($url) 
$response = $request.GetResponse() 
$response.Close() 

Các kịch bản hoạt động mà không bất kỳ vấn đề khi tôi thực hiện nó từ Powershell ISE, Powershell console hoặc bằng lệnh:

powershell PATH_TO_MY_SCRIPT.ps1 

Nhưng nó không hoạt động khi tôi thực thi nó từ các tác vụ Scheduler, nó trả về mã 0xFFFD0000. Tôi tìm thấy điều này: http://www.briantist.com/errors/scheduled-task-powershell-0xfffd0000/ Vì vậy, nó có thể là một vấn đề cho phép, vì vậy tôi đã thử nhiều hồ sơ khác và tùy chọn (bao gồm "Thực thi với tất cả các quyền") để kiểm tra, mà không thành công.

Tôi cũng thực hiện một tập lệnh Powershell khác chỉ gắn ổ đĩa mạng và sao chép hai tệp và tôi không gặp bất kỳ sự cố nào với tập lệnh này. Vì vậy, tôi nghĩ rằng vấn đề xuất phát từ việc sử dụng đối tượng .NET để gọi URL của tôi.

Tôi thấy rằng tôi có thể phải bao gồm các mô-đun trong tập lệnh của mình trước bất kỳ lệnh nào khác, nhưng tôi không biết chính xác mình phải làm gì. (Tôi không biết Powershell, tôi chỉ cố gắng sử dụng nó để giải quyết vấn đề của mình).

Cảm ơn sự giúp đỡ của bạn.

+1

Tôi cho rằng có nhiều khả năng vấn đề là truy cập thư mục 'USERPROFILE' - nó có thể không phải là những gì bạn mong đợi. Nó cũng có thể là một vấn đề với thiết lập proxy của bạn (hoặc thiếu nó) nếu đó là một URL bên ngoài. Tài khoản người dùng thực hiện tác vụ theo lịch nào? – alroc

+0

Không thể đồng ý nhiều hơn với @alroc trên phần 'USERPROFILE'. Khi bạn chạy nó bằng tay (hoặc tương tác) nó là bất cứ ai đăng nhập vào hệ thống và mở phiên (ví dụ: nếu bạn đăng nhập là "Peter", bạn sẽ nhận được hồ sơ "Peter"). Khi chạy nó thông qua nhiệm vụ lịch biểu thì nó sẽ là hồ sơ của "SYSTEM" theo mặc định mà có thể làm cho '$ {Env: USERPROFILE} \ Desktop \ Planification.log' không có ý nghĩa. Nhưng "SYSTEM" tài khoản có thể được thay đổi mặc dù: Trong "Scheduled nhiệm vụ" Control Panel chuột phải vào nó và sau đó đi tài sản, bạn sẽ có thể sửa đổi tài khoản người dùng theo đó nhiệm vụ chạy. – Peter

Trả lời

10

tôi được sử dụng sau đây trong một nhiệm vụ theo lịch trình và nó hoạt động như mong đợi:

$url="http://server/uri" 
(New-Object System.Net.WebClient).DownloadString("$url"); 
+0

Sự khác biệt giữa bạn và Dorian là liệu có sử dụng biến trong định nghĩa của biến khác hay không. – Peter

1

Bạn sẽ muốn đưa địa chỉ log file ra đâu đó trong một thư mục chia sẻ. Các tác vụ theo lịch trình có thể hoặc không thể truy cập vào $env:USERPROFILE. Ngoài ra, hãy sử dụng Start-Transcript để PowerShell ghi đầu ra tập lệnh của bạn vào tệp nhật ký (ngoại trừ STDOUT, bạn sẽ cần kết xuất đầu ra từ tệp thi hành sang Máy chủ ghi, ví dụ: hostname | Write-Host).

$url = "http://example.com" 

$log_file = "C:\PlanificationLogs\Planification.log" 
Start-Transcript -Path $log_file 

Get-Date -UFormat "%d/%m/%Y %R" 
Write-Host "$date [INFO] Exécution de $url" 

# PowerShell 3 
Invoke-WebRequest -Uri $url 

# PowerShell 2 
$request = [System.Net.WebRequest]::Create($url) 
$response = $request.GetResponse() 
$response.Close() 
1

mã sau phải làm những gì bạn cần.

$url = "http://www.google.com" 
PowerShell Invoke-WebRequest -Uri $url -Method GET 
Các vấn đề liên quan