Лучший отвечающий
Удаление папок с определенным количеством символов.

Вопрос
-
Коллеги, добрый день!
Встала срочная задача почистить "кэш" 1С на терминальном сервере.
Папок пользователей много, есть только папка верхнего уровня:
C:\Users
Далее идет путь к папке, в которой хранится кэш, выглядит так:
C:\Users\user\AppData\Local\1C\1cv8
Искомые папки выглядят так и имена полностью разные, фильтр никак не задать, только по кол-ву символов.
24f72b1d-8293-4930-bf87-c2a6e52c0aca
Итого 36 символов.
Нужно сделать так, чтобы скрипт не опускался в поиск ниже папки AppData\Local\1C\1cv8 каждого пользователя.
Есть ли возможность отPowershell`ить такую задачу?
Спасибо большое!
23 июня 2017 г. 14:27
Ответы
-
get-childitem c:\users | foreach { $FullPath = "$($_.FullName)\AppData\Local\1C\1cv8" if (test-path $FullPath ) { Get-ChildItem $FullPath | foreach { if ($_.name -match '\w{8}-\w{4}-\w{4}-\w{4}-\w{12}'){ Remove-Item "$($_.FullName)\*" -force -whatif } } } }
The opinion expressed by me is not an official position of Microsoft
- Помечено в качестве ответа Oleg.A 26 июня 2017 г. 7:54
23 июня 2017 г. 14:59Модератор -
36 значные папки удалятся не должны
Удаляются файлы/папки внутри
Если вам нужно удалять в том числе и 36 значные папки уберите \*
The opinion expressed by me is not an official position of Microsoft
- Помечено в качестве ответа Oleg.A 26 июня 2017 г. 7:54
23 июня 2017 г. 18:12Модератор -
чистим кэш 1с старым дедовским способом при помощи batch-файла:
@FOR /D %%i in ("%userprofile%\Local settings\Application data\1C\1Cv82\????????-????-????-????-????????????") do rd /s /q "%%i" @FOR /D %%i in ("%userprofile%\AppData\Roaming\1C\1Cv82\????????-????-????-????-????????????") do rd /s /q "%%i" @FOR /D %%i in ("%userprofile%\AppData\Local\1C\1Cv82\????????-????-????-????-????????????") do rd /s /q "%%i"
my blog: http://shserg.ru/
- Помечено в качестве ответа Vector BCOModerator 10 июля 2017 г. 10:09
3 июля 2017 г. 9:15
Все ответы
-
Коллеги, добрый день!
Встала срочная задача почистить "кэш" 1С на терминальном сервере.
Папок пользователей много, есть только папка верхнего уровня:
C:\Users
Далее идет путь к папке, в которой хранится кэш, выглядит так:
C:\Users\user\AppData\Local\1C\1cv8
Искомые папки выглядят так и имена полностью разные, фильтр никак не задать, только по кол-ву символов.
24f72b1d-8293-4930-bf87-c2a6e52c0aca
Итого 36 символов.
Нужно сделать так, чтобы скрипт не опускался в поиск ниже папки AppData\Local\1C\1cv8 каждого пользователя.
Есть ли возможность отPowershell`ить такую задачу?
Спасибо большое!
get-childitem c:\users | foreach { $FN = $_.FullName if (test-path "$FN\AppData\Local\1C\1cv8") { Remove-Item "$FN\AppData\Local\1C\1cv8\*" -force -whatif } }
The opinion expressed by me is not an official position of Microsoft
23 июня 2017 г. 14:38Модератор -
Ну тут же все удаляется в каталоге.
Вывод WhatIF
What if: Performing the operation "Remove Directory" on target "C:\users\user\AppData\Local\1C\1cv8\123". What if: Performing the operation "Remove Directory" on target "C:\users\user\AppData\Local\1C\1cv8\24f72b1d-8293-4930-bf87-c2a6e52c0a21". What if: Performing the operation "Remove Directory" on target "C:\users\user\AppData\Local\1C\1cv8\24f72b1d-8293-4930-bf87-c2a6e52c0ac1". What if: Performing the operation "Remove Directory" on target "C:\users\user\AppData\Local\1C\1cv8\24f72b1d-8293-4930-bf87-c2a6e52c0aca". What if: Performing the operation "Remove File" on target "C:\users\user\AppData\Local\1C\1cv8\24f72b1d-8293-4930-bf87-c2a6e52c0123". What if: Performing the operation "Remove File" on target "C:\users\user\AppData\Local\1C\1cv8\24f72b1d-8293-4930-bf87-c2a6e52c0aca.txt". What if: Performing the operation "Remove File" on target "C:\users\user\AppData\Local\1C\1cv8\New Text Document.txt".
Мне бы всякие файлики типа .txt и прочие приберечь...
23 июня 2017 г. 14:44 -
get-childitem c:\users | foreach { $FullPath = "$($_.FullName)\AppData\Local\1C\1cv8" if (test-path $FullPath ) { Get-ChildItem $FullPath | foreach { if ($_.name -match '\w{8}-\w{4}-\w{4}-\w{4}-\w{12}'){ Remove-Item "$($_.FullName)\*" -force -whatif } } } }
The opinion expressed by me is not an official position of Microsoft
- Помечено в качестве ответа Oleg.A 26 июня 2017 г. 7:54
23 июня 2017 г. 14:59Модератор -
Ничего не происходит! :(
23 июня 2017 г. 15:05 -
Если например сделать так:
get-childitem c:\users | foreach { $FN = $_.FullName if (test-path "$FN\AppData\Local\1C\1cv8") { Get-ChildItem $FullPath | foreach { if ($_.name -match '\w{8}-\w{4}-\w{4}-\w{4}-\w{12}'){ Remove-Item "$($_.FullName)\*" -force -whatif } } } }
То выходит, что ему обязательно нужен этот каталог в подкаталогах:
Get-ChildItem : Cannot find path 'C:\users\TEMP.OF.000\AppData\Local\1C\1cv8' because it does not exist. At C:\Users\user\Desktop\del.ps1:4 char:9 + Get-ChildItem $FullPath | foreach { + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\users\TEMP.O...a\Local\1C\1cv8:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
23 июня 2017 г. 15:13 -
В примере выше не хватает -recurse, куда втулить можно посмотреть на картинке
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 23 июня 2017 г. 15:20
23 июня 2017 г. 15:14Модератор -
Если например сделать так:
get-childitem c:\users | foreach { $FN = $_.FullName if (test-path "$FN\AppData\Local\1C\1cv8") { Get-ChildItem $FullPath | foreach { if ($_.name -match '\w{8}-\w{4}-\w{4}-\w{4}-\w{12}'){ Remove-Item "$($_.FullName)\*" -force -whatif } } } }
То выходит, что ему обязательно нужен этот каталог в подкаталогах:
Get-ChildItem : Cannot find path 'C:\users\TEMP.OF.000\AppData\Local\1C\1cv8' because it does not exist. At C:\Users\user\Desktop\del.ps1:4 char:9 + Get-ChildItem $FullPath | foreach { # В вашем коде нет такой переменной + ~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\users\TEMP.O...a\Local\1C\1cv8:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand
Скопируйте код, в вашем коде есть ошибкаThe opinion expressed by me is not an official position of Microsoft
23 июня 2017 г. 15:18Модератор -
Он сначала заработал на терминальном сервере (на локальном тишина), начал выдавать результаты с WhatIF.
Я остановил скрипт, убрал IF и запустил.
После минуты висения, он закончил работу, но папки были по-прежнему на месте.
Больше он не запускался.
Заметил что нет прав на папки из скрипта (хоть из под домайн админа запускал).
Запустил от имени администратора, больше про доступ не спросил, но опять не отрабатывает ничего.
23 июня 2017 г. 16:06 -
Вот чего нашел...
Сейчас зашли два новых пользователя, подключились к базе и у них появились папки.
Он пытается найти папку внутри 36 знаковой папки:
- Изменено Oleg.A 23 июня 2017 г. 16:44
23 июня 2017 г. 16:43 -
36 значные папки удалятся не должны
Удаляются файлы/папки внутри
Если вам нужно удалять в том числе и 36 значные папки уберите \*
The opinion expressed by me is not an official position of Microsoft
- Помечено в качестве ответа Oleg.A 26 июня 2017 г. 7:54
23 июня 2017 г. 18:12Модератор -
вот оно! :)
Спасибо большое!
26 июня 2017 г. 7:54 -
чистим кэш 1с старым дедовским способом при помощи batch-файла:
@FOR /D %%i in ("%userprofile%\Local settings\Application data\1C\1Cv82\????????-????-????-????-????????????") do rd /s /q "%%i" @FOR /D %%i in ("%userprofile%\AppData\Roaming\1C\1Cv82\????????-????-????-????-????????????") do rd /s /q "%%i" @FOR /D %%i in ("%userprofile%\AppData\Local\1C\1Cv82\????????-????-????-????-????????????") do rd /s /q "%%i"
my blog: http://shserg.ru/
- Помечено в качестве ответа Vector BCOModerator 10 июля 2017 г. 10:09
3 июля 2017 г. 9:15