Windows, PowerShell жана Long Paths

Windows, PowerShell жана Long Paths

Менимче, сиз да мага окшоп форманын жолдорун көп көрдүңүз !!! Маанилүү____Жаңы____!!! Жок кылба!!!98819-жылдын 649-февралындагы No 30-1985-Б буйругу. Иван Александрович Козловду корпоративдик VIP кардарларды колдоо жана четте иш жолугушууларды уюштуруу бөлүмүнүн башчысынын милдетин аткаруучу болуп дайындоо жөнүндө.doc.

Көп учурда сиз Windowsта мындай документти дароо ача албай каласыз. Кимдир-бирөө дискти карта түзүү түрүндө чечүүнү практикалайт, кимдир бирөө узун жолдор менен иштей ала турган файл менеджерлерин колдонот: Far Manager, Total Commander жана башкалар. Жана дагы көптөгөн адамдар өздөрү жараткан, көп эмгек жумшалган жана тесттик чөйрөдө, согуштук чөйрөдө жаркырап иштеген PS сценарийинин мүмкүн эмес тапшырмага кантип даттанышканын капаланып көрүштү: Көрсөтүлгөн жол, файлдын аты же экөө тең өтө узун. Толук квалификациялуу файлдын аты 260 белгиден, ал эми каталогдун аты 248 белгиден аз болушу керек.
Маалым болгондой, 260 белги "бардыгы үчүн гана эмес" жетиштүү. Эгер сиз уруксат берилген чектердин чегинен чыгууга кызыкдар болсоңуз, мен мышыктын астынан сурайм.

Бул жерде файл жолунун узундугун чектөөнүн өкүнүчтүү кесепеттеринин бир нечеси гана:

Темадан бир аз четтеп, мен DFS репликациясы үчүн макалада каралып жаткан көйгөй коркунучтуу эмес экенин жана узун аталыштагы файлдар серверден серверге ийгиликтүү өтөөрүн белгилеймин (албетте, антпесе туура кылган).

Ошондой эле мага бир нече жолу жардам берген абдан пайдалуу утилитага көңүл бургум келет робокопия. Ал да узун жолдон коркпойт, көптү билет. Ошондуктан, эгер тапшырма файл маалыматтарын көчүрүү/өткөрүү болуп калса, анда аны токтото аласыз. Эгер сиз файл тутумуна кирүүнү башкаруу тизмелери (DACL) менен баш аламандык кылышыңыз керек болсо, алыстан караңыз subinacl. Жашы чоң болгонуна карабастан, ал Windows 2012 R2де өзүн эң сонун көрсөттү. бул жерде колдонуу ыкмалары каралат.

Мен дагы узун PowerShell жолдору менен иштөөнү үйрөнүүгө кызыктым. Аны менен Иван Царевич менен Василиса Сулуу жөнүндөгү сакалчан тамашадагыдай.

Ыкчам жол

Linux'ка которулуңуз жана Windows 10/2016/2019 жөнүндө кабатыр болбоңуз жана тиешелүү топтук саясат жөндөөлөрүн/регистрин чыңдоосун иштетиңиз. Мен бул ыкмага майда-чүйдөсүнө чейин токтолбойм, анткени. Интернетте бул тема боюнча көптөгөн макалалар бар, мисалы, бул.

Көпчүлүк компанияларда операциялык системалардын жаңы версиялары эмес, жумшак айтканда, көп экенин эске алсак, бул ыкма кагазга жазуу үчүн гана тез иштейт, эгерде сиз, албетте, бир нече эски системалары жана Windows бар бактылуу адамдардын бири болбосоңуз. 10/2016/2019 башкаруу.

узак жол

Бул жерде биз дароо эскертүү жасайбыз, өзгөртүүлөр Windows Explorerдин жүрүм-турумуна таасир этпейт, бирок PowerShell командлеттеринде Get-Item, Get-ChildItem, Remove-Item ж.б. сыяктуу узун жолдорду колдонууга мүмкүндүк берет.

Биринчиден, PowerShellди жаңырталы. Бул бир, эки, үч жасалды.

  1. Биз .NET Framework'ду жок дегенде 4.5 версиясына жаңыртабыз. Иштөө системасы жок дегенде Windows 7 SP1/2008 R2 болушу керек. Учурдагы версияны жүктөп алса болот бул жердекөбүрөөк маалымат окуу бул жерде.
  2. Download жана Windows Management Framework 5.1 орнотуу
  3. Биз машинаны кайра жүктөйбүз.

Эмгекчилдер жогорудагы кадамдарды кол менен жасай алышат, жалкоолор муну SCCM, саясаттар, сценарийлер жана башка автоматташтыруу куралдарынын жардамы менен жасай алышат.

PowerShellдин учурдагы версиясын өзгөрмөдөн тапса болот $PSVersionTable. Жаңыртуудан кийин ал төмөнкүдөй болушу керек:

Windows, PowerShell жана Long Paths

Эми cmdlets колдонуп жатканда Get-ChildItem жана башка ага окшогондор адаттагыдай эмес жол Биз колдонобуз literalPath.

Жолдордун форматы бир аз башкача болот:

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

Жолдорду кадимки форматтан форматка которуунун ыңгайлуулугу үчүн literalPath сиз бул функцияны колдоно аласыз:

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

Параметрди орнотууда эске алыңыз literalPath коюу белгилерин колдонууга болбойт (*, ? жана башкалар.).

Параметрге кошумча literalPath, жаңыртылган PowerShell командлетинде Get-ChildItem алынган параметр тереңдик, анын жардамы менен рекурсивдүү издөө үчүн уя тереңдигин орното аласыз, мен аны бир нече жолу колдондум жана ыраазы болдум.

Эми сиз PS-скриптиңиз узун тикенектүү жолдон адашып, алыскы файлдарды көрбөй калат деп коркпойсуз. Мисалы, DFSR папкаларында файлдар үчүн "убактылуу" атрибутун баштапкы абалга келтирүү үчүн скрипт жазууда бул ыкма мага абдан жардам берди. Бирок бул башка окуя, аны мен башка макалада айтып берүүгө аракет кылам. Сиздерден кызыктуу комментарийлерди күтөм жана сурамжылоого катышууну сунуштайм.

Пайдалуу шилтемелер:
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

Сурамжылоого катталган колдонуучулар гана катыша алышат. Кирүү, өтүнөмүн.

Узун жол маселеси сизге тиешелүүбү?

  • ошол

  • Тиешелүү болгон, бирок буга чейин эле чечим кабыл алынган

  • Аракет кылат, бирок көп эмес

  • Ойлонбоптур, баары иштеп жатат окшойт

  • жок

  • Башка (комментарийлерде көрсөтүңүз)

155 колдонуучу добуш берди. 25 колдонуучу добуш берүүдөн баш тартты.

Source: www.habr.com

Комментарий кошуу