Вверх ↑
Этот топик читают: Гость
Ответов: 36
Рейтинг: 2
#1: 2014-04-29 14:45:47 ЛС | профиль | цитата
Помогите исправить скрипт, который настраивает сетевую карту, чтобы он работал с массивом из вне. На схеме верхняя часть которую я использую у себя работает, но при различном количестве айпи добавлять удалять точки неудобно. Нижняя часть схемы не работает, ошибка в работе с массивами.

code_33495.txt
карма: 1

0
файлы: 1code_33495.txt [3.4KB] [160]
Ответов: 1343
Рейтинг: 31
#2: 2014-04-29 15:56:22 ЛС | профиль | цитата
полагаю надо так?

Add(MainForm,3532839,301,371)
{
Caption="а?б?аИаМаЕб? аИб?аПаОаЛб?аЗаОаВаАаНаИб? ArrayEnum"
}
Add(Button,3059601,266,574)
{
Left=105
Top=59
Caption="1"
link(onClick,14963676:doWork,[])
}
Add(Memory,8782635,406,441)
{
Default=String(8.8.8.8)
}
Add(Memory,7991434,448,441)
{
Default=String(8.8.4.4)
}
Add(Message,6705591,406,574)
{
}
Add(Memory,2201513,308,441)
{
Default=String(10.10.4.36)
}
Add(VBJScript,14963676,343,574)
{
WorkPoints=#6:doWork|
EventPoints=#7:onData1|
DataPoints=#3:ip1|3:ip2|4:mask|5:gate1|4:dns1|4:dns2|
Script=#24:Sub doWork (Data, Index)|13:ip1 = sys.ip1|13:ip2 = sys.ip2|15:mask = sys.mask|17:gate1 = sys.gate1|15:dns1 = sys.dns1|15:dns2 = sys.dns2|0:|17:strComputer = "."|112:Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & "ootcimv2")|115:Set colNetCards = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")|20:On Error Resume Next|34:For Each objNetCard in colNetCards|30:arrIPAddress = Array(ip1, ip2)|35:arrSubnetMask = Array(mask, mask) |39:arrGateways = Array(gate1) |42:arrDNSServers = Array(dns1, dns2) |64:errEnable = objNetCard.EnableStatic(arrIPAddress, arrSubnetMask)|49:errGateways = objNetCard.SetGateways(arrGateways)|49:objNetCard.SetDNSServerSearchOrder(arrDNSServers)|4:Next|15:Sys.onData1 "1"|7:End Sub|
UseName=0
link(onData1,6705591:doMessage,[])
link(ip1,11008828:String,[(349,495)(153,495)])
link(ip2,2201513:Value,[(356,524)(314,524)])
link(mask,7808185:Item,[(363,490)(265,490)])
link(gate1,2218602:Item,[])
link(dns1,8782635:Value,[(377,524)(412,524)])
link(dns2,7991434:Value,[(384,539)(454,539)])
}
Add(StrList,16421995,245,364)
{
Strings=#13:255.255.192.0|13:255.255.192.0|13:255.255.192.0|13:255.255.192.0|
}
Add(StrList,2838620,350,364)
{
Strings=#9:10.10.0.1|9:10.10.0.1|9:10.10.0.1|9:10.10.0.1|
}
Add(ArrayRW,7808185,259,441)
{
link(onRead,2218602:doRead,[])
link(Array,16421995:Array,[])
link(Index,1653397:Var2,[])
}
Add(ArrayRW,2218602,364,441)
{
link(Array,2838620:Array,[])
link(Index,1653397:Var3,[(377,425)])
}
Add(GetDataEx,1653397,266,420)
{
Angle=3
link(Data,2682025:Value,[(181,425)])
}
Add(ListBox,11008828,126,371)
{
Left=30
Top=110
Width=170
Height=125
Strings=#9:10.10.4.1|9:10.10.4.2|9:10.10.4.3|9:10.10.4.4|
Point(String)
link(onClick,2682025:doValue,[])
}
Add(Memory,2682025,175,378)
{
link(onData,7808185:doRead,[(233,384)(233,447)])
}
карма: 2

0
файлы: 1code_33496.txt [2.2KB] [181]
Ответов: 36
Рейтинг: 2
#3: 2014-04-29 16:32:40 ЛС | профиль | цитата
Нет это не то, сетевой карте присваивается несколько айпиадресов, т.е сетевому адаптеру должен назначаться весь массив сразу, а такая схема даст только поочередную смену. А мне нужно маштабировать от 1 до 64

как пример кусок кода:

code_33497.txt

Так работает и назначается 16 айпи на сетевую, вот как работать с массивом из вне, в примерах есть но не работает, где то ошибка у меня, а где не могу найти


карма: 1

0
файлы: 1code_33497.txt [2.3KB] [135]
Главный модератор
Ответов: 2999
Рейтинг: 396
#4: 2014-04-29 17:29:30 ЛС | профиль | цитата
tsdima писал(а):

Добавил возможность работы с массивами из скрипта, например:

#bas
var a = sys.Array;
a.Add(666);
a.Set(0, 123);
sys.onEvent(a.Count);
sys.onEvent(a.Get(0));

Примеры в публикаторе: http://www.hiasm.com/sha/shatools.php?q=5&id=157

Конкретно ваш случай:

#bas
...
On Error Resume Next
DIM i
i = 0
For Each objNetCard in colNetCards
arrDNSServers = Array(dns1, dns2)
errEnable = objNetCard.EnableStatic(ip1.get(i), mask)
i = i + 1
...
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 36
Рейтинг: 2
#5: 2014-04-29 19:44:18 ЛС | профиль | цитата
Не получается, сам массив доступен и я могу работать с любым элементом
но в этой строке errEnable = objNetCard.EnableStatic(arrIPAddress, arrSubnetMask) используется сам массив, а не отдельный элемент

В таком исполнении работать не хочет, при этом с точки Sys.onData1 получаю нужный элемент


Sub doWork (Data, Index)
Set ip1 = sys.ip1
Set mask = sys.mask
Set gate1 = sys.gate1
dns1 = sys.dns1
dns2 = sys.dns2
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & " ootcimv2")
Set colNetCards = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
On Error Resume Next
For Each objNetCard in colNetCards
arrDNSServers = Array(dns1, dns2)
errEnable = objNetCard.EnableStatic(ip1, mask)
errGateways = objNetCard.SetGateways(gate1)
objNetCard.SetDNSServerSearchOrder(arrDNSServers)
Next
Sys.onData1 (ip1.get(0))
End Sub


Скрипт который ниже работает, только массив тут собирается внутри скрипта arrIPAddress = Array(ip1, ip2), в чем разница между массивами?


Sub doWork (Data, Index)
ip1 = sys.ip1
ip2 = sys.ip2
mask = sys.mask
gate1 = sys.gate1
dns1 = sys.dns1
dns2 = sys.dns2
arrIPAddress = Array(ip1, ip2)
arrSubnetMask = Array(mask, mask)
arrGateways = Array(gate1)
arrDNSServers = Array(dns1, dns2)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\" & strComputer & " ootcimv2")
Set colNetCards = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")
On Error Resume Next
For Each objNetCard in colNetCards
errEnable = objNetCard.EnableStatic(arrIPAddress, arrSubnetMask)
errGateways = objNetCard.SetGateways(arrGateways)
objNetCard.SetDNSServerSearchOrder(arrDNSServers)
Next
Sys.onData1 "1"
End Sub


Еще раз уточняю сетевая карта одна, а присвоить айпиадресов мне нужно от 1 до 64.
карма: 1

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#6: 2014-04-29 19:54:14 ЛС | профиль | цитата
Попробуйте так:

#bas
...
On Error Resume Next
DIM IPArray()
REDIM IPArray(ip1.Count)
For I = 0 To (ip1.Count - 1)
IPArray(I) = ip1.Get(I)
Next
For Each objNetCard in colNetCards
arrDNSServers = Array(dns1, dns2)
errEnable = objNetCard.EnableStatic(IPArray, mask)
...
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 36
Рейтинг: 2
#7: 2014-04-29 21:56:24 ЛС | профиль | цитата
Не работает, может с типами что то, пошел другим путем, по формату создаю скрипт и выполняю

code_33498.txt
карма: 1

0
файлы: 1code_33498.txt [4.5KB] [143]
Главный модератор
Ответов: 2999
Рейтинг: 396
#8: 2014-04-29 23:40:14 ЛС | профиль | цитата
EnableStatic of class Win32_NetworkAdapterConfiguration требует на входе аргументы статического массива, а не динамического.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Гость
Ответов: 17029
Рейтинг: 0
#9: 2014-04-30 17:44:42 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2025-01-09 23:46:12
карма: 0

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#10: 2014-04-30 17:46:09 ЛС | профиль | цитата
Можно:
вот так


Add(MainForm,3532839,56,105)
{
Caption="Пример использования ArrayEnum"
}
Add(Button,9223468,98,105)
{
Left=105
Top=104
Caption="2"
link(onClick,8708597:doWork,[])
}
Add(StrList,16086352,56,35)
{
Strings=#9:10.10.4.1|9:10.10.4.2|9:10.10.4.3|9:10.10.4.4|
}
Add(StrList,16421995,98,35)
{
Strings=#13:255.255.192.0|13:255.255.192.0|13:255.255.192.0|13:255.255.192.0|
}
Add(Message,12373973,182,105)
{
}
Add(StrList,2838620,140,35)
{
Strings=#9:10.10.0.1|
}
Add(VBJScript,8708597,140,105)
{
WorkPoints=#6:doWork|
EventPoints=#7:onData1|
DataPoints=#3:ip1|4:mask|5:gate1|4:dns1|
Script=#24:Sub doWork (Data, Index)|17:Set ip1 = sys.ip1|19:Set mask = sys.mask|21:Set gate1 = sys.gate1|19:Set dns1 = sys.dns1|0:|17:strComputer = "."|112:Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")|115:Set colNetCards = objWMIService.ExecQuery("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True")|21:'On Error Resume Next|15:Dim METRICArray|22:METRICArray = Array(1)|34:For Each objNetCard in colNetCards|82: intResult = objNetCard.EnableStatic(GetStaticArray(ip1), GetStaticArray(mask))|22:Select case intResult|61:Case 0 : MsgBox "Successful completion, no reboot required"|58:Case 1 : MsgBox "Successful completion, reboot required"|58:Case 64 : MsgBox "Method not supported on this platform"|36:Case 65 : MsgBox "Unknown failure"|40:Case 66 : MsgBox "Invalid subnet mask"|85:Case 67 : MsgBox "An error occurred while processing an Instance that was returned"|44:Case 68 : MsgBox "Invalid input parameter"|51:Case 69 : MsgBox "More than 5 gateways specified"|40:Case 70 : MsgBox "Invalid IP address"|47:Case 71 : MsgBox "Invalid gateway IP address"|97:Case 72 : MsgBox "An error occurred while accessing the Registry for the requested information"|40:Case 73 : MsgBox "Invalid domain name"|38:Case 74 : MsgBox "Invalid host name"|61:Case 75 : MsgBox "No primary/secondary WINS server defined"|33:Case 76 : MsgBox "Invalid file"|40:Case 77 : MsgBox "Invalid system path"|37:Case 78 : MsgBox "File copy failed"|47:Case 79 : MsgBox "Invalid security parameter"|55:Case 80 : MsgBox "Unable to configure TCP/IP service"|53:Case 81 : MsgBox "Unable to configure DHCP service"|47:Case 82 : MsgBox "Unable to renew DHCP lease"|49:Case 83 : MsgBox "Unable to release DHCP lease"|46:Case 84 : MsgBox "IP not enabled on adapter"|47:Case 85 : MsgBox "IPX not enabled on adapter"|54:Case 86 : MsgBox "Frame/network number bounds error"|39:Case 87 : MsgBox "Invalid frame type"|43:Case 88 : MsgBox "Invalid network number"|45:Case 89 : MsgBox "Duplicate network number"|44:Case 90 : MsgBox "Parameter out of bounds"|34:Case 91 : MsgBox "Access denied"|34:Case 92 : MsgBox "Out of memory"|35:Case 93 : MsgBox "Already exists"|51:Case 94 : MsgBox "Path, file or object not found"|45:Case 95 : MsgBox "Unable to notify service"|49:Case 96 : MsgBox "Unable to notify DNS service"|47:Case 97 : MsgBox "Interface not configurable"|66:Case 98 : MsgBox "Not all DHCP leases could be released/renewed"|49:Case 100 : MsgBox "DHCP not enabled on adapter"|11:End Select|76: errGateways = objNetCard.SetGateways(GetStaticArray(gate1), METRICArray)|60: objNetCard.SetDNSServerSearchOrder(GetStaticArray(dns1))|4:Next|15:Sys.onData1 "1"|7:End Sub|0:|32:Function GetStaticArray(sys_arr)|13: Dim arr()|28: ReDim arr(sys_arr.Count)|36: For i = 0 To (sys_arr.Count - 1)|31: arr(i) = sys_arr.Get(i)|8: Next|44: GetStaticArray = Split(RTrim(Join(arr)))|12:End Function|
UseName=0
link(onData1,12373973:doMessage,[])
link(ip1,16086352:Array,[(146,92)(76,92)])
link(mask,16421995:Array,[(153,88)(118,88)])
link(gate1,2838620:Array,[])
link(dns1,15414091:Array,[(167,88)(202,88)])
}
Add(StrList,15414091,182,35)
{
Strings=#7:8.8.8.8|7:8.8.4.4|
}
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)