Показать полную графическую версию : Проблема с циклом
Доброе время суток форумчане.
Попрошу знающих powershell решить такую проблему
Есть две переменные $a и $b , обе массивы
Нужно передать переменную счетчика в цикле Foreach $i сразу двум переменным $a и $b.
Я пробовал иForeach ($i in $a,$b)
и
Foreach ($i in $a, $i in $b)
Но конечно ничего не получилось. Как это реализовать ?
Нужно передать переменную счетчика в цикле Foreach $i сразу двум переменным $a и $b. »
Я теряюсь в догадках по двум причинам: а) само высказывание некорректно и б) какова Ваша цель, чего Вы хотите этим добиться?
Если хотите перебрать элементы, одновременно обращаясь к элементам обоих массивов сразу, так:
$a = 0, 1, 2, 3, 4
$b = 5, 6, 7, 8, 9
for ($i = 0; $i -le ($a.length - 1); $i += 1) {
Write-Host $a[$i], $b[$i]
}
Для корректной работы размеры массивов должны быть идентичны.
Foreigner
17-09-2015, 08:05
У меня работает (powershell 5.0)
$a = 1,2,3
$b = 4,5,6
foreach ($i in $a,$b) { $i }
1
2
3
4
5
6
Переменная $i содержит массив, поэтому можно создать вложенный цикл.
$a = 1,2,3
$b = 4,5,6
foreach ($i in $a,$b) { $i.GetType() }
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
True True Object[] System.Array
PS > foreach ($i in $a,$b) { $i+1}
1
2
3
1
4
5
6
1
Добавим доп. foreach:
foreach ($i in $a,$b) { foreach ($y in $i) {$y.GetType()}}
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
True True Int32 System.ValueType
True True Int32 System.ValueType
True True Int32 System.ValueType
True True Int32 System.ValueType
True True Int32 System.ValueType
PS > foreach ($i in $a,$b) { foreach ($y in $i) {$y+1}}
2
3
4
5
6
7
У меня работает (powershell 5.0) »
У меня под 2.0 тоже :). Но потребность автора всё одно не понял.
Foreigner
17-09-2015, 12:55
Iska, Да, нужно ждать пояснения, что такое переменная счетчика цикла
Большое спасибо всем кто ответил. Извиняюсь что сразу не озвучил свои намерения. Есть доменная сеть. Нужно из сервера копировать файлы на рабочий стол пользователей. Одна из переменных $a обращается к текстовому файлу с компьютерами, другая $b к файлу с пользователями. Так как на одной машине несколько доменных пользователей то и списки разные. Вот этот скрипт
[CODE][
$a = Get-Content "E:\bat\Host.txt"
$b = Get-Content "E:\bat\User.txt"
foreach ($i in $a, $b)
{
invoke-command -computername $a -scriptblock {Copy-Item '\\server\share\file.doc ' -Destination 'C:\Documents and Settings\$b\Рабочий стол' -force }
}
/CODE]
Поэтому я спрашивал как сделать в цикле foreach та чтобы счетчик $i обращался за один раз к двум переменным $a и $b
Поэтому я спрашивал как сделать в цикле foreach та чтобы счетчик $i обращался за один раз к двум переменным $a и $b »
Никак, поскольку бессмысленно.
Делайте два вложенных цикла. Первый — по перечню машин, второй, вложенный в него — по перечню учётных записей. Наподобие (болванка, не проверялось):
$a = Get-Content "E:\bat\Host.txt"
$b = Get-Content "E:\bat\User.txt"
foreach ($i in $a) {
foreach ($j in $b) {
invoke-command -computername $i -scriptblock {
Copy-Item '\\server\share\file.doc ' -Destination 'C:\Documents and Settings\$j\Рабочий стол' -Force
}
}
}
Спасибо вам всем. Я посмотрел ваши замечания и буду пробовать ваши скрипты
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.