Windows, PowerShell ja pikad teed

Windows, PowerShell ja pikad teed

Ma arvan, et teie, nagu mina, olete sageli näinud vormi radu !!! Tähtis____Uus____!!! Ära kustuta!!!Tellimus nr 98819-649-B 30 Ivan Aleksandrovitš Kozlovi määramise kohta osakonnajuhataja kohusetäitjaks äriklientide toetamise ja ärikohtumiste korraldamise kõrval.doc.

Ja sageli ei saa te sellist dokumenti Windowsis kohe avada. Keegi praktiseerib lahendust ketta kaardistamise näol, keegi kasutab failihaldureid, mis võivad töötada pikkade radadega: Far Manager, Total Commander jms. Ja veel paljud vaatasid kurvalt, kuidas nende loodud PS-stsenaarium, millesse oli palju tööd investeeritud ja mis testikeskkonnas pauguga töötas, võitluskeskkonnas abitult võimatu ülesande üle kaebas: Määratud tee, failinimi või mõlemad on liiga pikad. Täielik failinimi peab olema alla 260 tähemärgi ja kataloogi nimi alla 248 tähemärgi.
Nagu selgus, piisab 260 tähemärgist "mitte ainult kõigile". Kui olete huvitatud lubatu piiridest väljumisest, küsin kassi alt.

Siin on vaid mõned failitee pikkuse piiramise kahetsusväärsed tagajärjed:

Teemast veidi kõrvalekaldudes märgin, et DFS-i replikatsiooni puhul pole artiklis käsitletav probleem kohutav ja pikkade nimedega failid liiguvad edukalt serverist serverisse (muidugi juhul, kui te ei tee teisiti õigesti tehtud).

Tahaksin juhtida tähelepanu ka väga kasulikule utiliidile, mis on mind aidanud rohkem kui üks kord robokoopia. Ka tema ei karda pikki teid ja teab palju. Seega, kui ülesanne taandub failiandmete kopeerimisele/edastamisele, võite sellega peatuda. Kui teil on vaja jamada failisüsteemi juurdepääsukontrolli loenditega (DACL), vaadake mujale subinacl. Vaatamata oma märkimisväärsele vanusele näitas see end suurepäraselt operatsioonisüsteemis Windows 2012 R2. Siin Kaalutakse rakendusviise.

Mind huvitas ka pikkade PowerShelli radadega töötamise õppimine. Temaga peaaegu nagu habemega naljas Ivan Tsarevitši ja Vasilisa Ilusa kohta.

Kiire viis

Lülituge Linuxile ja ärge muretsege Windows 10/2016/2019 pärast ning lubage sobiv rühmapoliitika seadistus/registri näpunäide. Ma ei peatu sellel meetodil üksikasjalikult, sest. Internetis on sellel teemal juba palju artikleid, näiteks see.

Arvestades, et enamikus ettevõtetes on operatsioonisüsteemide pehmelt öeldes palju mitte värskeid versioone, on see meetod kiire ainult paberile kirjutamiseks, välja arvatud juhul, kui olete muidugi üks neist õnnelikest, kellel on vähe pärandsüsteeme ja Windowsi. 10/2016/2019 valitsemisaeg .

pikk tee

Siinkohal teeme kohe reservatsiooni, et muudatused ei mõjuta Windows Exploreri käitumist, kuid võimaldavad kasutada PowerShelli cmdlet-käskudes pikki teid, nagu Get-Item, Get-ChildItem, Remove-Item jne.

Esiteks värskendame PowerShelli. See on tehtud üks, kaks, kolm.

  1. Värskendame .NET Frameworki versioonile vähemalt 4.5. Operatsioonisüsteem peab olema vähemalt Windows 7 SP1/2008 R2. Praeguse versiooni saab alla laadida siinloe rohkem infot siin.
  2. Allalaadimine ja installige Windows Management Framework 5.1
  3. Taaskäivitame masina.

Töökamad saavad ülaltoodud samme teha käsitsi, laisamad saavad seda teha SCCM-i, poliitikate, skriptide ja muude automatiseerimisvahendite abil.

PowerShelli praeguse versiooni leiate muutujast $PSVersionTable. Pärast värskendamist peaks see välja nägema järgmine:

Windows, PowerShell ja pikad teed

Nüüd cmdletide kasutamisel Get-ChildItem ja teised tema sarnased tavalise asemel Tee me kasutame sõnasõnalinePath.

Radade vorming on veidi erinev:

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

Teede tavapärasest vormingust vormingusse teisendamise mugavuse huvides sõnasõnalinePath saate seda funktsiooni kasutada:

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

Pange tähele, et parameetri määramisel sõnasõnalinePath metamärke ei saa kasutada (*, ? ja nii edasi).

Lisaks parameetrile sõnasõnalinePath, värskendatud PowerShelli cmdletis Get-ChildItem vastuvõetud parameeter Sügavus, millega saab rekursiivseks otsinguks määrata pesitsussügavuse, kasutasin paar korda ja jäin rahule.

Nüüd ei saa te karta, et teie PS-skript eksib pikalt keeruliselt teelt ega näe kaugeid faile. Näiteks aitas see lähenemine mind palju skripti kirjutamisel, et lähtestada DFSR-i kaustades olevate failide atribuut "ajutine". Kuid see on teine ​​​​lugu, mida ma püüan teises artiklis rääkida. Ootan teilt huvitavaid kommentaare ja soovitan osaleda küsitluses.

Kasulikud lingid:
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

Küsitluses saavad osaleda ainult registreerunud kasutajad. Logi sissepalun.

Kas pikkade teede probleem on teie jaoks aktuaalne?

  • Jah

  • Oli asjakohane, kuid juba otsustatud

  • Segab, aga mitte palju

  • Ei mõelnudki, kõik tundub toimivat

  • ei

  • Muu (täpsustage kommentaarides)

155 kasutajat hääletas. 25 kasutajat jäi erapooletuks.

Allikas: www.habr.com

Lisa kommentaar