#powershell
#powershell
Вопрос:
Я пытаюсь переместить папку с помощью PowerShell
move-item c:test c:test2
работает, но
move-item c:test 192.168.1.50c$test2
не выполняет и сообщает мне
Переместить элемент: Исходный и конечный пути должны иметь идентичные корни. Перемещение между томами работать не будет.
Ответ №1:
Если test
это каталог, он не будет работать, как указано в документации для Move-Item
:
Move-Item
файлы будут перемещены между дисками, которые поддерживаются одним и тем же поставщиком, но каталоги будут перемещены только на одном диске.
В этом случае вы можете использовать Copy-Item
, за которым следует Remove-Item
:
try {
Copy-Item -Recurse C:test \192.168.1.50c$test2 -ErrorAction Stop
Remove-Item -Recurse c:test
} catch {}
Другим вариантом, если вы не полагаетесь на PSDrives, было бы просто использовать xcopy или robocopy.
Комментарии:
1. И они, вероятно, захотят использовать
-recurse
для них.2. Спасибо, Джоэл. Не подумал об этом
cpi
не беспокоит копирование содержимого каталогов. Я редко занимаюсь файловой системой с PS.3. если вы используете CI RI, вы должны убедиться, что элементы не будут удалены в случае сбоя CI (например, недоступный пункт назначения). Используйте ‘-ErrorAction Stop’ с комбинацией директив Try / catch
4. Ильякс: Он имеет в виду комбинацию
Copy-Item
иRemove-Item
.5. Я могу справиться с этим процессом с помощью 10 строк C #, но я хочу сделать это для powershell, поскольку это может быть сложно, папки и файлы в папке не могут быть скопированы
Ответ №2:
Это необходимо ужесточить и, вероятно, следует превратить в функцию, но это работает.
$source = "<UNC Path>"
$destination = "<UNC Path>"
if (test-path $destination -PathType Container)
{
foreach ( $srcObj in (get-childitem $source ))
{
$srcObjPath = "$($srcObj.fullname)"
$destObjPath = "$($destination)$($srcObj.name)"
If((Test-Path -LiteralPath $destination))
{
copy-item $srcObjPath $destination -recurse
if ( (Test-Path -Path $destObjPath ) -eq $true)
{
if ( (compare-object (gci $srcObjPath -recurse) (gci $destObjPath -recurse)) -eq $null)
{
write-output "Compare is good. Remove $($srcObjPath)"
remove-item $srcObjPath -recurse
}
else
{
write-output "Compare is bad. Remove $($destObjPath)"
remove-item $destObjPath -recurse
}
}
else
{
write-output "$($destination) path is bad"
}
}
else
{
write-output "bad destinaton: $($destination)"
}
}
}
Ответ №3:
У меня была похожая проблема. Я обнаружил, что в папке назначения права пользователя были ограничены. Я изменил полные разрешения на исходном и конечном диске, и перемещение прошло гладко. Сообщение об ошибке «Нет идентичных корней» в команде «переместить элемент».