Windows, PowerShell болон урт замууд

Windows, PowerShell болон урт замууд

Та надтай адил хэлбэрийн замыг олонтаа харсан байх гэж бодож байна !!! Чухал____Шинэ____!!! Бүү устга!!!98819 оны 649-р сарын 30-ны өдрийн 1985-XNUMX-Б тоот тушаал. Корпорацийн VIP үйлчлүүлэгчдийг дэмжих, ажил хэргийн уулзалт зохион байгуулах хэлтсийн даргын үүрэг гүйцэтгэгчээр Иван Александрович Козловыг томилох тухай.doc.

Ихэнхдээ та Windows дээр ийм баримт бичгийг шууд нээх боломжгүй байдаг. Хэн нэгэн нь дискний зураглал хэлбэрээр тойрон гарах арга замыг ашигладаг бол хэн нэгэн нь урт замтай ажиллах боломжтой файлын менежерүүдийг ашигладаг: Far Manager, Total Commander гэх мэт. Маш их хөдөлмөр зарцуулж, туршилтын орчинд, байлдааны орчинд тэсрэлттэй ажиллаж байсан PS скриптийг хэрхэн бүтээсэн нь боломжгүй даалгаврын талаар арчаагүй гомдоллож байгааг олон хүн гунигтай харав. Заасан зам, файлын нэр эсвэл хоёулаа хэт урт байна. Бүрэн шаардлага хангасан файлын нэр 260 тэмдэгтээс бага, лавлах нэр нь 248 тэмдэгтээс бага байх ёстой.
260 тэмдэгт нь "зөвхөн хүн бүрт төдийгүй" хангалттай юм. Хэрэв та зөвшөөрөгдсөн хил хязгаараас давж гарах сонирхолтой байгаа бол би муурны доор асууж байна.

Файлын замын уртыг хязгаарлахын тулд цөөн хэдэн таагүй үр дагаварууд энд байна:

Сэдвээс бага зэрэг хазайсан бол DFS Replication-ийн хувьд нийтлэлд авч үзсэн асуудал тийм ч аймшигтай биш бөгөөд урт нэртэй файлууд серверээс сервер рүү амжилттай дамждаг (мэдээжийн хэрэг, өөрөөр хэлбэл та зөв хийсэн).

Би бас нэг бус удаа надад тусалсан маш хэрэгтэй хэрэгсэлд анхаарлаа хандуулахыг хүсч байна robocopy. Тэр ч бас урт замаас айдаггүй, маш их зүйлийг мэддэг. Тиймээс, хэрэв даалгавар нь файлын өгөгдлийг хуулах / дамжуулахтай холбоотой бол та үүнийг зогсоож болно. Хэрэв та файлын системийн хандалтын хяналтын жагсаалт (DACL)-тай хутгалдах шаардлагатай бол өөр тийшээ хараарай дэд зүйл. Нас нь нэлээд өндөр байсан ч Windows 2012 R2 дээр өөрийгөө маш сайн харуулсан. энд хэрэглэх аргуудыг авч үздэг.

Би урт PowerShell замуудтай хэрхэн ажиллах талаар сурах сонирхолтой байсан. Түүнтэй бараг л Иван Царевич, Үзэсгэлэнт Василиса нарын тухай сахалтай хошигнол шиг.

Хурдан арга

Линукс руу шилжиж, Windows 10/2016/2019-ийн талаар санаа зовох хэрэггүй бөгөөд тохирох бүлгийн бодлогын тохиргоо/бүртгэлийн тохиргоог идэвхжүүлнэ үү. Би энэ аргын талаар дэлгэрэнгүй ярихгүй, учир нь. Интернет дээр энэ сэдвээр олон нийтлэл байдаг, жишээлбэл, энэ нь.

Ихэнх компаниудад үйлдлийн системийн шинэ хувилбар биш, зөөлрүүлж хэлэхэд олон байдгийг харгалзан үзвэл энэ арга нь зөвхөн цаасан дээр бичихэд маш хурдан бөгөөд хэрэв та хуучин систем, Windows үйлдлийн систем багатай азтай хүмүүсийн нэг биш л бол. 10/2016/2019 хаанчлал.

урт удаан зам

Энд бид нэн даруй захиалга хийж, өөрчлөлтүүд нь Windows Explorer-ийн үйл ажиллагаанд нөлөөлөхгүй, харин Get-Item, Get-ChildItem, Remove-Item гэх мэт PowerShell командууд дээр урт замыг ашиглах боломжтой болгоно.

Эхлээд PowerShell-ийг шинэчилье. Нэг, хоёр, гурав хийсэн.

  1. Бид .NET Framework-ийг хамгийн багадаа 4.5 хувилбар болгож шинэчилнэ. Үйлдлийн систем нь хамгийн багадаа Windows 7 SP1/2008 R2 байх ёстой. Одоогийн хувилбарыг татаж авах боломжтой энддэлгэрэнгүй мэдээллийг уншина уу энд.
  2. Татаж авах болон Windows Management Framework 5.1 суулгана
  3. Бид машиныг дахин ачаална.

Ажилсаг нь дээрх алхмуудыг гараар, залхуу нь SCCM, бодлого, скрипт болон бусад автоматжуулалтын хэрэгслүүдийн тусламжтайгаар хийж чадна.

PowerShell-ийн одоогийн хувилбарыг хувьсагчаас олж болно $PSVersionTable. Шинэчлэгдсэний дараа дараах байдлаар харагдах ёстой.

Windows, PowerShell болон урт замууд

Одоо cmdlet ашиглах үед 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/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

сэтгэгдэл нэмэх