![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Обработка путей превышающих 260 символов |
|
|
PowerShell - Обработка путей превышающих 260 символов
|
Старожил Сообщения: 208 |
Доброго времени суток.
Помогите пожалуйста допилить скрипт, для обработки путей больше 260 символов. $path = "c:\f1" $logfile = "C:\f1\log.txt" if (!(Test-Path $path)) { Write-Host "Folder not found" -ForegroundColor Red break } $folder_list = Get-ChildItem -Path $path -Recurse -Directory foreach ($folder in $folder_list) { #$ACL = Get-Acl $folder.PSPath $ACL = Get-Acl $folder.FullName if ($ACL.AreAccessRulesProtected -ne $false) { $str = $folder.fullname Add-Content -Value $str -Path $logfile } } Remove-PSDrive -Name X $rootpath = "C:\test" $logfile = "c:\test\log.txt" try { $folder_list = Get-ChildItem $rootpath -Recurse -Directory -ErrorAction Stop foreach ($folder in $folder_list) { $folder.Name Write-Host "+++++++" $folder.FullName Write-Host "-------" $folder.PSPath Write-Host "=========================" ($folder.PSPath).Length Write-Host "\\\\\\\\\\\" } } catch { Write-Host "ERROR" $folder.FullName ($folder.FullName).Length $newrootfolder = New-PSDrive -Name X -PSProvider FileSystem -Root $folder.FullName Get-ChildItem $newrootfolder } Подскажите пожалуйста, в чём может быть проблема? |
|
Отправлено: 21:27, 08-12-2015 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
Отправлено: 00:10, 09-12-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Забанен Сообщения: 793
|
Kazun, вроде бы тот же robocopy умеет работать с путями в более 260 символов, да и трюк с dir тоже прокатывает, например:
Что-то в этом роде. Но, если не хочется использовать консоль в хосте, можно попытать счастья со сторонними библиотеками, вроде AlphaFS и QuickIO, - обе с открытым исходным кодом. Ну и наконец можно поробовать использовать методы GetFiles() и GetDirectories из типа System.IO.Directory.
|
Отправлено: 13:23, 09-12-2015 | #3 |
Старожил Сообщения: 208
|
Профиль | Отправить PM | Цитировать Спасибо за ответы.
Kazun, Приведённый Вами скрипт не работает второй строгой добавил что бы посмотреть что утилита получает, и после вывода ошибка. Цитата:
robocopy может и умеет, но она ничего не знает о правах и их наследованиях. Как показано в первом посте, я попробовал обрезать пути, методом монтирования диска, как пишут в google, но у меня это не работает.. |
|
Отправлено: 13:40, 09-12-2015 | #4 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 14:03, 09-12-2015 | #5 |
Старожил Сообщения: 208
|
Профиль | Отправить PM | Цитировать C:\test> .\SetACL.exe -on "C:\test" -ot file -actn list -rec cont
Цитата:
|
|
Отправлено: 14:37, 09-12-2015 | #6 |
Старожил Сообщения: 208
|
Профиль | Отправить PM | Цитировать Kazun,
Прошу прощения. По ходе дела я где-то в путях накосячил, из-за этого не работало. Вот рабочий вариант $logfile = "C:\test\log.txt" $folders = C:\test\SetACL.exe -on "C:\test" -ot file -actn list -rec cont | Where {$_ -match "(:\\|DACL\()"} #write-host folders: $folders $log = for($i=0 ; $i -le $folders.count; $i+=2) { $status = $folders[($i+1)] -notmatch "not_protected" if($status) { $folders[$i] } } $log | Out-File $logfile |
Отправлено: 14:57, 09-12-2015 | #7 |
Старожил Сообщения: 208
|
Профиль | Отправить PM | Цитировать Подскажите, а можно сделать тоже самое, но средствами утилиты от MS - SubInACL?
|
Отправлено: 09:10, 10-12-2015 | #8 |
Ветеран Сообщения: 1259
|
Профиль | Отправить PM | Цитировать $subinacl = "C:\Program Files (x86)\Windows Resource Kits\Tools\subinacl.exe" $logname = "C:\log.txt" $folder = "C:\f1" & $subinacl /outputlog=$logname /subdirectories=directories $folder $folders = (Get-Content $logname) -match "(\+File|/control)" $log = for($i=0 ; $i -le $folders.count; $i+=2) { $status = $folders[($i+1)] -match "SE_DACL_PROTECTED" if($status) { $folders[$i].TrimStart("+File ") } } $log | Out-File $logfile |
Отправлено: 09:44, 10-12-2015 | #9 |
Старожил Сообщения: 208
|
Профиль | Отправить PM | Цитировать |
Отправлено: 10:01, 10-12-2015 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Загрузка - Subst и запоминание последних путей | Mancoffee | Microsoft Windows 7 | 9 | 31-05-2017 23:17 | |
CMD/BAT - Обработка более 1028 символов в переменной | worship | Скриптовые языки администрирования Windows | 4 | 27-02-2015 13:34 | |
CMD/BAT - [решено] Создать список путей | gen0m.rsw | Скриптовые языки администрирования Windows | 7 | 08-09-2010 02:55 | |
PHP и XML | Обработка неалфавитных символов | Coutty | Вебмастеру | 6 | 17-12-2008 10:42 | |
mc - запоминание путей | Аlchemist | Программное обеспечение Linux и FreeBSD | 1 | 10-09-2008 12:06 |
|