Надежная пользовательская реализация в Windows достигается за счет снижения производительности.
спользованииRemove-Item
команда, даже используя-r
а также-Force
параметры, иногда возвращается следующее сообщение об ошибке:
Remove-Item: невозможно удалить элемент C: \ Test Folder \ Test Folder \ Target: каталог не пуст.
В частности, это происходит, когда удаляемый каталог открывается в проводнике Windows.
Теперь, хотя этого можно избежать, просто закрыв Проводник Windows или не просматривая его, я работаю со своими сценариями в многопользовательской среде, где люди иногда просто забывают закрыть окна Проводника Windows, меня интересует решение для удаления целые папки и каталоги, даже если они открыты в проводнике Windows.
Есть ли вариант более мощный, чем-Force
что я могу установить, чтобы добиться этого?
Чтобы надежно воспроизвести это, создайте папкуC:\Test Folder\Origin
и заполните его некоторыми файлами и подпапками (важно), затем возьмите следующий сценарий или один подобный и выполните его один раз. Теперь откройте одну из подпапокC:\Test Folder\Target
(в моем случае я использовалC:\Test Folder\Target\Another Subfolder
содержащийA third file.txt
) и попробуйте снова запустить скрипт. Теперь вы получите ошибку. Если вы запустите сценарий в третий раз, вы не получите ошибку снова (в зависимости от обстоятельств, которые мне еще предстоит определить, однако, ошибка иногда возникает во второй раз, а затем никогда больше, а в других случаях она возникаеткаждый второй раз).
$SourcePath = "C:\Test Folder\Origin"
$TargetPath = "C:\Test Folder\Target"
if (Test-Path $TargetPath) {
Remove-Item -r $TargetPath -Force
}
New-Item -ItemType directory -Path $TargetPath
Copy-Item $SourcePath -Destination $TargetPath -Force -Recurse -Container