繁体   English   中英

在内部使用Powershell数组进行循环

[英]Use powershell array inside for loop

关于PowerShell,这可能是最基本的问题,但是...尽管如此,我仍然坚持这一点。

我正在尝试将许多文件夹内容从远程服务器上的暂存区移动到我们的DEV服务器。 为了简化代码,我将暂存位置放在一个数组中,并将文件夹名称放在单独的数组中。

我想运行一个for loop并将两者作为并行数组进行处理...简单吧?

这是循环

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
    }
}

由于某种原因, if语句每次都会返回false。 如果我打印出值"$domainpath\\$periscopeWebServices\\$periscopeServicesArray[$i]"给出的语句来解释,这就是我得到的:

E:\\ webcontent \\ InsideServices.dev.com \\ periscopeWebServices \\ periscopeRetrieveComments

前两个变量可以正确打印,但是每次数组的全部内容似乎都在溢出,索引值在最后。

这是我创建它们时的变量/数组

#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"

这是因为引用变量的方式,当在字符串"something $($isAt[$here])"使用时,需要以$($array[$elem]) “转义”数组元素访问。

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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM