Windows, PowerShell a Long Paths

Windows, PowerShell a Long Paths

Ech mengen, Dir hutt, wéi ech, méi wéi eng Kéier esou Weeër gesinn !!! Wichteg____Nei____!!! Net läschen!!!Bestellnummer 98819-649-B vum 30. Februar 1985 iwwer d'Ernennung vum Ivan Aleksandrovich Kozlov als temporäre handele Chef vum Departement fir d'Ënnerstëtzung vu VIP Clienten a Geschäftsversammlungen op der Säit ze organiséieren.doc.

An dacks kënnt Dir net sou en Dokument direkt op Windows opmaachen. E puer Leit üben Léisung a Form vun Disk Mapping, anerer benotzen Dateimanager déi mat laange Weeër kënne schaffen: Far Manager, Total Commander an dergläiche. A vill méi hunn mat Trauregkeet de PS-Skript nogekuckt, deen se erstallt hunn, an deem vill Aarbecht investéiert gouf an dee mat engem Knall am Testëmfeld geschafft huet, an engem Produktiounsëmfeld hëlleflos iwwer eng onméiglech Aufgab beschwéiert: De spezifizéierte Wee, den Dateinumm oder béid sinn ze laang. De komplett qualifizéierten Dateinumm muss manner wéi 260 Zeechen sinn, an den Verzeechnesnumm muss manner wéi 248 Zeechen sinn.
Wéi et sech erausstellt, sinn 260 Zeechen genuch "net nëmme fir jiddereen." Wann Dir interesséiert sidd iwwer d'Grenze vun deem erlaabt ze goen, da kuckt w.e.g. op d'Kaz.

Hei sinn nëmmen e puer vun den ongléckleche Konsequenze vun der Limitatioun vun der Dateiweelängt:

liicht aus dem Thema divergéieren, bemierken ech datt fir DFS Replikatioun de Problem, deen am Artikel diskutéiert gëtt, net schrecklech ass an Dateie mat laangen Nimm reesen erfollegräich vu Server op Server (wann natierlech alles anescht ass richteg gemaach).

Ech wéilt och Är Opmierksamkeet op e ganz nëtzlechen Utility opmierksam maachen, deen mir méi wéi eemol gehollef huet robocopy. Si huet och keng Angscht viru laange Weeër, a si kann vill maachen. Dofir, wann d'Aufgab op d'Kopie / Iwwerdroung vun Dateidaten erofkënnt, kënnt Dir do ophalen. Wann Dir musst Tricken mat Dateiesystem Zougangskontrolllëschten (DACLs) spillen, kuckt weg subinacl. Trotz sengem fortgeschrattem Alter huet et exzellent op Windows 2012 R2 gemaach. hei Methode vun Applikatioun considéréiert ginn.

Ech war interesséiert fir ze léieren wéi ech mat laange PowerShell Weeër schaffen. Mat him ass et bal wéi an engem bäertege Witz iwwer Ivan Tsarevich a Vasilisa de Schéinen.

Schnell Wee

Wiesselt op Linux a maach der keng Suergen iwwer Windows 10/2016/2019 an aktivéiert déi entspriechend Gruppepolitik Astellung / tweak de Registry. Ech wäert net op dës Method am Detail ophalen, well ... Et gi scho vill Artikelen iwwer dëst Thema um Internet, z.B. dat.

Bedenkt datt déi meescht Firmen vill, fir et mild ze soen, net déi lescht Versioune vu Betribssystemer hunn, ass dës Method nëmme séier fir op Pabeier ze schreiwen, ausser Dir sidd natierlech ee vun deene Gléck, déi wéineg Legacy Systemer hunn an Windows 10 /2016/2019 regéiert héchsten.

De laange Wee

Loosst eis direkt hei reservéieren datt d'Ännerungen net d'Behuele vum Windows Explorer beaflossen, awer et méiglech maachen laang Weeër an PowerShell cmdlets ze benotzen, wéi Get-Item, Get-ChildItem, Remove-Item, etc.

Als éischt, loosst eis PowerShell aktualiséieren. Et gëtt een, zwee, dräimol gemaach.

  1. Mir aktualiséieren den .NET Framework op d'Versioun net manner wéi 4.5. De Betribssystem muss op d'mannst Windows 7 SP1/2008 R2 sinn. Dir kënnt déi aktuell Versioun eroflueden hei, liesen méi Informatiounen hei.
  2. Eroflueden an installéiert Windows Management Framework 5.1
  3. Mir starten d'Maschinn nei.

Hardworking Leit kënnen d'Schrëtt uewen beschriwwen manuell maachen, faul Leit kënnen et mat der Hëllef vu SCCM, Politiken, Scripten an aner Automatisatiounsinstrumenter maachen.

Déi aktuell Versioun vu PowerShell kann aus der Variabel fonnt ginn $PSVersionTable. Nom Update sollt et sou ausgesinn:

Windows, PowerShell a Long Paths

Elo wann Dir cmdlets benotzt Kritt-ChildItem an der wéi amplaz déi üblech Wee mir wäerten benotzen literalPath.

De Wee Format wäert liicht anescht sinn:

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

Fir d'Kamoudheet vun der Ëmwandlung vun Weeër aus dem gewéinleche Format zum Format literalPath Dir kënnt dës Funktioun benotzen:

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

Maacht weg datt wann Dir de Parameter setzt literalPath Dir kënnt keng Wildcards benotzen (*, ? an sou weider).

Zousätzlech zum Parameter literalPath, an der aktualiséierter Versioun vum PowerShell cmdlet Kritt-ChildItem krut de Parameter Déift, mat deem Dir d'Nistdéift fir rekursiv Sich setzen kann, hunn ech et e puer Mol benotzt a war zefridden.

Elo musst Dir Iech keng Suergen maachen datt Äre PS Skript laanscht de laange thorny Wee verschwënnt an net wäit ewech Dateien gesinn. Zum Beispill huet dës Approche mir vill gehollef beim Schreiwen vun engem Skript fir de "temporäre" Attribut vu Dateien an DFSR Ordner zréckzesetzen. Awer dat ass eng aner Geschicht, déi ech probéieren an engem aneren Artikel ze erzielen. Ech freeën eis op interessant Kommentarer vun Iech a proposéieren Iech d'Ëmfro ze huelen.

Nëtzlech Adressen:
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

Nëmme registréiert Benotzer kënnen un der Ëmfro deelhuelen. Umellen, wann ech glift.

Ass de Problem vu laange Weeër relevant fir Iech?

  • datt

  • War relevant, awer schonn decidéiert

  • Et stéiert, awer net vill

  • Ech hunn net driwwer geduecht, alles schéngt ze schaffen

  • Nee

  • Aner (spezifizéieren w.e.g. an de Kommentarer)

155 Benotzer hunn gestëmmt. 25 Benotzer hu sech enthalen.

Source: will.com

Setzt e Commentaire