Stop Reinventing the Wheel: Supercharge Your PowerShell with These Must-Have Modules
Are you still manually crafting PowerShell scripts for tasks like file transfers or generating Excel reports? If so, you’re likely spending far more time than necessary. The PowerShell Gallery boasts a treasure trove of pre-built PowerShell modules designed to streamline your workflow and handle common tasks with ease. These modules are often more robust, efficient, and easier to maintain than custom scripts.
This article will explore several essential PowerShell modules that can significantly boost your productivity and simplify your scripting endeavors. We’ll cover installation, usage, and practical examples to demonstrate their power.
Getting Started with PowerShell Modules
Before diving into specific modules, let’s cover the prerequisites and basic installation procedure.
Prerequisites: PowerShell Version and Execution Policy
To leverage these modules, ensure you have PowerShell 5.1 or higher installed. While most modules are cross-platform compatible with PowerShell 7, some may be Windows-specific. To check your PowerShell version, run the following command in your PowerShell console:
powershell
$PSVersionTable.PSVersion
Additionally, you need to configure your PowerShell execution policy to allow script execution. This can be achieved by running the following command:
powershell
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned -Force
This command sets the execution policy for the current user to RemoteSigned, allowing scripts signed by a trusted publisher to run.
Installing PowerShell Modules
The recommended approach to install PowerShell modules is using the Install-Module cmdlet. To avoid requiring administrator privileges, we’ll utilize the -Scope CurrentUser parameter during installation. The general syntax for installing a module is:
powershell
Install-Module -Name
Let’s now explore some of the most useful PowerShell modules and see how they can revolutionize your scripting workflow.
Enhancing Your PowerShell Experience with PSReadLine
Even experienced PowerShell users can benefit from the power of PSReadLine. While it ships with PowerShell by default, many don’t fully utilize its capabilities. This module provides advanced command-line editing features that significantly improve the scripting experience.
PSReadLine Features:
- Syntax Highlighting: Makes your code more readable by color-coding different elements.
- Multi-line Editing: Allows you to easily edit complex commands spanning multiple lines.
- Predictive IntelliSense: Suggests commands and parameters based on your history, saving you valuable typing time.
Installing and Configuring PSReadLine
To ensure you have the latest version, install PSReadLine using the following command:
powershell
Install-Module -Name PSReadLine -Scope CurrentUser -Force
The -Force parameter overwrites any existing version.
Unleashing Predictive IntelliSense
The predictive IntelliSense feature is a game-changer. To enable it, execute the following commands:
powershell
Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle ListView
The first command configures PSReadLine to use your command history as the source for predictions. The second command sets the prediction view style to ListView, displaying suggestions in a user-friendly list.
How it Works: After running a few commands (e.g., ipconfig, Get-Service), start typing a command. PSReadLine will display suggestions from your history. Use the Up/Down arrow keys to select a suggestion and press Enter to execute it.
Streamlining Data Exports with ImportExcel
The ImportExcel module has garnered over 14 million downloads on the PowerShell Gallery, solidifying its status as an indispensable tool for working with Excel spreadsheets.
Key Advantages of ImportExcel:
- Excel-Free Operation: Create and manipulate Excel files without needing Excel installed, ideal for server environments.
- Comprehensive Functionality: Supports basic exports, pivot tables, charts, conditional formatting, and more.
- Automation-Friendly: Simplifies the creation of Excel reports in automated scripts.
Installing ImportExcel
Install the ImportExcel module using the following command:
powershell
Install-Module -Name ImportExcel -Scope CurrentUser
Practical Example: Exporting Service Information
Here’s a common use case: exporting a list of running services to an Excel file:
powershell
Get-Service | Where-Object {$_.Status -eq “Running”} |Export-Excel -Path “ServiceReport.xlsx” -AutoSize -TableStyle Medium9 -FreezeTopRow
This command does the following:
Get-Service: Retrieves all services on the system.Where-Object {$_.Status -eq "Running"}: Filters the services to include only those that are running.Export-Excel: Exports the filtered service data to an Excel file named “ServiceReport.xlsx”.-AutoSize: Automatically adjusts the column widths to fit the content.-TableStyle Medium9: Applies a predefined table style for visual appeal.-FreezeTopRow: Freezes the header row, ensuring it remains visible while scrolling.
Creating Dynamic HTML Reports with PSWriteHTML
PSWriteHTML simplifies the creation of visually appealing HTML reports from PowerShell scripts, even without prior HTML knowledge.
PSWriteHTML Features:
- Table Generation: Easily create HTML tables from PowerShell data.
- Chart Integration: Embed charts and graphs to visualize data trends.
- Filtering and Sorting: Incorporate JavaScript-powered filtering and sorting capabilities.
- Export Options: Include buttons for exporting data to various formats (e.g., CSV, Excel).
Installing PSWriteHTML
Install the module using the following command:
powershell
Install-Module -Name PSWriteHTML -Scope CurrentUser
Example: Generating a System Report
Let’s create a system report that displays the top 10 processes by CPU usage:
powershell
Import-Module PSWriteHTML
$procs = Get-Process | Select-Object Name, CPU, WorkingSet -First 10
New-HTML -TitleText “System Report” -FilePath “Report.html” -ShowHTML {
New-HTMLSection -HeaderText “Process Information” {
New-HTMLTable -DataTable $procs -Filtering -Buttons @(‘copyHtml5′,’excelHtml5’)
}
}
This script does the following:
Import-Module PSWriteHTML: Imports the PSWriteHTML module.Get-Process | Select-Object Name, CPU, WorkingSet -First 10: Retrieves the top 10 processes, selecting their name, CPU usage, and working set.New-HTML: Creates a new HTML report with the title “System Report” and saves it to “Report.html”.New-HTMLSection: Adds a section to the report with the header “Process Information”.New-HTMLTable: Creates an HTML table from the process data, enabling filtering and including buttons for copying and exporting data.
The resulting “Report.html” file will contain a dynamic HTML report with a table of the top 10 processes, complete with filtering and export options.
Managing Windows Updates with PSWindowsUpdate
With over 33 million downloads, PSWindowsUpdate is the most popular module on the PowerShell Gallery, providing cmdlets for managing the Windows Update Client.
PSWindowsUpdate Capabilities:
- Update Checks: Scan for available updates.
- Update Installation: Install specific updates or all available updates.
- Update Hiding: Hide problematic updates.
- Scheduling: Schedule update installations.
- Driver Updates: Manage driver updates.
Installing PSWindowsUpdate
Install the module using the following command:
powershell
Install-Module -Name PSWindowsUpdate -Scope CurrentUser
Example: Checking for Pending Updates on Multiple Servers
The following script demonstrates how to check for pending updates on multiple servers simultaneously:
powershell
$Servers = ‘SERVER01′,’SERVER02′,’SERVER03′
Invoke-Command -ComputerName $Servers -ScriptBlock {
Import-Module PSWindowsUpdate
Get-WindowsUpdate -MicrosoftUpdate | Select-Object @{n=’Computer’;e={$env:COMPUTERNAME}}, KB, Title, Size, IsDownloaded, IsInstalled, RebootRequired
} | Sort-Object Computer, KB | Format-Table -AutoSize
This script does the following:
- Defines an array
$Serverscontaining the names of the servers to check. Invoke-Command: Executes a script block on each server in the$Serversarray.Import-Module PSWindowsUpdate: Imports the PSWindowsUpdate module on each server.Get-WindowsUpdate -MicrosoftUpdate: Retrieves available updates from Microsoft Update.Select-Object: Selects specific properties of the updates, including the computer name, KB article number, title, size, download status, installation status, and reboot requirement.Sort-Object: Sorts the results by computer name and KB article number.Format-Table -AutoSize: Formats the output as a table with automatically sized columns.
Enhancing Terminal Readability with Terminal-Icons
Terminal-Icons adds file type icons to your PowerShell directory listings, making it easier to navigate and identify files.
Installing Terminal-Icons
Install the module using the following command:
powershell
Install-Module -Name Terminal-Icons -Scope CurrentUser
After installation, import the module:
powershell
Import-Module Terminal-Icons
Now, when you use Get-ChildItem (or its aliases like ls or dir), file types will be displayed with their corresponding icons. This requires a Nerd Font installed in your terminal to display correctly. Nerd Fonts are fonts patched with a high number of glyphs, especially popular amongst developers.
Simplifying File Transfers with Transferetto
Transferetto simplifies working with FTP, FTPS, and SFTP protocols by providing PowerShell-native cmdlets.
Installing Transferetto
Install the module using the following command:
powershell
Install-Module -Name Transferetto -Scope CurrentUser
Example: Uploading a File via FTP
powershell
$Client = Connect-FTP -Server “ftp.example.com” -Credential (Get-Credential)
Send-FTPFile -Client $Client -LocalPath “C:\Reports\Report1.xlsx” -RemotePath “/uploads/”
Disconnect-FTP -Client $Client
This script connects to an FTP server, uploads a file, and then disconnects. Transferetto also supports directory uploads, server-to-server copies (FXP), and remote command execution via SSH for SFTP connections.
Conclusion: Embracing the Power of PowerShell Modules
PowerShell modules can significantly enhance your scripting capabilities, saving you time and effort. From improving your command-line experience with PSReadLine to simplifying complex tasks like Excel report generation and Windows Update management, these modules offer a wealth of functionality. The PowerShell modules mentioned in this article only scratch the surface of what’s available on the PowerShell Gallery. Remember to explore the gallery, check update dates and compatibility, and start with modules that address your immediate needs.
Ready to take your PowerShell skills to the next level? What are your favorite PowerShell modules? Share your thoughts and experiences in the comments below!
Sources & Further Reading:
Original article at www.makeuseof.com


