Here we go...

I've been testing from home dialing into VPN. Seems to work just fine.

As far as I can tell, it doesn't hog resources much. Every four seconds I see a slight jump in CPU utilization. Memory use doesn't look like its climbing. I'll leave it run overnight and let you know tomorrow.

Here's the code...

code:
Break On Cls

$asSubnetList="xxx.xxx.xxx.xxx/255.255.255.0","xxx.xxx.xxx.xxx/255.255.255.0"

$objEvents = GetObject("winmgmts:\\.\root\cimv2").ExecNotificationQuery
("SELECT TargetInstance.Name FROM __InstanceOperationEvent WITHIN "
+"4 WHERE TargetInstance ISA 'Win32_NetworkAdapterConfiguration'")
Do
$objConnectEvent = $objEvents.nextevent
$aIPAddress=$objConnectEvent.TargetInstance.IPAddress
For Each $sAddress in $aIPAddress
If VarType($sAddress)=8
$bFoundMatch=IsInIPRange($sAddress,$asSubnetList)
EndIf
Next
If $bFoundMatch=1
Sleep 5
Run "KiX32 \\testserver\kixtest\LogonScriptSmpl.kix"
EndIf
Until @ERROR

function isiniprange($ipaddress,$iprangearray)
Dim $iprange, $networkid, $subnetmask, $bit

if $ipaddress=''
exit 87
endif

$ipaddress=binaryip($ipaddress)

for each $iprange in $iprangearray

if instr($iprange,'/')
$iprange=split($iprange,'/')
$networkid=binaryip($iprange[0])

if instr($iprange[1],'.')
$subnetmask=binaryip($iprange[1])
else
$subnetmask=''
for $bit=1 to val($iprange[1])
$subnetmask=$subnetmask+'1'
next
for $bit=(val($iprange[1])+1) to 32
$subnetmask=$subnetmask+'0'
next
endif

if isinsubnet($ipaddress,$networkid,$subnetmask)
$isiniprange=1
return
else
$isiniprange=0
endif
endif
next
endfunction

function isinsubnet($ipaddress,$networkid,$subnetmask)
Dim $maskedip, $bit

if instr($ipaddress,'.')
$ipaddress=binaryip($ipaddress)
endif
if instr($networkid,'.')
$networkid=binaryip($networkid)
endif
if instr($subnetmask,'.')
$subnetmask=binaryip($subnetmask)
endif

$maskedip=ipmask($ipaddress,$subnetmask)
if $maskedip=$networkid
$isinsubnet = 1
else
$isinsubnet = 0
endif
endfunction

function ipmask($ipaddress1, $ipaddress2)
Dim $bit
if instr($ipaddress1,'.') or instr($ipaddress2,'.')
or len($ipaddress1)<>32 or len($ipaddress2)<>32
exit 87
endif
$ipmask=''
for $bit=1 to 32
$ipmask=$ipmask+(val(substr($ipaddress1,$bit,1)) & val(substr($ipaddress2,$bit,1)))
next
endfunction

function BinaryIP($IP)
DIM $item, $bitsize, $octet
$bitsize = 128
$ip = split($IP,".")
select
case UBOUND($ip) <> 3
$BinaryIP = 0
exit(87)
case 1
for each $octet in $ip
if VAL($octet) <0 OR VAL($octet) > 255
$BinaryIP = 0
exit(87)
endif
while $bitsize > 0
if val($octet) & $bitsize
$Binary = $Binary + "1"
else
$Binary = $Binary + "0"
endif
$bitsize = $bitsize / 2
loop
$binaryIP = $binaryIP + "$binary"
$bitsize = 128
$binary = ""
next
endselect
exit(0)
endfunction