web-dev-qa-db-ja.com

スケジュールされたPowerShellスクリプトでURLを呼び出す

Windows Server 2008のタスクスケジューラと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は知りませんが、問題を解決するためにそれを使用しようとします)。

助けてくれてありがとう。

12
Dorian

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