none
Удаление папок с определенным количеством символов. RRS feed

  • Вопрос

  • Коллеги, добрый день!

    Встала срочная задача почистить "кэш" 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

Все ответы

  • Коллеги, добрый день!

    Встала срочная задача почистить "кэш" 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


    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