Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проблема с формированием массива (http://forum.oszone.net/showthread.php?t=352870)

nwss 21-01-2023 17:32 3001470

Проблема с формированием массива
 
Не понимаю как формируется array.
Делаю функцию, которая будет запускать 10 нужных процессов и выводить их PID в процессе создания.
Я понимаю как сделать вывод уже после их запуска - это намного проще, но я хочу именно выводить ПИД после каждого запуска.
Вроде сделал и (как мне кажется) должно работать, но выдает результаты c повторами. Не могу понять почему.
Код:

function Start-Tors
{
  # Запускаем в цикле 10 соединений Тора
  for ($i = 1;$i -le 10;$i++)
  {
    Start-Sleep -Seconds 1
    Write-Host -ForegroundColor Green -NoNewline -Object "$i. "
    Start-Process -FilePath $TorExe -WorkingDirectory $TorDirectory -ArgumentList "-f $TorConfigs\torrc.$i" -WindowStyle Hidden
    Write-Host -ForegroundColor Yellow -NoNewline -Object 'PID: '
    $Tors = Get-Process -Name tor-real
    [array]$TorsIDs = 1111
    for ($n = 0;$n -lt $Tors.Length + 1;$n++)
    {
      if (-not($Tors.Id[$n] -in $TorsIDs))
      {
        #$Tors[$n] -in $TorsIDs
        $TorsIDs += $Tors.Id[$n]
      }
    }
    $a = $TorsIDs[$i]
    Write-Host -ForegroundColor Cyan -Object $a
  }
}

Вывод
Скрытый текст

PS C:\Users\Vlados> . 'C:\Users\Vlados\Desktop\scripts\MT.ps1'
1. PID: 1372
2. PID: 2800
3. PID: 9352
4. PID: 9352
5. PID: 10184
6. PID: 10216
7. PID: 10216
8. PID: 10216
9. PID: 10216
10. PID: 10216

PS C:\Users\Vlados> . 'C:\Users\Vlados\Desktop\scripts\MT.ps1'
1. PID: 4228
2. PID: 5624
3. PID: 9576
4. PID: 9576
5. PID: 9576
6. PID: 9576
7. PID: 9576
8. PID: 9576
9. PID: 9576
10. PID: 9576

nwss 21-01-2023 17:47 3001471

Рубрика: сам спросил - сам ответил.
Как обычно в прекрасном PS есть вещи вроде -PassThru избавляющие от колхоза.

Код:

function Start-Tors
{
  # Запускаем в цикле 10 соединений Тора
  for ($i = 1;$i -le 10;$i++)
  {
    Write-Host -ForegroundColor Green -NoNewline -Object "$i. "
    $App = Start-Process -FilePath $TorExe -WorkingDirectory $TorDirectory -ArgumentList "-f $TorConfigs\torrc.$i" -WindowStyle Hidden -PassThru
    Write-Host -ForegroundColor Yellow -NoNewline -Object 'PID: '
    Write-Host -ForegroundColor Cyan -Object $App.Id
  }
}


YuS_2 21-01-2023 19:28 3001477

nwss, в функциональном программировании, есть хорошее общее правило:
если есть возможность написать функцию детерминированной (ещё их называют "чистыми"), то так и делайте.

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


Время: 23:53.

Время: 23:53.
© OSzone.net 2001-