Jump to content
Sign in to follow this  
PeterAtkin

[Solved] Variable to point to a Variable

Recommended Posts

PeterAtkin

Seems the peice of code below does not work as I had expected, the $var only returns "$objItem.MACAddress(0)" and not the mac address as expected, any ideas.

$var = GetLANobject("$objItem.MACAddress(0)")
MsgBox(1, "Mac", $var)

Func GetLANobject($wmiobject)
Local $colItems = ""
Local $strComputer = "localhost"
Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration", "WQL", 0x10 + 0x20)
If IsObj($colItems) Then
  For $objItem In $colItems
   If (StringLen($objItem.IPAddress(0)) > 3) And (StringLen($wmiobject) > 3) Then
    If @IPAddress1 = $objItem.IPAddress(0) Then Return $wmiobject
    If @IPAddress2 = $objItem.IPAddress(0) Then Return $wmiobject
    If @IPAddress3 = $objItem.IPAddress(0) Then Return $wmiobject
    If @IPAddress4 = $objItem.IPAddress(0) Then Return $wmiobject
   EndIf
   ;MsgBox(1, $objItem.IPAddress(0), $wmiobject)
  Next
Else
  Return "1" ; if you dont have IPSubnet
EndIf
EndFunc   ;==>GetLANobject

Fully working code of what I am trying to achive above.

Local $gateway = GetLanGW()

Func GetLANMACAddress()
Local $colItems = ""
Local $strComputer = "localhost"
Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration", "WQL", 0x10 + 0x20)
If IsObj($colItems) Then
  For $objItem In $colItems
   If (StringLen($objItem.IPAddress(0)) > 3) And (StringLen($objItem.MACAddress(0)) > 3) Then
    If @IPAddress1 = $objItem.IPAddress(0) Then Return $objItem.MACAddress(0)
    If @IPAddress2 = $objItem.IPAddress(0) Then Return $objItem.MACAddress(0)
    If @IPAddress3 = $objItem.IPAddress(0) Then Return $objItem.MACAddress(0)
    If @IPAddress4 = $objItem.IPAddress(0) Then Return $objItem.MACAddress(0)
   EndIf
  Next
Else
  Return "N/A" ; if you dont have IPSubnet
EndIf
EndFunc   ;==>GetLANMACAddress
Edited by PeterAtkin

[topic='115020'] AD Domain Logon Script[/topic]

Share this post


Link to post
Share on other sites
Pain

Like this?

MsgBox(0, "", GetLANMACAddress("$objItem.MACAddress(0)"))

Func GetLANMACAddress($obj)
 Local $colItems = ""
 Local $strComputer = "localhost"
 Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
 Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration", "WQL", 0x10 + 0x20)
 If IsObj($colItems) Then
  For $objItem In $colItems
   If (StringLen($objItem.IPAddress(0)) > 3) And (StringLen(Execute($obj)) > 3) Then
    If @IPAddress1 = $objItem.IPAddress(0) Then Return Execute($obj)
    If @IPAddress2 = $objItem.IPAddress(0) Then Return Execute($obj)
    If @IPAddress3 = $objItem.IPAddress(0) Then Return Execute($obj)
    If @IPAddress4 = $objItem.IPAddress(0) Then Return Execute($obj)
   EndIf
  Next
 Else
  Return "N/A" ; if you dont have IPSubnet
 EndIf
EndFunc   ;==>GetLANMACAddress

Perhaps you'll like to change the name, I used the name of the working example when I modified it.

Edited by Pain

Share this post


Link to post
Share on other sites
PeterAtkin

Wow that was fast, worked a real treat, now another interresting one I tried to use the execute on an array did not work out as expected when I read up on the help file it did not seem to have an array limitation, as you can tell i am lacking some basic fundamental knowledge on how to handle variables so forgive my ignorance, that been said your example has been most enlightening and I was able to convert 5 quite large routine into on small one, so once again thanks.

Now the issue below, I want to join the array variable $obj with "[$i][1]" so it will become in this example "$network_printers[$i][1]" for instance, I looked for verious ways to join these toegther but so far to no avail, the important thing is that the end variable "$network_printers[$i][1]" is reconised as an array, is this possible?

read_array($vars_file, "Printers", $network_printers)

Func read_array($ini_file, $ini_section, $obj)
If FileExists($ini_file) Then
  $var = IniReadSection($ini_file, $ini_section)
  If @error Then
   MsgBox(4096, "Error", "Unable to read section.")
  Else
   For $i = 1 To $var[0][0]
    $var1 = $obj "[$i][1]"; = $var[$i][1]
    $var2 = $obj "[$i][0]"; = $var[$i][0]
    MsgBox(4096, "var", $var1 & @CRLF & $var2)
    ;MsgBox(4096, "Number of Printers :" & $var[0][0], "Key: " & $network_printers[$i][0] & @CRLF & "Value: " & $network_printers[$i][1])
    Exit
   Next
   $dvar = $var[0][0]
   Return $dvar
  EndIf
Else
  $error_code = 1
  _put_event(1, "The INI file " & $ini_file & " may not exist or the section " & $ini_section & " within may not exist", @error)
EndIf
EndFunc   ;==>read_array

Original working code

Func _add_network_printers()
For $j = 1 To read_array("vars.ini","Printers")
MsgBox(4096, "Number of Printers :" & $number_of_network_printers, "Key: " & $network_printers[$j][0] & @CRLF & "Value: " & $network_printers[$j][1])
$printer= $network_printers[$j][1]
_PrinterAdd($printer, 0)
Next
EndFunc   ;==>_add_network_printers

Func read_file_into_array($ini_file, $ini_section)
If FileExists($ini_file) Then
  $var = IniReadSection($ini_file, $ini_section)
  If @error Then
   MsgBox(4096, "Error", "Unable to read section.")
  Else
   For $i = 1 To $var[0][0]
    $network_printers[$i][1] = $var[$i][1]
    $network_printers[$i][0] = $var[$i][0]
    MsgBox(4096, "Number of Printers :" & $var[0][0], "Key: " & $network_printers[$i][0] & @CRLF & "Value: " & $network_printers[$i][1])
   Next
   $number_of_network_printers = $var[0][0]
   Return $number_of_network_printers
  EndIf
Else
   $error_code = 1
   _put_event(1, "The INI file "  & $ini_file & " may not exist or the section " & $ini_section & " within may not exist", @error)
EndIf
EndFunc   ;==>read_host_file_into_array
Edited by PeterAtkin

[topic='115020'] AD Domain Logon Script[/topic]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×