Назад | Перейти на главную страницу

robocopy сообщает, что он получает недопустимые параметры при использовании в сценарии PowerShell

Я пытаюсь использовать robocopy в сценарии PowerShell, но в настоящее время это не удается. Когда я запускаю следующую команду вручную

robocopy \\corporatesystem00.local.com\C$\Maven\ \\corporatesystem01.local.com\C$\Maven\ * /e /purge

Я могу скопировать все содержимое одной папки в другую, и это работает как по волшебству. Однако, несмотря на то, насколько "прекрасен" PowerShell, я думаю, что наткнулся на неизвестную проблему. Когда я запускаю ту же команду из сценария PowerShell, я получаю эту ошибку:

PS C:\Program_Files> .\jenkins-maven-copy.ps1
Performing Jenkins Maven Sync
robocopy \\corporatesystem00.local.com\C$\Maven\ \\corporatesystem01.local.com\C$\Maven\ * /e /purge

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

  Started : Wednesday, July 30, 2014 3:00:03 PM
   Source - \\corporatesystem00.local.com\C$\Maven\
     Dest - \\corporatesystem01.local.com\C$\Maven\

    Files : *

  Options : /DCOPY:DA /COPY:DAT /R:1000000 /W:30

------------------------------------------------------------------------------

ERROR : Invalid Parameter #4 : "/e /purge"

       Simple Usage :: ROBOCOPY source destination /MIR

             source :: Source Directory (drive:\path or \\server\share\path).
        destination :: Destination Dir  (drive:\path or \\server\share\path).
               /MIR :: Mirror a complete directory tree.

    For more usage information run ROBOCOPY /?


****  /MIR can DELETE files as well as copy them !

Это происходит с любым параметром командной строки, который я добавляю для своих параметров в сценарии. Скрипт, который я запускаю, находится ниже.

Param (
    [string]$srcLocation = '\\corporatesystem00.local.com\C$\Maven\',
    [string]$destLocation = '\\corporatesystem01.local.com\C$\Maven\',
    [string]$files = '*',
    [string]$options = '/e /purge'
)

function syncMaven( $srcLocation, $destLocation, $files, $options )
{
    Write-Host "Performing Jenkins Maven Sync"
    Write-Host "robocopy $srcLocation $destLocation $files $options"
    robocopy $srcLocation $destLocation $files $options
}

syncMaven $srcLocation $destLocation $files $options

Если вы посмотрите на ошибку / вывод из ранее, он показывает, что команда передается с параметрами команды, но robocopy не распознает их или что-то в этом роде.

PS C:\Program_Files> .\jenkins-maven-copy.ps1
Performing Jenkins Maven Sync
robocopy \\corporatesystem00.local.com\C$\Maven\ \\corporatesystem01.local.com\C$\Maven\ * /e /purge

Итак, я в растерянности.

Вероятно, вы сможете воспроизвести свою проблему, попробовав следующее в PowerShell:

robocopy a b * "/e /purge"

Если это так, проблема заключается в расширении параметров. Чтобы обойти это, вы можете пойти по этому пути:

iex "$srcLocation $destLocation $files $options"