在 for 循环中使用 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
语句 returns 每次都是错误的。如果我打印出 "$domainpath$periscopeWebServices$periscopeServicesArray[$i]"
给出解释语句的值,这就是我得到的:
E:\webcontent\InsideServices.dev.com\periscopeWebServices\periscopeRetrieveComments periscopeRetrieveGeneral periscopeRetrieveMasterSubs periscopeRetrieveProducers periscopeRetrieveProfiles
periscopeRetrieveRelationships periscopeSearch[0]
前两个变量打印正确,但数组的全部内容似乎每次都溢出,索引值在末尾。
这是我创建的 variables/arrays
#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"
这是因为您引用变量的方式,您需要 "escape" 在字符串 "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
}
}
这可能是关于 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
语句 returns 每次都是错误的。如果我打印出 "$domainpath$periscopeWebServices$periscopeServicesArray[$i]"
给出解释语句的值,这就是我得到的:
E:\webcontent\InsideServices.dev.com\periscopeWebServices\periscopeRetrieveComments periscopeRetrieveGeneral periscopeRetrieveMasterSubs periscopeRetrieveProducers periscopeRetrieveProfiles periscopeRetrieveRelationships periscopeSearch[0]
前两个变量打印正确,但数组的全部内容似乎每次都溢出,索引值在末尾。
这是我创建的 variables/arrays
#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"
这是因为您引用变量的方式,您需要 "escape" 在字符串 "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
}
}