找不到接受参数“\*”的位置参数
A positional parameter cannot be found that accepts argument '\*'
我尝试使用 PowerShell 在 DEV 服务器上安装许多 Web 服务。我想在脚本中包含一个部分,该部分将所有文件和文件夹从暂存区域复制到 DEV 服务器上的相应文件夹。
为了做到这一点,我创建了两个并行字符串数组 - 一个包含暂存文件夹的直接文件路径,另一个包含 DEV 服务器上每个文件夹的名称(我使用了几个其他变量来存储目录的其余部分)。
我想创建一个 for
循环并简单地遍历两个数组以完成 files/folders 从暂存到开发服务器的传输。但是,当循环运行 copy-item
命令时,每次都会出现此错误
Copy-Item : A positional parameter cannot be found that accepts argument '*'.
如果我决定不使用循环,错误就会消失并且文件可以正确传输。刚接触 PowerShell 才几天,所以我不确定发生了什么 on/haven 无法在网上找到与此相关的任何内容。
变量
#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"
循环 - 在 'copy-item'
上抛出错误
#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
我认为这是因为您在循环内部而不是外部使用了子表达式 $()
。试试这些:
"$($stagingArray[$i])\*"
用引号将其括起来使其将整个事物评估为字符串。
$($stagingArray[$i]) + '\*'
这将连接子表达式的结果和包含 \*
的字符串。
我尝试使用 PowerShell 在 DEV 服务器上安装许多 Web 服务。我想在脚本中包含一个部分,该部分将所有文件和文件夹从暂存区域复制到 DEV 服务器上的相应文件夹。
为了做到这一点,我创建了两个并行字符串数组 - 一个包含暂存文件夹的直接文件路径,另一个包含 DEV 服务器上每个文件夹的名称(我使用了几个其他变量来存储目录的其余部分)。
我想创建一个 for
循环并简单地遍历两个数组以完成 files/folders 从暂存到开发服务器的传输。但是,当循环运行 copy-item
命令时,每次都会出现此错误
Copy-Item : A positional parameter cannot be found that accepts argument '*'.
如果我决定不使用循环,错误就会消失并且文件可以正确传输。刚接触 PowerShell 才几天,所以我不确定发生了什么 on/haven 无法在网上找到与此相关的任何内容。
变量
#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"
循环 - 在 'copy-item'
上抛出错误#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
我认为这是因为您在循环内部而不是外部使用了子表达式 $()
。试试这些:
"$($stagingArray[$i])\*"
用引号将其括起来使其将整个事物评估为字符串。
$($stagingArray[$i]) + '\*'
这将连接子表达式的结果和包含 \*
的字符串。