JayHawkfl Posted June 10, 2019 Share Posted June 10, 2019 Hello friends, Long time no see, sorry I've been gone, and only come back when I need help. I'm trying to grab serial numbers to help with inventory. We have multiple locations with 4 to 14 devices. Inventory has never been a high priority, but I was hired to try to tackle it. I am getting a error code of 0, which I believe means the cmd didn't run successfully. $sclientname comes from a ping test that part is working. $admin account and password comes from a gui input. I've tested that those are good as well. So I'm doing something wrong with my send. Maybe @comspec would work better? I tried it, and I'm getting the same issue. I'm missing something here. Thanks for any help provided, please let me know if more code is needed to work through this. $domain = @LogonDNSDomain ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; $sWMICquery = "wmic /node:" & $sClientName & " /user:" & $adminAccount & " /password:" & $adminPassword & " bios get serialnumber /format:value" Local $iPID = RunAs($adminAccount,$domain,$adminPassword,2,'cmd.exe',$sWMICquery) Thanks for your time Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted June 10, 2019 Share Posted June 10, 2019 (edited) @JayHawkfl Without "something" that runs your command, it's quite normal that RunAs() function doesn't return anything. You could use @ComSpec as well as the WMIC object to do such thing. Here's an example with the first method: #include <AutoItConstants.au3> #include <StringConstants.au3> Global $strCommand = "wmic bios get serialnumber /format:value", _ $intPID, _ $strStdOutput, _ $strSerialNumber $intPID = Run(@ComSpec & " /c " & $strCommand, "", @SW_HIDE, $STDOUT_CHILD) If @error Then ConsoleWrite("!Error running cmd! Error: " & @error & @CRLF) Else While 1 $strStdOutput &= StdoutRead($intPID) If @error Then ExitLoop WEnd $strSerialNumber = StringRegExp($strStdOutput, 'SerialNumber=(\V+)', $STR_REGEXPARRAYMATCH)[0] ConsoleWrite($strSerialNumber & @CRLF) EndIf Edited June 10, 2019 by FrancescoDiMuro Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
JayHawkfl Posted June 11, 2019 Author Share Posted June 11, 2019 (edited) Edit - I think I got it, give me 20 minutes to make my changes I had it. I got it working, and then I changed something and now I don't know what I've done. I've tried it with and without the ' /c'. I think that part needs to be out for what ever reason. I got it to work with a cmd line export. RunWait(@ComSpec & 'wmic /node:' & $sClientName &' bios get serialnumber > c:\users\abs\desktop\'&$sClientName&' serial.txt',"", @SW_HIDE) But it's giving me 0 error codes again. $sWMICquery ="wmic /node:" & $sClientName & " bios get serialnumber" MsgBox(0,'',$sWMICquery) ;$sWMICquery = "wmic bios get serialnumber" Local $iPID = RunWait(@ComSpec & ' /c' & $sWMICquery,"",@SW_SHOW) MsgBox(0,'153',$iPID) While ProcessExists($iPID) $sOutput = StdoutRead($iPID) WEnd MsgBox(0,'157',$iPID) I'll keep going on it shortly, I just gotta walk away from this for a minute. Thanks again for any and all help. Edited June 11, 2019 by JayHawkfl I think I got it working Thanks for your time Link to comment Share on other sites More sharing options...
JayHawkfl Posted June 11, 2019 Author Share Posted June 11, 2019 this is a combination of my ping set up and cmd line pull from below. I probably still have some extraneous lines in here from my last version but it works. I will fine tune it in the coming weeks, but I gotta get this project started before my bosses rip me up. Thanks for the help @francescodimuro expandcollapse popup#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Outfile=QuickInv0_1.exe #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;This will grab information from the network from our network spread sheets ;Things to clean up ;After the second while loop, the ip results array will be larger then needed. https://www.autoitscript.com/forum/topic/132027-array-delete-blank-element/ Hannes08 had a good idea posted august 18 of 2011 ;Add 30 second timer after the msgbox indicating timer #include <Array.au3> ; Required for _ArrayDisplay only. #include <AutoItConstants.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <File.au3> #include <GUIConstantsEx.au3> #include <Inet.au3> #include <MsgBoxConstants.au3> #include <StaticConstants.au3> #include <WinAPIFiles.au3> #include <WindowsConstants.au3> Global $VersionNumber = "1.0" Global $varArp ;store results from Arp CMD Global $arrayArp Global $sFilePath = @ScriptDir ; Search the current script directory. Global $localIP = @IPAddress1 Global $varOctet1 Global $varOctet2 Global $varOctet3 Global $varOctet4 Global $i = 151 ;counter Global $m = 1 ;secondary counter Global $IParray[8] = ['192','168','200','21'] Global $pingTestResult[255] Global $IPListArray[255] Global $deviceName[0] Global $filePathExcel = @ScriptDir& "\_netExport.html" Global $deviceNameStorage = '' Global $sClientName = "10.70.140.21" Global $sUserID = 0 Global $sPassword = 0 Global $sOutput = "" Global $iniPath = @ScriptDir&'\NetworkDiscovery.ini' Global $sWMICquery = "Test" Global $proceedOrCancel Global $adminAccount = "aaaa" Global $adminPassword = "aaa" Global $inilist = 0 $proceedOrCancel = MsgBox(17,"Warning",'This will delete any previous Network scans in the '& @ScriptDir&' OK to proceed, cancel to exit and save previous data elsewhere.') If $proceedOrCancel <> 1 Then Exit EndIf FileDelete($iniPath) TCPStartup() If $localIP = "127.0.0.1" Then MsgBox(0,"Invalid IP for this application","The IP address is a loopback Address. Please enter IPv4 address manually") Run(@ComSpec &' /k ipconfig') Sleep(250) ;MsgBox(0,"",$localIP) $Form1 = GUICreate("IP Input", 485, 178, 192, 124) $Input1 = GUICtrlCreateInput("192", 32, 64, 121, 21) $Input2 = GUICtrlCreateInput("168", 168, 64, 121, 21) $Input3 = GUICtrlCreateInput("200", 304, 64, 121, 21) $Button1 = GUICtrlCreateButton("You got it", 96, 128, 235, 25) $Label1 = GUICtrlCreateLabel("X", 435, 68, 14, 17) $Label2 = GUICtrlCreateLabel("Please enter the First three octets from the IPv4 address, with out any '.'", 48, 32, 347, 17) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 $varOctet1 = GUICtrlRead($Input1) $varOctet2 = GUICtrlRead($Input2) $varOctet3 = GUICtrlRead($Input3) GUIDelete($Form1) ExitLoop EndSwitch WEnd EndIf $localIPString = IsString($localIP) If $localIPString <> 1 Then MsgBox(0,"","Making an adjustment, one moment.",1) $localIP = String($localIP) Sleep(750) MsgBox(0,"","Done, lets keep moving.",1) EndIf FileCopy(@ScriptDir&'\config.ini','\\masterpc\C$\scripts',1) $IParray = StringSplit($localIP,'.',3) $varOctet1 = $IParray[0] $varOctet2 = $IParray[1] $varOctet3 = $IParray[2] $varOctet4 = $IParray[3] PingAll() ResetTimers() while $i <254 $IPtoPing = $varOctet1&'.'&$varOctet2&'.'&$varOctet3&'.'&$i $pingtemp = Ping($IPtoPing,15) if $pingtemp <> 0 Then $IPListArray[$m] = $pingtemp $pingTestResult[$m] = $IPtoPing $sIp = TCPNameToIP($IPtoPing) $sResult = _TCPIpToName($sIp) IniWrite($iniPath,$sResult,'IP Address',$IPtoPing) $iniStorage = $sResult&'Discovered.ini' _ArrayAdd($inilist,$iniStorage) _ArrayAdd($deviceName,$sResult) $sClientName = $IPtoPing $domain = @LogonDNSDomain RunWait(@ComSpec & ' /c ' & 'wmic /node:' & $sClientName &' bios get serialnumber > %temp%\serial.txt' ,"", @SW_HIDE) $file=(@TempDir & "/serial.txt") $fileread= FileRead($file) IniWrite($iniPath,$sResult,'',$fileread) ;MsgBox(0, $sClientName , $fileread) FileDelete(@TempDir & "/serial.txt") $m = $m + 1 EndIf $i = $i + 1 WEnd Func ResetTimers() $i = 1 $m = 1 EndFunc func PingAll() $IPtoPing = $varOctet1&'.'&$varOctet2&'.'&$varOctet3&'.'&$i While $i <> 256 $IPtoPing = $varOctet1&'.'&$varOctet2&'.'&$varOctet3&'.'&$i Ping($IPtoPing,5) $i = $i+1 WEnd EndFunc Thanks for your time Link to comment Share on other sites More sharing options...
FrancescoDiMuro Posted June 11, 2019 Share Posted June 11, 2019 @JayHawkfl Happy to have helped. Have a good day JayHawkfl 1 Click here to see my signature: Spoiler ALWAYS GOOD TO READ: Forum Rules Forum Etiquette Link to comment Share on other sites More sharing options...
kaisies Posted June 11, 2019 Share Posted June 11, 2019 FYI, you can use /k to keep the window open and verify your command inside the run is completing correctly, then change back to /c to use the result on the code after the run. 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