Удаление файла с помощью Powershell - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть скрипт powershell, который подключается к SFTP каждые 2 минуты и удаляет файлы. Если файл не удаляется, он повторяется 10 раз.

код:

$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"
    $session.RemoveFiles($fileToRemove)
    echo ("File" + $fileToRemove + "removed." )
    }
   catch {
    echo ("File not removed retrying for the " + $retryTimes + "time.")
    echo ($Error[0].Exception)
  }
  }

Я заметил, что он не удаляет файлы, когда он запускается каждые 2 минуты, а иногда удаляет нормально.

Я проверил свои журналы и получаю сообщение об ошибке - {} {WinSCP.SessionRemoteException: Не удается получить атрибуты файла

не уверен, что это значит.

Есть ли способ убедиться, что он удаляет файл?

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

Я согласен с Мартином Прикрылом , что файл, который вы ищете, вероятно, не существует.Вы можете встроить проверку, чтобы выяснить, существует ли файл или нет, используя что-то вроде этого:

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)
    }
}
1 голос
/ 24 апреля 2019

Не удается получить атрибуты файла

Файл ошибок / журнала наверняка содержит больше деталей, которые сообщат нам причину.

Но, скорее всего, это означает, что файл просто не существует.

...