Windows, PowerShell және ұзын жолдар

Windows, PowerShell және ұзын жолдар

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

Көбінесе сіз Windows жүйесінде мұндай құжатты бірден аша алмайсыз. Кейбір адамдар дискіні салыстыру түрінде уақытша шешімді қолданады, басқалары ұзақ жолдармен жұмыс істей алатын файл менеджерлерін пайдаланады: Far Manager, Total Commander және т.б. Көптеген адамдар өздері жасаған PS сценарийін қайғымен қарады, оған көп жұмыс жұмсалды және сынақ ортасында жарылыспен жұмыс істеді, өндірістік ортада мүмкін емес тапсырмаға дәрменсіз шағымданды: Көрсетілген жол, файл атауы немесе екеуі де тым ұзын. Толық жарамды файл атауы 260 таңбадан, ал каталог атауы 248 таңбадан аз болуы керек.
Белгілі болғандай, 260 таңба «барлығына ғана емес» жеткілікті. Егер сіз рұқсат етілген шекарадан шығуға мүдделі болсаңыз, мысыққа жүгініңіз.

Міне, файл жолының ұзындығын шектеудің кейбір өкінішті салдары:

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

Маған бірнеше рет көмектескен өте пайдалы утилитаға назарларыңызды аударғым келеді робокопия. Ол сондай-ақ ұзақ жолдардан қорықпайды және оның қолынан көп нәрсе келеді. Сондықтан, егер тапсырма файл деректерін көшіруге/тасымалдауға дейін болса, онда тоқтауға болады. Файлдық жүйеге кіруді басқару тізімдерімен (DACL) трюктерді ойнау қажет болса, басқа жаққа қараңыз субинакл. Қартайғанына қарамастан, ол 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. Жүктеу және Windows Management Framework 5.1 орнатыңыз
  3. Біз машинаны қайта жүктейміз.

Еңбекқор адамдар жоғарыда сипатталған қадамдарды қолмен орындай алады, жалқау адамдар мұны SCCM, саясаттар, сценарийлер және басқа автоматтандыру құралдарының көмегімен жасай алады.

PowerShell бағдарламасының ағымдағы нұсқасын айнымалыдан табуға болады $PSVersionTable. Жаңартудан кейін ол келесідей болуы керек:

Windows, PowerShell және ұзын жолдар

Енді командлеттерді пайдаланған кезде 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/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 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру