Чтобы пропустить папки, добавьте переключатель -File
к Get-ChildItem
(как уже прокомментировал @Scepticalist) :
$filelist = Get-ChildItem -File C:\Users\Administrator\Desktop\ftp
Хотя вы можете добиться того жес меньшим количеством кода, если вы позволите WinSCP перебирать файлы (и пропускать папки):
$transferOptions = New-Object WinSCP.TransferOptions
$transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
$transferOptions.FileMask = "|*/" # Exclude the folders
$transferResult = $session.PutFiles(
"C:\Users\Administrator\Desktop\ftp\*", "/", $False, $transferOptions)
foreach ($transfer in $transferResult.Transfers)
{
Write-Host "Upload of $($transfer.FileName) succeeded"
Move-Item $transfer.FileName $backupPath
}
И вам не нужен вызов Get-ChildItem
.
Выше приведен кодиз статьи WinSCP Перемещение локальных файлов в другое место после успешной загрузки , только с исключением подпапок .
Хотя обратите внимание, что ваш код (вопрекистатья) не имеет теста для успешной загрузки. Таким образом, вы будете перемещать даже файлы, которые не удалось загрузить. Обязательно добавьте тест $transfer.Error -eq $Null
.
foreach ($transfer in $transferResult.Transfers)
{
# Success or error?
if ($transfer.Error -eq $Null)
{
Write-Host "Upload of $($transfer.FileName) succeeded, moving to backup"
# Upload succeeded, move source file to backup
Move-Item $transfer.FileName $backupPath
}
else
{
Write-Host "Upload of $($transfer.FileName) failed: $($transfer.Error.Message)"
}
}