我正在尝试向函数内的全局数组添加值。该函数调用是多线程的,并且该函数的多个实例被即时调用
每个线程都会修改该数组,但会覆盖其他线程写入该数组的数据。
我的代码如下:
Function QuickPing {
param ($LastByte)
$P = New-Object -TypeName "System.Net.NetworkInformation.Ping"
if(($P.Send("200.200.200.$LastByte")).status -eq "success"){
echo "this one responded 200.200.200.$LastByte"
$global:alive+="200.200.200.$LastByte"
$global:alive
}
}
$global:alive = @()
1..255 | Start-Parallel -Command QuickPing -MaxThreads 500
write-host $alive
,输出如下:
PS C:\WINDOWS\system32> E:\scripts_during_phase2\ping_array.ps1
this one responded 200.200.200.1
200.200.200.1
this one responded 200.200.200.17
200.200.200.17
this one responded 200.200.200.254
200.200.200.254
PS C:\WINDOWS\system32> $alive
PS C:\WINDOWS\system32>
如上所示,每次调用该函数时,$ alive数组中的值都会被覆盖。
运行$alive
命令时如何确保200.200.200.1,200.200.200.17,200.200.200.254
包含write-host $alive