Windows, PowerShell et chemins longs

Windows, PowerShell et chemins longs

Je pense que vous, comme moi, avez souvent vu des chemins de la forme !!! Important____Nouveau____ !!! Ne pas supprimer !!!Ordonnance n° 98819-649-B du 30 février 1985 sur la nomination d'Ivan Aleksandrovich Kozlov au poste de chef par intérim du département chargé de l'accompagnement des entreprises clientes VIP et de l'organisation de réunions d'affaires en marge.doc.

Et souvent, vous ne pourrez pas ouvrir immédiatement un tel document dans Windows. Quelqu'un pratique une solution de contournement sous la forme d'un mappage de disque, quelqu'un utilise des gestionnaires de fichiers qui peuvent fonctionner avec de longs chemins : Far Manager, Total Commander et autres. Et beaucoup d'autres ont tristement regardé comment le script PS qu'ils ont créé, dans lequel beaucoup de travail a été investi et qui a fonctionné avec un bang dans l'environnement de test, dans l'environnement de combat, s'est plaint impuissant d'une tâche impossible : Le chemin d'accès, le nom de fichier ou les deux spécifiés sont trop longs. Le nom de fichier complet doit comporter moins de 260 caractères et le nom du répertoire doit comporter moins de 248 caractères.
Il s'est avéré que 260 caractères suffisent "pas seulement pour tout le monde". Si vous êtes intéressé à aller au-delà des limites de ce qui est permis, je demande sous cat.

Voici quelques-unes des conséquences malheureuses de la limitation de la longueur du chemin de fichier :

S'écartant légèrement du sujet, je note que pour la réplication DFS, le problème considéré dans l'article n'est pas terrible et les fichiers avec des noms longs se déplacent avec succès d'un serveur à l'autre (à moins, bien sûr, sinon vous bien fait).

Je voudrais également attirer l'attention sur un utilitaire très utile qui m'a aidé plus d'une fois robocopy. Elle aussi n'a pas peur des longs chemins et elle en sait beaucoup. Par conséquent, si la tâche se résume à copier/transférer des données de fichiers, vous pouvez vous arrêter là. Si vous avez besoin de jouer avec les listes de contrôle d'accès au système de fichiers (DACL), détournez le regard subinacl. Malgré son âge considérable, il s'est parfaitement illustré sur Windows 2012 R2. Ici les méthodes d'application sont envisagées.

J'étais également intéressé à apprendre à travailler avec de longs chemins PowerShell. Avec lui, presque comme dans une blague barbue sur Ivan Tsarévitch et Vasilisa la Belle.

Moyen rapide

Passez à Linux et ne vous inquiétez pas pour Windows 10/2016/2019 et activez le paramètre de stratégie de groupe/registre approprié. Je ne m'attarderai pas sur cette méthode en détail, car. il existe déjà de nombreux articles sur le net à ce sujet, par exemple, ceci.

Considérant que dans la plupart des entreprises, il y en a beaucoup, et c'est un euphémisme, pas de nouvelles versions de systèmes d'exploitation, cette méthode n'est rapide que pour écrire sur papier, à moins, bien sûr, que vous soyez l'un de ces chanceux qui ont peu de systèmes hérités et Windows 10/2016/2019 règne .

long chemin

Ici, nous réservons immédiatement que les modifications n'affecteront pas le comportement de l'Explorateur Windows, mais permettront d'utiliser des chemins longs dans les applets de commande PowerShell, tels que Get-Item, Get-ChildItem, Remove-Item, etc.

Tout d'abord, mettons à jour PowerShell. C'est fait un, deux, trois.

  1. Nous mettons à jour le .NET Framework vers une version d'au moins 4.5. Le système d'exploitation doit être au moins Windows 7 SP1/2008 R2. La version actuelle peut être téléchargée icilire plus d'informations ici.
  2. Téléchargement et installez Windows Management Framework 5.1
  3. Nous redémarrons la machine.

Les travailleurs acharnés peuvent effectuer les étapes ci-dessus manuellement, les paresseux peuvent le faire à l'aide de SCCM, de politiques, de scripts et d'autres outils d'automatisation.

La version actuelle de PowerShell peut être trouvée à partir de la variable $ PSVersionTable. Après la mise à jour, cela devrait ressembler à ceci :

Windows, PowerShell et chemins longs

Maintenant, lors de l'utilisation d'applets de commande Get-ChildItem et d'autres comme lui au lieu de l'habituel Chemin ем использовать LittéralChemin.

Le format des chemins sera légèrement différent :

Get-ChildItem -LiteralPath "?C:Folder"
Get-ChildItem -LiteralPath "?UNCServerNameShare"
Get-ChildItem -LiteralPath "?UNC192.168.0.10Share"

Pour faciliter la conversion des chemins du format habituel au format LittéralChemin tu peux utiliser cette fonction :

Function ConvertTo-LiteralPath 
Param([parameter(Mandatory=$true, Position=0)][String]$Path)
    If ($Path.Substring(0,2) -eq "") {Return ("?UNC" + $Path.Remove(0,1))}
    Else {Return "?$Path"}
}

Veuillez noter que lors du réglage du paramètre LittéralChemin les caractères génériques ne peuvent pas être utilisés (*, ? etc).

En plus du paramètre LittéralChemin, dans l'applet de commande PowerShell mise à jour Get-ChildItem paramètre reçu Profondeur, avec lequel vous pouvez définir la profondeur d'imbrication pour la recherche récursive, je l'ai utilisé plusieurs fois et j'ai été satisfait.

Maintenant, vous ne pouvez pas avoir peur que votre script PS s'égare d'un long chemin épineux et ne voie pas les fichiers distants. Par exemple, cette approche m'a beaucoup aidé lors de l'écriture d'un script pour réinitialiser l'attribut "temporaire" des fichiers dans les dossiers DFSR. Mais ceci est une autre histoire, que j'essaierai de raconter dans un autre article. J'attends des commentaires intéressants de votre part et je vous propose de répondre à un sondage.

Liens utiles:
docs.microsoft.com/en-us/dotnet/api/microsoft.powershell.commands.contentcommandbase.literalpath?view=powershellsdk-1.1.0
docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-5.1
stackoverflow.com/questions/46308030/handling-path-too-long-exception-with-new-psdrive/46309524
luisabreu.wordpress.com/2013/02/15/theliteralpath-parameter

Seuls les utilisateurs enregistrés peuvent participer à l'enquête. se connecters'il te plait.

Le problème des longs chemins vous concerne-t-il ?

  • Oui

  • Était pertinent, mais déjà décidé

  • Interfère, mais pas beaucoup

  • Je n'y ai pas pensé, tout semble fonctionner

  • Aucun

  • Autre (précisez dans les commentaires)

155 utilisateurs ont voté. 25 utilisateurs se sont abstenus.

Source: habr.com

Ajouter un commentaire