Arrays PSCP无法从FOR循环中的ip数组中检索,但可以在FOREACH中工作?

Arrays PSCP无法从FOR循环中的ip数组中检索,但可以在FOREACH中工作?,arrays,powershell,for-loop,foreach,pscp,Arrays,Powershell,For Loop,Foreach,Pscp,我有一个powershell脚本,所以基本上我需要将文件从多个源传输到一个本地。我不想在这种情况下使用pslurp 基本上,我得到了不止一个远程源…若我在for循环中运行我的数组,那个么会出现错误,但它在每个for循环中都有效。为什么 现在的问题是,我无法更改目标路径,因为我不知道在foreach循环中让目标数组在何处运行。若我指定一个源ip,它可以循环发送到不同的目的地。所以我的数组和循环在技术上运行良好 总体代码(不工作,获取了多个thqn一个远程源不支持错误) 所以我改成了FOREACH。

我有一个powershell脚本,所以基本上我需要将文件从多个源传输到一个本地。我不想在这种情况下使用pslurp

基本上,我得到了不止一个远程源…若我在for循环中运行我的数组,那个么会出现错误,但它在每个for循环中都有效。为什么

现在的问题是,我无法更改目标路径,因为我不知道在foreach循环中让目标数组在何处运行。若我指定一个源ip,它可以循环发送到不同的目的地。所以我的数组和循环在技术上运行良好

总体代码(不工作,获取了多个thqn一个远程源不支持错误)

所以我改成了FOREACH。。。但是现在我不知道如何让它保存到不同的目的地?无论哪种方式,为了测试,我指定了一个目的地,它都可以工作。我不再收到多个远程源错误

foreach ($IP in $ArrayIP){
pscp -pw testing -r $IP":"/cf/conf/backup/* <insert destination? dk how to make it run an arrayDestination>
}
foreach($ArrayIP中的IP){
pscp-pw测试-r$IP:“/cf/conf/backup/*
}

现在我在想,如果我应该做一个2D数组……这会帮助我在foreach循环中运行不同的变量吗?或者,如果有人可以指导我使用object命令……我已经在论坛上阅读了有关它的内容,但仍然不确定如何使用它

有两件事妨碍了您的第一个示例的工作:

首先,您当前的
for
循环无效-PowerShell中的变量名前缀为
$

for ($i=0; $i -le 2; $i++){
   ...
}
其次,PowerShell将命令行参数视为可扩展字符串,数组索引操作无法在字符串中正确展开-请用子表达式括起来
$()
,以正确展开引用的数组索引:

for ($i=0; $i -le 2; $i++){
    pscp -pw testing -r "$($ArrayIP[$i]):/cf/conf/backup/*" "$($ArrayDestination[$i])"
}
你可以试试这个, 使用不会与文件名冲突的字符串值连接目标路径和IP,并在循环中按该值分割

$Array=@("root@10.0.0.1--C:/Users/me/save01","root@10.0.0.2--C:/Users/me/save01")

foreach ($Entry in $ArrayIP){
    $Split = $Entry -split '--'
    pscp -pw testing -r ($Split[0] + ':/cf/conf/backup/*') $Split[1]
}

第一次使用Powershell?这与第一个示例非常接近。使用@()生成数组是很多人迷恋的神话。我喜欢使用单引号,除非里面有变量

$ArrayIP = 'root@10.0.0.1', 'root@10.0.0.2'
$ArrayDestination = 'C:/Users/me/save01', 'C:/Users/me/save01'

for ($i=0; $i -lt 2; $i++){
  pscp -pw testing -r ($ArrayIP[$i] + ':/cf/conf/backup/*') $ArrayDestination[$i]
}
我像这样用pscp测试了线路,以确保我得到了正确的字符串。使用其他方法,我最终在中间留出了额外的空间

for ($i=0; $i -lt 2; $i++){
  cmd /c echo pscp -pw testing -r ($ArrayIP[$i] + ':/cf/conf/backup/*') $ArrayDestination[$i]
}

pscp -pw testing -r root@10.0.0.1:/cf/conf/backup/* C:/Users/me/save01
pscp -pw testing -r root@10.0.0.2:/cf/conf/backup/* C:/Users/me/save01
这里有一个小爱好者的哈希数组。或者您可以导入csv

$hashes = @{source='root@10.0.0.1:/cf/conf/backup/*'; destination='C:/Users/me/save01'},
          @{source='root@10.0.0.2:/cf/conf/backup/*'; destination='C:/Users/me/save01'}

foreach ($item in $hashes) {
  pscp -pw testing -r $item.source $item.destination
}


第2行末尾有语法错误。第4行有语法错误,第5行有语法错误。很抱歉,这不是我的实际代码,在重新键入整个coe时没有注意!!谢谢你的指点!我已回滚您的编辑。在标题中添加已解决问题或为问题添加解决方案是不合适的。您已表示您的问题已通过接受答案得到解决。您可以在.tq中找到有关该网站工作方式的更多信息!!!这管用!然而,由于这是一个测试,我们实际上需要提取大量的服务器到本地。。。那么为了让它更有组织性?我应该采用哪种方法?由于我将使用大量数组(ip、dest、pw、username等),因此很难跟踪,我需要确保此arrayDest[1]必须用于arrayIP[1]和arrayUser[1],如果你明白我的意思。。。因为如果信息不一致…我们会有点崩溃everything@Anonymous01我会使用一个哈希表:
@{root@10.0.0.1'=“C:/Users/me/save01”}
然后在上面迭代
$hashes = @{source='root@10.0.0.1:/cf/conf/backup/*'; destination='C:/Users/me/save01'},
          @{source='root@10.0.0.2:/cf/conf/backup/*'; destination='C:/Users/me/save01'}

foreach ($item in $hashes) {
  pscp -pw testing -r $item.source $item.destination
}