PowerShell Potluck June 2025
Once again, we've reached the end of the month. By the time you read this, I will have wrapped up my European PowerShell Tour. I'm assuming I'll have content to share next month based on my adventure. In the meantime, I have compiled a few items that I think you will find helpful and of interest.
PowerShell Summit 2025 Session Videos
Session recordings from this year's PowerShell+DevOps Global Summit are now available on YouTube. The playlist comprises 70 sessions, totaling nearly 60 hours of content. If you missed the event, this is a great way to catch up on what you missed. If you were there, this is a great way to relive the experience and watch the sessions you were forced to skip. What the videos don't capture is the community spirit and "hallway track" that is such a big part of the event. If you can, I highly recommend attending the next Summit in person.
Oh, and this was the first time in many years that I was able to present. My presentation was based on the material I've been sharing in this newsletter. You can find my session recording at https://www.youtube.com/watch?v=4xVDorpEhm8&list=PLfeA8kIs7CoftB7JKZTiUKnVUHIMtwYF5&index=24.
At the very least, I recommend you watch Jeffrey Snover's session on Individual Contributor Careers.
PowerShell Summit 2026
On a related note, the call for sessions for next year's PowerShell Summit will be opening soon. Anyone can present and I've encouraged this audience often to consider submitting a session. Everyone has something they can teach and share with others. To help you prepare, take a look at https://www.powershellsummit.org/2026-information/ for tips and suggestions on preparing a killer session proposal.
I strongly recommend submitting at least three proposals. You want to increase your chances of being selected. I also think you can improve your odds if you convey why you are the best person to present the topic. If you have a unique perspective or experience, share that in your proposal. The more you can convey your passion for the topic, the better.
Reading List
I have a few reading recommendations for you this month. I think you'll find them helpful. I'm sure some of the content is material you already know, but repetition and review are great ways to reinforce your knowledge and skills. It is also possible that it will introduce a nugget of information that you didn't know or had forgotten.
First, longtime PowerShell MVP Michel De Rooij has written a good summary on PowerShell collections, including arrays, hashtables, and generic lists. Find a few minutes on your coffee break to read https://practical365.com/practical-powershell-crafting-collections/.
Rod Trent, who you may know from Microsoft and security circles, has written a nice article on using the PowerShell pipeline. Again, I expect some of the material to be a review for you, but you might pick up a new trick or two as I did. Head over to Rod's newsletter on Substack and read https://myitforum.substack.com/p/advanced-pipelines-and-objects-in.
Modules
I also have a few module recommendations for you this month.
MySqlite
I recently updated the MySQLite module for working with SQLite databases. The latest version includes support for ARM64 processors on Windows. I wrote the module as a framework for other modules that rely on a SQLite database, such as my PSWorkItem module.
However, you can also use it to work with other SQLite databases.
PS C:\> Get-mySQLiteDB -Path C:\temp\Inventory.db
Path FileName Size Modified Tables
---- -------- ---- -------- ------
C:\temp\Inventory.db Inventory.db 24576 6/4/2025 4:57:12 PM {Metadata, propertymap_myos, OS}
PS C:\> Invoke-MySqliteQuery "Select * from OS LIMIT 2" -Path C:\temp\inventory.db
Computername : SRV2
OS : Microsoft Windows Server 2016 Standard Evaluation
InstallDate : 10/26/2020 6:56:32 PM
Version : 10.0.14393
IsServer : 1
Computername : SRV1
OS : Microsoft Windows Server 2016 Standard Evaluation
InstallDate : 10/26/2020 6:56:33 PM
Version : 10.0.14393
IsServer : 1
I wrote the module to make it easy to save PowerShell output to a database and then bring it back into PowerShell.

Convert
Another module I recently discovered is called Convert. This is a helpful module that provides a set of functions for converting between different data types. Usually, these conversions require some .NET voodoo, but this module hides the magic. All you have to do is run the command.
PS C:\> ConvertTo-Celsius 73
22.78
PS C:\> ConvertTo-Fahrenheit 18
64.4
PS C:\> ConvertTo-TitleCase "oh what a happy day"
Oh What A Happy Day
PS C:\> $s = ConvertTo-Base64 -String "I am the secret PowerShell walrus"
PS C:\> $s
SSBhbSB0aGUgc2VjcmV0IFBvd2VyU2hlbGwgd2FscnVz
PS C:\> ConvertFrom-Base64ToString $s
I am the secret PowerShell walrus
Run Get-Command -module Convert
to see the complete list of available commands. There is also a nice summary of the module at https://powershellisfun.com/2025/05/23/using-the-convert-module-in-powershell/.
Select-ToDelete
In previous newsletters, I've shared the utility functions I've written using the pwshSpectreConsole module. Here's a function I wrote to make it easier to select files to delete. I often want to choose a mixed set of files from a folder. Instead of trying to write multiple Get-ChildItem
commands, I can pipe the files to this function and then select the files I want to delete. The function uses the Read-SpectreMultiSelection
command from the pwshSpectreConsole module to display a list of files in a folder. I can then select one or more files to delete.
#requires -version 7.5
#requires -module pwshSpectreConsole
Function Select-ToDelete {
[CmdletBinding(SupportsShouldProcess)]
[alias('std')]
param (
[Parameter(Mandatory, ValueFromPipeline)]
[ValidateNotNullOrEmpty()]
[System.IO.FileInfo[]]$InputObject
)
Begin {
#initialize an empty list to hold the files
$list = [System.Collections.Generic.List[System.IO.FileInfo]]::new()
} #begin
Process {
` #add each file to the list
foreach ($file in $InputObject) {
$list.Add($file)
}
} #process
End {
if ($list.Count -gt 0) {
#need to escape the [] characters in the prompt
$splat = @{
Message = "`nSelect file(s) to delete from [SpringGreen1]$($list[0].DirectoryName)[/]:"
Choices = $list
ChoiceLabelProperty = 'Name'
Color = 'Violet'
AllowEmpty = $True
PageSize = 10
TimeoutSeconds = 30
}
Read-SpectreMultiSelection @splat | Remove-Item
}
} #end
}
I can pipe files to it.

The function supports the -WhatIf
and -Confirm
parameters, allowing me to see what would happen before actually deleting the files.
PS C:\> dir c:\temp\*.png | Select-ToDelete -WhatIf
This prompt times out in 30 seconds...
What if: Performing the operation "Remove File" on target "C:\temp\about-pspodcast-0.6.0.png".
What if: Performing the operation "Remove File" on target "C:\temp\db.png".
I've also added a 30-second timeout. I'll probably shorten that. It's little tools like this that make my day easier and even a little fun.
Your Next Scripting Challenge
Finally, I have a new scripting mission for you, should you choose to accept it. This challenge revolves around certificates and the CERT: PSDrive. This will require a Windows system. The challenge has several parts.
- Find all expired certificates on the local computer.
- Find certificates expiring in the next 90 days or 180 days. You will want to expose this as a parameter.
- Take the code you've written and convert it into a function that retrieves information from a remote computer. Support for credentials is optional.
- Get a list of certification authorities and the number of certificates they have issued. Use the issuer's organizational name. Likely, some certificates will only have a common name (CN). Use that value if there is no organization name.
The output should include the computer name and the certificate path.
Tip #1: Pay attention to the object types returned by the Get-ChildItem
command.
Tip #2: Read the help
As usual, I will share my solutions next month.
Summary
That's it for this month. Please note that if you need to manage or upgrade your subscription, you can use the links located in the email footer. The process works best when you make changes rather than I.
Enjoy your weekend, and I'll see you next month.