Как использовать PowerShell для удаления непустой папки в OneDrive?

Описания

Не удается удалить непустую папку в каталоге OneDrive

Шаг для воспроизведения

  1. Запустить PowerShell в каталоге OneDrive
PS C:\Users\MyUserName\OneDrive>
  1. Попробуйте использовать командлет Remove-Item, чтобы удалить непустую папку в этом каталоге, например: папку. \ Test \
PS C:\Users\MyUserName\OneDrive> Remove-Item .\test\

Ожидаемый результат

Без параметра -Recurse PowerShell должен возвращать подтверждающее сообщение, например

Confirm
The item at C:\Users\MyUserName\OneDrive\test\ has children and the Recurse parameter was not specified. If you continue, all children will be removed with the item. Are you sure you want to continue?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):

Фактический результат

PowerShell возвращает сообщение об ошибке

Remove-Item: Cannot remove item C:\Users\MyUserName\OneDrive\test\: The directory is not empty. : 'C:\Users\MyUserName\OneDrive\test\'

Примечание

  1. PowerShell и администратор: PowerShell дает тот же результат;
  2. Если я выхожу из процесса OneDrive и создаю новую непустую папку в каталоге OneDrive, PowerShell может удалить ее как обычно (см. Примечание 4., поскольку несинхронизированные папки не имеют атрибута ReparsePoint);
  3. CMD может успешно удалить папку, что означает, что я могу использовать следующую команду в PowerShell, чтобы удалить папку. Но я хочу достичь своей цели только с помощью командлета PowerShell;
cmd.exe /C "rd /s test"
  1. Командлет Get-ChildItem показывает, что режим обычных папок (не синхронизируемых OneDrive) — «d» (каталог), а режим синхронизируемых папок — «l» (точка повторной обработки). Является ли это причиной того, что я не могу удалить папку из каталога OneDrive в обычном режиме?

Информация о версии

PS Версия : 7.1.3

ОС : Microsoft Windows 10.0.19042

См. также:  Как рекурсивно скопировать файлы, находящиеся в каталоге, в другой каталог в Windows?

Версия OneDrive : 21.052.0314.0001 (Office 365 A1)

Обновлять

Я пытаюсь удалить тестовую папку в PowerShell 5, но тоже не могу.

Сообщение об ошибке от PowerShell 5.1:

PS C:\Users\MyUserName\OneDrive> Remove-Item .\test\ -Force -Recurse
Remove-Item : Access to the cloud file is denied.
At line:1 char:1
+ rm .\test\ -Force -Recurse
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Remove-Item], Win32Exception
    + FullyQualifiedErrorId : System.ComponentModel.Win32Exception,Microsoft.PowerShell.Commands.RemoveItemCommand

Совершенно очевидно, что объекты файлов и папок обрабатываются Remove-Item по-разному. Если я вспомню сценарий, который я написал, чтобы сделать что-то подобное, мне нужно было сначала удалить файлы, прежде чем удалять папки.   —  person OriBeta    schedule 10.04.2021

Что произойдет, если вы попробуете с -Force?   —  person OriBeta    schedule 10.04.2021

Попробуйте -Recurse. Вам следует посмотреть на документы.   —  person OriBeta    schedule 11.04.2021

@Vivere Я попробовал, но ничего не вышло. И обычно, даже если без -Recurse, PowerShell должен возвращать подтверждающее сообщение (точно так же, как ожидаемый результат в вопросе) вместо сообщения об ошибке.   —  person OriBeta    schedule 11.04.2021

@SantiagoSquarzon Я попробовал, но ничего не вышло. На самом деле в тестовой папке нет скрытых файлов или папок, поэтому я думаю, что параметр -Force не имеет значения.   —  person OriBeta    schedule 11.04.2021

@Scepticalist Я знаю, как удалить chinditems перед удалением папки. Я просто хочу знать, почему несинхронизированная непустая папка может быть легко удалена Remove-Item -Recurse, а папки, синхронизированные OneDrive, нет?   —  person OriBeta    schedule 11.04.2021

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. OriBeta

    Я просто ударил то же самое, и это сработало для меня:

    Get-ChildItem -recurse .\test | Sort-Object -Property FullName -Descending | ForEach-Object { $_.Delete() }
    (Get-Item test).Delete()
    

    Я новичок в PowerShell, поэтому могут быть более элегантные или правильные способы сделать это.

    Он работал, но не удаляет папки, только файлы. person OriBeta; 12.05.2021

  2. OriBeta

    В предыдущем ответе скрытые файлы не обрабатывались. Вы можете добавить их в свой профиль.

    function rmc ($file) {
        (Get-Item $file).Delete()
    }
    
    
    function rmd ($folder) {
        Get-ChildItem -recurse -force $folder | Sort-Object -Property FullName -Descending | ForEach-Object { $_.Delete() }
        (Get-Item $folder).Delete()
    }
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: