Gå til innhold

Automatisk FTP Script - Powershell


Anbefalte innlegg

Hei,

Jeg har et helt Basic kunnskaps nivå i PowerShell. Har fått i oppdrag og lage et script som fører filer fra en extern FTP server til en av våre egne servere. Brukerne av scriptet må i dag, manuelt hente filene fra FTP serveren – Vi ønsker og automatisere dette.

  • - Filene på FTP serveren er regninger i XML format som ankommer serveren til tilfeldige tidspunkt.
  • - Fil Navngivning: Navnet på filene er unike og følger et bestemt mønster <Sender org nr>_<Unik String(TimeStamp)>. Men I første omgang trenger vi bare å tenke på og flytte disse filene til rett destinasjon uten og tenke på filnavngivning.
  • - Vi jobber med en Windows Server 2008 R2 Server.
  • - Jeg har til nå fått til et script som flytter en og en fil der vi vet navnet på filen. Jeg må få dette systematisert, flytte filene, loggføre, backup – på filer vi ikke vet navnet på.
  • - FTP serveren har autorisering – Jeg lagrer login direkte i koden, trenger høyere sikkerhet her, det skal fortsatt kunne kjøres automatisk.
  • - Etter overførsel, må vi gjøre en cleanup – Dette må skje uten at vi sletter nye filer som potensielt skulle komme inn på serveren.

Jeg står litt fast, og trenger hjelp til og komme på vei. Poster det jeg har i posten under, det er mulig jeg har helt feil fremgangsmåte her.

 

Hvis noen kan hjelpe meg her, så er jeg veldig takknemlig.

Lenke til kommentar
Videoannonse
Annonse

Denne koden tar bare rettog slett og henter en fil vi vet navnet på fra server og flytter den over lokalt. Jeg har også nå forøvring sett på en modul som skal gjøre FTP fil overføringer enklere og jobbe med: http://gallery.technet.microsoft.com/scriptcenter/PowerShell-FTP-Client-db6fe0cb, kan ikke si at jeg har fått til og benytte denne modulen enda.

 

$sourceuri = "ftp://FTPSERVER.NO/out/test.txt"
$targetpath = "C:\text.txt"
$username = "USERNAME"
$password = "PASSWORD"
# Create a FTPWebRequest
$ftprequest = [system.Net.FtpWebRequest]::create($sourceuri)
# set authenticated connection
$ftprequest.Credentials =
New-Object System.Net.NetworkCredential($username,$password)
$ftprequest.Method = [system.Net.WebRequestMethods+Ftp]::DownloadFile
$ftprequest.UseBinary = $true
$ftprequest.KeepAlive = $false
# send the ftp request to the server
$ftpresponse = $ftprequest.GetResponse()
# get a download stream from the server response
$responsestream = $ftpresponse.GetResponseStream()
# create the target file on the local system and the download buffer
$targetfile = New-Object IO.FileStream ($targetpath,[iO.FileMode]::Create)
[byte[]]$readbuffer = New-Object byte[] 1024
# loop through the download stream and send the data to the target file
do{
$readlength = $responsestream.Read($readbuffer,0,1024)
$targetfile.Write($readbuffer,0,$readlength)
}
while ($readlength -ne 0)
$targetfile.close()

Endret av Sagotchi
Lenke til kommentar
  • 2 uker senere...

Nå kjenner jeg ikke powershell i det heletatt, men er det ikke en enklere måte å gjøre det på enn å loope rundt i stream'en? Hvis du har tilgang til DIR, GET, RENAME som en vanlig ftp-klient kan du

 

1. Bruk DIR til å få en liste over filer på serveren, evt. PMLSD

2. Loop over alle filene

3. Sjekk om fila alt fins lokalt

4. Hvis ikke, hent med GET

5. Bruk REN til å flytte fila til en backupkatalog på serveren

6. ferdig eller goto 2 :-)

 

Autentisering med ftp-protokollen blir uansett ikke bombesikkert, passord sendes i klartekst, kjør ftp inni en ssh-tunnell eller bruk ssh til å kopiere.

Endret av quantum
Lenke til kommentar
  • 2 uker senere...

Takk for svar.

 

Jeg har gått for og gjøre dette simpelt med Batch og WinSCP.

 

option batch continue 
option confirm off 
#Koble seg opp mot FTP server
open [email protected]
#Hente ned alle XML filer i folder derreter flytte de lokalt
option transfer binary
get *.xml /out "E:\Agresso\Data Files\agresso\Data Import\EHF"
#Slette alle XML filer på REMOTE FTP Server
rm *.xml
exit

 

Scriptet fungerer utmerket til og flyte filene.

Problemet nå er at dette scriptet ikke får slettet .xml filene etter filoverføring er ferdig.

 

Et parameter som skal fungere er "-delete":

get *.xml /out "E:\Agresso\Data Files\agresso\Data Import\EHF" -Delete

Men Da slettes hele OUT mappen, Samme gjald get -delete *.xml

 

Noen som har noen forslag på hvordan jeg kan løse dette?

Endret av Sagotchi
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...