myk3 Posted February 27, 2011 Share Posted February 27, 2011 (edited) I am having a hard time dealing with COM errors.. I wrote a a script to pull WMI info from machines and then post these items to an excel document.. I first ping the host then if ping is good do something. I have admin access to all the systems. So I am unclear why i am getting the error. the error always states it is the first Objget item which is the first WMI pull Here is a copy of the code.. Like I said I have no clue where to start to deal with COM errors. expandcollapse popup#include <Constants.au3> #include <Array.au3> #include <adfunctions.au3> #include <Excel.au3> Global $aComputers TCPStartup() if FileExists(@scriptdir & "\OU Systems Info.xls") Then FileDelete (@scriptdir & "\OU Systems Info.xls") EndIf $sOU = "" ;this is the distigusihed name in AD _ADGetObjectsInOU($aComputers,$sOU,"(objectclass=computer)",2,"name,location") ;calls function in the AD.au3 to query AD _ArrayDisplay($aComputers) $1=1 $2=2 $out = ' ' $out1 = ' ' $type ="" $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $oExcel1 = _ExcelBookNew(0) _ExcelBookSaveAs($oExcel1, @scriptdir & "\OU Systems Info", "xls", 0, 1) _ExcelBookClose($oExcel1, 0) $oExcel2 = _ExcelBookOpen(@scriptdir & "\OU Systems Info.xls",0) _ExcelWriteCell($oExcel2, "HOSTNAME",1,1);Hostname _ExcelWriteCell($oExcel2, "MAC",1,2);MAC _ExcelWriteCell($oExcel2, "IP",1,3);IP _ExcelWriteCell($oExcel2, "OU",1,4);OU _ExcelWriteCell($oExcel2, "CAMP",1,5);5 CAMP _ExcelWriteCell($oExcel2, "ZONE",1,6);6 ZONE _ExcelWriteCell($oExcel2, "Building Number",1,7);7 Building Number _ExcelWriteCell($oExcel2, "Room / Bay",1,8);8 Room / Bay _ExcelWriteCell($oExcel2, "Unit asset",1,9);9 Unit asset _ExcelWriteCell($oExcel2, "USERNAME",1,10);Username _ExcelWriteCell($oExcel2, "IMO",1,11);11 IMO _ExcelWriteCell($oExcel2, "Manufacturer",1,12);Manufacturer _ExcelWriteCell($oExcel2, "Model",1,13);Model _ExcelWriteCell($oExcel2, "Serial Number",1,14);Serial Number _ExcelWriteCell($oExcel2, "Desktop / Notebook",1,15);15 Desktop / Notebook _ExcelWriteCell($oExcel2, "CPU Speed",1,16);16 CPU Speed _ExcelWriteCell($oExcel2, "CPU Type",1,17);17 CPU Type _ExcelWriteCell($oExcel2, "RAM",1,18);18 RAM _ExcelWriteCell($oExcel2, "HARD Drive",1,19);19 HARD Drive _ExcelWriteCell($oExcel2, "Type OS",1,20);20 Type OS _ExcelWriteCell($oExcel2, "OS Version",1,21);21 OS Version _ExcelWriteCell($oExcel2, "DAR",1,22);22 DAR _ExcelWriteCell($oExcel2, "PKI",1,23);23 PKI ProgressOn("Progress", "Start Scan","") Do ProgressSet(($1 / UBound($aComputers)*100),(StringFormat("%.2f", $1 / UBound($aComputers)*100)) & "% Complete","Scanning " & $1 & " of " & UBound($aComputers) & " " & $aComputers[$1][0]) $var = Ping($aComputers[$1][0]) if $var Then $objWMI = ObjGet("winmgmts:\\"& $aComputers[$1][0] &"\root\CIMV2") $objComputer = $objWMI.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $objSystem = $objWMI.ExecQuery("SELECT * FROM Win32_SystemEnclosure", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $objCPU = $objWMI.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $objHDD = $objWMI.ExecQuery("SELECT * FROM Win32_diskdrive", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $objOS = $objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($objComputer) Then For $objItem In $objComputer $user = $objItem.UserName if $user = "Q" & @username Then $user = "N/A" endif if $user = "AR" & @username Then $user = "N/A" endif $Model = $objItem.Model $RAM = $objItem.TotalPhysicalMemory next If IsObj($objSystem) Then For $objItem in $objSystem $SN = $objItem.SerialNumber $Manufacturer = $objItem.Manufacturer $type = $objItem.ChassisTypes next endif if $type[0] = 1 then $type = "Other" ElseIf $type[0] = 2 then $type = "Unknown" ElseIf $type[0] = 3 then $type = "Desktop" ElseIf $type[0] = 4 then $type = "Low Profile Desktop" ElseIf $type[0] = 5 then $type = "Pizza Box" ElseIf $type[0] = 6 then $type = "Mini Tower" ElseIf $type[0] = 7 then $type = "Tower" ElseIf $type[0] = 8 then $type = "Portable" ElseIf $type[0] = 9 then $type = "Laptop" ElseIf $type[0] = 10 then $type = "Notebook" ElseIf $type[0] = 11 then $type = "Hand Held" ElseIf $type[0] = 12 then $type = "Docking Station" ElseIf $type[0] = 13 then $type = "All in One" ElseIf $type[0] = 14 then $type = "Sub Notebook" ElseIf $type[0] = 15 then $type = "Space-Saving" ElseIf $type[0] = 16 then $type = "Lunch Box" ElseIf $type[0] = 17 then $type = "Main System Chassis" ElseIf $type[0] = 18 then $type = "Expansion Chassis" ElseIf $type[0] = 19 then $type = "SubChassis" ElseIf $type[0] = 20 then $type = "Bus Expansion Chassis" ElseIf $type[0] = 21 then $type = "Peripheral Chassis" ElseIf $type[0] = 22 then $type = "Storage Chassis" ElseIf $type[0] = 23 then $type = "Rack Mount Chassis" ElseIf $type[0] = 24 then $type = "Sealed-Case PC" Endif EndIf If IsObj($objCPU) Then For $objItem in $objCPU $CpuSpeed = $objItem.MaxClockSpeed $CpuType = $objItem.Name next EndIf If IsObj($objHDD) Then For $objItem in $objHDD $HDDModel = $objItem.model $HDDSize = $objItem.size next EndIf If IsObj($objOS) Then For $objItem in $objOS $OS = $objItem.Caption $Ver = $objItem.Version next EndIf $IP = TCPNameToIP($aComputers[$1][0]) $nbtstat = Run(@ComSpec & " /c " & 'nbtstat -a '& $aComputers[$1][0] &'|find "MAC"', @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) While 1 $line = StdoutRead($nbtstat) If @error Then ExitLoop If $line <> '' Then $out &= $line & @CRLF Wend _ExcelWriteCell($oExcel2, $aComputers[$1][0],$2,1) ; 1Hostname $out1 = StringRegExpReplace ($out, " MAC Address = ", " ") $out2 = StringStripWS ($out1,8) _ExcelWriteCell($oExcel2, $out2, $2, 2) ;2 MAC Address _ExcelWriteCell($oExcel2, $IP, $2, 3);3 IP address _ExcelWriteCell($oExcel2, $sOU, $2, 4);4 OU _ExcelWriteCell($oExcel2, "AJ", $2, 5);5 CAMP _ExcelWriteCell($oExcel2, "2", $2, 6);6 ZONE _ExcelWriteCell($oExcel2, "5", $2, 7);7 Building Number _ExcelWriteCell($oExcel2, "1", $2, 8);8 Room / Bay _ExcelWriteCell($oExcel2, "N/A", $2, 9);9 Unit asset _ExcelWriteCell($oExcel2,$user, $2, 10) ;10 User _ExcelWriteCell($oExcel2, "ME", $2, 11);11 IMO _ExcelWriteCell($oExcel2,$Manufacturer, $2, 12);12 Make / Manufacture _ExcelWriteCell($oExcel2,$Model, $2, 13);13 Model _ExcelWriteCell($oExcel2,$SN, $2, 14);14 Asset Tag / Serial Number _ExcelWriteCell($oExcel2,$type, $2, 15);15 Desktop / Notebook _ExcelWriteCell($oExcel2,$CpuSpeed, $2, 16);16 CPU Speed _ExcelWriteCell($oExcel2,$CpuType, $2, 17);17 CPU Type _ExcelWriteCell($oExcel2,$RAM, $2, 18);18 RAM _ExcelWriteCell($oExcel2,"Model: " & $HDDModel & " Size: " & $HDDSize, $2, 19);19 HARD Drive _ExcelWriteCell($oExcel2,$OS, $2, 20);20 Type OS _ExcelWriteCell($oExcel2,$Ver, $2, 21);21 OS Version ;22 DAR ;23 PKI _ExcelBookSaveAs($oExcel2, @scriptdir & "\OU Systems Info", "xls", 0, 1) ;~ _ExcelBookClose($oExcel2, 0) $out ='' $line='' $user='' $1 += 1 $2 += 1 Else _ExcelWriteCell($oExcel2, $aComputers[$1][0],$2,1) _ExcelWriteCell($oExcel2, "Not Online", $2, 2) _ExcelWriteCell($oExcel2, "N/A", $2, 10) _ExcelBookSaveAs($oExcel2, @scriptdir & "\OU Systems Info", "xls", 0, 1) ;~ _ExcelBookClose($oExcel2, 0) $1 += 1 $2 += 1 endif Until $1 = UBound($aComputers) _ExcelBookSaveAs($oExcel2, @scriptdir & "\OU Systems Info", "xls", 0, 1) _ExcelBookClose($oExcel2, 0) I forgot to add.. The script runs fine for most systems it only fails on a certain few.. So say it runs the first 47 loops then throws the error. Edited February 27, 2011 by myk3 Link to comment Share on other sites More sharing options...
UEZ Posted February 27, 2011 Share Posted February 27, 2011 You can add the error handling for COM objects to get more information about com errors: expandcollapse popup#include <Constants.au3> #include <Array.au3> #include <adfunctions.au3> #include <Excel.au3> Global $ObjError = ObjEvent("AutoIt.Error", "ObjError") Global $aComputers TCPStartup() if FileExists(@scriptdir & "\OU Systems Info.xls") Then FileDelete (@scriptdir & "\OU Systems Info.xls") EndIf $sOU = "" ;this is the distigusihed name in AD _ADGetObjectsInOU($aComputers,$sOU,"(objectclass=computer)",2,"name,location") ;calls function in the AD.au3 to query AD _ArrayDisplay($aComputers) $1=1 $2=2 $out = ' ' $out1 = ' ' $type ="" $wbemFlagReturnImmediately = 0x10 $wbemFlagForwardOnly = 0x20 $oExcel1 = _ExcelBookNew(0) _ExcelBookSaveAs($oExcel1, @scriptdir & "\OU Systems Info", "xls", 0, 1) _ExcelBookClose($oExcel1, 0) $oExcel2 = _ExcelBookOpen(@scriptdir & "\OU Systems Info.xls",0) _ExcelWriteCell($oExcel2, "HOSTNAME",1,1);Hostname _ExcelWriteCell($oExcel2, "MAC",1,2);MAC _ExcelWriteCell($oExcel2, "IP",1,3);IP _ExcelWriteCell($oExcel2, "OU",1,4);OU _ExcelWriteCell($oExcel2, "CAMP",1,5);5 CAMP _ExcelWriteCell($oExcel2, "ZONE",1,6);6 ZONE _ExcelWriteCell($oExcel2, "Building Number",1,7);7 Building Number _ExcelWriteCell($oExcel2, "Room / Bay",1,8);8 Room / Bay _ExcelWriteCell($oExcel2, "Unit asset",1,9);9 Unit asset _ExcelWriteCell($oExcel2, "USERNAME",1,10);Username _ExcelWriteCell($oExcel2, "IMO",1,11);11 IMO _ExcelWriteCell($oExcel2, "Manufacturer",1,12);Manufacturer _ExcelWriteCell($oExcel2, "Model",1,13);Model _ExcelWriteCell($oExcel2, "Serial Number",1,14);Serial Number _ExcelWriteCell($oExcel2, "Desktop / Notebook",1,15);15 Desktop / Notebook _ExcelWriteCell($oExcel2, "CPU Speed",1,16);16 CPU Speed _ExcelWriteCell($oExcel2, "CPU Type",1,17);17 CPU Type _ExcelWriteCell($oExcel2, "RAM",1,18);18 RAM _ExcelWriteCell($oExcel2, "HARD Drive",1,19);19 HARD Drive _ExcelWriteCell($oExcel2, "Type OS",1,20);20 Type OS _ExcelWriteCell($oExcel2, "OS Version",1,21);21 OS Version _ExcelWriteCell($oExcel2, "DAR",1,22);22 DAR _ExcelWriteCell($oExcel2, "PKI",1,23);23 PKI ProgressOn("Progress", "Start Scan","") Do ProgressSet(($1 / UBound($aComputers)*100),(StringFormat("%.2f", $1 / UBound($aComputers)*100)) & "% Complete","Scanning " & $1 & " of " & UBound($aComputers) & " " & $aComputers[$1][0]) $var = Ping($aComputers[$1][0]) if $var Then $objWMI = ObjGet("winmgmts:\\"& $aComputers[$1][0] &"\root\CIMV2") $objComputer = $objWMI.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $objSystem = $objWMI.ExecQuery("SELECT * FROM Win32_SystemEnclosure", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $objCPU = $objWMI.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $objHDD = $objWMI.ExecQuery("SELECT * FROM Win32_diskdrive", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) $objOS = $objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($objComputer) Then For $objItem In $objComputer $user = $objItem.UserName if $user = "Q" & @username Then $user = "N/A" endif if $user = "AR" & @username Then $user = "N/A" endif $Model = $objItem.Model $RAM = $objItem.TotalPhysicalMemory next If IsObj($objSystem) Then For $objItem in $objSystem $SN = $objItem.SerialNumber $Manufacturer = $objItem.Manufacturer $type = $objItem.ChassisTypes next endif if $type[0] = 1 then $type = "Other" ElseIf $type[0] = 2 then $type = "Unknown" ElseIf $type[0] = 3 then $type = "Desktop" ElseIf $type[0] = 4 then $type = "Low Profile Desktop" ElseIf $type[0] = 5 then $type = "Pizza Box" ElseIf $type[0] = 6 then $type = "Mini Tower" ElseIf $type[0] = 7 then $type = "Tower" ElseIf $type[0] = 8 then $type = "Portable" ElseIf $type[0] = 9 then $type = "Laptop" ElseIf $type[0] = 10 then $type = "Notebook" ElseIf $type[0] = 11 then $type = "Hand Held" ElseIf $type[0] = 12 then $type = "Docking Station" ElseIf $type[0] = 13 then $type = "All in One" ElseIf $type[0] = 14 then $type = "Sub Notebook" ElseIf $type[0] = 15 then $type = "Space-Saving" ElseIf $type[0] = 16 then $type = "Lunch Box" ElseIf $type[0] = 17 then $type = "Main System Chassis" ElseIf $type[0] = 18 then $type = "Expansion Chassis" ElseIf $type[0] = 19 then $type = "SubChassis" ElseIf $type[0] = 20 then $type = "Bus Expansion Chassis" ElseIf $type[0] = 21 then $type = "Peripheral Chassis" ElseIf $type[0] = 22 then $type = "Storage Chassis" ElseIf $type[0] = 23 then $type = "Rack Mount Chassis" ElseIf $type[0] = 24 then $type = "Sealed-Case PC" Endif EndIf If IsObj($objCPU) Then For $objItem in $objCPU $CpuSpeed = $objItem.MaxClockSpeed $CpuType = $objItem.Name next EndIf If IsObj($objHDD) Then For $objItem in $objHDD $HDDModel = $objItem.model $HDDSize = $objItem.size next EndIf If IsObj($objOS) Then For $objItem in $objOS $OS = $objItem.Caption $Ver = $objItem.Version next EndIf $IP = TCPNameToIP($aComputers[$1][0]) $nbtstat = Run(@ComSpec & " /c " & 'nbtstat -a '& $aComputers[$1][0] &'|find "MAC"', @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD) While 1 $line = StdoutRead($nbtstat) If @error Then ExitLoop If $line <> '' Then $out &= $line & @CRLF Wend _ExcelWriteCell($oExcel2, $aComputers[$1][0],$2,1) ; 1Hostname $out1 = StringRegExpReplace ($out, " MAC Address = ", " ") $out2 = StringStripWS ($out1,8) _ExcelWriteCell($oExcel2, $out2, $2, 2) ;2 MAC Address _ExcelWriteCell($oExcel2, $IP, $2, 3);3 IP address _ExcelWriteCell($oExcel2, $sOU, $2, 4);4 OU _ExcelWriteCell($oExcel2, "AJ", $2, 5);5 CAMP _ExcelWriteCell($oExcel2, "2", $2, 6);6 ZONE _ExcelWriteCell($oExcel2, "5", $2, 7);7 Building Number _ExcelWriteCell($oExcel2, "1", $2, 8);8 Room / Bay _ExcelWriteCell($oExcel2, "N/A", $2, 9);9 Unit asset _ExcelWriteCell($oExcel2,$user, $2, 10) ;10 User _ExcelWriteCell($oExcel2, "ME", $2, 11);11 IMO _ExcelWriteCell($oExcel2,$Manufacturer, $2, 12);12 Make / Manufacture _ExcelWriteCell($oExcel2,$Model, $2, 13);13 Model _ExcelWriteCell($oExcel2,$SN, $2, 14);14 Asset Tag / Serial Number _ExcelWriteCell($oExcel2,$type, $2, 15);15 Desktop / Notebook _ExcelWriteCell($oExcel2,$CpuSpeed, $2, 16);16 CPU Speed _ExcelWriteCell($oExcel2,$CpuType, $2, 17);17 CPU Type _ExcelWriteCell($oExcel2,$RAM, $2, 18);18 RAM _ExcelWriteCell($oExcel2,"Model: " & $HDDModel & " Size: " & $HDDSize, $2, 19);19 HARD Drive _ExcelWriteCell($oExcel2,$OS, $2, 20);20 Type OS _ExcelWriteCell($oExcel2,$Ver, $2, 21);21 OS Version ;22 DAR ;23 PKI _ExcelBookSaveAs($oExcel2, @scriptdir & "\OU Systems Info", "xls", 0, 1) ;~ _ExcelBookClose($oExcel2, 0) $out ='' $line='' $user='' $1 += 1 $2 += 1 Else _ExcelWriteCell($oExcel2, $aComputers[$1][0],$2,1) _ExcelWriteCell($oExcel2, "Not Online", $2, 2) _ExcelWriteCell($oExcel2, "N/A", $2, 10) _ExcelBookSaveAs($oExcel2, @scriptdir & "\OU Systems Info", "xls", 0, 1) ;~ _ExcelBookClose($oExcel2, 0) $1 += 1 $2 += 1 endif Until $1 = UBound($aComputers) _ExcelBookSaveAs($oExcel2, @scriptdir & "\OU Systems Info", "xls", 0, 1) _ExcelBookClose($oExcel2, 0) Func ObjError() Msgbox(0,"AutoItCOM Test","We intercepted a COM Error !" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oMyError.description & @CRLF & _ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ "err.number is: " & @TAB & hex($oMyError.number,8) & @CRLF & _ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ "err.source is: " & @TAB & $oMyError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oMyError.helpcontext _ ) EndFunc ;==>ObjError Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ Link to comment Share on other sites More sharing options...
myk3 Posted February 27, 2011 Author Share Posted February 27, 2011 (edited) You can add the error handling for COM objects to get more information about com errors: Br, UEZ I get an error EDIT: When looking into the ADFunctions there is a ; _ADDoError : Error event handler for COM errors. This is global so will pick up errors from your program if you include this library How do I launch this at error? $oMyError = ObjEvent("AutoIt.Error", "_ADDoError") ; Install a custom error handler ; MyErrFunc Func _ADDoError() $HexNumber = Hex($oMyError.number, 8) If $HexNumber = 80020009 Then SetError(3) Return EndIf If $HexNumber = "8007203A" Then SetError(4) Return EndIf MsgBox(262144, "", "We intercepted a COM Error !" & @CRLF & _ "Number is: " & $HexNumber & @CRLF & _ "Windescription is: " & $oMyError.windescription & @CRLF & _ "Script Line number is: " & $oMyError.scriptline) Select Case $oMyError.windescription = "Access is denied." $objConnection.Close ("Active Directory Provider") $objConnection.Open ("Active Directory Provider") SetError(2) Case 1 SetError(1) EndSelect EndFunc ;==>_ADDoError EDIT2: I think it is actually working the way is says it is supposed to.. However I have no idea how to decode the message Edited February 27, 2011 by myk3 Link to comment Share on other sites More sharing options...
myk3 Posted February 27, 2011 Author Share Posted February 27, 2011 After googleing the error I was able to determine the error had to do with the WMI repo on the remote machine.. I tried to execute wmic items locally and they failed.. I rebuilt the wmi repo and all is good again.. Thanks for the help Link to comment Share on other sites More sharing options...
myk3 Posted March 1, 2011 Author Share Posted March 1, 2011 I am constantly getting errors for different systems. Is there a way to log the error but then continue with the next item in the script??? Basically during the loop phase I am getting 2 different errors. 1. When attempting to pull the WMI info from a remote system I am unable to log in. 2. I am able to log into the remote system but the WMI repo is corrupt requiring me to rebuild it. I have already put in a ping to see if the system is online before attempting to log in, I am an Admin on the affected system. I understand I do not want to forget about the errors but I also want to get the rest of the info I am trying to pull from the rest of my OU.. Once the error is logged I can then go back and fix the error-ed machines. Link to comment Share on other sites More sharing options...
myk3 Posted March 2, 2011 Author Share Posted March 2, 2011 bump Link to comment Share on other sites More sharing options...
water Posted March 2, 2011 Share Posted March 2, 2011 I noticed that you are still using the "old" active directory UDF. The "new" UDF has a lot more functions and better error handling. For download please see my signature. I would split your script into two parts. Part 1: Do all the AD related stuff. The UDF installs its own error handler if none is installed when _AD_Open() is called. The error handler is dropped when _AD_Close() is called. This would look like:#include <ad.au3> _AD_Open() _ADGetObjectsInOU() _AD_Close() Part 2: Do your WMI stuff. Install your own error handler. Check the kind of error you get and decide what to do (log the error and continue, exit the script ...) My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
myk3 Posted March 2, 2011 Author Share Posted March 2, 2011 I will look into the new AD udf.. It appears I need to re-write the stuff Link to comment Share on other sites More sharing options...
water Posted March 2, 2011 Share Posted March 2, 2011 (edited) I will look into the new AD udf..It appears I need to re-write the stuff No big deal. The function names have changed from _ADxx to _AD_xx, you have to verify the parameters (results are no longer returned byRef) and _AD_Open() is needed to open a connection to the AD.But on the other hand the adfunctions.au3 still works. Edited March 2, 2011 by water My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
myk3 Posted March 2, 2011 Author Share Posted March 2, 2011 No big deal. The function names have changed from _ADxx to _AD_xx, you have to verify the parameters (results are no longer returned byRef) and _AD_Open() is needed to open a connection to the AD.But on the other hand the adfunctions.au3 still works.No clue why but now my _ExcelBookSaveAs is now giving me errors.. Link to comment Share on other sites More sharing options...
water Posted March 2, 2011 Share Posted March 2, 2011 No clue why but now my _ExcelBookSaveAs is now giving me errors..What errors do you get and what did you change in your script? My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
myk3 Posted March 2, 2011 Author Share Posted March 2, 2011 (edited) Ok I figured out the excel errors, when the script is failing it doesn't close out the excel processes.. Ok for some reason it is not populating my $aComputers array like adfunctions did.. here is my code #include <Excel.au3> #include <Array.au3> #include <file.au3> #include <ad.au3> _AD_Open() ;**************************************************************** ;~ Pull items from C4 OU ;**************************************************************** Global $aComputers $sOU = InputBox("OU?","What is your OU's Distinguidhed Name?","","",250,125) If @error then MsgBox(0,"Error","You have submitted and invalid OU!") exit elseif $sOU = "" then MsgBox(0,"Error","You have submitted and invalid OU!") exit endif _AD_GetObjectsInOU($aComputers,$sOU,"(objectclass=computer)",2,"name,location") ;calls function in the AD.au3 to query AD _ArrayDisplay($aComputers) _AD_Close() It doesn't even display the array.. Edited March 2, 2011 by myk3 Link to comment Share on other sites More sharing options...
myk3 Posted March 2, 2011 Author Share Posted March 2, 2011 I am an idiot I got it #include <Excel.au3> #include <Array.au3> #include <file.au3> #include <ad.au3> _AD_Open() ;**************************************************************** ;~ Pull items from C4 OU ;**************************************************************** Global $aComputers $sOU = InputBox("OU?","What is your OU's Distinguidhed Name?","","",250,125) If @error then MsgBox(0,"Error","You have submitted and invalid OU!") exit elseif $sOU = "" then MsgBox(0,"Error","You have submitted and invalid OU!") exit endif $aComputers = _AD_GetObjectsInOU($sOU,"(objectclass=computer)",2,"name,location") ;calls function in the AD.au3 to query AD _ArrayDisplay($aComputers) _AD_Close() Link to comment Share on other sites More sharing options...
water Posted March 2, 2011 Share Posted March 2, 2011 Please replace _AD_GetObjectsInOU($aComputers,$sOU,"(objectclass=computer)",2,"name,location")with $aComputers = _AD_GetObjectsInOU($sOU,"(objectclass=computer)",2,"name,location") My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
water Posted March 2, 2011 Share Posted March 2, 2011 To improve performance you should always use objectcategory: $aComputers = _AD_GetObjectsInOU($sOU,"(objectcategory=computer)",2,"name,location") My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki Link to comment Share on other sites More sharing options...
myk3 Posted March 2, 2011 Author Share Posted March 2, 2011 (edited) I got it working.. Thanks for the help.. Can you explain the objectclass vs objectcategory? Edited March 2, 2011 by myk3 Link to comment Share on other sites More sharing options...
water Posted March 2, 2011 Share Posted March 2, 2011 (edited) Can you explain the objectclass vs objectcategory?objectcategory is indexed, objectclass is not.So when you use objectclass so scan the whole AD.Please check this link for more information. Edited March 2, 2011 by water My UDFs and Tutorials: Spoiler UDFs: Active Directory (NEW 2024-07-28 - Version 1.6.3.0) - Download - General Help & Support - Example Scripts - Wiki ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts OutlookEX (2021-11-16 - Version 1.7.0.0) - Download - General Help & Support - Example Scripts - Wiki OutlookEX_GUI (2021-04-13 - Version 1.4.0.0) - Download Outlook Tools (2019-07-22 - Version 0.6.0.0) - Download - General Help & Support - Wiki PowerPoint (2021-08-31 - Version 1.5.0.0) - Download - General Help & Support - Example Scripts - Wiki Task Scheduler (2022-07-28 - Version 1.6.0.1) - Download - General Help & Support - Wiki Standard UDFs: Excel - Example Scripts - Wiki Word - Wiki Tutorials: ADO - Wiki WebDriver - Wiki 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