As for me this is the most important and critical module for your PowerShellFu.
This module is part of the built modules package that is provided to you out of the box, with the installation of PowerShell.
As it is stated in documentation: This module contains cmdlets that manage the basic features of PowerShell.
Well, based on my experience, this magnificent collection of cmdlets easily covers 80% of your PoweShell activities.
It contains 100+ stunning cmdlets, number of cmdlets vary depending on the PowerShell version and OS type. At the time of writing, the PowerShell Desktop on Windows version contains 107, PowerShell Core on Windows – 115 and PowerShell Core on Linux – 111.
Usage Use Case(s)
Let me provide you my mind map and use cases that PowerShell.Utility module can be applied to.
I’ve grouped all cmdlets in 10 main Use Cases.
Based on the number of cmdlets in this category, main focus of this module is to provide user with the basic (as mentioned in documentation) tools to be successful and unleash the full PowerShell potential.
34 (~30% ) of the cmdlets in PowerShell.Utility module are designed to jump start your PowerShell adoption journey. We can categorize them even further into more specific 8 subcategories.
1. Aliases management
Essentially, aliases are the shortcuts or alternate names for cmdlets, functions, and commands. Aliases are used to make PowerShell cmdlets shorter and easier to remember.
In Powershell.Utility module there are 6 cmdlets for aliases management:
Get-Alias cmdlet to retrieve all the aliases that are available in the current session, including built-in aliases, as well as any custom aliases that you have set, imported, or added to your PowerShell profile.
To create a new alias, you can use the
New-Alias cmdlet. Aliases created using
New-Alias are not saved after you exit the session or close PowerShell.
Set-Alias to create or change aliases for specific functions, scripts, files, or other executables. If you need to remove an alias from the current session, you can use the
And finally, if you need to import or export an alias list from or to a file, you can use the
Export-Alias cmdlets, respectively.
2. Culture Settings
Culture settings in PowerShell refer to the regional and language-specific settings that are used by the PowerShell console and scripts. By default, PowerShell uses the culture settings that are defined by operating system.
There are 3 cmdlets used for culture settings:
Get-Culture cmdlet to retrieve information about the current language settings on the system, such as the keyboard layout and the display format for numbers, currency, and dates.
In addition, you can use the
Get-UICulture cmdlet to retrieve information about the current UI culture settings in the operating system. The UI culture determines which text strings are used for user interface elements, such as menus and messages.
If you need to import language-specific data into your scripts and functions based on the UI culture selected for the operating system, you can use the
Import-LocalizedData cmdlet. It’s designed to enable scripts to display user messages in the UI language selected by the current user.
3. Events Management
Events are a way to trigger an action or script in response to a specific occurrence or condition. Typical usage is to automate tasks, monitor system activity, and perform other types of actions.
There are 8 cmdlets available out of the box:
Get-Event cmdlet to retrieve events (which you have registered or created) that are in the event queue. To retrieve event subscribers in the current session, you can use the
Register-EngineEvent cmdlet to subscribe to events generated by the PowerShell engine and the
New-Event cmdlet. Helps you to forward the events, specify an action to respond to the events, or cancel the subscription.
Execute the Register-ObjectEvent cmdlet to subscribe to events generated by a Microsoft .NET Framework object on the local or remote computer. Once the subscribed event is raised, it is added to the event queue.
To create a new event, you can use the
New-Event cmdlet. Custom events can be used to notify users about state changes in your program or any change that your program can detect, including hardware or system conditions, application status, disk status, network status, or the completion of a background job.
To delete events from the event queue, you can use the
Remove-Event cmdlet. To cancel an event subscription, you can use the
Unregister-Event cmdlet. This deletes the event subscriber from the session and prevents subscribed events from being added to the event queue.
Finally, you can use the
Wait-Event cmdlet to suspend execution of a script or function until a particular event is raised.
This category contains 2 cmdlets:
Get-Uptime. They are used to retrieve information about the current host program and amount of time that the computer has been running since the last reboot. This can be useful if you need to check the current operating system, architecture or how long a server or workstation has been running without interruption.
5. Variable Management
Variables are used to store and manipulate data in scripts and commands. They can hold a wide range of data types, including strings, integers, arrays, and more.
Powershell.Utility module contains 5 cmdlets for variables management:
To retrieve variables, use the
Get-Variable cmdlet. To create a new variable – use the
New-Variable cmdlet. Use it to assign a value to the variable during creation, or you can assign or change the value after it is created. The
Set-Variable cmdlet can be used to set the value of a variable. If a variable with the requested name does not exist, the cmdlet creates the variable.
To delete the value of a variable – use the
Clear-Variable cmdlet. This deletes the data stored in the variable, but it does not delete the variable itself. To completely delete a variable and its value, leverage the
Remove-Variable cmdlet. Except constants or variables owned by the system.
This category helps to learn more about PowerShell and cmdlets available.
There are 2 cmdlets available:
Show-Command. These ones really endures your command discovery and learning experience.
Get-Verb cmdlet can be used to retrieve a list of approved PowerShell verbs that can be used when naming your own commands.
Show-Command is particularly useful for teaching and learning, as it presents a command window that lists all available commands in all installed modules.
7. Scripts Development
This category present scripts that can be leveraged for your custom functions and scripts.
It contains 6 cmdlets:
Import-PSSession cmdlet can be used to import commands from another session, including those from customized shells or other modules and snap-ins. Use
Invoke-Expression to evaluate or run a specified string as a command and return the results.
For measuring execution time of script blocks and cmdlets, the
Measure-Command cmdlet is your friend.
Send-MailMessage cmdlet can be used to send an email message.
Start-Sleep cmdlet can be used to suspend activity in a script or session for a specified period of time. And finally, the
Write-Progress cmdlet can be used to display a progress bar within a PowerShell command window, with the ability to select indicators for the bar and the text above and below it.
8. File Actions
This one is pretty self explanatory, it contains 2 cmdlets:
Create temporary files using the
New-TemporaryFile cmdlet. This creates an empty file with a .tmp file extension and a random hexadecimal number in the file name. The file is created in the TEMP folder.
Unblock-File can unblock files that were downloaded from the internet. Use it when you want to run PowerShell script files that were downloaded from the internet, as they are typically blocked by default. By using
Unblock-File, you can bypass this block and run the file even when the PowerShell execution policy is set to RemoteSigned.
This category consists of powerful set of debugging features that can help with troubleshooting and diagnosing issues in PowerShell scripts and functions. There are 16 cmdlets:
Start an interactive debugging session within a runspace, set breakpoints on a line, command, or variable, and display the current call stack using
Disable and enable breakpoints using
Enable-PSBreakpoint respectively. (Pretty obvious and self-explanatory).
Get-PSBreakpoint can be used to get a list of all active breakpoints in the current session, and
Remove-PSBreakpoint can be used to delete breakpoints from the console.
To trace PowerShell components, use
Get-PSTraceSource can be used to get trace sources for PowerShell components that are currently in use.
Write-Debug can be used to write a debug message to the console, which can be displayed by using the Debug parameter or the
To manage debugging on runspaces, use
Enable-RunspaceDebug. These commands disable or enable debugging on one or more runspaces and release any pending debugger stops.
Stop-Debugger stops a script in the debugger before running the next statement in the script.
Cmdlets in this category involves identifying and resolving issues with PowerShell scripts and commands.
Main goal is to understand what is going on during the script or function execution and meticulously read the error messages.
It contains 6 cmdlets:
Get-Error command retrieves the most recent error messages from the current session, while the
Write-Error command writes an object to the error stream, declaring a non-terminating error. The
Write-Host command writes customized output to a host, which is typically used to produce display-only output such as printing colored text. The
Out-Default command specifies how PowerShell handles information stream data for a command.
On the other hand, the
Write-Verbose command writes text to the verbose message stream, which is used to deliver more in-depth information about command processing, while the
Write-Warning command writes a warning message.
This category groups cmdlets for dates manipulations. There are 3 cmdlets:
Get-Date cmdlet retrieves the current date and time. The
New-TimeSpan cmdlet creates a TimeSpan object to represent a time interval. And the
Set-Date cmdlet allows you to change the system time on your computer to a specific time and date of your choice.
There is only one cmdlet in the category that can be used to interact with APIs –
Invoke-RestMethod. It’s a versatile cmdlet that can be used to retrieve data from and send data to a RESTful API, send data to a RESTful API, or modify existing data in a RESTful API. Because this one cmdlet is so multifaceted, it deserves a separate post to dive deep into the functionality and use cases.
This category includes 8 cmdlets that are used to display data in different ways:
Export-FormatData cmdlet allows to save formatting data from the current session in an XML file. The
Format-Custom cmdlet uses a customized view to format the output, providing flexibility in displaying views that are not just tables or lists.
Format-Hex displays the input as hexadecimal, helping to determine the file type of a corrupted or unknown file.
Format-List cmdlet formats the output as a list of properties in which each property appears on a new line, while
Format-Table formats the output as a table with the selected properties of the object in each column. The
Format-Wide cmdlet formats objects as a wide table that displays only one property of each object.
To manage the formatting data, PowerShell provides
Update-FormatData cmdlets. The former retrieves the formatting data in the current session. The latter reloads the formatting data from formatting files into the current session, allowing you to update the formatting data without restarting PowerShell.
This is just a summary of the Data Manipulations capabilities; I have written the whole series of posts related to this topic. Please refer to How to use PowerShell for Data Manipulations for more information.
Groups built-in cmdlets that help to retrieve data from a variety of sources such as databases, files, and web services. Leverage PowerShell to execute SQL queries, parse log files, or scrape data from web pages.
There are 5 cmdlets:
Please refer to Empower your Data Retrieval with PowerShell for more details.
Set of cmdlets to perform various data processing tasks such as filtering, sorting, and grouping. Leverage PowerShell to manipulate data in a flexible and efficient way.
It contains 11 cmdlets:
Please refer to Make your Data Processing more efficient with PowerShell for more details.
Please refer to Data Transformation Made Easy with PowerShell for more details.
Please refer to Data Export with PowerShell: Best Practices and Advanced Techniques for more details.
To sum it up, the awesome PowerShell.Utility module contains quite a few cmdlets.
- ~40% of the cmdlets are related to different manipulations with data like data retrieval, processing, transformation and export;
- ~30% of the cmdlets can be leveraged to improve your productivity and help you to master PowerShell faster;
- ~14% of the cmdlets are dedicated to debugging activities of your PowerShell scripts and functions;
- ~16% are other cmdlets that cover large range of use cases: PowerShell Troubleshooting, Date & timestamps manipulation and API Interaction.
To my subjective opinion this the one of most useful built in PowerShell modules.
Thanks a lot for reading.