Я столкнулся с проблемой, которая на самом деле не является помехой, но возможной ошибкой из-за сериализации при извлечении выходных данных задания (угадайте?). Приведенный ниже код представляет собой фрагмент из Start-Job, а затем записывает выходные данные foreach (Start-Job | Receive-Job)
class ComputerResult {
$computerName
$bldg
$room
$organization
$user
$lastUpdate
$printerlist = @()
$finalprinterlist = @()
}
# This one below doesn't work.
$return_result = New-Object -TypeName ComputerResult
# This done does work.
$return_result = New-Object -TypeName PSCustomObject -Property @{ComputerName = ""; BLDG = ""; room = ""; organization = ""; user = ""; lastupdate = ""; printerlist = @(); finalprinterlist = @() }
# Here I would start assigning values to $return_result
# Once assigned, return from the Job process to await Receive-Job
return $return_result
Основной проблемой является $return_result
, где он работает, как предполагалось, когда это тип PSCustomObject
, в отличие от объекта класса ComputerResult
, определенного выше. Когда скрипт запускается, Get-WmiObject -Class win32_printer -ComputerName $computername
делается для добавления некоторых объектов WMI в мой $return_result.printerlist
, но когда возвращается, ComputerResult.printerlist
возвращает массив строк - со значениями свойства __PATH
. То, что должно быть возвращено, является объектами WMI.
PSCustomObject
прекрасно возвращается с сохранением его методов, свойств и т. Д. c. ComputerResult.printerlist
хранится с полными объектами WMI.
Я предполагаю, что PSCustomObject каким-то образом обрабатывается не так, как остальные пользовательские классы, и, возможно, использует другую базовую библиотеку при сериализации и передаче обратно в основной процесс.
Почему это? Это ошибка или я что-то неправильно понимаю?