none
PowerShell list пути длинее 260. MAX_PATH RRS feed

  • Вопрос

  • Доброго вермя суток всем,

    пытаюсь сделать не возможное:

    $PathFolder = "\\?\UNC\\server\d$\Users"  
    $Files = Get-ChildItem $PathFolder -Recurse -Force | where {$_.mode -match "h"}

    Про запуске этих команд, получаю ошибку "Запрещеный символ в пути", этот символ "?".

    А как можно сделать ето подругому, если глубина путей больше 260 символов?

    Тут описан прием который я пытаюсь использовать:

    http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx

    23 марта 2010 г. 9:39

Все ответы

  • видимо, ограничение командлета (возможно ошибочное), т.к. в cmd команда dir \\?\c:\ успешно отрабатывает (хотя dir\\?\UNC\server\share то же не работает ;( )

    >А как можно сделать ето подругому, если глубина путей больше 260 символов?

    видимо, надо найти инструментарий, который умеет работать с именами >= MAX_PATH, и парсить результаты его работы.

    23 марта 2010 г. 10:24
  • Описание, которым вы пользовались, для вашего случая абсолютно неприменимо.

    PowerShell базируется на .NET, а .NET base class library не поддерживает решения на основе "\\?\". Как сказал мой хороший знакомый .NET developer, при разработке нужно использовать функцию Path.ToLongPath("long long path"), и то не всегда это работает. :) То, что он в этой теме "рубит", у меня сомнений ноль.

    Дополнено.

    Вот ссылка в подтверждение: http://blogs.msdn.com/bclteam/archive/2008/07/07/long-paths-in-net-part-3-of-3-redux-kim-hamilton.aspx 

    23 марта 2010 г. 18:20