web-dev-qa-db-fra.com

PowerShell utilise xcopy, robocopy ou copy-item

La raison du passage des fichiers batch aux scripts PowerShell est d'améliorer la vérification des erreurs du processus. La cmdlet de copie présente-t-elle des avantages à cet égard?

S'il existe déjà un fichier batch qui utilise xcopy pour copier des fichiers par nom de fichier individuellement, y a-t-il un avantage à convertir la syntaxe en copie-élément?

Quels sont les avantages d'utiliser robocopy, xcopy et copy-item (par rapport à l'autre)? Par exemple, robocopy a-t-il un avantage lors de l'utilisation d'un grand nombre de petits fichiers sur un réseau fiable. Si ce script doit être exécuté simultanément sur des centaines d'ordinateurs pour copier des centaines de fichiers sur chacun d'eux, cela affectera-t-il la décision? La décision doit-elle se concentrer principalement sur les autorisations des fichiers?

15
Adam

Le principal avantage est simplement que vous pouvez envoyer des objets à Copy-Item via un tube au lieu de chaînes ou de spécifications de fichier. Vous pourriez donc faire:

Get-ChildItem '\\fileserver\photos\*.jpeg' -File | `
  Where-Object { ($_.LastAccessTime -ge (Get-Date).AddDays(-1)) -and ($_.Length -le 500000) } | `
  Copy-Item -Destination '\\webserver\photos\'

C'est un peu un mauvais exemple (vous pouvez le faire avec Copy-Item -Filter), mais c'est facile à trouver à la volée. Il est assez courant de travailler avec des fichiers pour se retrouver avec un pipeline de Get-ChildItem, et j'ai personnellement tendance à le faire beaucoup à cause du -Recurse -Include bug avec Remove-Item.

Vous obtenez également le recouvrement des erreurs de PowerShell, des paramètres spéciaux comme -Passthru, -WhatIf, -UseTransaction, ainsi que tous les paramètres communs. Copy-Item -Recurse peut reproduire certaines des capacités de copie d'arbre d'xcopy, mais c'est assez simple.

Maintenant, si vous devez gérer les ACL, la propriété, l'audit, etc., alors xcopy ou robocopy seront probablement beaucoup plus faciles car cette fonctionnalité est intégrée. Je ne suis pas sûr Comment Copy-Item gère la copie de fichiers cryptés vers des emplacements non cryptés (xcopy a une certaine capacité à le faire), et je ne crois pas Copy-Item prend en charge la gestion directe de l'attribut archive.

Si c'est la vitesse que vous recherchez, je soupçonne que xcopy et robocopy l'emporteront. Le code managé a des frais généraux plus élevés en général. Xcopy et robocopy offrent également beaucoup plus de contrôle sur la façon dont ils fonctionnent avec le réseau.

9
Bacon Bits