Мне нужно создать сценарий, который выполняет следующие действия:
- Копирует все файлы в папке на FTP-сайт.
- Если копирование прошло успешно, переместите файлы в архив.
- В архиве должна быть только что созданная папка с сегодняшней датой (чтобы мы знали, когда они были отправлены).
Я пытался каннибализировать другие сценарии, чтобы что-то работало, но я ничего не добился, поэтому мне нужна помощь. Я работал над этим часами.
Я использую WinSCP DLL только потому, что мой другой (рабочий) скрипт использует SFTP, который в нем нуждается. Я знаю, что обычный FTP этого не делает, но я не смог найти легко переносимого кода, поэтому вместо этого попытался его изменить.
Итак, вот код, который у меня есть, который даже не запускается, не говоря уже о правильном запуске, может ли кто-нибудь помочь мне разобраться? Извините, это немного беспорядок.
param (
$localPath = "c:\test\source",
$remotePath = "/upload",
$folder = ($_.CreationTime | Get-Date -Format yyyyMMdd)
# not sure this works but don't see how to point the destination
# to the newly created folder
$backupPath = "c:\test\destination\$folder"
)
try
{
# Load WinSCP .NET assembly
Add-Type -Path "C:\Windows\System32\WindowsPowerShell\v1.0\WinSCPnet.dll"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::ftp
HostName = "xxxxxxxx"
UserName = "xxxxxxxx"
Password = "xxxxxxxx"
}
$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)
# Upload files, collect results
$transferResult = $session.PutFiles($localPath, $remotePath)
# Iterate over every transfer
foreach ($transfer in $transferResult.Transfers)
{
# Success or error?
if ($transfer.Error -eq $Null)
{
# If today's folder doesn't exist, create it
if (!(Test-Path $BackupPath))
{
New-Item -ItemType Directory -Force -Path $BackupPath
}
Write-Host ("Upload of {0} succeeded, moving to Uploaded folder" -f
$transfer.FileName)
# Upload succeeded, move source file to backup
Move-Item $transfer.FileName $backupPath
}
else
{
Write-Host ("Upload of {0} failed: {1}" -f
$transfer.FileName, $transfer.Error.Message)
}
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
exit 0
}
catch [Exception]
{
Write-Host ("Error: {0}" -f $_.Exception.Message)
exit 1
}
Вот и код. Я счастлив использовать встроенный PowerShell для FTP, чтобы упростить его, я просто хочу, чтобы он работал.