Тоже поковырялся, сделал свой скриптик загрузки папки со всем ее содержимым на ФТП-сервер (ну для изучения языка посчитал недостаточным взять и тупо скопировть чужой :D):
$server = "xx.xx.xx.xx"
$base = "backup"
$clnt = new-object System.Net.WebClient
$creds = "user:password"
#Функция копирования папки на ФТП:
function CrDir {
param ($url)
$WR = [System.Net.FTPWebRequest]::Create($url)
$WR.Credentials = New-Object System.Net.NetworkCredential("user", "password")
$WR.UsePassive = $true
$WR.UseBinary = $True
$WR.KeepAlive = $false
$WR.Method = [System.Net.WebRequestMethods+FTP]::MakeDirectory
$WRResponse = $WR.GetResponse()
}
#Функция создания папки и кпирования файлов:
function upload {
param ($path)
foreach ($a in (Get-ChildItem $path -Exclude *.*))
{
$dest = "ftp://"+$server+"/"+$base
$destcopy = "ftp://"+$creds + "@"+$server+"/"+$base
$b = $a
while ($b -ne $null)
{
foreach ($c in $b)
{
$dest = $dest+"/"+ $c.name
CrDir ($dest)
$destcopy = $destcopy+"/"+$c.name
foreach ($k in (gci $c.fullname -force |where {$_.attributes -ne "Directory"}))
{
$copyname=$destcopy+"/"+$k.name
$clnt.UploadFile($copyname,$k.fullname)
}
$b = (Get-ChildItem $c.fullname -Exclude *.*)
}
}
}
}
upload ("C:\1\")
Более примитивный может, зато мне так понятнее xDD
Правда скрипт в таком виде меня не устаривает до конца по причинам, указанным в посте выше:
1)Нет проверки на ошибки.
2)Не проверяет существование уже созданного объекта на FTP.
Как получить список файлов с фтп-сервера?
Я смог это сделать с помощью команды
Цитата
$server = "xx.xx.xx.xx"
$filename = "backup/subfolder"
$url = "ftp://"+$server+"/"+$filename
[System.Net.FtpWebRequest]$WR = [System.Net.WebRequest]::Create($url)
$WR.Method = [System.Net.WebRequestMethods+FTP]::ListDirectoryDetails
$WR.Proxy = $null
$WR.Credentials = New-Object System.Net.NetworkCredential("user", "password")
$WRStream = $WR.GetResponse();
$responseStream = $WRStream.GetResponseStream()
$readStream = new-object System.IO.StreamReader($responseStream, [System.Text.Encoding]::UTF8)
$FileList =$readStream.ReadToEnd()
$FileList = $FileList.Split("`n`r")
$FileList = $FileList | Where {-not $_.StartsWith("d")} | Where {$_.Contains("Dec 22 2005")} | %{ $_.SubString(49) }
foreach ($kl in $FileList)
{Write-Host $kl}
Мне на это выдает :
Цитата
drwxrwxrwx 3 user nobody 4096 Jul 22 06:47 2
drwxrwxrwx 2 user nobody 4096 Jul 22 06:47 3
drwxrwxrwx 5 nobody nobody 4096 Jul 21 08:15 EventLog
drwxrwxrwx 5 nobody nobody 4096 Jul 21 08:22 SystemState
там и вправду есть папки
2,
3,
EventLog и
SystemState
Но это просто строки! То есть оттуда имя просто так не выцарапать, только если в тупую брать например конец строки... Есть какой-нить способ получить список наподобие простой команды get-childitem на локалке? Чтобы была возможность работать с параметрами типа Name, Type и тп...