Comment faire pour accélérer Powershell Get-Childitem sur UNC

DIR ou GCI est lent dans Powershell, mais rapide dans CMD. Est-il un moyen pour accélérer le processus?

Dans CMD.exe après un sous-seconde de retard, cela répond aussi vite que la fenêtre CMD peut suivre

dir \\remote-server.domain.com\share\folder\file*.*

En Powershell (v2), après+ de 40 secondes de retard, il répond avec une malformation de la lenteur (peut-être 3-4 lignes par seconde)

gci \\remote-server.domain.com\share\folder\file*.*

Je suis en train de numériser les journaux sur un serveur distant, donc peut-être qu'il y a une approche plus rapide.

get-childitem \$s\logs -include $filemask -recurse | select-string -pattern $regex
  • Dir en cmd.exe a toujours été plus rapide que toute autre méthode que j'ai jamais utilisé le FileSystemObject en VBScript ou le fournisseur de système de fichiers dans le PS. Au point même que j'ai écrit des fonctions VBScript shell à cmd.exe Dir pour la recherche de fichier. La récursivité permet simplement de façon exponentielle plus prononcé.
  • Peut-être que votre PowerShell pourrait appeler la CMD shell avec une commande comme dir /b /s \\server\logs\file*.* pour récupérer le chemin complet dans une forme qui PowerShell pourrait facilement?
  • -recurse est là aussi un report de course contre un domaine local. N'est pas vraiment nécessaire. Peu importe, avec ou sans elle est lente. La raison pour laquelle je demande c'est que (un) c'est un problème connu, et (b) il est difficile de croire que le PS est donc bien pire que l'ancien CMD.
  • Je ne sais pas la réponse, mais je ferai remarquer que, je m'attends à ce que, tout simplement, la construction de l'objet dans PS prendrait plus de temps que d'interroger acouple d'attributs et de la construction d'une chaîne de caractères. PS ne waaay plus donc je ne suis pas surpris que cela prend plus de temps pour être honnête.
  • je vais le faire pour l'obtenir autour d'elle, mais honnêtement, c'est juste idiot d'avoir à utiliser CMD lorsque l'un des points de vente de Powershell est comme un remplacement pour CMD. Nous avons donc une smart shell et rapide shell. 🙂
  • oh, je suis totalement d'obtenir que le PS est en train de faire un peu plus, mais il devrait y avoir un moyen de lui dire de faire moins. Sûrement, ils ont encore de la CMD code source pour avoir un aperçu rapide, de sorte qu'ils peuvent ajouter un -fast option.
  • Je suppose que pour une raison de la lenteur est que PowerShell est Get-ChildItem est l'extraction d'un ensemble .NET de l'objet de données sur chaque fichier (tout comme l'ensemble de la PS des commandes d'objets de tuyau), et en tirant sur le câble réseau ajoute le temps nécessaire pour aller chercher des propriétés et des ces. CMD, sur l'autre main, est vraiment juste la liste des biens essentiels comme le chemin d'accès et la date de modification. J'ai essayé d'utiliser Get-ChildItem -Filter..., mais il ne réduit pas les infos recueillies pour chaque fichier--il réduit simplement la sortie définie par les critères spécifiés.

InformationsquelleAutor b w | 2011-08-25