Custom actions
The most popular scripting language for MSI custom actions is VBScript as this is also natively supported and interpreted by the Windows Installer. Microsoft's Visual Basic Scripting Edition (VBScript) is a lightweight scripting language. It was designed primarily to automate administrative tasks, boost productivity, and enable scripting capabilities in Windows environments. In this article, we'll look at VBScript's inner workings, syntax, features, and practical applications.
VBScript is a procedural scripting language with syntax similar to Visual Basic. The Windows Script Host (WSH), a component built into Windows operating systems, interprets and executes it. VBScript files, which typically have the ".vbs" extension, can be run directly or through other programs.
VBScript executes code line by line and stores scripts in plain text files. It does not require explicit variable declarations and supports a wide range of data types such as strings, numbers, booleans, arrays, and objects. Statements end with a newline or a colon, and comments are added with apostrophes or the "Rem" keyword.
VBScript’s core features
Variables and Constants: VBScript uses variables and constants to store and manipulate data. Variables can have values assigned to them and be changed throughout the script, whereas constants have fixed values.
Operators: VBScript includes a number of operators that allow data manipulation and decision-making within scripts, including arithmetic, comparison, logical, concatenation, and assignment operators.
Control Structures: To control the flow of execution based on certain conditions, VBScript provides control structures such as conditional statements (If-Then-Else, Select Case) and loops (For-Next, Do-While, Do-Until).
Functions and Procedures: VBScript allows you to create custom functions and subroutines to encapsulate reusable code blocks. Functions can return values, whereas subroutines execute code without returning a value.
VBScript includes a number of built-in objects and libraries for interacting with the environment, such as the FileSystemObject for file operations, the WScript object for script control and user interaction, and ADODB objects for database connectivity.
In any scripting language, error handling is critical, and VBScript provides mechanisms for structured error handling via the "On Error" statement. It enables developers to handle runtime errors gracefully, log exceptions, and take appropriate actions.
Best Practices
Use explicit variable declarations to improve code readability and avoid unexpected behavior.
Comment your code adequately to enhance maintainability and readability.
Implement error handling routines to gracefully handle runtime errors and provide meaningful feedback.
Modularize your code by using functions and subroutines to promote code reusability and maintainability.
Follow established coding conventions and style guidelines to ensure consistency and ease of collaboration.
As you will see in the examples below, VBScript accepts a wide variety of commands. If you are a beginner or want to remember some commands, I recommend you check out the SS64 documentation of VBScript.
Unlike VBScript, PowerShell has emerged as a robust and versatile scripting language for modern IT environments. PowerShell combines the power of scripting with command-line functionality, providing administrators and developers with a powerful toolset to automate tasks, manage systems, and streamline workflows.
PowerShell is a task-based, object-oriented scripting language that runs on the.NET framework. It includes a command-line interface (CLI) and a scripting environment, which allow users to run commands interactively or write scripts for automation. PowerShell scripts are usually saved with the ".ps1" file extension.
PowerShell scripts are made up of cmdlets, which are small commands that perform specific tasks. These cmdlets can be combined and tailored to produce powerful scripts. PowerShell, like VBScript, supports variables, operators, loops, conditional statements, functions, and error handling. PowerShell's syntax, on the other hand, is based on a verb-noun naming convention for cmdlets, making it more intuitive and readable.
PowerShell treats everything as an object, making it simple to manipulate and access system resources like files, services, registry entries, and more. This object-oriented approach unifies the management and interaction with various data sources, making PowerShell a versatile and adaptable scripting language.
PowerShell's pipeline feature is one of its key strengths. The pipeline enables powerful data manipulation and processing by allowing the output of one cmdlet to be directly used as input for another. PowerShell also supports output formatting, filtering, sorting, and grouping, giving users complete control over data presentation.
PowerShell has a large number of modules and cmdlets that extend its functionality. These modules enable users to interact with a variety of technologies such as Active Directory, Azure, SQL Server, SharePoint, Exchange, and others. Furthermore, PowerShell allows developers to create custom modules, allowing them to encapsulate their code for reuse and distribution.
If we compare PowerShell with VBScript we can touch on a few points:
Syntax and Readability
The syntax of PowerShell, which is based on natural language commands, is often considered more readable and intuitive than the syntax of VBScript, which is similar to Visual Basic. The verb-noun naming convention in PowerShell makes it easier to understand the purpose of commands.
Object-Oriented Approach: PowerShell syntax, which is based on natural language commands, is often considered more readable and intuitive than VBScript syntax, which is similar to Visual Basic. PowerShell's verb-noun naming convention makes it easier to understand the purpose of commands.
Extensive Module Support
PowerShell's vast module ecosystem gives it access to a diverse set of technologies, enhancing its capabilities and allowing for seamless integration with a variety of platforms and services. This level of extensive module support is not available in VBScript.
Pipeline and Output Processing: The powerful pipeline feature in PowerShell allows for efficient data manipulation and processing. Because VBScript lacks this native capability, developers must write additional code to achieve similar functionality.
Integration with .NET: PowerShell makes use of the.NET framework, which provides access to a wide range of system APIs and libraries. This integration enhances PowerShell's capabilities and makes it suitable for modern IT environments.
With its rich feature set, object-oriented approach, and extensive module support, PowerShell has transformed the world of scripting and automation. It is a versatile and powerful scripting language for managing and automating complex IT tasks due to its intuitive syntax, pipeline functionality, and integration with the.NET framework. While VBScript was once a popular scripting language, PowerShell now provides enhanced capabilities, improved readability, and a vast ecosystem of modules and cmdlets. Using PowerShell allows administrators and developers to automate tasks, streamline workflows, and realize the full potential of their IT environments.