Windows, PowerShell və Uzun Yollar

Windows, PowerShell və Uzun Yollar

Düşünürəm ki, siz də mənim kimi bir dəfədən çox belə yolları görmüsünüz !!! Vacib____Yeni____!!! Silməyin!!!98819 fevral 649-ci il tarixli, 30-1985-B nömrəli əmr. İvan Aleksandroviç Kozlovun korporativ VİP müştərilərin dəstəklənməsi və kənarda işgüzar görüşlərin təşkili şöbəsinin müdiri vəzifəsini müvəqqəti icra edən vəzifəsinə təyin edilməsi haqqında.doc.

Və tez-tez belə bir sənədi dərhal Windows-da aça bilməyəcəksiniz. Bəzi insanlar problemin həllini diskin təsviri şəklində tətbiq edirlər, digərləri uzun yollarla işləyə bilən fayl menecerlərindən istifadə edirlər: Far Manager, Total Commander və s. Və daha bir çoxları, yaratdıqları, çox işin qoyulduğu və sınaq mühitində partlama ilə işləyən PS skriptinin istehsal mühitində çarəsiz bir şəkildə qeyri-mümkün bir işdən şikayətləndiyini kədərlə izlədi: Göstərilən yol, fayl adı və ya hər ikisi çox uzundur. Tam uyğunlaşdırılmış fayl adı 260 simvoldan, kataloq adı isə 248 simvoldan az olmalıdır.
Göründüyü kimi, 260 simvol "yalnız hamı üçün deyil" kifayətdir. Əgər icazə verilən hüdudlardan kənara çıxmaq istəyirsinizsə, pişiyə müraciət edin.

Fayl yolunun uzunluğunu məhdudlaşdırmağın bədbəxt nəticələrindən yalnız bəziləri:

Mövzudan bir qədər uzaqlaşaraq qeyd edirəm ki, DFS Replikasiyası üçün məqalədə müzakirə olunan problem qorxulu deyil və uzun adları olan fayllar serverdən serverə uğurla keçir (əlbəttə ki, hər şey düzgün etdi).

Həm də diqqətinizi bir dəfədən çox mənə kömək edən çox faydalı bir yardım proqramına cəlb etmək istərdim robocopy. O, həm də uzun yollardan qorxmur və çox şey edə bilər. Buna görə də, əgər tapşırıq fayl məlumatlarının surətini çıxarmaq/ötürməkdən ibarətdirsə, orada dayana bilərsiniz. Fayl sisteminə girişə nəzarət siyahıları (DACL) ilə fəndlər oynamaq lazımdırsa, uzaq baxın subinacl. Yaşına baxmayaraq, Windows 2012 R2-də əla performans göstərdi. Burada tətbiqi üsulları nəzərdən keçirilir.

Mən uzun PowerShell yolları ilə işləməyi öyrətməkdə maraqlı idim. Onunla demək olar ki, İvan Tsareviç və Gözəl Vasilisa haqqında saqqallı zarafatdakı kimidir.

Tez yol

Linux-a keçin və Windows 10/2016/2019-dan narahat olmayın və müvafiq qrup siyasəti parametrlərini aktivləşdirin/reyestri düzəldin. Bu üsul üzərində ətraflı dayanmayacağam, çünki... İnternetdə bu mövzuda bir çox məqalə var, məsələn, bu.

Nəzərə alsaq ki, əksər şirkətlərdə əməliyyat sistemlərinin ən son versiyaları deyil, yumşaq desək, çoxlu sayda var, bu üsul yalnız kağız üzərində yazmaq üçün tezdir, əgər təbii ki, bir neçə köhnə sistemə və Windows 10-a sahib olan şanslılardan biri deyilsinizsə. /2016/2019 hökmranlıq edir.

Uzun yol

Gəlin dərhal qeyd edək ki, dəyişikliklər Windows Explorer-in davranışına təsir etməyəcək, lakin PowerShell cmdletlərində Get-Item, Get-ChildItem, Remove-Item və s. kimi uzun yollardan istifadə etməyə imkan verəcək.

Əvvəlcə PowerShell-i yeniləyək. Bir, iki, üç dəfə edilir.

  1. .NET Framework-ü 4.5-dən aşağı olmayan versiyaya yeniləyirik. Əməliyyat sistemi ən azı Windows 7 SP1/2008 R2 olmalıdır. Cari versiyanı yükləyə bilərsiniz burada, daha çox məlumat oxuyun burada.
  2. Download və Windows Management Framework 5.1-i quraşdırın
  3. Maşını yenidən işə salırıq.

Zəhmətkeş insanlar yuxarıda təsvir edilən addımları əl ilə, tənbəl insanlar isə SCCM, siyasətlər, skriptlər və digər avtomatlaşdırma vasitələrinin köməyi ilə edə bilərlər.

PowerShell-in cari versiyası dəyişəndən tapıla bilər $PSVersionTable. Yeniləmədən sonra bu kimi görünməlidir:

Windows, PowerShell və Uzun Yollar

İndi cmdletlərdən istifadə edərkən Get-ChildItem və adi əvəzinə buna bənzər Yol использовать literalPath.

Yol formatı bir qədər fərqli olacaq:

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

Yolları adi formatdan formata çevirmək rahatlığı üçün literalPath bu funksiyadan istifadə edə bilərsiniz:

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

Nəzərə alın ki, parametr təyin edərkən literalPath Siz joker işarələrdən istifadə edə bilməzsiniz (*, ? və s.).

Parametrə əlavə olaraq literalPath, PowerShell cmdletinin yenilənmiş versiyasında Get-ChildItem parametrini aldı DərinlikRekursiv axtarış üçün yuva dərinliyini təyin edə biləcəyiniz , mən ondan bir neçə dəfə istifadə etdim və razı qaldım.

İndi PS skriptinizin uzun tikanlı yolda azacağından və uzaq faylları görə bilməyəcəyindən narahat olmaq lazım deyil. Məsələn, DFSR qovluqlarındakı faylların “müvəqqəti” atributunu sıfırlamaq üçün skript yazarkən bu yanaşma mənə çox kömək etdi. Ancaq bu, başqa bir məqalədə danışmağa çalışacağım başqa bir hekayədir. Sizdən maraqlı şərhlər gözləyirəm və sorğuda iştirak etməyi təklif edirəm.

Faydalı linklər:
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

Sorğuda yalnız qeydiyyatdan keçmiş istifadəçilər iştirak edə bilər. Daxil olunxahiş edirəm.

Uzun yollar problemi sizə aiddirmi?

  • Bəli

  • Münasib idi, lakin artıq qərar verilmişdi

  • Qarışır, amma çox deyil

  • Bu barədə düşünməmişəm, deyəsən hər şey işləyir

  • Heç bir

  • Digər (zəhmət olmasa şərhlərdə qeyd edin)

155 istifadəçi səs verib. 25 istifadəçi bitərəf qalıb.

Mənbə: www.habr.com

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