While I have not dug too much into dealing with the Runspaces from C# (I have found the documentation pretty lacking), my best guess is that PowerShell remote sessions are not going to be able to execute your local code. When trying to perform a similar operation purely in PowerShell, it can only load modules that already reside on the remote computer. It will marshal data and script blocks across the network, but not code. This would be partly why when you receive a marshalled object, it is stripped of all methods (and is technically a wrapper type, not the original type). You are attempting to marshal a local type across the network to be used on the remote session and the PowerShell infrastructure is not meant to do that.