PowerShell - [решено] Проблема с формированием массива

Ответить
Аватара пользователя
nwss

PowerShell - [решено] Проблема с формированием массива

Сообщение nwss »

Не понимаю как формируется 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
  }
}

Вывод



Скрытый текст

[spoiler]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[/spoiler]
Аватара пользователя
nwss

Re: PowerShell - [решено] Проблема с формированием массива

Сообщение nwss »

Рубрика: сам спросил - сам ответил.

Как обычно в прекрасном 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

Re: PowerShell - [решено] Проблема с формированием массива

Сообщение YuS_2 »

nwss, в функциональном программировании, есть хорошее общее правило:

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



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

Вернуться в «Скриптовые языки администрирования Windows»