Windows, PowerShell è Long Paths

Windows, PowerShell è Long Paths

Pensu chì voi, cum'è mè, avete vistu chjassi cusì più di una volta !!! Impurtante____Novu____ !!! Ùn sguassate!!!Ordine N ° 98819-649-B di u 30 di ferraghju di u 1985 nantu à l'appuntamentu di Ivan Aleksandrovich Kozlov cum'è capu temporaneu di u dipartimentu per u sustegnu di i clienti VIP corporativi è l'urganizazione di riunioni d'affari fora di linea.doc.

È spessu ùn puderete micca apre un tali documentu in Windows subitu. Certi pirsuni praticanu solu solu in forma di mapping di discu, altri utilizanu file managers chì ponu travaglià cù longu camini: Far Manager, Total Commander è simili. E parechji altri anu vistu cun tristezza cum'è u script PS chì anu creatu, in quale assai travagliu hè statu investitu è ​​chì hà travagliatu cù un bang in l'ambienti di prova, in un ambiente di produzzione impotente si lamentava di un compitu impussibile: U percorsu specificatu, u nome di u schedariu, o i dui sò troppu longu. U nome di u schedariu cumpletamente qualificatu deve esse menu di 260 caratteri, è u nome di u cartulare deve esse menu di 248 caratteri.
Comu risulta, 260 caratteri sò abbastanza "micca solu per tutti". Sè site interessatu à andà oltre i limiti di ciò chì hè permessu, fate un riferimentu à u cat.

Eccu alcuni di e cunsequenze disgraziate di a limitazione di a lunghezza di u percorsu di u schedariu:

Diverging un pocu da u tema, aghju nutatu chì per a replicazione DFS u prublema discutitu in l'articulu ùn hè micca terribili è i schedari cù nomi longu viaghjanu cù successu da u servitore à u servitore (se, sicuru, tuttu u restu hè fattu bè).

Vogliu ancu attirà a vostra attenzione à una utilità assai utile chì m'hà aiutatu più di una volta robocopia. Ùn hè ancu a paura di camini longu, è pò fà assai. Dunque, s'è u compitu s'assumiglia à cupià / trasferimentu di dati di u schedariu, pudete firmà quì. Sè avete bisognu di ghjucà i trucchi cù listi di cuntrollu di l'accessu à u sistema di file (DACL), fighjate luntanu subinacl. Malgradu a so età avanzata, hà fattu eccellenti in Windows 2012 R2. ccà i metudi di applicazione sò cunsiderati.

Eru interessatu à insignà cumu travaglià cù camini longu di PowerShell. Cun ellu hè quasi cum'è in un scherzu barbutu annantu à Ivan Tsarevich è Vasilisa a Bella.

Modu rapidu

Cambia à Linux è ùn vi preoccupate micca di Windows 10/2016/2019 è attivate l'impostazione di pulitica di u gruppu adattata / aghjustate u registru. Ùn aghju micca detta in stu metudu, perchè ... Ci sò digià assai articuli nantu à questu tema in Internet, per esempiu, questu.

In cunsiderà chì a maiò parte di l'imprese anu parechje, per dì un pocu, micca l'ultime versioni di sistemi operativi, stu metudu hè rapidu solu per scrive nantu à carta, salvu chì, sicuru, site unu di quelli furtunati chì anu pochi sistemi legati è Windows 10. /2016/2019 regna supremu.

A longa strada

Facemu immediatamente una riservazione quì chì i cambiamenti ùn affettanu micca u cumpurtamentu di l'Explorer di Windows, ma permettenu di utilizà percorsi longu in i cmdlets PowerShell, cum'è Get-Item, Get-ChildItem, Remove-Item, etc.

Prima, aghjurnemu PowerShell. Hè fattu una, duie, trè volte.

  1. Aghjurnà u .NET Framework à a versione micca più bassa di 4.5. U sistema operatore deve esse almenu Windows 7 SP1/2008 R2. Pudete scaricà a versione attuale ccà, leghje più infurmazione ccà.
  2. Scaricà è installate Windows Management Framework 5.1
  3. Riavviamu a macchina.

I travagliadori pò fà i passi descritti sopra manualmente, i pigri pò fà cù l'aiutu di SCCM, pulitiche, scripts è altri arnesi d'automatizazione.

A versione attuale di PowerShell pò esse truvata da a variabile $PSVersionTable. Dopu à l'aghjurnamentu, deve esse simile à questu:

Windows, PowerShell è Long Paths

Avà quandu si usa cmdlets Get-ChildItem è simili invece di u solitu Caminu avemu aduprà LitteralPath.

U formatu di a strada serà un pocu sfarente:

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

Per a comodità di cunvertisce camini da u formatu di solitu à u furmatu LitteralPath pudete aduprà sta funzione:

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

Per piacè nutate chì quandu stabilisce u paràmetru LitteralPath Ùn pudete micca aduprà i caratteri cumedichi (*, ? etc.)

In più di u paràmetru LitteralPath, in a versione aghjurnata di PowerShell cmdlet Get-ChildItem uttene u paràmetru Sicurezza, cù quale pudete stabilisce a prufundità di nidificazione per a ricerca recursiva, l'aghju utilizatu un paru di volte è era cuntentu.

Avà ùn devi micca preoccupatu chì u vostru script PS andarà per via di a longa strada spinosa è ùn puderà micca vede i fugliali distanti. Per esempiu, stu approcciu m'hà aiutatu assai quandu scrivite un script per resettate l'attributu "temporary" di i schedari in i cartulare DFSR. Ma questu hè un'altra storia, chì pruvaraghju à cuntà in un altru articulu. Aspettu cumenti interessanti da voi è vi suggerisce di piglià l'indagine.

Ligami utili:
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

Solu l'utilizatori registrati ponu participà à l'indagine. Firmà lu, per piacè.

Hè u prublema di camini longu pertinenti per voi?

  • chì

  • Era pertinente, ma digià decisu

  • Interferisce, ma micca assai

  • Ùn aghju micca pensatu à questu, tuttu pare chì funziona

  • No

  • Altru (per piacè specificà in cumenti)

155 utilizatori anu vutatu. 25 utilizatori si sò astenuti.

Source: www.habr.com

Add a comment