Because they return two different types of objects.
(gwmi -Class Win32_Share).GetType()
returns a System.Array
instance while
(New-Object "System.Management.ManagementClass" "Win32_Share").GetType()
returns a System.Management.ManagementObject
instance
Note that it doesn't make sense to call Create on an already instantiated object anyway, or in other words: why do you think you need it?
Edit
Your comment actually made me rethink (finally) and your conondrum is that you should use -query
instead of -class
. I have yet to figure out what the actual difference between both methods of calling is but I assume it's the same class/instance distinction.
Get-WmiObject -query "SELECT * FROM meta_class WHERE __class = 'Win32_Share'"