diff --git a/lib/ansible/modules/windows/win_get_url.ps1 b/lib/ansible/modules/windows/win_get_url.ps1 index b555cc7a52c..96189d69113 100644 --- a/lib/ansible/modules/windows/win_get_url.ps1 +++ b/lib/ansible/modules/windows/win_get_url.ps1 @@ -1,7 +1,7 @@ #!powershell # This file is part of Ansible. # -# Copyright 2014, Paul Durivage +# (c)) 2015, Paul Durivage , Tal Auslander # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -40,14 +40,38 @@ Else { Fail-Json $result "missing required argument: dest" } -$client = New-Object System.Net.WebClient +If (-not (Test-Path $dest)) { + $client = New-Object System.Net.WebClient -Try { - $client.DownloadFile($url, $dest) - $result.changed = $true + Try { + $client.DownloadFile($url, $dest) + $result.changed = $true + } + Catch { + Fail-Json $result "Error downloading $url to $dest" + } } -Catch { - Fail-Json $result "Error downloading $url to $dest" +Else { + Try { + $webRequest = [System.Net.HttpWebRequest]::Create($url) + $webRequest.IfModifiedSince = ([System.IO.FileInfo]$dest).LastWriteTime + $webRequest.Method = "GET" + [System.Net.HttpWebResponse]$webResponse = $webRequest.GetResponse() + + $stream = New-Object System.IO.StreamReader($response.GetResponseStream()) + + $stream.ReadToEnd() | Set-Content -Path $dest -Force + + $result.changed = $true + } + Catch [System.Net.WebException] { + If ($_.Exception.Response.StatusCode -ne [System.Net.HttpStatusCode]::NotModified) { + Fail-Json $result "Error downloading $url to $dest" + } + } + Catch { + Fail-Json $result "Error downloading $url to $dest" + } } Set-Attr $result.win_get_url "url" $url