Робокопия не работает в скрипте Powershell - PullRequest
1 голос
/ 16 февраля 2020

У меня проблемы с использованием RoboCopy.exe через скрипт Powershell. Функция выглядит следующим образом ...

function copyFiles{
    Start-Process "RoboCopy.exe" -ArgumentList "'C:\Test' 'C:\test2' /copyall"
    Write-Host 'Test'
}

"Тест" выводится на консоль, но копирование не выполняется. Первоначально я пытался копировать с переменными в качестве каталогов, но я сводил это к этому, так как это не работало. В каталоге «test1» есть один файл .txt, а «test2» существует, но он пуст. Я пробовал и без этого каталога.

Он вызывается в другом файле через:

. .\rCopy.ps1
copyFiles

Теперь я попытался вывести журнал в файл с кодом ниже, но это дает мне ошибку разрешений. Msgstr "Out-File: доступ к пути 'C: \ Users \ Me \ Desktop' запрещен". Я также попытался вывести напрямую на C: \, но это выдает ту же ошибку. Powershell работает как администратор.

$testCopy = Start-Process "RoboCopy.exe" -ArgumentList "'C:\Test' 'C:\test2' /copyall"
$testCopy | Out-File -LiteralPath "C:\Users\Me\

И чтобы закрыть, я также попытался запустить "Start-Process 'RoboCopy.exe' -ArgumentList 'C: \ test' 'C: \ test2 '/ copyall "в основном скрипте, без вызова функции из другого.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 16 февраля 2020

Я смог заставить его работать, используя следующий синтаксис:

Start-Process "RoboCopy.exe" -argumentlist "`"$localDir`" `"$networkDir`"  "

Я не могу скопировать из каталога, в который я пытался, из get- go, но я предполагаю, это проблема с разрешениями.

0 голосов
/ 16 февраля 2020

Ваше собственное решение действует: заключенные в кавычки аргументы внешним программам , таким как Robocopy.exe внутри (одного) -ArgumentList аргумента, требуют встроенного double кавычки ("), а не одиночные кавычки (') .

Обычно внешние программы не распознают ' в качестве разделителей строк в командной строке, и это даже относится к вызову самой PowerShell через параметр CLI -File.

Даже если вы должны передать аргументы один за другим в -ArgumentList:

# Note the individual arguments.
# !! Works in this case, but with paths that have *embedded spaces*
# !! you  would still need embedded "..." quoting.
Start-Process Robocopy.exe -ArgumentList 'C:\Test', 'C:\test2', '/copyall'

вам все равно придется использовать встроенные "..." кавычки в отдельных аргументах, которые (могут) содержать встроенных пробелов (например, * 1034) * или со ссылкой на переменную "`"$dir`"", из-за давней ошибки .

См. этот ответ для справочной информации.

...