Странное поведение в скрипте Powershell - PullRequest
0 голосов
/ 08 сентября 2010

Я извлекаю рабочую копию проекта с помощью Checkout-WorkingCopy, а затем удаляю каталог с помощью Cleanup-WorkingCopy (код для этих функций находится в конце этого сообщения).

Проблемы, с которыми я сталкиваюсь:

  1. Вместо повторения "Checking out from svn://somePath1 <strong><em>to</em></strong> C:/somePath2" оно повторяет "Checking out from svn://somePath1 C:/somePath2 <strong><em>to</em></strong>"
  2. В Cleanup-WorkingCopy выдает следующую ошибку при попытке выполнить Pushd,

    <Push-Location : Cannot convert 'System.Object[]' to the type 'System.String' 
    required by parameter 'LiteralPath'. Specified method is not supported.
        + Pushd <<<<  $directory
        + CategoryInfo : InvalidArgument: (:) [Push-Location], ParameterBindingException
        + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.PushLocationCommand>
  3. Наконец, я получаю ошибку "The syntax of the command is incorrect" при выполнении Rmdir.

Функции, которые я использую, приведены ниже. Я проверил аргументы, отправленные функциям, и они верны.

#Checks out a copy from svnPath into appFilePath
Function Checkout-WorkingCopy($svnPath, $appFilePath) {

    Echo "Checking out from $svnPath to $appFilePath"

    svn checkout $svnPath $appFilePath --quiet

    Echo "Checkout Done"
}

#Deletes the working copy previously checked out
Function Cleanup-WorkingCopy($directory, $appFilePath) {

    Pushd $directory
    Cmd /C "Rmdir /S /Q $appFilePath"
}

1 Ответ

3 голосов
/ 08 сентября 2010

Похоже, $ directory получает массив значений. Когда вам нужно отладить что-то подобное, попробуйте проверить переданное значение. Кроме того, вместо того, чтобы отправлять cmd.exe, просто используйте командлет PowerShell Remove-Item:

Function Cleanup-WorkingCopy($directory, $appFilePath) { 
    $directory | Foreach {"$($_.GetType().Fullname): $_" }
    Pushd $directory 
    Remove-Item $appFilePath -Recurse -Force
}

На самом деле, при таком подходе вам вообще не нужен каталог $, и вы можете заменить всю функцию на:

Remove-Item $appFilePath -Recurse -Force
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...