PowerShell FTP télécharger des fichiers et sous-dossiers
Je voudrais écrire un script PowerShell pour télécharger tous les fichiers et sous-dossiers de mon serveur FTP. J'ai trouvé un script pour télécharger tous les fichiers d'un dossier spécifique, mais j'aime aussi télécharger les sous-dossiers et leurs fichiers.
#FTP Server Information - SET VARIABLES
$ftp = "ftp://ftp.abc.ch/"
$user = 'abc'
$pass = 'abc'
$folder = '/'
$target = "C:\LocalData\Powershell\"
#SET CREDENTIALS
$credentials = new-object System.Net.NetworkCredential($user, $pass)
function Get-FtpDir ($url,$credentials) {
$request = [Net.WebRequest]::Create($url)
$request.Method = [System.Net.WebRequestMethods+FTP]::ListDirectory
if ($credentials) { $request.Credentials = $credentials }
$response = $request.GetResponse()
$reader = New-Object IO.StreamReader $response.GetResponseStream()
$reader.ReadToEnd()
$reader.Close()
$response.Close()
}
#SET FOLDER PATH
$folderPath= $ftp + "/" + $folder + "/"
$Allfiles=Get-FTPDir -url $folderPath -credentials $credentials
$files = ($Allfiles -split "`r`n")
$files
$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($user,$pass)
$counter = 0
foreach ($file in ($files | where {$_ -like "*.*"})){
$source=$folderPath + $file
$destination = $target + $file
$webclient.DownloadFile($source, $target+$file)
#PRINT FILE NAME AND COUNTER
$counter++
$counter
$source
}
Merci pour votre aide (:
OriginalL'auteur Pascal | 2016-05-06
Vous devez vous connecter pour publier un commentaire.
L' .NET framework ou PowerShell n'ont aucun soutien explicite pour les opérations sur les fichiers (y compris les téléchargements). Vous devez mettre en œuvre la récursivité vous-même:
Partie difficile est d'identifier les fichiers de sous-répertoires. Il n'y a aucun moyen de le faire que de façon portable avec le .NET framework (
FtpWebRequest
ouWebClient
). L' .NET framework malheureusement ne prend pas en charge laMLSD
de commande, qui est le seul portable moyen de récupérer le répertoire de la liste avec les attributs de fichier dans le protocole FTP. Voir aussi Vérifier si l'objet sur le serveur FTP de fichier ou de répertoire.Vos options sont:
LIST
commande =ListDirectoryDetails
méthode) et essayer d'analyser un serveur spécifique de la liste. De nombreux serveurs FTP utiliser *nix-style de liste, où vous identifier un répertoire par lad
au tout début de l'entrée. Mais le nombre de serveurs à utiliser un format différent. L'exemple suivant utilise cette approche (en supposant que les *nix format)Utiliser la fonction comme:
Le code est traduit à partir de mon exemple en C# dans C# Télécharger tous les fichiers et sous-répertoires via FTP.
Si vous voulez éviter les ennuis avec l'analyse du serveur de répertoire spécifique à la liste des formats, l'utilisation d'un 3ème partie de la bibliothèque qui prend en charge la
MLSD
de commande et/ou de l'analyse de diversLIST
liste des formats; et récursive de téléchargements.Par exemple avec WinSCP .NET de l'assemblée vous pouvez télécharger tout le répertoire avec un seul appel à
Session.GetFiles
:En interne, WinSCP utilise le
MLSD
de commande, si la prise en charge par le serveur. Si pas, il utilise leLIST
de commande et prend en charge des dizaines de liste des formats.La
Session.GetFiles
méthode est récursive par défaut.(Je suis l'auteur de WinSCP)
Ajoutez-Type peut produire un FileLoadException, si oui, clic droit sur le WinSCPnet.dll fichier et sélectionnez propriétés, vous verrez une inhabituelle section de la sécurité ("Ce fichier provient d'un autre ordinateur") avec l'option pour le débloquer. si vous faites confiance à votre source à débloquer et ça marchera.
Documenté ici: winscp.net/eng/docs/message_net_operation_not_supported
OriginalL'auteur Martin Prikryl
Pour la récupération des fichiers /dossiers à partir de FTP via powerShell, j'ai écrit certaines fonctions, vous pouvez obtenir même des choses cachées depuis FTP.
Exemple pour récupérer tous les fichiers et sous-dossiers (même cachés) dans un dossier spécifique:
Vous pouvez simplement copier les fonctions suivantes module sans avoir besoin d'une 3ème bibliothèque installée:
https://github.com/AstralisSomnium/PowerShell-No-Library-Just-Functions/blob/master/FTPModule.ps1
OriginalL'auteur AstralisSomnium
AstralisSomnium
Oui, mais où je vous écris de destination du fichier téléchargé ?
Martin Prikryl
Je pense que l'utilisation de cette option, mais ce que je peux faire quelque chose comme ".*" pour sélectionner tous les extension ?
OriginalL'auteur Darknat