Я согласен с Мартином Прикрылом , что файл, который вы ищете, вероятно, не существует.Вы можете встроить проверку, чтобы выяснить, существует ли файл или нет, используя что-то вроде этого:
if ($session.FileExists($fileToRemove)) {
$session.RemoveFiles($fileToRemove).Check()
Write-Host "File '$fileToRemove' removed."
# exit the while loop, because the action succeeded
break
}
else {
Write-Host "File '$fileToRemove' not found."
}
Кроме того, я бы закрыл сеанс после цикла while, используя $session.Close
.Может быть, вы уже делаете это, но это не отображается в вашем коде.
Соедините его с вашим кодом:
$session = New-Object WinSCP.Session
$retryTimes = 0
while ($retryTimes -ne 10) {
try {
$retryTimes++
$session.Open($sessionOptions)
echo ("Opened a session with options: " + $sessionOptions)
echo ("Trying to remove a file: " + $fileToRemove)
$fileToRemove = "/File_$((Get-Date).AddDays(-1).ToString("yyyyMMdd_HHmm")).csv"
if ($session.FileExists($fileToRemove)) {
# we know now that the file actually exists, so the next line should not throw the exception
$session.RemoveFiles($fileToRemove)
Write-Output "File '$fileToRemove' removed."
# exit the while loop, because the action succeeded
break
}
else {
Write-Output "File '$fileToRemove' not found."
}
}
catch {
# some other exception happened
echo ("File not removed retrying for the " + $retryTimes + " time.")
echo ($Error[0].Exception)
}
}