Background Info
This post was partially inspired by a (Skeet…?) by a good friend of mine and Microsoft MVP Thomas Votchen, who’s recovering from surgery and couldn’t let his laptop be, and decided he needed to run winget upgrade --all
to get the latest features of the applications he’s using. Thomas, being like me, wanting to be at the forefront of changes, usually due to wanting to ensure that a feature implementation is done in the best way for most use cases. Thomas, like me, can deal with the pain that comes with new changes to applications and adapt easily, even if sometimes we end up thinking WDAF at certain changes.
Picking up our devices and keeping on working, is something that I did in 2017 after having my Gallbladder out & is a common trait of us techies. But it’s also a common trait for us all to at least keep doing something we feel keeps us connected to our regular lives, when we are in states of recovery, like after surgery, which well, I’ll detail more on that in a post on Mental Health Affects Someone Like Me - mhasl.me at somepoint the future.
Back to the content of this post and please Note that as a seasoned IT Professional, on balance I have to be mindful that we all adapt to changes differently, again something that I will write about on MHASL.ME in the future.
Because of this, at this time, I’d usually not straight out recommend just installing all application updates at once, but it certainly is easier and quicker to do so.
It’s perfectly acceptable, but not how I choose to do things, and follow a staged rollout plan of most things that I have installed on all of my machines. This is a common practice across IT & is one that I recommend understanding more on. Especially as this allows me, when I have the right setup of devices, the ability to keep on going if an update breaks me on one device.
It’s unfortunate that a new release of software may remove something that you are reliant on or just unfortunately breaks something else. We all know that context switching, hurts productivity, but we also know getting back on our feet when something that we are reliant on has broken, whether that be our equipment, like the computers we use, or things in our home, like our fridge or cooker, or our cars bikes or vans, if we have them, slows us down from doing all the things we need to get on with and do. This is why it’s always good to have a backup plan!
Ideally you should be reading the release notes for releases, as the applications that we all use, often have changes that can take a lot of getting used to. Software management and development is HARD and version incrementing practices used don’t have an agreed set standard practice’s that are always able to be relied on. I’ll go into more on this in a future post and presentation.
This is especially true if it is a User Interface change, like the layout of the application, or which options are available for customising how you can use the application & can vary dramatically between versions.
Even more so if it is an Operating System change, which isn’t something that I’ll cover in this post.
A good book to read to understand a bit more on this might include Who Moved My Cheese & why software changes can be not only a pain point for users, but also can slow us down, and in the worse cases be so stressful your users (which includes you) may wanna ‘Scream & Shout’ in frustration. This is a common thing and comments like this Despite these efforts, the issue remains unresolved, and it has reached a level of frustration that is hard to comprehend.
is something that I’ve regularly seen over the years.
So, with that in mind, do what makes sense for you. There is no one right way to go about this, and not always updating to the latest and greatest can result in security risks, so please bear that in mind, because you may need to update because of security fixes & deal with the pain that comes with having updated.
That said, in my experience the use of a matrix of different configurations that cover the following,
Device Type
- mobile
- desktop/laptop/tablet
- server
- IoT
Hardware Configuration
- motherboard
- CPU
- RAM
- Hard Drive
- other devices
Device Operating System & it’s core configuration
- is it using a long term servicing LTS release or the most recent release
- this is useful when you are testing out different things, perhaps in mid migration to another product offering.
All Installed applications on each of the above.
This gives a useful matrix, even if it can be difficult & a lot of work to keep a track of.
This is why we have IT HelpDesk teams, and IT Operations staff.
You cannot, and should not attempt to replace these staff with AI tooling, however please do give them the tooling & training as well as the time to research and then design and build useful #Automation tooling that offers enhancements to other tools to make their job easier.
Tooling like PowerShell, and using it and the ecosystem around it, is a great example of a tool to train your team up in & is something I can help with - see my Announcing Re-Initialise post for more details.
You also really should look to both pay them better, and ensure they are not a single point of failure either.
This is where lots of businesses tend to mess up, or lowball estimate the effort needed to do all of this in a way that keeps staff engaged & wanting to stay with them.
It need not be like that. Something that I will detail more on, in a future post on either on here on mhasl.me in 2025.
Though once you have a matrix like this you can start to review application changes side by side ideally in realtime, prior to pushing these out these changes onto your own users.
This also becomes easier with applications having multiple editions so you can allow your more technical users & trainers play with the latest changes and provide feedback on them, much like I have for the last 10 years as a Windows Insider, 7 years (2016-2022) as a Microsoft MVP in Cloud & Datacenter Management, an Office Insider, an Xbox Insider and across a variety of applications and products on GitHub since 2014 & have been doing since 2006, again prior to them going to your users, and allows for internal docs & training materials to be updated.
This is also why many IT Professionals, myself included, not only have multiple devices, but cannot live & function properly or be productive without having at least a primary and secondary device available to them at all times. My ideal number of physical devices is at least 5 functional, online devices at a time. I will post more about why in a future post.
I know that I can’t manage to be effective or productive when forced to use either older devices that are in dire need of replacement, or devices where they should be quick, but have been slowed down by other installed software either running when it’s not expected, or is not good at releasing it’s lock on the devices resources whether that be CPU, RAM, Network, or aging storage devices.
In 2025 & beyond I will be publishing more content around lots of areas mostly focusing on device management practices as I rework a number of things that I have been using over the years on this, as well as changes I make to not only this blog site, but so many other things too, I had hoped to be able to do this in 2024 which is something in 2025 I hope to be able to do, though it was on My 2024 Wishlist to be able to refresh my tech equipment and it didn’t happen, so I’m not holding out too much hope for 2025 right now.
Application Management - it’s hard - Enter WinGet
You can install & then update Applications using WinGet, using a few different ways, but I am only focusing in this post on using WinGet to upgrade installed applications.
If you haven’t heard about WinGet yet, you can read up about it on the official documentation or go and watch one of the many videos on it.
Application Management, falls under Device Management processes, which can also cover Packages used by those applications or in the Software development process for making those applications. Device Management also includes Drivers, Updates, and a number of other things, like managing your warranties or if you are in a family or business, it may involve user management, as well as device tracking.
Applications covers all sorts of things, like PowerShell (something I know a fair bit about) Firefox (my browser of choice since 2006), Visual Studio Code, 7Zip, image editing tools like GIMP, streaming tools like OBS and all the games that we can play too, via likes of Stream or the Xbox Gamer Pass.
It’s one of the biggest ITOps headaches going. Ask anyone you know that manages IT Devices whether for themselves, their family or for a business.
This is why there are so many tools out there, especially in the Microsoft space, whether that be tools like WinGet, PowerShell/DSC, Chocolatey, or products like Intune, System Centre Configuration Manager (SCCM), or the countless offerings from 3rd party Managed Service Providers (MSP’).
WinGet - what is it?
WinGet is the new(ish) tool on the block, and is something that I expect to see more use as a move to simplify IT Ops management going forward.
It is a application management tool.
It shouldn’t be confused with a package management tool, but can be used in conjunction with them, though it can be used as as general tool.
Whilst many would like to see winget upgrade --all
integrate with package management tools like PSResourceGet (PowerShellGet’s replacement for PowerShell Modules & Scripts), or Nuget packages or npm or pip or other packages used in other parts of software development, I personally would prefer this not to happen. But if you really want something like this then I’d recommend having a look into AnyPackage which has a provider for WinGet as well as PowerShell, NuGet and others too. At least in the meantime until there is a solution that does it all, which, honestly, I highly doubt we will see one that everyone is happy with. I may do a series on AnyPackage in the future, but for now it looks quite promising as a replacement to the older OneGet/PackageManagement solution that Microsoft gave us back in 2016, which is no longer in development.
WinGet, though is in active development and is available on Windows 10 & Windows 11 as well as Windows Server 2025.
WinGet, may do the same as AnyPackage, but let’s see what happens.
Using the WinGet PowerShell Module
Microsoft have released the WinGet PowerShell Module which, sadly isn’t included by default, but can be installed easily, just make sure to have at least the 1.9.25190
version.
Install-Module Microsoft.WinGet.Client -MinimumVersion 1.9.25190
There are a number of ways using either the Id, Name, moniker for finding, installing & updating your applications and other packages you may use WinGet to manage.
I am only going to focus on how to check for what’s already installed not what I want to install. That will be in a future post.
The following is against a single machine & I will publish an additional post with details on across multiple devices in 2025.
Checking for a single package
Below you will see the way to check for updates to the 7zip application, & for preciseness I am using the full id of that particular application as is searchable in the WinGet Packages Repository, as this can ensure that you aren’t installing a version from anyone other than the main publisher or a publisher of your choosing.
Get-WinGetPackage -Id 7zip.7zip
This is the same as running winget list 7zip.7zip
but returns a PowerShell Object and is much more useful than the output the WinGet Cli tool gives you.
Get-WinGetPackage -Id 7zip.7zip | Update-WinGetPackage
Checking for multiple packages
There are a number of ways you can do this but currently this could be improved somewhat & will be once I’ve implemented the changes needed from this issue
Right now you have to do this
'Discord.Discord','7Zip.7Zip' | foreach {Get-WinGetPackage -ID $_} | Upgrade-WinGetPackage
You could do the following
Get-WinGetPackage | Where {$_.Id -match '7Zip|Discord' -and $_.IsUpdateAvailable }
Or this if you just want to check for updates to all installed packages you are managing with WinGet you can do this
Get-WinGetPackage | Where IsUpdateAvailable -eq $True
You can then if you want do this to pick and choose which ones you want to attempt to upgrade
Get-WinGetPackage | Where IsUpdateAvailable -eq $True | Out-GridView -PassThru | Upgrade-WinGetPackage
However, there are better ways than this if you wanna be lazy!
Being Lazy with the PowerShell Module
Using aliases in the PowerShell Module, which btw I added in this Pull Request to the winget-cli repo which is where the PowerShell Module source code currently lives, you can now do the following
gwgp | ? IsUpdateAvailable | ogv -p | udwgp
This is because the IsUpdateAvailable property is a [Bool]
so either True or False and will only provide objects where it is equal to True.
Being super lazy the PowerShell Way!
Here I am going to use and introduce you to the PowerShell TypeData system. This will show how we can add our own enhancements to the objects that PowerShell returns, to do more, every time we return this object type.
I’ve been meaning to write about this for along time but it’s applicable here, so here goes.
You can read the PowerShell docs, for much more info around the type system and extending it, which are extensive & really go into details. There are also a number of books and articles and sessions that cover this too.
I am going to add a AliasProperty, so that I can be really lazy.
There are 2 methods to this that you can use, the xml or the native PowerShell method, I prefer not using XML, whilst it has it’s uses, particularly in locked down environments, I recommend for most the use of the PowerShell method.
Using the Inline PowerShell method with Splatting
$typeDataParams = @{
TypeName = 'Microsoft.WinGet.Client.Engine.PSObjects.PSInstalledCatalogPackage'
MemberType = 'AliasProperty'
MemberName = 'IUA'
Value = 'IsUpdateAvailable'
}
Update-TypeData @typeDataParams
So now you can, be like me and lazy & run this to check and update installed packages
gwgp | ? IUA | ogv -p | udwgp
Being superduper lazy the PowerShell way!
Using your profile you can as part of initiating your PowerShell environment, enforce the addition of that property, after loading the WinGet PowerShell Module.
Or you can add it to your own module that requires a number of loaded modules, and that has this and other enhancements.
The Downfall of doing that is it slows down loading PowerShell as it needs to do it each time. I’ll post more on that in the future.
But as it stands my profile can be pretty slow to load, especially on a device with lots already running.
You could also have that previous line run once per day as part of loading your profile, something that I’ll publish about in 2025 too.
Downfalls of WinGet
There are some that I have identified, but I would recommend you at least have a play around with WinGet and decide if these matter to you or if you can find it of use.
Self Updating / In Active Development
This is a pro and con but for those that don’t want things to break on them, you may want to stick with other tools which have slower updating practices and do not have a self update process. I believe this can be turned off in WinGet though.
Delays in releases being published to the community package feed
Every single PowerShell release there is always at least 1 issue raised for “latest version is not yet available on WinGet”
- I respond to these almost every release
- I am soon to release a way to ignore this based on a checking system and will do in the new year once I’ve finished it.
No centralised package source when using the community package feed
This means that you are always on every single install/upgrade pulling the install package from wherever it is hosted & not from an internal package source, like your own web server or file shares.
This matters when you are downloading and installing packages for use in disconnected environments, or where the connection to the internet is slow.
This can be very easy to Workaround by setting up your own package source.
Which I will go into detail about in 2025 as well.
Applications often have built in update processes
These often are the quickest way to get the update installed, but require users to initiate the process.
Others tie into other update sources, including WinGet, Microsoft Update, or other package management sources, for example apt or can be pointed to your own sources.
Difficult integration with other tools
I have been a fond user of chocolatey for as long as it’s been around for my application install process.
I still recommend that you have a look into it too. It has a number of features that are either currently missing in WinGet or likely will never be a part of WinGet. It also has some great tooling and the team behind chocolatey are awesome people, as are those behind WinGet.
WinGet & Chocolatey can work well together, same with other tools, and it is only a matter of time for there to be more integration with those other existing or future tools.
No Official Web Search tool
There are ones out there, and whilst I am a huge fan of community tools, I know this is an issue for some organisations.
That’s all folks!
This post would have been with you sooner if I hadn’t had a minor domain renewal blip, due to my finances being a mess due to being out of paid work & whilst I have the groundwork for consulting services like under Announcing Re-Initialise, there is more that I am putting together to make these things a thing of the past. Especially as I’ve had a number of issues in 2024 with devices breaking, Internet access dropping and being unable to pay my Mobile Phone bill either, which currently means I’ve lost a phone number I’ve had for 17+ years, but hopefully I can change that and regain access to it, though I am not holding out that this will happen anytime before 2025.
2025, I hope will be the year I can make things like yearly domain renewals & struggling to make ends meet a thing of the past for me and to lay the foundations to see me through until at least 2030. It doesn’t help having a number of them in December, but that’s when I’ve begun some new ventures and started the planning & doing things for the future. The kilasuit.org domain which hosts this blog, as well as the one I use for Mental Health Affects Someone Like Me - mhasl.me were both bought in December.
I have a few people to thank this year for helping me with towards the costs that I’ve had with things like these domain renewals in these last few weeks alone. They know who they are.
I am in the process of trying to work out what level of funding I need to secure going into 2025 to really be able to source and manage the needed equipment & services that I will need to be doing in order for me to really get on with all the research & development I have planned in 2025.
Some of this might be as a consultant trading as a sole trader under Re-Initialise, though it also could be under any other brands that I may work with in 2025. For now Re-Initialise is an extension of the kilasuit.org brand I use here.
Catch you all in a few different posts that I have almost ready to publish & will do very soon, but from me & Icihmaru bye bye for now!