2013-07-05 10 views
7

Windows Server 2008のタスクスケジューラとPowershellスクリプトでURLを呼び出すだけです。スケジュールされたPowershellスクリプトでURLを呼び出す

だから私は、次のスクリプトを開発:

$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() 

スクリプトは、私はPowerShellのISE、PowerShellコンソールから、またはコマンドでそれを実行したときにどの問題なく動作します。

powershell PATH_TO_MY_SCRIPT.ps1 

しかし、スケジューラタスクから実行すると機能しません。コード0xFFFD0000を返します。私はこれを見つけた:http://www.briantist.com/errors/scheduled-task-powershell-0xfffd0000/ それは許可の問題になる可能性があるので、私は多くの他のプロファイルとオプション( "すべての権限で実行する"を含む)を試して、成功せずに試しました。

ネットワークドライブをマウントして2つのファイルをコピーする別のPowershellスクリプトも実行しますが、このスクリプトで問題はありません。だから私は、この問題は.NETオブジェクトを使ってURLを呼び出すことから来ていると思います。

他のコマンドより前にスクリプトにモジュールを含める必要があるかもしれないが、私は自分がしなければならないことを正確には知らない。 (私はPowershellを知らない、私は問題を解決するためにそれを使用しようとしている)。

ありがとうございました。

+1

「USERPROFILE」ディレクトリへのアクセスが問題である可能性が高いと思います。外部URLの場合は、プロキシ設定(またはその不足)に関する問題でもあります。スケジュールされたタスクはどのユーザーアカウントで実行されますか? – alroc

+0

'USERPROFILE'の部分で@alrocともっと同意できません。手動で(またはインタラクティブに)実行すると、システムにログインしている誰でもセッションを開くことができます(たとえば、 "Peter"としてログインすると "Peter"のプロフィールが得られます)。スケジュールタスクを実行すると、デフォルトでは '$ {Env:USERPROFILE} \ Desktop \ Planification.log'が意味をなさない" SYSTEM "のプロファイルになります。しかし、「SYSTEM」アカウントは変更することができます。「スケジュールされたタスク」コントロールパネルで右クリックしてプロパティを表示すると、タスクを実行するユーザーアカウントを変更することができます。 – Peter

答えて

10

私は、スケジュールされたタスクに次のように使用し、期待どおりに動作します:

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

あなたとDorianの違いは、別の変数の定義で変数を使用するかどうかです。 – Peter

1

あなたがどこかに共有ディレクトリにそのログファイルを出したいと思うでしょう。スケジュールされたタスクは$env:USERPROFILEにアクセスする場合とアクセスしない場合があります。また、Start-Transcriptを使用してスクリプトの出力をログファイルに書き込むようにしてください(STDOUTを除き、出力を実行可能ファイルから書き込みホストにパイプする必要があります。たとえば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

次のコードは必要な処理を行う必要があります。

$url = "http://www.google.com" 
PowerShell Invoke-WebRequest -Uri $url -Method GET 
関連する問題