Лучший отвечающий
powershell Remove-FTPItem

Вопрос
-
Здравствуйте.
Подскажите пожалуйста как справиться с этим командлетом Remove-FTPItem
Мне надо чтоб он удалял только файлы и не затрагивал папки в которых надо удалить файлы, а по описанию я так понял он при удаление файлов затронет и папки :(
11 июня 2013 г. 6:42
Ответы
-
Протестировал, все отрабатывает, как надо.
$ftpServer = "ftp://ftpserver.org" $username = "Login" $password = ConvertTo-SecureString 'Password' -Force -AsPlainText $FtpPath = "/Report/31/" $File = "*.zip" $credentials = New-Object System.Management.Automation.PSCredential($username, $password) Set-FTPConnection -Credentials $credentials -Server ftp://ftpserver.org -Session ftpServerS -UsePassive $Session = Get-FTPConnection -Session ftpServerS Get-FTPChildItem -path $FtpPath | Get-FTPItem -localpath $FullPath -Verbose Get-FTPChildItem -Session $Session -Path $FtpPath -Recurse | Where {$_.Dir -ne "dir" -and $_.Name -like "$File*"} | Remove-FTPItem -Session $Session
Результат:
PS > Get-FTPChildItem -Session $Session -Path $FtpPath -Recurse | Where {$_.dir -ne "dir" -and $_. Name -like "$file*"} Parent: ftp://10.0.0.1/Report/31 Dir Right Ln User Group Size ModifiedDate Name --- ----- -- ---- ----- ---- ------------ ---- - 0B 06-13-13 01:51AM 1.zip - 0B 06-13-13 01:51AM 3.zip Parent: ftp://10.0.0.1/Report/31/123 Dir Right Ln User Group Size ModifiedDate Name --- ----- -- ---- ----- ---- ------------ ---- - 0B 06-13-13 02:19AM d.zip PS > Get-FTPChildItem -Session $Session -Path $FtpPath -Recurse | Where {$_.Dir -ne "dir" -and $_. Name -like "$File*"} | Remove-FTPItem -Session $Session ->Remove File: ftp://10.0.0.1/Report/31/1.zip 250 DELE command successful. ->Remove File: ftp://10.0.0.1/Report/31/3.zip 250 DELE command successful. ->Remove File: ftp://10.0.0.1/Report/31/123/d.zip 250 DELE command successful. PS > Get-FTPChildItem -Session $Session -Path $FtpPath -Recurse | Where {$_.dir -ne "dir" -and $_. Name -like "$file*"} PS > Get-FTPChildItem -Session $Session -Path $FtpPath -Recurse Parent: ftp://10.0.0.1/Report/31 Dir Right Ln User Group Size ModifiedDate Name --- ----- -- ---- ----- ---- ------------ ---- DIR 06-13-13 02:25AM 123
- Помечено в качестве ответа Kalaputsa 13 июня 2013 г. 10:14
13 июня 2013 г. 9:33Отвечающий
Все ответы
-
Попробуйте так:
Get-FTPChildItem -Session $Session -Path /TestRootDir -Filter TestF* | Where {$_.Dir -ne "d"} | Remove-FTPItem -Session $Session
- Изменено KazunEditor 11 июня 2013 г. 6:49
11 июня 2013 г. 6:47Отвечающий -
У меня вопрос вот с этой частью
Where {$_.Dir -ne "d"}
А именно с оператором -ne - что он делает?
P.S. Извините за столь нубский вопрос, но с пошем я пока на ВЫ :(
11 июня 2013 г. 8:50 -
PS > "-","d","x" -ne "d" - x
get-help about_Comparison_Operators
-ne : Not equal to. Includes a different value.(Для нашего случая, если значение d - каталог,то исключаем его)
11 июня 2013 г. 9:02Отвечающий -
Что-то совсем плохо :(
Вот часть кода
$ftpServer = "ftp://" $username = "Login" $password = ConvertTo-SecureString 'Password' -Force -AsPlainText $FtpPath = "/Report/31/" $File = "*.zip" $credentials = New-Object System.Management.Automation.PSCredential($username, $password) Set-FTPConnection -Credentials $credentials -Server $ftpServer -UsePassive -UseBinary Get-FTPChildItem -path $FtpPath | Get-FTPItem -localpath $FullPath -Verbose Get-FTPChildItem -Session $credentials -Path $FtpPath -Filter $File | Where {$_.Dir -ne "/Report/31/"} | Remove-FTPItem -Session $credentials
Соединение и скачивание файлов проходит нормально, а вот когда начинается удаление выскакивают ошибки
Исключение при вызове "Create" с "1" аргументами: "Недопустимый URI: Невозможно определить формат URI." C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPItemSize.ps1:80 знак:4 + [System.Net.FtpWebRequest]$Request = [System.Net.WebRequest]::Create($Request ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : UriFormatException Не удается найти свойство "Credentials" для данного объекта; убедитесь, что оно существует и является устанавливаемым. C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPItemSize.ps1:81 знак:4 + $Request.Credentials = $CurrentSession.Credentials + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "EnableSsl" для данного объекта; убедитесь, что оно существует и является устанавливаемым. C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPItemSize.ps1:82 знак:4 + $Request.EnableSsl = $CurrentSession.EnableSsl + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "KeepAlive" для данного объекта; убедитесь, что оно существует и является устанавливаемым. C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPItemSize.ps1:83 знак:4 + $Request.KeepAlive = $CurrentSession.KeepAlive + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "UseBinary" для данного объекта; убедитесь, что оно существует и является устанавливаемым. C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPItemSize.ps1:84 знак:4 + $Request.UseBinary = $CurrentSession.UseBinary + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "UsePassive" для данного объекта; убедитесь, что оно существует и является устанавливаемым. C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPItemSize.ps1:85 знак:4 + $Request.UsePassive = $CurrentSession.UsePassive + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "Method" для данного объекта; убедитесь, что оно существует и является устанавливаемым. C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPItemSize.ps1:87 знак:4 + $Request.Method = [System.Net.WebRequestMethods+FTP]::GetFileSize + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Исключение при вызове "Create" с "1" аргументами: "Недопустимый URI: Невозможно определить формат URI." C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPChildItem.ps1:179 знак:4 + [System.Net.FtpWebRequest]$Request = [System.Net.WebRequest]::Create($Request ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : UriFormatException Не удается найти свойство "Credentials" для данного объекта; убедитесь, что оно существует и является устанавливаемым. C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPChildItem.ps1:180 знак:4 + $Request.Credentials = $CurrentSession.Credentials + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "EnableSsl" для данного объекта; убедитесь, что оно существует и является устанавливаемым. C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPChildItem.ps1:181 знак:4 + $Request.EnableSsl = $CurrentSession.EnableSsl + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "KeepAlive" для данного объекта; убедитесь, что оно существует и является устанавливаемым. C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPChildItem.ps1:182 знак:4 + $Request.KeepAlive = $CurrentSession.KeepAlive + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "UseBinary" для данного объекта; убедитесь, что оно существует и является устанавливаемым. C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPChildItem.ps1:183 знак:4 + $Request.UseBinary = $CurrentSession.UseBinary + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "UsePassive" для данного объекта; убедитесь, что оно существует и является устанавливаемым. C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPChildItem.ps1:184 знак:4 + $Request.UsePassive = $CurrentSession.UsePassive + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Не удается найти свойство "Method" для данного объекта; убедитесь, что оно существует и является устанавливаемым. C:\Windows\system32\WindowsPowerShell\v1.0\Modules\PSFTP\Get-FTPChildItem.ps1:186 знак:4 + $Request.Method = [System.Net.WebRequestMethods+FTP]::ListDirectoryDetails + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : PropertyNotFound Get-FTPChildItem : Невозможно вызвать метод для выражения со значением NULL. D:\script\powershell\REPORTS.ps1:24 знак:1 + Get-FTPChildItem -Session $credentials -Path $FtpPath -Filter $File | Where {$_. ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-FTPChildItem
11 июня 2013 г. 10:22 -
А где сессия? Причем тут $credentials ?
Set-FTPConnection -Credentials mgajda -Server ftp://ftp.server.org -Session MyTestSession -UsePassive
$Session = Get-FTPConnection -Session MyTestSessionЗачем добавлять с ошибками?
Where {$_.Dir -ne "/Report/31/"} - Где я привел такое?
Должно быть:
Where {$_.Dir -ne "d" -and $_.Name -ne "/Report/31/"}
11 июня 2013 г. 10:40Отвечающий -
Hе удаляет и не ругается :(
$ftpServer = "ftp://ftpserver.org" $username = "Login" $password = ConvertTo-SecureString 'password' -Force -AsPlainText $FtpPath = "/Report/31/" $File = "*.zip" $credentials = New-Object System.Management.Automation.PSCredential($username, $password) Set-FTPConnection -Credentials $credentials -Server $ftpServer -Session $ftpServer -UsePassive $Session = Get-FTPConnection -Session $ftpServer Set-FTPConnection -Credentials $credentials -Server $ftpServer -UsePassive -UseBinary Get-FTPChildItem -path $FtpPath | Get-FTPItem -localpath $FullPath -Verbose Get-FTPChildItem -Session $Session -Path $FtpPath -Filter $File | Where {$_.Dir -ne "d" -and $_.Name -ne "/Report/31/"}
- Изменено Kalaputsa 13 июня 2013 г. 4:51
13 июня 2013 г. 4:50 -
1) А где команда Remove-FTPItem -Session $ftpServer?
2) Зачем повторно инициализировать сессию Set-FTPConnection -Credentials $credentials -Server $ftpServer -UsePassive -UseBinary ?
3) В имени папки слэшев быть не должно
4) Get-FTPChildItem -Session $Session -Path $FtpPath -Filter $File | Where {$_.Dir -ne "d"}
5) Вывод команды Get-FTPChildItem -Session $Session -Path $FtpPath -Filter $File | Where {$_.Dir -ne "d"}
13 июня 2013 г. 5:12Отвечающий -
Файлы удаляет, но тянется к папка и из-а этого выскакивает ошибка и скрипт останавливает работу :(
->Remove File: ftp://ftpserver.org/Report/31/TEST.zip 250 DELE command successful. ->Remove Dir: ftp://ftpserver.org/Report/31 Remove-FTPItem : Исключение при вызове "GetResponse" с "0" аргументами: "Удаленный сервер возвратил ошибку: (550) Файл недоступен (например, не найден или к нему нет доступа)." D:\script\powershell\REPORTS.ps1:28 знак:1 + Remove-FTPItem -Session $ftpServer -Path $FtpPath -Recurse + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Remove-FTPItem
13 июня 2013 г. 7:36 -
Полный код, структуру папок и что должно получится в итоге.
13 июня 2013 г. 7:51Отвечающий -
# Создание папки дня в формате ггггддмм (вчерашним днём) $reportFolder = "D:\script\test" $year = get-date -format yyyy $month = get-date -format MM $folder = $reportFolder + "\" + $year + "\" + $month $date = (Get-Date).AddDays(-1).ToString("yyyyMMdd") md ("$reportFolder\$year\$month\" + $date) $FullPath = "$reportFolder\$year\$month\$date" # Соединение с FTP, скачивание и удаление файлов которые были скачены $ftpServer = "ftp://ftpserver.org" $username = "Login" $password = ConvertTo-SecureString 'Password' -Force -AsPlainText $FtpPath = "/Report/31/" $File = "*.zip" $credentials = New-Object System.Management.Automation.PSCredential($username, $password) Set-FTPConnection -Credentials $credentials -Server ftp://ftpserver.org -Session $ftpServer -UsePassive $Session = Get-FTPConnection -Session $ftpServer Get-FTPChildItem -path $FtpPath | Get-FTPItem -localpath $FullPath -Verbose Get-FTPChildItem -Session $Session -Path $FtpPath -Filter $File | Where {$_.Dir -ne "d"} Remove-FTPItem -Session $ftpServer -Path $FtpPath -Recurse # Разархивация архива по маске *.zip $ZipFilesPath = "$FullPath". $UnzipPath = "$FullPath" $Shell = New-Object -com Shell.Application $Location = $Shell.NameSpace($UnzipPath) $ZipFiles = Get-Childitem $ZipFilesPath -Recurse -Include *.ZIP $progress = 1 foreach ($ZipFile in $ZipFiles) { Write-Progress -Activity "Unzipping to $($UnzipPath)" -PercentComplete (($progress / ($ZipFiles.Count + 1)) * 100) -CurrentOperation $ZipFile.FullName -Status "File $($Progress) of $($ZipFiles.Count)" $ZipFolder = $Shell.NameSpace($ZipFile.fullname) $Location.Copyhere($ZipFolder.items(), 1040) $progress++ } # Удаление архивированных файлов *.zip Remove-Item $FullPath -include *.zip -Verbose
13 июня 2013 г. 8:02 -
Одна команда,а не две.
Get-FTPChildItem -Session $Session -Path $FtpPath -Filter $File -Recurse | Where {$_.Dir -ne "d"} | Remove-FTPItem -Session $ftpServer
13 июня 2013 г. 8:18Отвечающий -
В одной команде не удаляет, сразу переходит к разархивации :(13 июня 2013 г. 8:45
-
Протестировал, все отрабатывает, как надо.
$ftpServer = "ftp://ftpserver.org" $username = "Login" $password = ConvertTo-SecureString 'Password' -Force -AsPlainText $FtpPath = "/Report/31/" $File = "*.zip" $credentials = New-Object System.Management.Automation.PSCredential($username, $password) Set-FTPConnection -Credentials $credentials -Server ftp://ftpserver.org -Session ftpServerS -UsePassive $Session = Get-FTPConnection -Session ftpServerS Get-FTPChildItem -path $FtpPath | Get-FTPItem -localpath $FullPath -Verbose Get-FTPChildItem -Session $Session -Path $FtpPath -Recurse | Where {$_.Dir -ne "dir" -and $_.Name -like "$File*"} | Remove-FTPItem -Session $Session
Результат:
PS > Get-FTPChildItem -Session $Session -Path $FtpPath -Recurse | Where {$_.dir -ne "dir" -and $_. Name -like "$file*"} Parent: ftp://10.0.0.1/Report/31 Dir Right Ln User Group Size ModifiedDate Name --- ----- -- ---- ----- ---- ------------ ---- - 0B 06-13-13 01:51AM 1.zip - 0B 06-13-13 01:51AM 3.zip Parent: ftp://10.0.0.1/Report/31/123 Dir Right Ln User Group Size ModifiedDate Name --- ----- -- ---- ----- ---- ------------ ---- - 0B 06-13-13 02:19AM d.zip PS > Get-FTPChildItem -Session $Session -Path $FtpPath -Recurse | Where {$_.Dir -ne "dir" -and $_. Name -like "$File*"} | Remove-FTPItem -Session $Session ->Remove File: ftp://10.0.0.1/Report/31/1.zip 250 DELE command successful. ->Remove File: ftp://10.0.0.1/Report/31/3.zip 250 DELE command successful. ->Remove File: ftp://10.0.0.1/Report/31/123/d.zip 250 DELE command successful. PS > Get-FTPChildItem -Session $Session -Path $FtpPath -Recurse | Where {$_.dir -ne "dir" -and $_. Name -like "$file*"} PS > Get-FTPChildItem -Session $Session -Path $FtpPath -Recurse Parent: ftp://10.0.0.1/Report/31 Dir Right Ln User Group Size ModifiedDate Name --- ----- -- ---- ----- ---- ------------ ---- DIR 06-13-13 02:25AM 123
- Помечено в качестве ответа Kalaputsa 13 июня 2013 г. 10:14
13 июня 2013 г. 9:33Отвечающий -
Подскажите, пожалуйста, что не так, и как исправить?
(С какого-то перепугу вот это вот: "Path is directory", затем после имени файла тычется слэш, и ещё раз имя файла.)
PS > Get-FTPChildItem -Session $SF -Path $remotepath | Where {$_.Dir -ne "d" -and $_.ModifiedDate -le $oldftp} | Remove-FTPItem -Session $SF -Verbose
ПОДРОБНО: Выполнение операции "Remove item from ftp location" над целевым объектом "ftp://u109665.your-backup.de/Test/1C20151116.zip".
ПОДРОБНО: Use original path: ftp://u109665.your-backup.de/Test/1C20151116.zip
ПОДРОБНО: Remove additonal slash: ftp://u109665.your-backup.de/Test/1C20151116.zip
ПОДРОБНО: Path is directory
ПОДРОБНО: Use WebRequestMethods: LIST
ПОДРОБНО: Use original path: ftp://u109665.your-backup.de/Test/1C20151116.zip/1C20151116.zip
ПОДРОБНО: Remove additonal slash: ftp://u109665.your-backup.de/Test/1C20151116.zip/1C20151116.zip
ПОДРОБНО: Path is directory
ПОДРОБНО: Use WebRequestMethods: LIST
Get-FTPChildItem : Исключение при вызове "GetResponse" с "0" аргументами: "Удаленный сервер возвратил ошибку: (550) Файл недоступен (например, не найден или к нему нет доступа)."
F:\scripts\Modules\PSFTP\Remove-FTPItem.ps1:106 знак:17
+ $SubItems = Get-FTPChildItem -Path $RequestUri -Session $Session
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-FTPChildItem- Изменено Alexander Tarasoff 18 ноября 2015 г. 9:09
18 ноября 2015 г. 9:06 -
Точно $_.Dir -ne "d" , а не $_.Dir -ne "dir" ?18 ноября 2015 г. 9:49Отвечающий
-
Точно. Вот пример вывода с "d":
PS> Get-FTPChildItem -Session $SF -Path "/" | Format-Table ModifiedDate SizeInByte Parent Size Group Dir OrgModifiedDate Ln Name Right ------------ ---------- ------ ---- ----- --- --------------- -- ---- ----- 16.11.2015 14:12:00 6 ftp://u109665.your-bac... u109665 d Nov 16 14:12 2 1ass rwxr-xr-x 17.11.2015 22:48:00 10 ftp://u109665.your-bac... u109665 d Nov 17 22:48 2 Med rwxr-xr-x 18.11.2015 7:46:00 5 ftp://u109665.your-bac... u109665 d Nov 18 07:46 2 Test rwxr-xr-x 02.11.2015 8:32:00 8814559608 ftp://u109665.your-bac... 8GB u109665 - Nov 2 08:32 1 02.11.2015.zip rw-r--r-- 04.11.2015 8:43:00 8846866026 ftp://u109665.your-bac... 8GB u109665 - Nov 4 08:43 1 04.11.2015.zip rw-r--r-- 05.11.2015 7:12:00 8849727148 ftp://u109665.your-bac... 8GB u109665 - Nov 5 07:12 1 05.11.2015.zip rw-r--r-- 06.11.2015 7:49:00 8879042006 ftp://u109665.your-bac... 8GB u109665 - Nov 6 07:49 1 06.11.2015.zip rw-r--r--
18 ноября 2015 г. 10:41 -
А если так?
$CurrentSession = $SF Get-FTPChildItem -Session $SF -Path $remotepath | Where {$_.Dir -ne "d" -and $_.ModifiedDate -le $oldftp} | Foreach { $RequestUri = $_.FullName Write-Host $RequestUri -Fore Yellow [System.Net.FtpWebRequest]$Request = [System.Net.WebRequest]::Create($RequestUri) $Request.Credentials = $CurrentSession.Credentials $Request.EnableSsl = $CurrentSession.EnableSsl $Request.KeepAlive = $CurrentSession.KeepAlive $Request.UseBinary = $CurrentSession.UseBinary $Request.UsePassive = $CurrentSession.UsePassive [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$CurrentSession.ignoreCert} $Response = $Request.GetResponse() $Status = $Response.StatusDescription $Response.Close() $Status }
18 ноября 2015 г. 11:59Отвечающий -
Не вполне понимая, что собственно делает этот код (в каком месте удаляется файл с фтп я так и не понял), вставил в текущую сессию. Результат вот:
PS> $CurrentSession = $SF Get-FTPChildItem -Session $SF -Path $remotepath | Where {$_.Dir -ne "d" -and $_.ModifiedDate -le $oldftp} | Foreach { $RequestUri = $_.FullName Write-Host $RequestUri -Fore Yellow [System.Net.FtpWebRequest]$Request = [System.Net.WebRequest]::Create($RequestUri) $Request.Credentials = $CurrentSession.Credentials $Request.EnableSsl = $CurrentSession.EnableSsl $Request.KeepAlive = $CurrentSession.KeepAlive $Request.UseBinary = $CurrentSession.UseBinary $Request.UsePassive = $CurrentSession.UsePassive [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$CurrentSession.ignoreCert} $Response = $Request.GetResponse() $Status = $Response.StatusDescription $Response.Close() $Status } ftp://u109665.your-backup.de/Test/1C20151116.zip Foreach : Исключение при вызове "Close" с "0" аргументами: "Удаленный сервер возвратил ошибку: (451) Локальная ошибка при обработке." строка:2 знак:109 + ... -le $oldftp} | Foreach { + ~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [ForEach-Object], MethodInvocationException + FullyQualifiedErrorId : WebException,Microsoft.PowerShell.Commands.ForEachObjectCommand
18 ноября 2015 г. 12:45 -
Да, строчку забыл.
Добавьте, после UsePassive:
$Request.Method = [System.Net.WebRequestMethods+FTP]::DeleteFile
18 ноября 2015 г. 12:52Отвечающий -
Так работает. Непонятно почему не работает Remove-FTPItem.
При чем он не работает даже в весьма явном виде:
PS> Get-FTPChildItem -Session $SF -Path /Test | Format-Table ModifiedDate SizeInByte Parent Size Group Dir OrgModifiedDate Ln Name Right ------------ ---------- ------ ---- ----- --- --------------- -- ---- ----- 17.11.2015 10:41:00 10341841 ftp://u109665.your-bac... 10MB u109665 - Nov 17 10:41 1 1C20151117.zip rw-r--r-- 18.11.2015 8:08:00 10341841 ftp://u109665.your-bac... 10MB u109665 - Nov 18 08:08 1 1C20151118.zip rw-r--r-- PS> Remove-FTPItem -Session $SF -Path /Test/1C20151117.zip -Verbose ПОДРОБНО: Выполнение операции "Remove item from ftp location" над целевым объектом "ftp://u109665.your-backup.de/Test/1C20151117.zip". ПОДРОБНО: Use original path: ftp://u109665.your-backup.de/Test/1C20151117.zip ПОДРОБНО: Remove additonal slash: ftp://u109665.your-backup.de/Test/1C20151117.zip ПОДРОБНО: Path is directory ПОДРОБНО: Use WebRequestMethods: LIST ПОДРОБНО: Use original path: ftp://u109665.your-backup.de/Test/1C20151117.zip/1C20151117.zip ПОДРОБНО: Remove additonal slash: ftp://u109665.your-backup.de/Test/1C20151117.zip/1C20151117.zip ПОДРОБНО: Path is directory ПОДРОБНО: Use WebRequestMethods: LIST Get-FTPChildItem : Исключение при вызове "GetResponse" с "0" аргументами: "Удаленный сервер возвратил ошибку: (550) Файл недоступен (например, не найден или к нему нет доступа)." F:\scripts\Modules\PSFTP\Remove-FTPItem.ps1:106 знак:17 + $SubItems = Get-FTPChildItem -Path $RequestUri -Session $Session + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-FTPChildItem
18 ноября 2015 г. 13:03 -
Проблема с функцией Remove-FTPItem в которой есть функция Get-FTPItemSize.
if((Get-FTPItemSize -Path $RequestUri -Silent) -ge 0) - Скорее всего тут проблема, почему она возвращает некорректный результат, тут надо тестировать различные ftp сервера.
18 ноября 2015 г. 13:14Отвечающий -
В любом случае - спасибо!
Если знаете - есть ли модули, реализующие SFTP-клиент? С наскоку нагуглить не удалось.
- Изменено Alexander Tarasoff 18 ноября 2015 г. 13:18
18 ноября 2015 г. 13:18 -
Есть библиотека от замечательного проекта WinSCP - https://winscp.net/eng/docs/library_powershell и wrapper для нее - http://dotps1.github.io/WinSCP/18 ноября 2015 г. 13:21Отвечающий
-
Remove-FTPItem dont work for me:
import-module PSFTP $credentials = get-credential $server = 'ftp://ftp.mojserwer.nazwa.pl' Set-FTPConnection -Credentials $credentials -Server $server -UsePassive -Session backupFTP $session = Get-FTPConnection -Session backupFTP #working New-FTPItem -Name 'backup' -Session $session #working Get-FTPChildItem -Path '\.' -Session $session -Recurse #problem Remove-FTPItem -Path '\backup' -Recurse -Session $session
any idea why?30 августа 2021 г. 12:30