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

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

Ответить
Настройки темы
PowerShell - Обработка коллекции через foreach ()

Пользователь


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

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


Изменения
Автор: rudimko
Дата: 25-06-2013
Давно не брался за PS, все подзабыл.

Создаю коллекцию:
$A = @{
"123" = "цифры";
"абв" = "буквы";
"-=?" = "знаки";
}

Вот как перебрать $Key in $A.Keys и $Value in $A.Values разом?
Пытаюсь делать через foreach () {}, выходит какае-то чепуха. Точнее, ничего не выходит.

Заранее спасибо.

Отправлено: 10:28, 25-06-2013

 

Ветеран


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

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


rudimko, непонятно, чего Вы хотите. Что значит — «в одном цикле сразу»? Зачем тут вообще цикл?

Отправлено: 14:08, 25-06-2013 | #2



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

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


Пользователь


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

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


Прошу меня извинить, неверно объяснил чего я хочу. Постарался исправить в первом посте. Необходимо в поочередно заносить значения из $A.Keys в $Key и из $A.Values в $Value. Не могу сделать сразу одним перебором по переменной. :-\

Отправлено: 14:24, 25-06-2013 | #3


Ветеран


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

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


rudimko, опять-таки непонятно — зачем «поочерёдно»? В чём смысл сего действа, почему не разом? Поясните.

Отправлено: 14:32, 25-06-2013 | #4


Пользователь


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

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


А мне нужно будет при переборе выполнить различные действия с параметрами которые будут записаны в $Key и $Value, главное чтобы они соответствовали друг другу.
Смысл к примеру:
$key = название, $value = путь

Пытался сделать так
foreach ($value in $a.values)
{
foreach ($key in $a.keys)
{
write-host "$key соответствует $value"
}
}

Отправлено: 15:00, 25-06-2013 | #5


Ветеран


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

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


rudimko, Так?
Код: Выделить весь код
$a = [ordered] @{

    "123" = "цифры"
    "абв" = "буквы"
    "-=?" = "знаки"

}

$key = $val = @()

$a.keys   | % { $key += $_ }
$a.values | % { $val += $_ }

# проверка

0..($key.count - 1) | % { "$_`: $($key[$_]) = $($val[$_])" }
Если повершелл 2-й версии, то убери "[ordered]"
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:23, 25-06-2013 | #6


Ветеран


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

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


Код: Выделить весь код
$table = @{
    "123" = "цифры";
    "абв" = "буквы";
    "-=?" = "знаки";
}

$table.Keys | foreach {
    Write-Host "Key: $_, Value: $($table.Item($_))"
}
rudimko, Вы хотите менять не только значения в хэш-таблице, но и ключи? Я правильно Вас понял?
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:06, 25-06-2013 | #7


Пользователь


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

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


Iska, ага, что-то вроде того, но мне надо еще занести в отдельную переменную.

Что вообще я пытаюсь изобразить:

$hashPath = @{
"Server1" = "\\server1\share";
"Server2" = "\\server2\share";
}

$tempDir = "d:\temp"
$backupDir = "d:\fileServer_backup"

if (-not (test-path "$env:ProgramFiles\7-Zip\7z.exe"))
{
Write-Host "$env:ProgramFiles\7-Zip\7z.exe не обнаружен."
}
set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"

sz a -tzip -w"$tempDir" "$backupDir\server1\share\archive.zip" "\\server1\share\*"
sz a -tzip -w"$tempDir" "$backupDir\server2\share\archive.zip" "\\server2\share\*"

Но вот чтобы не писать по сто раз команду "sz...", хотелось бы собирать данные из коллекции, чтобы архивирование проходило одной строчкой с перебором.
"$backupDir\server2\share\archive.zip" - подчеркнутое бралось из $hashPath.Values
"\\server2\share\*" - из $hashPath.Keys

Отправлено: 18:40, 25-06-2013 | #8


Ветеран


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

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


Цитата rudimko:
Но вот чтобы не писать по сто раз команду "sz..." »
Ну так и прогони через цикл именнованный массив (хоть можно обойтись и простым) $hashPath:
Код: Выделить весь код
$hashPath = @{

    "Server1" = "\\server1\share";
    "Server2" = "\\server2\share";

}

$hashpath.keys    | % { "делаю что-то с этой шарой $($_)" }
$hashpath.values | % { "делаю что-то с этой шарой $($_)" }

Последний раз редактировалось Foreigner, 25-06-2013 в 19:37.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:07, 25-06-2013 | #9


Пользователь


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

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


Foreigner, Спасибо, как вариант очень годно...
Но хотелось бы еще как-то использовать foreach, чтобы при переборе параметров, в переменную $key присваивались значения из $hashPath.Keys и значению $value присваивались значения из $hashPath.Values, ПО ПОРЯДКУ!!!. Это даже уже для общего образования надо понять.

Добавил чуть попозже:
Блин, как я читал? Между строк, наверное. Iska, спасибо.

Последний раз редактировалось rudimko, 25-06-2013 в 19:24.


Отправлено: 19:19, 25-06-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Обработка команды в CMD через VBS KaKTuZ49 Скриптовые языки администрирования Windows 2 12-12-2011 14:37
[решено] Добавление своей коллекции шрифтов при установке WindowsXP projectsoft Автоматическая установка Windows 2000/XP/2003 16 21-09-2010 07:01
.NET - Перекрытие области видимости в цикле foreach Delirium Программирование и базы данных 2 18-09-2010 02:06
Обработка субдоменов через .htaccess Dimonweb Вебмастеру 3 08-02-2007 21:40




 
Переход