J'ai un script PowerShell qui télécharge les fichiers les plus récents des extensions de fichier particulier. Le répertoire FTP contient des centaines de fichiers horaires horodatés (mmddhh) qu'il efface à la fin de chaque heure. Chaque fichier a une extension unique. Je télécharge des fichiers toutes les heures pour les extensions .tn1
, .tn2
, .tn3
, .tn4
, .tn5
, .ky1
et .nc1
. Le fichier est enregistré localement sous la forme extension.txt
(par exemple, tn1.txt
, tn2.txt
, etc.).de script Powershell WinSCP FTP télécharge le fichier mis en cache pour seulement 1 sur 8 fichiers
Le problème que j'ai est que le fichier tn5
qui est téléchargé a une date de création de Décembre 2015 mais sur le serveur il est à jour (avr 2016).
J'ai déjà mis mes options IE à « vérifier les versions plus récentes des pages enregistrées » « chaque fois que je visite la page Web »
Je l'exécution du script de VBA.
Shell("powershell ""H:\Worksheets\FTP\FTP.ps1""", vbHide)
try
{
# Load WinSCP .NET assembly
Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"
$localPath = "H:\Worksheets\FTP"
$remotePath = "/outgoing/data/LatestData/"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.Protocol = [WinSCP.Protocol]::ftp
$sessionOptions.HostName =
$sessionOptions.UserName =
$sessionOptions.Password =
$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)
# Get list of files in the directory
$directoryInfo = $session.ListDirectory($remotePath)
# Select the most recent file
$latest = $directoryInfo.Files |
Where-Object { -Not $_.IsDirectory} |
Where-Object {
[System.IO.Path]::GetExtension($_.Name) -eq ".nc1" -or
[System.IO.Path]::GetExtension($_.Name) -eq ".ky1" -or
[System.IO.Path]::GetExtension($_.Name) -like ".tn*" }
Group-Object { [System.IO.Path]::GetExtension($_.Name) } |
ForEach-Object{
$_.Group | Sort-Object LastWriteTime -Descending | Select -First 1
}
$extension = [System.IO.Path]::GetExtension($latest.Name)
"GetExtension('{0}') returns '{1}'" -f $fileName, $extension
if ($latest -eq $Null)
{
Write-Host "No file found"
exit 1
}
$latest | ForEach-Object{
$extension = ([System.IO.Path]::GetExtension($_.Name)).Trim(".")
$sourcePath = [WinSCP.RemotePath]::EscapeFileMask($remotePath + $_.Name)
$session.GetFiles($sourcePath, "$localPath\$extension.txt").Check()
}
$stamp = $(Get-Date -f "yyyy-MM-dd-HHmm")
$filename = $stamp.subString(0,$stamp.length-6)
$session.GetFiles(
($remotePath + $fileName),
($localPath + $fileName + "." + $stamp)).Check()
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
exit 0
}
catch [Exception]
{
Write-Host $_.Exception.Message
exit 1
}
Set 'Session.SessionLogFile' et ajoutez un journal indiquant le téléchargement du fichier' tn5'. –
Le titre indique * "fichier mis en cache pour seulement 1 sur 8 fichiers" *, tandis que le texte indique * "a une date de création de décembre 2015" *. Il n'est pas clair si le problème est juste l'horodatage ou si un contenu du fichier est ancien. Si ce dernier, pouvez-vous télécharger une version à jour du fichier en utilisant un client FTP (GUI)? –
L'horodatage et le contenu du fichier sont anciens, ce qui me porte à croire que mon ordinateur ou peut-être le serveur qui héberge mon lecteur "H" charge une version en cache du fichier. Je vais travailler sur l'obtention d'un journal. – Kyle