Windows, PowerShell และ Long Paths

Windows, PowerShell และ Long Paths

ฉันคิดว่าคุณก็เหมือนฉัน มักจะเห็นเส้นทางของรูปแบบ !!! สำคัญ____ใหม่____!!! ห้ามลบ!!!คำสั่งเลขที่ 98819-649-B ลงวันที่ 30 กุมภาพันธ์ 1985 ในการแต่งตั้ง Ivan Aleksandrovich Kozlov เป็นรักษาการหัวหน้าแผนกเพื่อสนับสนุนลูกค้า VIP ขององค์กรและจัดประชุมทางธุรกิจนอกสถานที่.doc.

และบ่อยครั้งคุณจะไม่สามารถเปิดเอกสารดังกล่าวใน Windows ได้ทันที บางคนใช้วิธีแก้ไขปัญหาเฉพาะหน้าในรูปแบบของการแมปดิสก์ บางคนใช้ตัวจัดการไฟล์ที่สามารถทำงานกับเส้นทางที่ยาวได้: Far Manager, Total Commander และอื่น ๆ และอีกมากมายที่น่าเศร้าที่เฝ้าดูวิธีสคริปต์ PS ที่พวกเขาสร้างขึ้นซึ่งมีการลงทุนจำนวนมากและทำงานอย่างหนักหน่วงในสภาพแวดล้อมการทดสอบในสภาพแวดล้อมการต่อสู้บ่นอย่างหมดหนทางเกี่ยวกับงานที่เป็นไปไม่ได้: เส้นทางที่ระบุ ชื่อไฟล์ หรือทั้งสองอย่างยาวเกินไป ชื่อไฟล์แบบเต็มต้องมีความยาวน้อยกว่า 260 อักขระ และชื่อไดเร็กทอรีต้องน้อยกว่า 248 อักขระ
เมื่อปรากฎว่า 260 ตัวอักษรก็เพียงพอแล้ว "ไม่ใช่สำหรับทุกคนเท่านั้น" หากคุณสนใจที่จะก้าวข้ามขอบเขตของสิ่งที่ได้รับอนุญาต ฉันขอภายใต้แมว

ต่อไปนี้เป็นเพียงผลเสียของการจำกัดความยาวพาธของไฟล์:

เบี่ยงเบนจากหัวข้อเล็กน้อย ฉันทราบว่าสำหรับการจำลองแบบ DFS ปัญหาที่พิจารณาในบทความนี้ไม่น่ากลัว และไฟล์ที่มีชื่อยาวจะเดินทางจากเซิร์ฟเวอร์ไปยังเซิร์ฟเวอร์ได้สำเร็จ (เว้นแต่คุณจะ ทำถูกต้อง).

ฉันต้องการดึงดูดความสนใจไปที่ยูทิลิตี้ที่มีประโยชน์มากซึ่งช่วยฉันมากกว่าหนึ่งครั้ง robocopy. เธอก็ไม่กลัวเส้นทางที่ยาวไกลและเธอก็รู้อะไรมากมาย ดังนั้นหากงานเกี่ยวกับการคัดลอก / ถ่ายโอนข้อมูลไฟล์คุณสามารถหยุดได้ หากคุณต้องการยุ่งกับรายการควบคุมการเข้าถึงระบบไฟล์ (DACL) ให้มองออกไป ซูบีนาคลอ. แม้จะมีอายุมาก แต่ก็แสดงให้เห็นได้อย่างสมบูรณ์แบบบน Windows 2012 R2 ที่นี่ วิธีการสมัครได้รับการพิจารณา

ฉันยังสนใจที่จะเรียนรู้วิธีทำงานกับเส้นทาง PowerShell ที่ยาว กับเขาเกือบจะเป็นเรื่องตลกเกี่ยวกับ Ivan Tsarevich และ Vasilisa the Beautiful

วิธีที่รวดเร็ว

เปลี่ยนไปใช้ Linux และไม่ต้องกังวลเกี่ยวกับ Windows 10/2016/2019 และเปิดใช้งานการตั้งค่านโยบายกลุ่ม/การปรับแต่งรีจิสทรีที่เหมาะสม ฉันจะไม่อาศัยวิธีการนี้โดยละเอียดเพราะ มีบทความมากมายเกี่ยวกับหัวข้อนี้บนอินเทอร์เน็ตเช่น นี้.

เมื่อพิจารณาว่าในบริษัทส่วนใหญ่มีระบบปฏิบัติการจำนวนมาก หากจะพูดอย่างสุภาพ ไม่ใช่เวอร์ชันใหม่ วิธีนี้เป็นวิธีที่รวดเร็วสำหรับการเขียนบนกระดาษเท่านั้น เว้นแต่แน่นอนว่าคุณเป็นหนึ่งในผู้โชคดีที่มีระบบดั้งเดิมและ Windows น้อย 10/2016/2019 รัชกาล.

ทางยาว

ที่นี่เราทำการจองทันทีว่าการเปลี่ยนแปลงจะไม่ส่งผลกระทบต่อพฤติกรรมของ Windows Explorer แต่จะทำให้สามารถใช้เส้นทางยาวใน PowerShell cmdlets เช่น 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 เวอร์ชันปัจจุบันได้จากตัวแปร $PSเวอร์ชันตาราง. หลังจากอัปเดตควรมีลักษณะดังนี้:

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 cmdlet ที่ปรับปรุงแล้ว 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-พารามิเตอร์

เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้นที่สามารถเข้าร่วมในการสำรวจได้ เข้าสู่ระบบ, โปรด.

ปัญหาของเส้นทางยาวเกี่ยวข้องกับคุณหรือไม่?

  • มี

  • มีความเกี่ยวข้อง แต่ตัดสินใจแล้ว

  • รบกวนแต่ไม่มาก

  • ไม่ได้คิดเกี่ยวกับมัน ทุกอย่างดูเหมือนจะทำงาน

  • ไม่

  • อื่นๆ (ระบุในคอมเม้นท์)

ผู้ใช้ 155 คนโหวต ผู้ใช้ 25 รายงดออกเสียง

ที่มา: will.com

เพิ่มความคิดเห็น