PowerShell for Windows Developers: Takeaways from Advanced Installer’s Tech Session | Part 1
At Advanced Installer, we’ve been hosting weekly Tech Talks for over a year, where our developers share key insights, lessons learned, and in-depth explorations of topics that help us grow as a team. These sessions have been invaluable for us, and we’re excited to share some of the best takeaways with the wider developer community.
In this session, Gabriel Diaconita, Engineering Lead at Advanced Installer, shows us how PowerShell can revolutionize the workflow for Windows developers. He will walk us through using PowerShell to simplify packaging, enhance productivity, and eliminate tedious tasks. For a Windows engineer, PowerShell isn’t just a tool—it’s a must-have skill.
Here are some key takeaways from that session, which we believe will be helpful for developers everywhere.
Why Every Windows Developer Needs PowerShell
PowerShell is a powerful tool that offers access to many resources and advanced commands that streamline our workflows.
Unlike the classic cmd.exe shell, PowerShell puts all the tools for effective automation and increased productivity at our fingertips.
We consider it the go-to scripting tool for Windows.
Built on the .NET Common Language Runtime, PowerShell is flexible and extensible, making it ideal for running scripts, interacting with APIs, and managing cloud resources.
It runs on Windows, Mac OS, and Linux, and requires a separate installation, (the executable is pwsh.exe), providing a unified toolset regardless of the operating system.
“PowerShell is ubiquitous now,
it’s a must-know technology for Windows developers.”
PowerShell is an incredibly versatile tool that can enhance everyday workflows, even if your current projects don’t specifically involve it. It’s no longer optional knowledge, knowing how to use it effectively is a must for modern Windows development.
Gabriel Diaconita,
Engineering Lead @ Advanced Installer
PowerShell Key Concepts You Need to Know
PowerShell is designed to be easy to learn and use. Think of it as a "self-documenting" tool. It doesn’t have a separate manual to teach you the available commands.
Instead, it includes a built-in command query system that helps you explore the functionality. Think of it as an expert guide, offering insights and direction whenever needed.
Here’s how to explore and learn PowerShell commands:
Discovering PowerShell Commands
- To view all the available commands, including those from installed modules or plugins, use get-command. Many of these commands are called cmdlets - the core commands of PowerShell.
Understanding Syntax
- To explore new commands, use the get-help command followed by the command name. You will receive a short description of that command along with the possible syntaxes.
- To get more details about every parameter in the syntax, use the get-help <command> -full command.
- To access the latest documentation and practical examples on how to use commands, use the -online parameter instead of -full to be redirected to Microsoft’s website.
These features make PowerShell incredibly approachable for new users while remaining powerful for advanced scenarios.

The Core of PowerShell: Cmdlets
Cmdlets are PowerShell’s building blocks, and their consistent Verb-Noun naming convention makes them easy to understand and use.
But what do the Verb and the Noun mean in this context?
- The Verb refers to the action you want to perform such as ‘Get’, ‘Set’, or ‘Write’. To get the full list of verbs, use the get-verb cmdlet.
- The Noun specifies the target or resource, such as ‘File’ or ‘Process’.
This way, we can quickly search for commands relevant to a specific task.
Simple Examples
- To find all commands with the noun File, you can run get-command -noun File.
- To find all commands for a specific action, such as Write, you can use the command get-command -verb Write.
Streamline Your Workflows with PowerShell Aliases
PowerShell’s alias system can be a real productivity booster.
When running the get-command you will notice that some commands are listed as aliases. This is because PowerShell has introduced the aliases concept to ease the transition from cmd.exe.
For example, the dir command works in PowerShell but it isn’t a real command; it invokes the get-childItem command, which is an alias for it.
So, running the get-children command you will get the same result.
To see the full list of aliases, use the get-alias command.
Aliases aren’t just predefined, you can create your aliases to streamline your workflow.
Let’s say we want to create an alias to launch the Advanced Installer application.
Here’s how the command we need to use:
new-alias -name "advinst" -value "path to advinst.exe".
Make PowerShell Aliases Stick for Good
Aliases only last for the current session.
If you close PowerShell and open a new session, the custom alias will no longer be available.
To make aliases persist across sessions, you must add it to your PowerShell profile:
- Display the path to the profile file using $profile.
- Open the file in Notepad with notepad $profile.
- Add the custom alias you want to load automatically whenever PowerShell starts.
Simple ExampleTo create a permanent alias for launching Advanced Installer, add the following line to the file:new-alias -name "advinst" -value "path to advinst.exe"
Once saved, this alias will work as long as the executable is at the specified path.
Master the Pipeline: PowerShell’s Secret Weapon
The pipeline is one of PowerShell's most robust features.
By chaining multiple commands with the “|” operator, the output of one command becomes the input for the next.
This eliminates the need to save intermediate results in temporary variables.
Simple ExampleLet’s suppose you want to stop the Advanced Installer process. Start by listing all running processes using the get-process command. You’ll notice the process name of Advanced Installer is advinst. To stop this process chain commands with a pipeline: get-process -advinst | stop-process. The output of the get-process is piped into the stop-process. This saves you from extra steps.
Most PowerShell cmdlets support pipelines, allowing you to pass results between commands seamlessly, as shown in the previous example.
Some cmdlets, such as sort-object or measure-object, are specifically designed to work in pipelines, and you can pipe various object types to them.
For a cmdlet to accept a pipeline input, at least one of its parameters must support it.
There are two different ways for cmdlets to accept pipeline input:
- ByValue: The input object’s type must match or be convertible to the parameter’s expected .NET type.
- ByPropertyName: The input object must have a property with the same name as the parameter.
To determine which parameters of a cmdlet accept pipeline input, use the get-help command with the -full parameter. This provides detailed information to help you get the most out of pipelines.
Never Re-type Again: Harnessing PowerShell’s Command History
PowerShell tracks all commands you run in a session. Commands are saved as soon as they finish executing, so you can easily revisit or reuse them.
To view the command history, use get-history cmdlet.
Each command has a unique ID. If you need to invoke a specific command, simply use invoke-history -id commandId.
By referencing the ID, you can instantly bring back and execute any commands in the list.
Wrapping Up
At Advanced Installer, we’ve seen firsthand how PowerShell helps us work smarter, automate repetitive tasks, and focus on what matters, delivering better solutions for our users.
Whether you're new to PowerShell or looking to master advanced concepts, now is the perfect time to start exploring its endless potential.
Stay tuned for Part 2, where we’ll dive deeper into PowerShell’s advanced capabilities and how it integrates seamlessly with tools like Advanced Installer to simplify Windows development workflows.
At Advanced Installer, we’re not just sharing insights, we’re also building tools to simplify application packaging and deployment for developers.
If you’re looking for an efficient way to package and update your software on Windows, Advanced Installer for Developers is designed to optimize your workflow and save you time.