Как я могу заставить работу powershell возвращать тип объекта, который я хочу?

Я пытаюсь использовать задание powershell, чтобы создать объект TreeView и вернуть его, вместо этого я получаю тип PSObject каждый раз, когда задание заканчивается.

Я пытался вернуть объект TreeView разными способами, например, добавив [System.Windows.Forms.TreeView] перед именем переменной в строке возврата или как часть массива, ничего не возвращает ожидаемый результат

$job = Start-Job -ScriptBlock{
    Add-Type -AssemblyName System.Windows.Forms
    $Tree = New-Object System.Windows.Forms.TreeView
    Return $Tree
}
Wait-Job $job
$Output = Receive-Job $job
$Output.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     PSObject                                 System.Object

person EnTm    schedule 15.05.2019    source источник
comment
Кажется, что вы не можете получить живой объект из задания из-за сериализации/десериализации.   -  person montonero    schedule 15.05.2019
comment
Монтонеро, вы уверены, что нет единственного способа добиться этого? может с помощью разных команд? iRon, как видите, я использовал Receive-Job в последней строке кода и показал результаты во втором блоке кода.   -  person EnTm    schedule 15.05.2019
comment
@montonero прав. Обратите внимание на сообщение об ошибке при попытке привести $Output к ожидаемому типу [System.Windows.Forms.TreeView]$Output.   -  person JosefZ    schedule 15.05.2019
comment
Вы возвращаете объект TreeView, но PowerShell упаковывает его из-за того, как вы его создаете/возвращаете. Используйте $Output | Get-Member, чтобы увидеть базовый объект (Deserialized.System.Windows.Forms.TreeView). Вы можете получить доступ ко всем ожидаемым свойствам обычным способом: $Output.Nodes. Обратите внимание, что, как уже указывалось, это не «живой» объект, поскольку он был десериализован как часть задания, поэтому будет иметь некоторые ограничения (в основном отсутствие методов).   -  person boxdog    schedule 15.05.2019
comment
@EnTm Вы можете попробовать некоторые расширенные классы сериализации из .NET, как в этом ответе хотя сам не пробовал.   -  person montonero    schedule 15.05.2019
comment
Спасибо всем, ребята, теперь я понимаю, как работает работа powershell. И благодаря вашему руководству я искал другой метод для достижения своей цели и нашел тот, который использует другой экземпляр powershell для изменения моего объекта (моя первая цель также состояла в том, чтобы создать объект в задании, но я могу работать с этим) stackoverflow.com/questions/15382728/   -  person EnTm    schedule 15.05.2019