PsCustomObjects are effectively a superset of Hashtables. Hashtables have name-value pairs. The names and values don’t have to be strings, but there’s nothing that comes close to a ScriptProperty, etc. Still, there are some cmdlets and constructs that are available only to Hashtables, but to PsCustomObjects, and vice versa. Here’s a quick and dirty way to convert between the two, catching only properties and letting methods go by the wayside.