Windows, PowerShell un garie ceļi

Windows, PowerShell un garie ceļi

Es domāju, ka jÅ«s, tāpat kā es, esat redzējuÅ”i Ŕādus ceļus vairāk nekā vienu reizi !!! SvarÄ«gi____Jaunums____!!! Nedzēst!!!PasÅ«tÄ«jums Nr.98819-649-B 30.gada 1985.februārÄ« par Ivana Aleksandroviča Kozlova iecelÅ”anu par korporatÄ«vo VIP klientu atbalsta un biznesa tikÅ”anos organizÄ“Å”anas nodaļas pagaidu pienākumu izpildÄ«tāju.doc.

Un bieži vien jÅ«s nevarēsit uzreiz atvērt Ŕādu dokumentu sistēmā Windows. Daži cilvēki praktizē risinājumu diska kartÄ“Å”anas veidā, citi izmanto failu pārvaldniekus, kas var strādāt ar gariem ceļiem: Far Manager, Total Commander un tamlÄ«dzÄ«gi. Un daudzi citi ar skumjām skatÄ«jās, kā viņu radÄ«tais PS skripts, kurā tika ieguldÄ«ts liels darbs un kas testa vidē darbojās ar lielu triecienu, ražoÅ”anas vidē bezpalÄ«dzÄ«gi sÅ«dzējās par neiespējamu uzdevumu: NorādÄ«tais ceļŔ, faila nosaukums vai abi ir pārāk gari. PilnÄ«bā kvalificētajam faila nosaukumam ir jābÅ«t mazākam par 260 rakstzÄ«mēm, un direktorija nosaukumam ir jābÅ«t mazākam par 248 rakstzÄ«mēm.
Kā izrādās, ar 260 rakstzÄ«mēm pietiek ā€œne tikai visiemā€. Ja jÅ«s interesē pārkāpt atļautās robežas, lÅ«dzu, skatiet kaÄ·i.

Šeit ir tikai dažas no neveiksmīgajām sekām, ko rada faila ceļa garuma ierobežoŔana:

Nedaudz novirzoties no tēmas, atzīmēju, ka DFS replikācijai rakstā aplūkotā problēma nav briesmīga un faili ar gariem nosaukumiem veiksmīgi pārvietojas no servera uz serveri (ja, protams, viss pārējais ir izdarīts pareizi).

Es arÄ« vēlos vērst jÅ«su uzmanÄ«bu uz ļoti noderÄ«gu utilÄ«tu, kas man ir palÄ«dzējis vairāk nekā vienu reizi robokopija. Viņa arÄ« nebaidās no gariem ceļiem, un viņa var daudz. Tāpēc, ja uzdevums ir saistÄ«ts ar faila datu kopÄ“Å”anu/pārsÅ«tÄ«Å”anu, varat pie tā apstāties. Ja vēlaties izspēlēt trikus ar failu sistēmas piekļuves kontroles sarakstiem (DACL), skatieties prom apakÅ”kls. Neskatoties uz lielo vecumu, tas lieliski darbojās operētājsistēmā Windows 2012 R2. Å eit tiek ņemtas vērā pielietoÅ”anas metodes.

Mani interesēja mācīt, kā strādāt ar gariem PowerShell ceļiem. Ar viņu tas ir gandrīz kā bārdainā jokā par Ivanu Careviču un Vasilisu Skaisto.

Ātri

Pārslēdzieties uz Linux un neuztraucieties par operētājsistēmu Windows 10/2016/2019 un iespējojiet atbilstoÅ”o grupas politikas iestatÄ«jumu / pielāgojiet reÄ£istru. SÄ«kāk pie Ŕīs metodes nekavÄ“Å”os, jo... Internetā jau ir daudz rakstu par Å”o tēmu, piemēram, Å”is.

Ņemot vērā, ka lielākajai daļai uzņēmumu ir daudzas, maigi izsakoties, nevis jaunākās operētājsistēmu versijas, Ŕī metode ir ātra tikai rakstÄ«Å”anai uz papÄ«ra, ja vien, protams, neesat viens no tiem laimÄ«gajiem, kam ir maz mantoto sistēmu un Windows 10. /2016/2019 valda virsÅ« .

Garais ceļŔ

Šeit uzreiz izdarīsim atrunu, ka izmaiņas neietekmēs Windows Explorer darbību, bet ļaus PowerShell cmdlet izmantot garus ceļus, piemēram, Get-Item, Get-ChildItem, Remove-Item utt.

Vispirms atjaunināsim PowerShell. Tas tiek darīts vienu, divas, trīs reizes.

  1. Mēs atjauninām .NET Framework uz versiju, kas nav zemāka par 4.5. Operētājsistēmai ir jābÅ«t vismaz Windows 7 SP1/2008 R2. JÅ«s varat lejupielādēt paÅ”reizējo versiju Å”eit, lasiet vairāk informācijas Å”eit.
  2. Notiek lejupielāde un instalējiet Windows Management Framework 5.1
  3. Mēs pārstartējam maŔīnu.

StrādÄ«gi cilvēki iepriekÅ” aprakstÄ«tās darbÄ«bas var veikt manuāli, slinki cilvēki to var izdarÄ«t ar SCCM, politiku, skriptu un citu automatizācijas rÄ«ku palÄ«dzÄ«bu.

PaÅ”reizējo PowerShell versiju var atrast no mainÄ«gā $PSVersionTable. Pēc atjaunināŔanas tam vajadzētu izskatÄ«ties apmēram Ŕādi:

Windows, PowerShell un garie ceļi

Tagad, izmantojot cmdlet Get-ChildItem un tamlīdzīgi parastā vietā taka mēs izmantosim literalPath.

Ceļa formāts būs nedaudz atŔķirīgs:

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

Ceļu konvertÄ“Å”anas ērtÄ«bai no parastā formāta uz formātu literalPath varat izmantot Å”o funkciju:

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

Lūdzu, ņemiet vērā, ka, iestatot parametru literalPath Jūs nevarat izmantot aizstājējzīmes (*, ? un tā tālāk).

Papildus parametram literalPath, atjauninātajā PowerShell cmdlet versijā Get-ChildItem ieguva parametru Dziļums, ar kuru var iestatÄ«t ligzdoÅ”anas dziļumu rekursÄ«vai meklÄ“Å”anai, izmantoju pāris reizes un biju apmierināts.

Tagad jums nav jāuztraucas, ka jÅ«su PS skripts apmaldÄ«sies pa garo sarežģīto ceļu un nevarēs redzēt tālus failus. Piemēram, Ŕī pieeja man ļoti palÄ«dzēja, rakstot skriptu, lai atiestatÄ«tu DFSR mapēs esoÅ”o failu ā€œpagaiduā€ atribÅ«tu. Bet tas ir cits stāsts, ko es mēģināŔu pastāstÄ«t citā rakstā. Gaidu interesantus komentārus no jums un iesaku piedalÄ«ties aptaujā.

Noderīgas saites:
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

Aptaujā var piedalīties tikai reģistrēti lietotāji. Ielogoties, lūdzu.

Vai garo ceļu problēma jums ir aktuāla?

  • Jā

  • Bija aktuāls, bet jau izlemts

  • Tas traucē, bet ne daudz

  • Es par to nedomāju, Ŕķiet, ka viss darbojas

  • Nē

  • Cits (lÅ«dzu, norādiet komentāros)

Nobalsoja 155 lietotāji. 25 lietotāji atturējās.

Avots: www.habr.com

Pievieno komentāru