PDA

Показать полную графическую версию : [решено] Проблема с формированием массива


nwss
21-01-2023, 17:32
Не понимаю как формируется 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
Рубрика: сам спросил - сам ответил.
Как обычно в прекрасном 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
nwss, в функциональном программировании, есть хорошее общее правило:
если есть возможность написать функцию детерминированной (ещё их называют "чистыми"), то так и делайте.

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




© OSzone.net 2001-2012