System.Object or PSObject

I have recently started using custom objects inside a few of my PowerShell scripts. Upon looking around online I noticed that there are two ways to create these objects

 $Obj1 = New-Object System.Object 
 $Obj2 = New-Object PSObject 

They both have the functionality that I needed, such as setting custom properties for necessary information to be held.

My question is, is there a necessary time to use one of them over the other? I found an article on Technet that seems to be heading in the right direction to giving an answer to this question, but I haven’t been able to wrap my mind around it. Link is below.

Technet Link


Hey there Cory,

This might help a little more in getting your head wrapped around it.

Thanks Will! That article definitely helped out.

No problem! Also, if you’re looking at creating custom objects, you might want to check out PSCustomObject.

I see this shorthand a lot:

PS C:\> [pscustomobject]@{name='joe';address='here'}

name address
---- -------
joe  here

I saw the PSCustomObject once before yes. I believe something along these lines, pretty close to the example js posted.

$obj = [PSCustomObject]@{Property1=a; Property20=b}