2017-09-01 3 views
0

J'utilise Powershell pour la première fois pour télécharger les fichiers du jour précédent à partir d'une page Web pour un client. La page Web provient d'un enregistreur de données plutôt que d'un skid fournisseur. L'enregistreur de données enregistre toujours les fichiers dans le format yyMMdd##.CSV, où ## est le fichier de numéro séquentiel pour ce jour donné (commençant à 00). Lors de la visualisation de la page Web, j'ai seulement vu le nombre maximum de fichiers CSV pour un jour donné comme 1 (donc, le fichier 8/31/17 serait 17083100.CSV). J'ai écrit le code de Powershell pour me donner le fichier d'hier en supposant que 00 est le seul fichier pour ce jour, mais j'espérais que je pourrais utiliser un caractère générique ou une boucle pour télécharger tous les fichiers supplémentaires qui existent pour le jour précédent. Voir le code ci-dessous pour ce que j'ai actuellement:Powershell télécharger tous les fichiers possibles pour un jour donné

$a = "http://10.109.120.101/logs/Log1/" 
$b = (get-date).AddDays(-1).ToString("yyMMdd") + "00.CSV" 
$c = "C:\" 
$url = "$a$b" 
$WebClient = New-Object net.webclient 
$path = "$c$b" 
$WebClient.DownloadFile($url, $path) 

Répondre

0
$a = "http://10.109.120.101/logs/Log1/" 
$c = "C:\" 

# From 0 to 99 loop. 
# In this loop, `$_` contains 0,1,2,... 
0..99 | ForEach-Object { 
    # `-f` is a format operator. 
    # For more information, see the following url: 
    # <https://social.technet.microsoft.com/wiki/contents/articles/7855.powershell-using-the-f-format-operator.aspx> 
    $b = "{0:yyMMdd}{1:d2}.CSV" -f (get-date).AddDays(-1), $_ 
    $url = "$a$b" 

    # check exist by using HTTP HEAD method 
    $req = [System.Net.WebRequest]::Create($url) 
    $req.Method = 'HEAD' 
    $req.Timeout = 10000 
    try { 
     $res = $req.GetResponse() 
    } catch [System.Net.WebException] { 
     $res = $_.Exception.Response 
    } 

    if ($res.StatusCode -eq 'OK') { 
     # exist -> download 
     $WebClient = New-Object System.Net.WebClient 
     $path = "$c$b" 
     $WebClient.DownloadFile($url, $path) 
     # 1sec interval 
     Start-Sleep 1 
    } else { 
     # not exist -> exit loop 
     Write-Host $_ 
     Write-Host $res.StatusCode 
     break 
    } 
} 
0

essayer quelque chose comme ceci:

$Date=(get-date).AddDays(-1).ToString("yyMMdd") 
$URLFormat ='http://10.109.120.101/logs/Log1/{0}{1:D2}.CSV' 

$WebClient = New-Object net.webclient 

#build destination path 
$PathDest="C:\Temp\$Date" 
New-Item -Path $PathDest -ItemType Directory -ErrorAction SilentlyContinue 

1..99 | %{ 

$Path="$PathDest\{0:D2}.CSV" -f $_ 
$URL=$URLFormat -f $Date, $_ 

try 
{ 
    Write-Host ("Try to download '{0}' file to '{1}'" -f $URL, $Path) 
    $WebClient.DownloadFile($Path, $URL) 
} 
catch 
{ 

} 

} 

$WebClient.Dispose()