And this is what the debug window looks like: Use a vbscript aware editor or ide with built-in debugger and object browser There are several vbscript aware editors (IDEs) available, some with built-in debugger. The main advantages of these editors are: Different colors for commands and keywords: a typo will result in the wrong color IntelliSense like "intelligence" and object browser : type a dot after an object name and you'll get a drop-down list of available properties and. Because there are more editors and more scripting languages, i compiled a list of script editors and ides. It is always wise to add comments explaining what a script, or part of the script, does. However, make sure the comments are relevant for future use — scripts need maintenance every now and then, and comments can help make this easier. If you intend to reuse code, like subroutines or user defined functions, it is essential to describe the functionality in comments. Include a description of what the routine is intended for, its requirements, input parameters, output and/or return codes.
on, error, resume, next " - turning on, error
Display or log intermediate results like variable values and return codes to check the script's program flow, and the values of variables during execution, it helps to display variable names and their values during run time. If external commands or objects are used, display their return codes as well. Write every detail in a log file too, preferably with a timestamp in order to detect possible delays. If subroutines or (user defined) functions are used, log each call to these subroutines, it will help you follow the program flow. If i expect problems with a script, i often add an meaning optional /debug command line switch, which will tell the script to log even more details. Create and use a debug window This is a trick i learned from Don Jones, who describes it in his book vbscript, wmi, and adsi unleashed: Using vbscript, wmi, and adsi to automate windows Administration. Dim objiedebugWindow Debug "This is a great way to display intermediate results in a separate window." Sub Debug( myText ) ' uncomment the next line to turn off debugging ' exit Sub If Not IsObject( objiedebugWindow ) Then Set objiedebugWindow CreateObject( "InternetExplorer. Application" ) vigate "about:blank" sible true olBar false objiedebugWindow. Left 10 p 10 do while sy eep 100 loop cument. Title "ie debug Window" nerhtml " b " now " /b /br " End If nerhtml nerhtml myText " br " vbCrLf End Sub Notes: (1) objiedebugWindow must be declared in the main script body, not in the subroutine (must be global)! (2) do not discard the objiedebugWindow object at the end of the script, or your debug window will vanish!
Again, to be completely on the safe side, use byval as in Function myfunc( byval varParameter ) report to prevent changing the value of an existing global variable named varParameter in the global scope. I urge you to try denis St-pierre's byval/byref test script to build an understanding of the concepts. It may save you days of stressful debugging. Initialize variables This may be important when you use loop counters other than For loops: make sure the counter variable has a valid value to start with. Also watch out for global variables that are used in subroutines or functions. A one-liner like: strFullPath "C:Documents and SettingsMeApplication Data" strParentName right( Left( strFullPath, InStrRev( strFullPath, " ) - 1 _ Len( Left( strFullPath, InStrRev( strFullPath, " ) - 1 ) ) - _ InStrRev( Left( strFullPath, InStrRev( strFullPath, " ) - 1 " ) ). Split it up in several lines, each without nested functions, and use variables to contain the intermediate results: strFullPath "C:Documents and SettingsMeApplication Data" intLastSlash InStrRev( strFullPath, " ) strParentName left( strFullPath, intLastSlash - 1 ) intParentLen len( strParentName ) - inStrRev( strParentName, " ) strParentName.
By choosing logical, descriptive names, you may also save yourself time while debugging. You may have noticed that many scripters use the first character, or the first 3 characters, of variable names to specify the data type: obj fso for a (FileSystem) obj ect, int daysPerweek for int egers, etc. Though in vbscript any variable can contain any type of data at any time, this naming convention helps make clear what type of data a variable is supposed to contain. For function or subroutine that receive parameters, use distinctive parameter names to avoid conflicts with global variables. Using existing variable names for parameter names spells trouble. You can choose any naming system you want. But do keep it consistent. Keep in mind that some day others may need to understand your code.
How to add an interest on LinkedIn
If a "self-contained" subroutine or function has been debugged, it will save debugging time when you reuse it in another script. If your function or subroutine receives parameters, use your distinctive parameter names to avoid conflicts with global variables. Do not use an existing variable name for a parameter name. As you may have noticed, i use the prefix my for parameter names in my own scripts. Choose any naming system you want, but be consistent, and keep in mind that some day others may need to understand your code.
To be completely on the safe side, use byval as in Function myfunc( byval varParameter ) to prevent changing the value of an existing global variable named varParameter in the global scope. Experiment with Denis St-pierre's byval/byref test script to become familiar with the concepts. Use descriptive names for variables, functions and subroutines you are (almost) completely free to use any name for a variable, subroutine or function. However, instead business of using a name like f, why not use objfso for a fileSystem object? Or Decode instead of dec as a function name? Imagine what a difference it will make when someone else needs to read and understand your code (or you yourself a couple of months from now.).
Never assume write access. Never assume an open Internet connection. If you create a new instance of an object, use custom error handling with Err and IsObject to check if it was successfully created. Always check if required extensions are available before trying to use them! Well, you get the idea. Make sure you log any requirements that aren't met, and/or display descriptive error messages.
Always use Option Explicit and declare all variables It may seem a nuisance to force yourself to declare all variables, but trust me, option Explicit will save you a lot of time searching for errors caused by typos in variable names. It will also help you find variables with the wrong scope (local. (Temporarily) disable all On Error Resume next lines When you're looking for the cause of an error, you do want to see the error messages stating which line in the code generates the error. So "comment out" any On Error Resume Next lines while testing/debugging. And whenever you really do need to use On Error Resume Next, check for errors (If Err Then. and switch back to On Error Goto 0 as soon as possible. Modularize your scripts with functions and subroutines Any block of code that will be used more than once can be moved into a subroutine or function. Dividing the code into logical subroutines and functions will improve readability of your script, and thus will make maintenance a lot easier.
The world's Best Photos of girl and walpaper - flickr
Never even resume assume the script runs in a 64-bit environment when on life 64-bit Windows! See the paragraph ". Test for 32-bit mshta. Exe on 64-bit Windows " below to see how you can test this in htas. Net framework is installed. Never assume a script runs with administrative rights. Never assume access to wmi is allowed. Use custom error handling to check it!
Never assume a wsh version. Check it using rsion! Read more about, wsh versions. Never assume a windows version. Never assume windows' "bittedness" (32-bit. 64-bit test in case it might be critical (i.e. When third party com objects or external commands risks are used).
aware editor or ide with built-in debugger. Document your scripts with useful comments. Use custom error handling, clean up, check the wsh version. Use a debugger, if available, for htas only: Test for 32-bit mshta. Exe on 64-bit Windows. Never assume anything, this may be the most important thing to keep in mind when scripting — in any language.
If strHostOverride " Then tRequestHeader "Host strHostOverride, end If objWinHttp. Option(12) blnEnableHttpsToHttpRedirects, if (strLogin and (strPassword then tCredentials strLogin, strPassword, 0, end. On Error Resume next nd(strPostData if mber 0 Then, if atus "200" Then, getDataFromurl sponseText. Else, getDataFromurl "http " atus " " _ atusText, end If, else, getDataFromurl "Error front " mber " " urce " " _ scription End If On Error goto 0 Set objWinHttp nothing End Function). Debugging vbscript, vbscript Scripting Techniques debugging your Scripts, scripts will seldom be perfect right away. This page describes some (debugging) techniques that will help you avoid errors in vbscript, or to find and correct them. Always use Option Explicit and declare all variables (Temporarily) disable all On Error Resume next lines.
Ppt computer, hardware, powerPoint presentation free to download
This wsh example script can access (using http get or post) the text/html/xml contents of a given url. If a winHttpRequest connection timeout or error occurs, or the remote server words responds with an error, the error details are returned instead of the content. To use the code in an asp page instead of wsh, replace "ho" with "Response. Write" and "CreateObject" with "eateObject". Option Explicit "get function GetDataFromURL(strurl, strMethod, strPostData dim lngTimeout. Dim strUserAgentString, dim intSslErrorIgnoreFlags, dim blnEnableRedirects, dim blnEnableHttpsToHttpRedirects. Dim strHostOverride, dim strLogin, dim strPassword, dim strResponseText. Dim objWinHttp lngTimeout 59000 strUserAgentString "http_requester/0.1" intSslErrorIgnoreFlags 13056 ' 13056: ignore all err, 0: accept no err blnEnableRedirects True blnEnableHttpsToHttpRedirects True strHostOverride " strLogin " strPassword set objWinHttp tTimeouts lngTimeout, lngTimeout, lngTimeout, lngTimeout objWinHttp. Open strMethod, strurl, if strMethod "post" Then tRequestHeader "Content-type _ end.