I've just run your code on my 8.1 - exactly the same details on the $PSVersionTable as you and it works. Well it gave me a list of installed programs. Of course, when I opened the Powershell ISE I ran the 32 bit one, and that didn't work - but at least it told me why!

I notice that you didn't say what error messages there were or how it didn't work.....

I has set: Set-StrictMode -Version Latest in my profile in response to a previous post about another problem. I remembered this last night while waiting to go to sleep (yeah I know I live a boring life!). Well I had decided to try it this morning but my better half had other plans (getting ready for tomorrow) so I just got to it. Setting: Set-StrictMode -off solved the problem. Why I don't know!

2.0 -- Prohibits references to uninitialized variables (including uninitialized variables in strings). -- Prohibits references to non-existent properties of an object. -- Prohibits function calls that use the syntax for calling methods.
-- Prohibits a variable without a name (${}).

Latest: -- Selects the latest (most strict) version available. Use this value to assure that scripts use the strictest available version, even when new versions are added to Windows PowerShell.

Thanks for the catch! Fixed in above post. I wish all my coding problems were so MAJOR!

As to replacing Belarc I don't think I have all the stuff they report but then I report some stuff they don't and my code can easily generate a Text file for what ever use you want via a output redirection on the command line. Of course this is a work in progress so who knows in the future maybe?