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

Как изменить скрипт, чтобы он обрабатывал строки поочередно из одного .txt файла с номерами ПК и из другого .txt файла с именами пользователей, выполняя 25 операций, начиная с первой строки каждого файла, перед переходом к следующей? В текущий момент скрипт использует все строки сразу.
  • 25 марта 2024 г. 7:19
Ответы на вопрос 2
Для поочередного использования переменных из массива в PowerShell можно использовать цикл `foreach`. Пример:

```powershell
$myArray = @(1, 2, 3, 4, 5)

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

Чтобы изменить скрипт и обрабатывать строки поочередно из двух разных файлов, можно воспользоваться двумя разными циклами `foreach` для каждого файла. Пример:

```powershell
$pcNumbers = Get-Content -Path "pc_numbers.txt"
$userNames = Get-Content -Path "user_names.txt"

$operationsCount = 25
for ($i = 0; $i -lt $operationsCount; $i++) {
    $pcNumber = $pcNumbers[$i]
    $userName = $userNames[$i]

    # Выполнение операций с pcNumber и userName

    Write-Host "Processing PC: $pcNumber, User: $userName"
}
```

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

$pc_numbers = Get-Content 'C:\test\pc_name_stm.txt'
$user_names = Get-Content 'C:\test\stm_name.txt'

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


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

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

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