Как использовать переменные из массива поочерёдно (Powershell)?

Ссылка скопирована
24 февраля 2026 1 ответ

Есть небольшой скрипт:
$pc_number = (Get-Content C:testpc_name_stm.txt)
$user_name = (Get-Content C:teststm_name.txt)
New-Item -ItemType SymbolicLink -Path "\$pc_numberc$Users$user_nameDesktopПолезные_ссылки_СТМ" -Target "\192.168.123.220SharedСТМПолезные_ссылки_СТМ"

Он должен брать номер компьютера и одного .txt файла, имя пользователя из второго и создавать ярлык папки на рабочем столе пользователя. В .txt файлах записано сразу несколько номеров ПК и имён пользователей, около 25.
На данный момент при запуске скрипта он использует все номера пк и имена учёток сразу.

Как сделать что бы он взял первую строку и первого .txt, первую из второго .txt, провёл операцию для них, а потом начал поочерёдно идти по строкам дальше, проведя в сумме 25 операций?

UPD: найдена часть проблемы, при использовании переменной с "$var" с двойными кавычками строки теряются и весь массив записывается одной строкой, вот только как при указании пути убрать кавычки.

Дополнительно:

Вам уже был дан ответ в предыдущем вопросе.

  • При использовании данных .txt файлов с другими командами (тестировал на mkdir) создаёт много папок с названиями, а не одну с перебором из всех имён.
  • Alexey Dmitriev, читать про кавычки и команду foreach очень обширный ответ. Есть решение как конкретно в этом скрипте получить нужный результат?
  • IT_Otdel, при такой постановке задачи - идти на фрилансим и платить специалисту. И прочитать п.5.12 правила этого ресурса, которые вероятно ваш вопрос нарушает.
    Просить готовое решение здесь не принято.
  • Alexey Dmitriev, согласен что вопрос несколько конкретизирован, но в данном случае это приводится только в роли примера, вопрос сводится к:
    "Как использовать в пути файла массив переменных, что бы он корректно отрабатывал, при применении двойных кавычек массив сливается в сплошной текст"
    Такой вопрос уже не единичный случай конкретной задачи, а общий вопрос по работе инструмента.

    А ответ "читать в гугле про кавычки" в данном случае не сильно поможет, информации очень много и выцепить оттуда необходимую для решения задачи тяжело.

  • IT_Otdel, если в переменной массив данных - то его необходимо запускать в цикле ForEach. Описания в гугле по foreach powershell довольно внятные.
    Пробуйте, спрашивайте, если что-то не получится.
  • IT_Otdel, Я вам привёл пример в одном из предыдущих вопросов, там где про import/export csv
    В том числе использование для этого foreach-object

    Ваш подход с двумя массивами только всё сильно осложнит. в powershell нет аналога питоновского zip

  • IT_Otdel, похоже ошиблись сайтом. вам на фриланс
  • Для выполнения операций поочерёдно с использованием переменных из массива в PowerShell, вы можете использовать цикл ForEach-Object или foreach. В вашем случае, когда у вас есть два файла с данными, и вы хотите создать символические ссылки для каждой пары номера ПК и имени пользователя, скрипт может выглядеть следующим образом:

    $pc_numbers = Get-Content 'C:testpc_name_stm.txt' $user_names = Get-Content 'C:teststm_name.txt'  for ($i = 0; $i -lt $pc_numbers.Length; $i++) {     $pc_number = $pc_numbers[$i]     $user_name = $user_names[$i]     $path = "\$pc_numberc$Users$user_nameDesktopПолезные_ссылки_СТМ"     $target = "\192.168.123.220SharedСТМПолезные_ссылки_СТМ"          New-Item -ItemType SymbolicLink -Path $path -Target $target }

    $pc_numbers = Get-Content 'C:testpc_name_stm.txt' $user_names = Get-Content 'C:teststm_name.txt' for ($i = 0; $i -lt $pc_numbers.Length; $i++) { $pc_number = $pc_numbers[$i] $user_name = $user_names[$i] $path = "\$pc_numberc$Users$user_nameDesktopПолезные_ссылки_СТМ" $target = "\192.168.123.220SharedСТМПолезные_ссылки_СТМ" New-Item -ItemType SymbolicLink -Path $path -Target $target }

    Этот скрипт считывает данные из обоих файлов и сохраняет их в массивы $pc_numbers и $user_names. Затем он использует цикл for, чтобы пройти по каждому элементу массивов, создавая символическую ссылку для каждой пары номера ПК и имени пользователя.

    Обратите внимание, что если количество строк в файлах различается, это может привести к ошибкам. Убедитесь, что количество строк в обоих файлах совпадает.

    Если вы столкнулись с проблемой потери строк при использовании переменных в двойных кавычках, убедитесь, что вы правильно обращаетесь к элементам массива, как показано в примере выше, где $pc_number и $user_name являются отдельными элементами массива, а не всем массивом сразу.

    • Спасибо!
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Алексей Денисов Ответ

    Для использования переменных из массива поочередно в Powershell можно воспользоваться циклом foreach. Для начала необходимо создать массив переменных, например:

    $myArray = @("apple", "banana", "cherry", "date")

    Затем можно использовать цикл foreach для обращения к каждой переменной массива поочередно:

    foreach ($item in $myArray) {
    Write-Host $item
    }

    Этот код выведет на экран каждую переменную массива $myArray поочередно. Также можно использовать индексы элементов массива для обращения к ним:

    for ($i=0; $i -lt $myArray.Length; $i++) {
    Write-Host $myArray[$i]
    }

    Этот код также выведет на экран каждую переменную массива $myArray поочередно. Кроме того, можно использовать условия и другие операции с переменными массива внутри цикла foreach для выполнения различных действий с ними.

    Таким образом, использование переменных из массива поочередно в Powershell может быть достигнуто с помощью цикла foreach и индексов элементов массива, что позволяет эффективно обрабатывать и работать с данными в массиве.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно