Windows, PowerShell και Long Paths

Windows, PowerShell και Long Paths

Νομίζω ότι εσείς, όπως εγώ, έχετε δει τέτοια μονοπάτια περισσότερες από μία φορές !!! Σημαντικό____Νέο____!!! Να μην διαγραφεί!!!Αριθμός παραγγελίας 98819-649-B ημερομηνίας 30 Φεβρουαρίου 1985 σχετικά με τον διορισμό του Ivan Aleksandrovich Kozlov ως προσωρινού αναπληρωτή επικεφαλής του τμήματος υποστήριξης εταιρικών VIP πελατών και διοργάνωσης επιχειρηματικών συναντήσεων στο περιθώριο.doc.

Και συχνά δεν θα μπορείτε να ανοίξετε ένα τέτοιο έγγραφο στα Windows αμέσως. Μερικοί άνθρωποι εξασκούν εναλλακτική λύση με τη μορφή αντιστοίχισης δίσκου, άλλοι χρησιμοποιούν διαχειριστές αρχείων που μπορούν να λειτουργήσουν με μεγάλες διαδρομές: Far Manager, Total Commander και παρόμοια. Και πολλοί άλλοι παρακολούθησαν με λύπη το σενάριο του PS που δημιούργησαν, στο οποίο είχε επενδυθεί πολλή δουλειά και το οποίο λειτούργησε με θόρυβο στο δοκιμαστικό περιβάλλον, σε ένα περιβάλλον παραγωγής παραπονέθηκε αβοήθητα για μια αδύνατη δουλειά: Η καθορισμένη διαδρομή, το όνομα αρχείου ή και τα δύο είναι πολύ μεγάλα. Το πλήρως αναγνωρισμένο όνομα αρχείου πρέπει να είναι μικρότερο από 260 χαρακτήρες και το όνομα καταλόγου πρέπει να είναι μικρότερο από 248 χαρακτήρες.
Όπως αποδεικνύεται, 260 χαρακτήρες είναι αρκετοί «όχι μόνο για όλους». Εάν ενδιαφέρεστε να υπερβείτε τα όρια του επιτρεπόμενου, ανατρέξτε στη γάτα.

Ακολουθούν μερικές μόνο από τις ατυχείς συνέπειες του περιορισμού του μήκους της διαδρομής αρχείου:

Αποκλίνοντας ελαφρώς από το θέμα, σημειώνω ότι για την αναπαραγωγή DFS το πρόβλημα που συζητείται στο άρθρο δεν είναι τρομερό και τα αρχεία με μεγάλα ονόματα ταξιδεύουν με επιτυχία από διακομιστή σε διακομιστή (αν, φυσικά, όλα τα άλλα είναι έγινε σωστά).

Θα ήθελα επίσης να επιστήσω την προσοχή σας σε ένα πολύ χρήσιμο βοηθητικό πρόγραμμα που με βοήθησε περισσότερες από μία φορές Robocopy. Επίσης δεν φοβάται τα μεγάλα μονοπάτια και μπορεί να κάνει πολλά. Επομένως, εάν η εργασία καταλήγει στην αντιγραφή/μεταφορά δεδομένων αρχείου, μπορείτε να σταματήσετε εκεί. Εάν πρέπει να παίξετε κόλπα με λίστες ελέγχου πρόσβασης συστήματος αρχείων (DACL), κοιτάξτε μακριά υποκείμενο. Παρά την προχωρημένη ηλικία του, είχε εξαιρετική απόδοση στα Windows 2012 R2. Εδώ λαμβάνονται υπόψη οι μέθοδοι εφαρμογής.

Με ενδιέφερε να διδάξω πώς να εργάζομαι με μεγάλες διαδρομές PowerShell. Μαζί του είναι σχεδόν σαν σε ένα γενειοφόρο αστείο για τον Ιβάν Τσαρέβιτς και τη Βασιλίσα την Ωραία.

Γρήγορος τρόπος

Μεταβείτε σε Linux και μην ανησυχείτε για τα Windows 10/2016/2019 και ενεργοποιήστε την κατάλληλη ρύθμιση πολιτικής ομάδας/τσιμπήστε το μητρώο. Δεν θα σταθώ λεπτομερώς σε αυτή τη μέθοδο, γιατί... Υπάρχουν ήδη πολλά άρθρα σχετικά με αυτό το θέμα στο Διαδίκτυο, για παράδειγμα, αυτό.

Λαμβάνοντας υπόψη ότι οι περισσότερες εταιρείες έχουν πολλές, για να το θέσω ήπια, όχι τις πιο πρόσφατες εκδόσεις λειτουργικών συστημάτων, αυτή η μέθοδος είναι γρήγορη μόνο για γραφή σε χαρτί, εκτός εάν, φυσικά, είστε από εκείνους τους τυχερούς που έχουν λίγα παλαιού τύπου συστήματα και Windows 10 /2016/2019 βασιλεύει υπέρτατα .

Ο μακρύς δρόμος

Ας κάνουμε αμέσως μια κράτηση εδώ ότι οι αλλαγές δεν θα επηρεάσουν τη συμπεριφορά της Εξερεύνησης των Windows, αλλά θα επιτρέψουν τη χρήση μεγάλων διαδρομών στα cmdlet του PowerShell, όπως Get-Item, Get-ChildItem, Remove-Item κ.λπ.

Αρχικά, ας ενημερώσουμε το PowerShell. Γίνεται μία, δύο, τρεις φορές.

  1. Ενημερώνουμε το .NET Framework σε έκδοση όχι μικρότερη από 4.5. Το λειτουργικό σύστημα πρέπει να είναι τουλάχιστον Windows 7 SP1/2008 R2. Μπορείτε να κάνετε λήψη της τρέχουσας έκδοσης εδώ, διαβάστε περισσότερες πληροφορίες εδώ.
  2. Λήψη και εγκαταστήστε το Windows Management Framework 5.1
  3. Κάνουμε επανεκκίνηση του μηχανήματος.

Οι εργατικοί άνθρωποι μπορούν να κάνουν τα βήματα που περιγράφονται παραπάνω χειροκίνητα, οι τεμπέληδες μπορούν να το κάνουν με τη βοήθεια SCCM, πολιτικών, σεναρίων και άλλων εργαλείων αυτοματισμού.

Η τρέχουσα έκδοση του PowerShell μπορεί να βρεθεί από τη μεταβλητή $PSVersionTable. Μετά την ενημέρωση θα πρέπει να μοιάζει κάπως έτσι:

Windows, PowerShell και Long Paths

Τώρα όταν χρησιμοποιείτε cmdlet Get-ChildItem και τα παρόμοια αντί για τα συνηθισμένα μονοπάτι θα το χρησιμοποιησουμε κυριολεκτική διαδρομή.

Η μορφή διαδρομής θα είναι ελαφρώς διαφορετική:

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

Για τη διευκόλυνση της μετατροπής των διαδρομών από τη συνήθη μορφή στη μορφή κυριολεκτική διαδρομή μπορείτε να χρησιμοποιήσετε αυτή τη λειτουργία:

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"}
}

Λάβετε υπόψη ότι κατά τη ρύθμιση της παραμέτρου κυριολεκτική διαδρομή Δεν μπορείτε να χρησιμοποιήσετε χαρακτήρες μπαλαντέρ (*, ? και ούτω καθεξής).

Εκτός από την παράμετρο κυριολεκτική διαδρομή, στην ενημερωμένη έκδοση του PowerShell cmdlet Get-ChildItem πήρε την παράμετρο Βάθος, με το οποίο μπορείτε να ορίσετε το βάθος ένθεσης για αναδρομική αναζήτηση, το χρησιμοποίησα μερικές φορές και έμεινα ικανοποιημένος.

Τώρα δεν χρειάζεται να ανησυχείτε ότι το σενάριο του PS σας θα παραπλανηθεί στο μακρύ ακανθώδες μονοπάτι και δεν θα μπορείτε να δείτε μακρινά αρχεία. Για παράδειγμα, αυτή η προσέγγιση με βοήθησε πολύ όταν έγραφα ένα σενάριο για να επαναφέρω το χαρακτηριστικό "προσωρινό" των αρχείων στους φακέλους DFSR. Αλλά αυτή είναι μια άλλη ιστορία, την οποία θα προσπαθήσω να πω σε άλλο άρθρο. Ανυπομονώ για ενδιαφέροντα σχόλια από εσάς και σας προτείνω να συμμετάσχετε στην έρευνα.

Χρήσιμοι σύνδεσμοι:
docs.microsoft.com/ru-ru/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

Μόνο εγγεγραμμένοι χρήστες μπορούν να συμμετάσχουν στην έρευνα. Συνδεθείτε, Σας παρακαλούμε.

Το πρόβλημα των μεγάλων μονοπατιών είναι σχετικό με εσάς;

  • Ναί

  • Ήταν σχετικό, αλλά έχει ήδη αποφασιστεί

  • Παρεμβαίνει, αλλά όχι πολύ

  • Δεν το σκέφτηκα, όλα δείχνουν να λειτουργούν

  • Όχι

  • Άλλο (παρακαλούμε διευκρινίστε στα σχόλια)

Ψήφισαν 155 χρήστες. 25 χρήστες απείχαν.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο