TheGreatandMightyMe Posted August 27, 2007 Share Posted August 27, 2007 I need to generate a list of all the available network connections on a given pc. This script needs to work on a variety of systems, but they all run xp so the registry would be the best constant, I think. I can get very close to the directory where the names are stored but the last two folders have different name depending on the machine. This is what I was trying. $connections = RegRead("HKEY_LOCAL_MACHINE\system\controlset001\control\network\*\*\connections", "Name") MsgBox(4096, "connections are:", $connections) Note: This is just part of a test script. It is not the full thing because I'm not going to move forward till I figure out this part. The problem is the any references don't seem to work. Is there a better way to do this. Thanks in advance, Me Link to comment Share on other sites More sharing options...
weaponx Posted August 27, 2007 Share Posted August 27, 2007 When you say "network connections", what are you wanting to retrieve? Physical hardware? Protocols? Regardless, the registry is probably the worst way to go about doing this. Link to comment Share on other sites More sharing options...
TheGreatandMightyMe Posted August 27, 2007 Author Share Posted August 27, 2007 When you say "network connections", what are you wanting to retrieve? Physical hardware? Protocols?Regardless, the registry is probably the worst way to go about doing this.I need the names of the connections (ex: Local Area Connection or Local Area Connection 2 ). If the registry is the worst way to do this what would work better. I only say I think the registry is good because it is such a constant between systems. Link to comment Share on other sites More sharing options...
weaponx Posted August 27, 2007 Share Posted August 27, 2007 Do you need to use the results in a script? If not you can do: (From the command prompt) netsh interface showinterface If you need to use the results in a script I think WMI would be the next best thing. Link to comment Share on other sites More sharing options...
TheGreatandMightyMe Posted August 27, 2007 Author Share Posted August 27, 2007 That command did not work for me (tried it manually). The results do need to go into a script. I found a command to export the entire directory from the registry and I know where in the text it lists the connection names. Right now I'm trying to find a way to make it pull out the names. I'm going to attach a copy of what the registry export looks like. The line I need to pull from is the line that says: "Name"="Local Area Connection 2" and "Name"="Local Area Connection" I need it to pull out Local Area Connection 2 and Local Area Connection or whatever the name of the connection happens to be. Thanks again for the help.networkkeys.txt Link to comment Share on other sites More sharing options...
flyingboz Posted August 27, 2007 Share Posted August 27, 2007 try from cmd...NETSH INTERFACE SHOW INTERFACEignore Internal and LoopbackA second vote for Larry's approach.. It beats WMI from a performance / reliability standpoint hands down. Reading the help file before you post... Not only will it make you look smarter, it will make you smarter. Link to comment Share on other sites More sharing options...
TheGreatandMightyMe Posted August 28, 2007 Author Share Posted August 28, 2007 A second vote for Larry's approach.. It beats WMI from a performance / reliability standpoint hands down.Yes that does work. Now how can I take that data and use it inside a script. Link to comment Share on other sites More sharing options...
weaponx Posted August 28, 2007 Share Posted August 28, 2007 Do you need to use the results in a script? If not you can do:(From the command prompt)netsh interface show interfaceIf you need to use the results in a script I think WMI would be the next best thing.Ah crap I forgot a space in there. Link to comment Share on other sites More sharing options...
TheGreatandMightyMe Posted August 28, 2007 Author Share Posted August 28, 2007 Ah crap I forgot a space in there.Is there some way I can use that data in a script? Link to comment Share on other sites More sharing options...
weaponx Posted August 28, 2007 Share Posted August 28, 2007 This is the best I could come up with: #include #include $process = Run("netsh interface show interface", @ScriptDir, @SW_HIDE, $STDOUT_CHILD) ;Wait for netsh to complete before showing results While ProcessExists ($process) Sleep(250) Wend $line = StdoutRead($process) $array = StringSplit ( StringStripWS(StringStripCR($line), 2), @LF) _ArrayDisplay ($array) Link to comment Share on other sites More sharing options...
TheGreatandMightyMe Posted August 28, 2007 Author Share Posted August 28, 2007 $STDOUT_CHILD = 2 ToolTip("working...") $a = Run("netsh interface show interface","",@SW_HIDE,$STDOUT_CHILD) $buffer = "" While ProcessExists($a) $buffer &= StdoutRead($a) Sleep(1) WEnd ToolTip("") MsgBox(4096,"",$buffer) Thanks! This works perfectly. It returns exactly what I needed. You guys are awesome. You helped me really fast the first time I ever came on here. These are really good forums. I think I'll stick around. Link to comment Share on other sites More sharing options...
weaponx Posted August 28, 2007 Share Posted August 28, 2007 Because I refuse to be outdone, this will split all the columns off into a multidimensional array: #include <Array.au3> #include <Constants.au3> Dim $connections[1][3] $process = Run("netsh interface show interface", @ScriptDir, @SW_HIDE, $STDOUT_CHILD) ;Wait for netsh to complete before showing results While ProcessExists ($process) Sleep(250) Wend $line = StdoutRead($process) $array = StringSplit ( StringStripWS(StringStripCR($line), 2), @LF) _ArrayDisplay ($array) $Y = 0 For $X = 4 to $array[0] If $Y > 0 Then Redim $connections[$Y + 1][3] EndIf $split = StringSplit(StringStripWS($array[$X], 4), " ") ;Add State to array $connections[$Y][0] = $split[1] ;Add Type to array $connections[$Y][1] = $split[2] ;Add Interface $connections[$Y][2] = _ArrayToString ( $split, " ", 3) $Y += 1 Next _ArrayDisplay ($connections) Link to comment Share on other sites More sharing options...
TheGreatandMightyMe Posted August 28, 2007 Author Share Posted August 28, 2007 (edited) Because I refuse to be outdone, this will split all the columns off into a multidimensional array: #include <Array.au3> #include <Constants.au3> Dim $connections[1][3] $process = Run("netsh interface show interface", @ScriptDir, @SW_HIDE, $STDOUT_CHILD) ;Wait for netsh to complete before showing results While ProcessExists ($process) Sleep(250) Wend $line = StdoutRead($process) $array = StringSplit ( StringStripWS(StringStripCR($line), 2), @LF) _ArrayDisplay ($array) $Y = 0 For $X = 4 to $array[0] If $Y > 0 Then Redim $connections[$Y + 1][3] EndIf $split = StringSplit(StringStripWS($array[$X], 4), " ") ;Add State to array $connections[$Y][0] = $split[1] ;Add Type to array $connections[$Y][1] = $split[2] ;Add Interface $connections[$Y][2] = _ArrayToString ( $split, " ", 3) $Y += 1 Next _ArrayDisplay ($connections) Wait a sec... Didn't larry's code already use an array. The diplay it gave looks like a multi dimensional array to me. I think I got lost some where. EDIT: Now I see that larry's $buffer variable is not an array. Why did it display in a format other than a straight line? Edited August 28, 2007 by TheGreatandMightyMe Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted August 28, 2007 Moderators Share Posted August 28, 2007 Wait a sec... Didn't larry's code already use an array. The diplay it gave looks like a multi dimensional array to me. I think I got lost some where.EDIT: Now I see that larry's $buffer variable is not an array. Why did it display in a format other than a straight line?The stdout probably truncates at the null char and adds a CRLF (Never really stopped to think about it before). Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now