Windows, PowerShell և Long Paths

Windows, PowerShell և Long Paths

Կարծում եմ, դուք, ինձ նման, մեկ անգամ չէ, որ տեսել եք նման ճանապարհներ !!! Կարևոր ____Նոր____!!! Չջնջել!!!98819-649-Բ հրամանը 30թ. Իվան Ալեքսանդրովիչ Կոզլովին կորպորատիվ VIP հաճախորդների աջակցության և կողքին գործարար հանդիպումների կազմակերպման բաժնի ղեկավարի ժամանակավոր պաշտոնակատար նշանակելու մասին.doc.

Եվ հաճախ դուք չեք կարողանա անմիջապես բացել նման փաստաթուղթ Windows-ում: Որոշ մարդիկ կիրառում են լուծումներ սկավառակի քարտեզագրման տեսքով, մյուսներն օգտագործում են ֆայլերի կառավարիչներ, որոնք կարող են աշխատել երկար ուղիների հետ՝ Far Manager, Total Commander և այլն: Եվ շատ ավելին տխրությամբ դիտեցին, թե ինչպես են իրենց ստեղծած PS-ի սցենարը, որի մեջ մեծ աշխատանք է ներդրվել և որն աշխատում էր փորձնական միջավայրում, պրոդյուսերական միջավայրում անօգնականորեն դժգոհում էր անհնարին առաջադրանքից. Նշված ուղին, ֆայլի անունը կամ երկուսն էլ չափազանց երկար են: Լիովին որակավորված ֆայլի անունը պետք է լինի 260 նիշից պակաս, իսկ գրացուցակի անունը պետք է լինի 248 նիշից պակաս:
Ինչպես պարզվում է, 260 նիշը բավարար է «ոչ միայն բոլորի համար»: Եթե ​​դուք հետաքրքրված եք դուրս գալ թույլատրվածի սահմաններից, խնդրում ենք դիմել կատվին:

Ահա ֆայլի ուղու երկարությունը սահմանափակելու միայն որոշ տհաճ հետևանքներ.

Թեմայից մի փոքր շեղվելով, ես նշում եմ, որ DFS Replication-ի համար հոդվածում քննարկված խնդիրը սարսափելի չէ, և երկար անուններով ֆայլերը հաջողությամբ շրջում են սերվերից սերվեր (եթե, իհարկե, մնացած ամեն ինչ ճիշտ արված).

Ես նաև կցանկանայի ձեր ուշադրությունը հրավիրել մի շատ օգտակար ծրագրի վրա, որն ինձ օգնել է մեկից ավելի անգամ ռոբոտոպ. Նա նաև չի վախենում երկար ճանապարհներից և շատ բան կարող է անել։ Հետևաբար, եթե խնդիրը հանգում է ֆայլի տվյալների պատճենմանը/փոխանցմանը, կարող եք կանգ առնել այնտեղ: Եթե ​​Ձեզ անհրաժեշտ է հնարքներ խաղալ ֆայլային համակարգերի մուտքի վերահսկման ցուցակներով (DACL), հեռու նայեք ենթածննդյան. Չնայած իր առաջադեմ տարիքին, այն գերազանց կատարեց Windows 2012 R2-ում: Այստեղ դիտարկվում են կիրառման մեթոդները:

Ինձ հետաքրքրում էր սովորեցնել, թե ինչպես աշխատել երկար PowerShell ուղիների հետ: Նրա հետ դա մոտավորապես նման է մորուքավոր կատակի Իվան Ցարևիչի և Վասիլիսա Գեղեցիկի մասին:

Արագ ձեւ

Անցեք Linux-ին և մի անհանգստացեք Windows 10/2016/2019-ի համար և միացրեք համապատասխան խմբի քաղաքականության կարգավորումը/կսմթեք ռեեստրը: Այս մեթոդի վրա մանրամասն չեմ անդրադառնա, քանի որ... Համացանցում արդեն կան բազմաթիվ հոդվածներ այս թեմայով, օրինակ. սա է.

Հաշվի առնելով, որ ընկերություններից շատերն ունեն օպերացիոն համակարգերի շատ, մեղմ ասած, ոչ վերջին տարբերակները, այս մեթոդը արագ է միայն թղթի վրա գրելու համար, եթե, իհարկե, դուք այն հաջողակներից չեք, ովքեր ունեն քիչ հին համակարգեր և Windows 10: /2016/2019 թագաւորում է գերագոյնը.

Երկար ճանապարհը

Եկեք անմիջապես վերապահենք այստեղ, որ փոփոխությունները չեն ազդի Windows Explorer-ի վարքագծի վրա, այլ հնարավորություն կտան օգտագործել երկար ուղիներ PowerShell cmdlet-ներում, ինչպիսիք են Get-Item, Get-ChildItem, Remove-Item և այլն:

Նախ, եկեք թարմացնենք PowerShell-ը: Դա արվում է մեկ, երկու, երեք անգամ:

  1. Մենք թարմացնում ենք .NET Framework-ը մինչև 4.5-ից ոչ ցածր տարբերակ: Օպերացիոն համակարգը պետք է լինի առնվազն Windows 7 SP1/2008 R2: Դուք կարող եք ներբեռնել ընթացիկ տարբերակը այստեղ, կարդացեք լրացուցիչ տեղեկություններ այստեղ.
  2. Ներբեռնում և տեղադրել Windows Management Framework 5.1-ը
  3. Մենք վերագործարկում ենք մեքենան:

Աշխատասեր մարդիկ կարող են ձեռքով անել վերը նկարագրված քայլերը, ծույլերը՝ SCCM-ի, քաղաքականության, սցենարների և ավտոմատացման այլ գործիքների օգնությամբ:

PowerShell-ի ընթացիկ տարբերակը կարելի է գտնել փոփոխականից $PSVersionTable. Թարմացումից հետո այն պետք է նման լինի հետևյալին.

Windows, PowerShell և Long Paths

Այժմ cmdlet-ներ օգտագործելիս Get-ChildItem և նմանները սովորականի փոխարեն Ճանապարհ մենք կօգտագործենք բառացի Ուղ.

Ուղու ձևաչափը մի փոքր այլ կլինի.

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

Ճանապարհները սովորական ձևաչափից ձևաչափի փոխարկելու հարմարության համար բառացի Ուղ Դուք կարող եք օգտագործել այս գործառույթը.

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

Խնդրում ենք նկատի ունենալ, որ պարամետրը սահմանելիս բառացի Ուղ Դուք չեք կարող օգտագործել wildcards (*, ? եւ այլն):

Բացի պարամետրից բառացի Ուղ, PowerShell cmdlet-ի թարմացված տարբերակում Get-ChildItem ստացել է պարամետրը Խորություն, որով դուք կարող եք սահմանել բույնի խորությունը ռեկուրսիվ որոնման համար, ես մի երկու անգամ օգտագործեցի և գոհ էի։

Այժմ դուք չպետք է անհանգստանաք, որ ձեր PS սցենարը կմոլորվի երկար փշոտ ճանապարհով և չի կարողանա տեսնել հեռավոր ֆայլերը: Օրինակ, այս մոտեցումը ինձ շատ օգնեց DFSR թղթապանակներում ֆայլերի «ժամանակավոր» հատկանիշը վերականգնելու համար սցենար գրելիս: Բայց դա այլ պատմություն է, որը ես կփորձեմ պատմել մեկ այլ հոդվածում: Անհամբեր սպասում եմ ձեր հետաքրքիր մեկնաբանություններին և առաջարկում եմ մասնակցել հարցմանը:

Օգտակար հղումներ
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

Հարցմանը կարող են մասնակցել միայն գրանցված օգտվողները։ Մուտք գործել, խնդրում եմ:

Արդյո՞ք երկար ճանապարհների խնդիրը տեղին է ձեզ համար:

  • Այո

  • Տեղին էր, բայց արդեն որոշված

  • Դա խանգարում է, բայց ոչ շատ

  • Ես չէի մտածել այդ մասին, ամեն ինչ կարծես թե աշխատում է

  • Ոչ

  • Այլ (նշեք մեկնաբանություններում)

Քվեարկել է 155 օգտատեր։ 25 օգտատեր ձեռնպահ է մնացել։

Source: www.habr.com

Добавить комментарий