У меня возникают проблемы с классами и типами Powershell 5 при реимпертизации десериализованных объектов с помощью команды Import-CliXml.Проблемы с десериализованным типом объектов - особенно с классами Powershell 5 и Import-CliXml
У меня есть объект типа компьютера, и я хочу сохранить это как XML, а затем повторно импортировать этот следующий раз, когда скрипт запускается
class Computer
{
$Private:hostname
$Private:ipAddress
Computer([String] $hostname, [String] $ipAddress)
{
$this.hostname = $hostname
$this.ipAddress = $ipAddress
}
static [Computer] reserialize([PSObject] $deserializedComputer)
{
return [Computer]::new($deserializedComputer.hostname, $deserializedComputer.ipAddress)
}
}
Я экспортировать и импортировать объект, используя следующие:
$computer = [Computer]::new("test-machine", "192.168.1.2")
$computer | Export-CliXml C:\Powershell\exportTest.xml
$deserializedComputer = Import-CliXml C:\Powershell\exportTest.xml
Я понимаю, что когда этот объект реимпортируется, он десериализуется и является в основном просто контейнером данных (типа [Deserialized.Computer]). Я пытаюсь выяснить, как напечатать этот объект, прежде чем пытаться его повторно инициализировать, используя метод reserialize.
Например, если я пробую и литой $ deserializedComputer он говорит мне, что:
Cannot convert value "Computer" to type "Computer". Error: "Cannot convert the "Computer" value of type "Deserialized.Computer" to type
"Computer"."
Я понимаю, почему это не может быть литыми, я просто с помощью сообщения об ошибке, чтобы указать, что объект есть знание, что это типа [Deserialized.Computer]
Я ничего не могу найти, возвращенное от $ deserializedComputer.getMember(), который указывает, что это типа [Deserialized.Computer], единственная информация, которую я могу найти в том, что это типа [PSObject], как я могу ввести проверку, что этот объект действительно имеет тип [Deserialized.C omputer]?
Я должен добавить этот тип [Deserialized.Компьютер] не существует во время выполнения, так что я не могу использовать это непосредственно в моем коде, в противном случае я бы просто использовать:
$deserializedComputer.getType() -eq [Deserialized.Computer]
'$ deserializedComputer' является' [PSObject] 'с' значением листа PSTypeNames' устанавливается в 'Deserialized.Computer'. См. '$ DeserializedComputer.psobject.TypeNames' –