2015-02-06 4 views
0

У меня есть несколько веб-сервисов, которые я пытаюсь использовать PowerShell для установки на сервере DEV. Я хочу включить в сценарий раздел, который копирует все файлы и папки из промежуточной области в соответствующую папку на сервере DEV.Не найден позиционный параметр, который принимает аргумент ' *'

Для этого я создал два параллельных массива строк - один из которых содержит прямые пути к файлам промежуточных папок, а другой - имена каждой папки на сервере DEV (я использую пару других переменных для хранения остальная часть каталога).

Я хотел бы создать цикл for и просто перебрать оба массива, чтобы завершить передачу файлов/папок с этапа на сервер dev. Однако, когда цикл выполняет команду copy-item дает эту ошибку каждый раз, когда

Copy-Item: Позиционный параметр не может быть найден, который принимает аргумент «*».

Если я решил не использовать цикл, ошибка исчезнет, ​​и файлы будут переданы правильно. Только пару дней, новых для PowerShell, поэтому я не уверен, что происходит/не удалось найти что-либо конкретное в этом в Интернете.

Переменные

#web services 
$periscopeWebServices = "periscopeWebServices" 
$periscopeRetrieveComments = "periscopeRetrieveComments" 
$periscopeRetrieveGeneral = "periscopeRetrieveGeneral" 
$periscopeRetrieveMasterSubs = "periscopeRetrieveMasterSubs" 
$periscopeRetrieveProducers = "periscopeRetrieveProducers" 
$periscopeRetrieveProfiles = "periscopeRetrieveProfiles" 
$periscopeRetrieveRelationships = "periscopeRetrieveRelationships" 
$periscopeSearch = "periscopeSearch" 
$periscopeServicesArray = @($periscopeRetrieveComments, $periscopeRetrieveGeneral, 
          $periscopeRetrieveMasterSubs, $periscopeRetrieveProducers, 
          $periscopeRetrieveProfiles, $periscopeRetrieveRelationships, 
          $periscopeSearch) 


#staging areas 
$stagingComments = "\\install\PeriscopeServices\periscopeWebServices\periscopeRetrieveComments" 
$stagingGeneral = "\\install\PeriscopeServices\periscopeWebServices\periscopeRetrieveGeneral" 
$stagingMasterSubs = "\\install\PeriscopeServices\periscopeWebServices\periscopeRetrieveMasterSubs" 
$stagingProducers = "\\install\PeriscopeServices\periscopeWebServices\periscopeRetrieveProducers" 
$stagingProfiles = "\\install\PeriscopeServices\periscopeWebServices\periscopeRetrieveProfiles" 
$stagingRelationships = "\\install\PeriscopeServices\periscopeWebServices\periscopeRetrieveRelationships" 
$stagingSearch = "\\install\PeriscopeServices\periscopeWebServices\periscopeSearch" 
$stagingArray = @($stagingComments, $stagingGeneral, $stagingMasterSubs, $stagingProducers 
        $stagingProfiles, $stagingRelationships, $stagingSearch) 

#server variables 
$domain = "InsideServices.dev.com" 
$directory = "E:\webcontent" 
$domainpath = "$directory\$domain"  

Loop - бросает ошибку 'копирования элемента'

#copy files 
Write-Host "Copying Files" -ForegroundColor Yellow 
For ($i=0; $i -lt $periscopeServicesArray.Length; $i++) 
{ 
    Write-Host "Copying $($periscopeServicesArray[$i])" -ForegroundColor Yellow 
    if(Test-Path -path "$domainpath\$periscopeWebServices\$($periscopeServicesArray[$i])") 
    { 
     copy-item -Path $($stagingArray[$i])\* -Destination $domainpath\$periscopeWebServices\$($periscopeServicesArray[$i]) -recurse -Force 
    } 
} 

Успешная команда копирования элемент

copy-item -Path $stagingComments\* -Destination $domainpath\$periscopeWebServices\$periscopeRetrieveComments -recurse -Force 

ответ

1

Я думаю, это потому, что вы используете подвыражение $() внутри цикла, но не снаружи. Попробуйте следующее:

"$($stagingArray[$i])\*" 

Окружающая его в кавычках позволяет оценить все это как строку.

$($stagingArray[$i]) + '\*' 

Это конкатенации результат суб-выражения и строки, содержащей \*.

+0

Так что теперь он говорит, что не может принять аргумент +. Нужно ли цитировать суб-выражение? – NealR

+0

Nevermind, содержащий переменные/строку в скобках, решил проблему: '($ ($ stagingArray [$ i]) + '\ *')' – NealR

Смежные вопросы

 Смежные вопросы