【问题标题】:A positional parameter cannot be found that accepts argument '\*'找不到接受参数 '\*' 的位置参数
【发布时间】:2015-02-06 20:39:45
【问题描述】:

我尝试使用 PowerShell 将许多 Web 服务安装在 DEV 服务器上。我想在脚本中包含一个部分,该部分将所有文件和文件夹从暂存区域复制到 DEV 服务器上的相应文件夹。

为了做到这一点,我创建了两个并行字符串数组 - 一个包含暂存文件夹的直接文件路径,另一个包含 DEV 服务器上每个文件夹的名称(我使用其他几个变量来存储目录的其余部分)。

我想创建一个for 循环并简单地遍历两个数组以完成文件/文件夹从登台到开发服务器的传输。但是,当循环运行时,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"      

循环 - 在“复制项”上引发错误

#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

【问题讨论】:

    标签: powershell for-loop windows-server-2012


    【解决方案1】:

    我认为这是因为您在循环内部使用了子表达式$(),而不是在外部。试试这些:

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

    用引号将它括起来使它将整个事物评估为一个字符串。

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

    这将连接子表达式的结果和包含\* 的字符串。

    【讨论】:

    • 所以现在说它不能接受argument '+'。我需要引用子表达式吗?
    • 没关系,将变量/字符串括在括号中解决了问题:($($stagingArray[$i]) + '\*')
    猜你喜欢
    • 2016-07-06
    • 2014-09-30
    • 1970-01-01
    • 2015-05-21
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多