Windows، PowerShell و Long Paths

Windows، PowerShell و Long Paths

فکر می کنم شما نیز مانند من، اغلب مسیرهایی از فرم را دیده اید !!! مهم____جدید____!!! حذف نکنید!!!سفارش شماره 98819-649-B مورخ 30 بهمن 1985 در مورد انتصاب ایوان الکساندرویچ کوزلوف به عنوان سرپرست بخش حمایت از مشتریان VIP شرکت ها و سازماندهی جلسات کاری در حاشیه.doc.

و اغلب نمی توانید چنین سندی را فوراً در ویندوز باز کنید. کسی راه‌حلی را به شکل نقشه‌برداری دیسک تمرین می‌کند، شخصی از مدیر فایل‌هایی استفاده می‌کند که می‌توانند با مسیرهای طولانی کار کنند: Far Manager، Total Commander و موارد مشابه. و بسیاری دیگر با ناراحتی تماشا کردند که چگونه اسکریپت PS که ایجاد کردند، که در آن کار زیادی سرمایه گذاری شد و با صدای بلند در محیط آزمایشی، در محیط جنگی کار کرد، با درماندگی از یک کار غیرممکن شکایت کردند: مسیر مشخص شده، نام فایل یا هر دو بسیار طولانی هستند. نام فایل کاملا واجد شرایط باید کمتر از 260 کاراکتر و نام فهرست باید کمتر از 248 کاراکتر باشد.
همانطور که مشخص شد، 260 کاراکتر "نه تنها برای همه" کافی است. اگر شما علاقه مند به فراتر رفتن از مرزهای مجاز هستید، من از زیر گربه می پرسم.

در اینجا فقط چند مورد از پیامدهای ناگوار محدود کردن طول مسیر فایل آورده شده است:

با اندکی انحراف از موضوع، توجه می کنم که برای تکرار DFS مشکل در نظر گرفته شده در مقاله وحشتناک نیست و فایل هایی با نام های طولانی با موفقیت از سروری به سرور دیگر منتقل می شوند (مگر اینکه در غیر این صورت شما درست انجام شد).

من همچنین می خواهم توجه خود را به یک ابزار بسیار مفید جلب کنم که بیش از یک بار به من کمک کرده است روبوکاپی. او نیز از مسیرهای طولانی نمی ترسد و چیزهای زیادی می داند. بنابراین، اگر کار به کپی / انتقال داده های فایل خلاصه شود، می توانید در آن متوقف شوید. اگر می‌خواهید با لیست‌های کنترل دسترسی به سیستم فایل (DACL) سر و کار داشته باشید، به دور نگاه کنید زیر ناخن. با وجود سن قابل توجهی که داشت، در ویندوز 2012 R2 کاملاً خود را نشان داد. اینجا روش های کاربرد در نظر گرفته شده است.

من همچنین علاقه مند به یادگیری نحوه کار با مسیرهای طولانی PowerShell بودم. با او، تقریباً مانند یک شوخی ریش دار در مورد ایوان تزارویچ و واسیلیسا زیبا.

راه سریع

به لینوکس سوئیچ کنید و نگران ویندوز 10/2016/2019 نباشید و تنظیم سیاست گروهی/تنظیمات رجیستری مناسب را فعال کنید. من به جزئیات این روش نمی پردازم، زیرا. در حال حاضر مقالات زیادی در مورد این موضوع در شبکه وجود دارد، به عنوان مثال، این.

با توجه به اینکه در اکثر شرکت ها، به بیان ساده، نسخه های زیادی از سیستم عامل ها وجود دارد، این روش فقط برای نوشتن روی کاغذ سریع است، مگر اینکه شما از آن دسته افراد خوش شانسی باشید که سیستم های قدیمی و ویندوز کمی دارید. سلطنت 10/2016/2019.

راه طولانی

در اینجا بلافاصله رزرو می کنیم که تغییرات روی رفتار Windows Explorer تأثیر نمی گذارد، اما استفاده از مسیرهای طولانی در cmdlet های 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 و Long Paths

اکنون هنگام استفاده از cmdlet ها دریافت 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"}
}

لطفا توجه داشته باشید که هنگام تنظیم پارامتر مسیر واقعی نمی توان از حروف عام استفاده کرد (*, ? و غیره)

علاوه بر پارامتر مسیر واقعی، در cmdlet به روز شده PowerShell دریافت 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 کاربر رای ممتنع دادند.

منبع: www.habr.com

اضافه کردن نظر