Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Проблема с циклом

Ответить
Настройки темы
PowerShell - Проблема с циклом

Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброе время суток форумчане.
Попрошу знающих powershell решить такую проблему
Есть две переменные $a и $b , обе массивы
Нужно передать переменную счетчика в цикле Foreach $i сразу двум переменным $a и $b.
Я пробовал и
Код: Выделить весь код
Foreach ($i in $a,$b)
и
Код: Выделить весь код
Foreach ($i in $a, $i in $b)
Но конечно ничего не получилось. Как это реализовать ?

Отправлено: 00:28, 17-09-2015

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата tuguror:
Нужно передать переменную счетчика в цикле 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]
}
Для корректной работы размеры массивов должны быть идентичны.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:28, 17-09-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


У меня работает (powershell 5.0)
Код: Выделить весь код
$a = 1,2,3
$b = 4,5,6

foreach ($i in $a,$b) { $i }
1
2
3
4
5
6
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:05, 17-09-2015 | #3


Ветеран


Сообщения: 1259
Благодарности: 861

Профиль | Отправить PM | Цитировать


Переменная $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
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:33, 17-09-2015 | #4


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
У меня работает (powershell 5.0) »
У меня под 2.0 тоже . Но потребность автора всё одно не понял.

Отправлено: 11:52, 17-09-2015 | #5


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Iska, Да, нужно ждать пояснения, что такое переменная счетчика цикла

Отправлено: 12:55, 17-09-2015 | #6


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Большое спасибо всем кто ответил. Извиняюсь что сразу не озвучил свои намерения. Есть доменная сеть. Нужно из сервера копировать файлы на рабочий стол пользователей. Одна из переменных $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

Отправлено: 15:23, 17-09-2015 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата tuguror:
Поэтому я спрашивал как сделать в цикле 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
            }
    }
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:39, 17-09-2015 | #8


Новый участник


Сообщения: 13
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо вам всем. Я посмотрел ваши замечания и буду пробовать ваши скрипты

Отправлено: 17:39, 19-09-2015 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Проблема с циклом

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Сборка 10130 Windows 10 доступна для пользователей с циклом обновлений Fast Ring OSZone News Новости и события Microsoft 0 30-05-2015 15:30
MySQL+PHP что-то не выходит с циклом при UPDATE koresaram Вебмастеру 1 31-01-2013 13:26
[решено] Проблема с материнской платой MSI MS-6590 (проблема памяти) Murman Материнские платы и память 2 12-03-2012 19:06
Нужна помощь: Не могу справится с циклом killer.bin AutoIt 1 09-06-2009 14:42
[решено] [GUI] Вопрос с отображением формы и циклом D_Master AutoIt 4 05-03-2009 19:20




 
Переход