Как мне отследить, какой системный вызов или исполняемый файл использует инструмент Windows для удаления профилей пользователей?

Сначала немного предыстории.

Я занимаюсь поддержкой настольных компьютеров для конечных пользователей с использованием Onedrive. Иногда, если клиент Onedrive полностью портит себя и свою библиотеку, приходится пересобирать. Обычно это включает в себя удаление старого местоположения библиотеки и повторную синхронизацию. Довольно часто, если клиент не вышел из системы или не отключился полностью, эти библиотеки не позволяют просто удалить их с помощью проводника из-за чего-то похожего на эту базу знаний: https://learn.microsoft.com/en-us/sharepoint/troubleshoot/sync/delete-onedrive-synced-file-error . К несчастью для меня и нашей команды технических специалистов, CHKDSK часто не может решить эту проблему, а в других случаях мы не можем использовать CHKDSK. Это означает, что наша библиотека находится в подвешенном состоянии, и мы обычно прибегаем к ее переименованию и сокрытию, а также позволяем Onedrive создать новую рабочую библиотеку.

Вот в чем загадка. Даже в ситуациях, когда произошел сбой в проводнике и рекурсивный вызов метода Delete() с помощью PowerShell не удался, меню профиля пользователя в системном меню все равно может полностью удалить папку профиля пользователя, содержащую одну из этих сломанных библиотек Onedrive.

Меню, о котором я говорю: https://faultserver.ru/images/a1d8401bcae334c2f479db6b85d65a95ce7b8062.png

Я хотел бы знать, есть ли способ узнать, какой магический системный вызов или утилита используется Windows для принудительного удаления этих папок библиотеки Onedrive, чтобы я мог сделать это самостоятельно. Для нас это достаточно распространенная проблема, и я потратил много времени, пытаясь понять, как она это делает. Если кто-нибудь знает об этом больше, я хотел бы услышать вашу мудрость.

Спасибо.

1 ответ

Первым делом я бы попробовал запустить Process Monitor https://learn.microsoft.com/en-us/sysinternals/downloads/procmon в системе, пока она удаляется, а затем просмотреть выходные данные, что запускалось и какие пути были доступны и т. д.

Обратите внимание: если вы не знакомы с ProcMon, он выдает МНОГО данных, поэтому я бы рекомендовал убедиться, что вы настроили его для сохранения вывода в файл, а не в память, например, перейдите в «Файл» > «Файлы резервного копирования» и задайте имя файла. Также вам потребуется остановить и очистить захват. Прежде чем начать, начните захват непосредственно перед началом удаления и сразу же после этого остановите его снова. В противном случае вы получите МНОГО ненужной информации. Тогда это просто вопрос фильтрации тех фрагментов информации, которые, как вы знаете, не имеют значения, например, фоновые процессы, обращающиеся к файловой системе, службы, подключающиеся к ресурсам и т. д., пока вы не сократите объем данных до разумного размера, где вы можете просмотреть через него, чтобы увидеть, что именно произошло в системе.

Другие вопросы по тегам