Windows, PowerShell dhe rrugë të gjata

Windows, PowerShell dhe rrugë të gjata

Mendoj se juve, ashtu si edhe mua, iu ka ndodhur shpesh të shihni rrugë si !!! E rëndësishme____E re____!!! Mos e fshini!!! Urdhri Nr. 98819-649-B datë 30 shkurt 1985 për emërimin e Kozlov Ivan Aleksandrovich si përkohësisht përmbushës i detyrës së udhëheqësit në drejtimin e mbështetjes së klientëve VIP ndërkorporatë dhe organizimin e takimeve biznesore në kulisa.doc.

Dhe shpesh nuk është e mundur të hapni një dokument të tillë menjëherë në Windows. Disa praktikojnë workaround në formën e mapimit të disqeve, disa përdorin menaxherë skedarësh që dinë të punojnë me rrugë të gjata: Far Manager, Total Commander dhe të ngjashme. Edhe shumë kanë parë me trishtim se si skripti i PS që krijuan me shumë punë dhe që në ambientin e testimit funksiononte pa ndonjë problem, në mjedisin e prodhimit ankohej pa ndihmë për një detyrë të pamundur: Rruga e specifikuar, emri i skedarit, ose të dyja janë shumë të gjata. Emri i plotë i skedarit duhet të jetë më pak se 260 karaktere, dhe emri i direktorive më pak se 248 karaktere.
Siç duket, 260 karaktere janĂ« tĂ« mjaftueshme 'jo vetĂ«m pĂ«r tĂ« gjithĂ«'. NĂ«se jeni tĂ« interesuar tĂ« kaloni kufijtĂ« e lejuara — ju lutem, shihni poshtĂ«.

Ja disa nga pasojat e trishtueshme të kufizimit të gjatë të rrugës së skedarëve:

Disa ndryshime nga tema, dua të them se për Replikimin DFS, problemi i trajtuar në artikull nuk është i frikshëm dhe skedarët me emra të gjatë udhëtojnë me sukses nga serveri në server (nëse, natyrisht, gjithçka tjetër keni bërë siç duhet) e keni bërë).

Do të doja të tërheq vëmendjen ndaj një utilitari shumë të dobishëm dhe që më ka ndihmuar shumë herë robocopy. Ajo gjithashtu nuk e ka problem gjatë me rrugët e gjata, dhe di të bëjë shumë. Prandaj, nëse detyra përfshin kopjimin/zhvendosjen e të dhënave të skedarëve, mund të ndaloni te ajo. Nëse duhet të punoni me listat e kontrollit të qasshmërisë në sistemin e skedarëve (DACL), shikoni në drejtim të subinacl. Megjithëse ka një moshë të konsiderueshme, ka bërë një performancë të shkëlqyer në Windows 2012 R2. Këtu janë shqyrtuar metodat e aplikimit.

Mua më interesonte të mësoja si të punoja me rrugë të gjata në PowerShell. Me të është pothuajse si në anekdotën e njohur për Ivan Tsareviçin dhe Vasiliusën e Bukur.

Një mënyrë e shpejtë

Kaloni në Linux dhe mos u shqetësoni për Windows 10/2016/2019 dhe aktivizoni parametrin përkatës të politikës së grupit/përmirësoni regjistrin. Nuk do të vonohem shumë mbi këtë metodë, pasi në internet ka shumë artikuj mbi këtë temë, për shembull, kjo.

Duke pasur parasysh se në shumicën e kompanive ka shumë, lehtësisht të themi, versione të vjetra të sistemeve operative, kjo mënyrë është e shpejtë vetëm për shkrim në letër, nëse natyrisht nuk jeni midis atyre fatlumëve që kanë pak sisteme legacy dhe mbretëron Windows 10/2016/2019.

Një mënyrë e gjatë

Të vihet në dukje menjëherë se ndryshimet nuk do të prekin sjelljen e eksploruesit të Windows, por do të mundësojnë përdorimin e rrugëve të gjata në komandlet PowerShell, si Get-Item, Get-ChildItem, Remove-Item dhe të tjera.

Së pari do të përmisojmë PowerShell. E bëjmë në një hap të vetëm.

  1. Përmirësojmë .NET Framework në versionin 4.5 ose më të lartë. Sistemi operativ duhet të jetë jo më i ulët se Windows 7 SP1/2008 R2. Mund të shkarkoni versionin aktual këtu, lexoni informacione të tjera këtu.
  2. Shkarkojmë dhe instalojmë Windows Management Framework 5.1
  3. Rinisni makinerinë.

Ata qĂ« janĂ« tĂ« punĂ«suar mund t'i realizojnĂ« hapat e mĂ«sipĂ«rm manualisht, ata tĂ« pĂ«rtacĂ«t — me ndihmĂ«n e SCCM, politikave, skripteve dhe mjeteve tĂ« tjera tĂ« automatizimit.

Versionin aktual të PowerShell mund ta njihni nga variabla $PSVersionTable. Pasi ta keni përmirësuar, duhet të duket kështu:

Windows, PowerShell dhe rrugë të gjata

Tani, kur përdorni komandlet Get-ChildItem dhe të ngjashme, në vend të Path smtp.your.domain LiteralPath.

Formati i rrugëve do të jetë pak më ndryshe:

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

Për lehtësi në konvertimin e rrugëve nga formati i njohur në formatin LiteralPath mund të përdorni këtë funksion:

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

Vini re se kur përcaktoni parametrin LiteralPath nuk mund të përdorni shenja zëvendësuese (*, ? etj.).

Përveç parametrin LiteralPath, në versionin e përmirësuar të PowerShell komandlet Get-ChildItem ka marrë parametrin Depth, me ndihmën e të cilit mund të përcaktoni thellësinë e kërkimit rekurziv, unë e kam përdorur disa herë dhe kam mbetur i kënaqur.

Tani tani, nuk ka nevojë të shqetësoheni se skripti juaj PS do të dalë nga rruga e gjatë dhe e ndërlikuar dhe nuk do të dallojë skedarët e largët. Për shembull, ky qasje më ndihmoi shumë teksa shkruaja një skript për heqjen e atributit 'të përkohshëm' nga skedarët në dosjet DFSR. Por kjo është një histori tjetër, që do të përpiqem ta tregoj në një artikull tjetër. Pres komente interesante nga ana juaj dhe ju ftoj të merrni pjesë në anketë.

Linqe të dobishme:
docs.microsoft.com/sq-sq/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

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, ju lutem.

A është problem i rëndësishëm për ju problemi i rrugëve të gjata?

  • Po.

  • Ishte problem i rĂ«ndĂ«sishĂ«m, por tashmĂ« e zgjidhja

  • E pengon, por jo shumĂ«

  • Nuk kam menduar pĂ«r kĂ«tĂ«, duket se gjithçka funksionon

  • Jo

  • TjetĂ«r (shkruani nĂ« komentet)

155 përdorues votuan. 25 përdorues abstenuan.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster