Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
ms_windows_ms_sql:powershell_the_fully_qualified_file_name_must_be_less_than_260_workaround [2019/01/09 12:30] – [PowerShell AlphaFS] admin | ms_windows_ms_sql:powershell_the_fully_qualified_file_name_must_be_less_than_260_workaround [2019/02/11 09:13] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== PowerShell и длинные имена файлов ====== | ||
+ | При работе с файлами в **powershell** часто возникает примерно такая ошибка: | ||
+ | < | ||
+ | ls : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 | ||
+ | characters, and the directory name must be less than 248 characters. | ||
+ | + CategoryInfo | ||
+ | + FullyQualifiedErrorId : DirIOError, | ||
+ | </ | ||
+ | Или вот такая: | ||
+ | < | ||
+ | Get-Acl : Cannot find path ' | ||
+ | ........................................................................................................................ | ||
+ | ...............................................' | ||
+ | At C: | ||
+ | + ... ory -Recurse | Get-Acl | Where {$_.AreAccessRulesProtected} | Select @{Name=" | ||
+ | + ~~~~~~~ | ||
+ | + CategoryInfo | ||
+ | + FullyQualifiedErrorId : GetAcl_PathNotFound_Exception, | ||
+ | </ | ||
+ | |||
+ | Эти ошибки являются суровым наследием и присутствует в **Windows** уже не один десяток лет. | ||
+ | Надежных путей обхода этой ошибки существует несколько. Для доступа к файлам с длинными путями - **robocopy** и **PSAlphaFS**. Кроме того, есть хитрый трюк с монтированием сетевого диска. | ||
+ | |||
+ | ====== PowerShell AlphaFS ====== | ||
+ | Если с **robocopy** все понятно, | ||
+ | Итак. Этот модуль есть в **PSGallery**. Чтобы установить **AlphaFS** выполняем: | ||
+ | Install-Module -Name PSAlphaFS | ||
+ | Это работает на **Windows Server 2016**. Если у вас более старая версия - нужно установить **PackageManagement PowerShell Modules** (как это сделать написано тут - https:// | ||
+ | В **Windows 2008 R2** предварительно потребуется обновить и **Powershell** до версии **3.0**, | ||
+ | |||
+ | После установки модуля можно выполнять: | ||
+ | Get-LongChildItem ..... | ||
+ | Теперь можно забыть про то, что **"The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters." | ||
+ | |||
+ | ====== Монтирование временного диска ====== | ||
+ | Суть метода в том, что в системе монтируется временный диск с корнем в папке в которой лежат недоступные файлы. Таким образом, | ||
+ | < | ||
+ | $ObjectACL = Get-ACL -Path $Folder | ||
+ | } | ||
+ | Catch{ | ||
+ | $SubPathLength = $Folder.FullName.substring(0, | ||
+ | $NewTempPath = $Folder.FullName.SubString(0, | ||
+ | New-PSDrive -Name " | ||
+ | $ObjectACL = Get-ACL " | ||
+ | Remove-PSDrive -Name " | ||
+ | } | ||
+ | </ |