(Относительно) новая парадигма Разработки программного обеспечения под названием Доменный Управляемый дизайн, делает различие между объектами объекта и объектами значения.
Объекты Объекта определяются как что-либо, что должно отобразиться на кнопочный объект в персистентном хранилище данных, как сотрудник, или клиент или счет, и т.д...., где изменение свойств объекта подразумевает, что необходимо сохранить изменение в хранилище данных где-нибудь и существование нескольких экземпляров класса с тем же "ключом" imnplies потребность синхронизировать их, или скоординировать их персистентность к хранилищу данных так, чтобы один экземпляр' изменения не перезаписывал другие. Изменение свойств объекта объекта подразумевает изменение чего-то об объекте - не изменение, КОТОРЫЕ возражают, что Вы ссылаетесь...
otoh объектов Значения, объекты, которые можно считать неизменными, чья утилита определяется строго их значениями свойств, и для которого несколько экземпляров, не должны быть скоординированы всегда... как адреса, или номера телефона или колеса на автомобиле, или буквы в документе... эти вещи полностью определяются их свойствами... верхний регистр ',' объектом в текстовом редакторе можно обменяться прозрачно с любым другим верхним регистром объект всюду по документу, Вам не нужен ключ для различения его от всех других, 'A В этом смысле это неизменно, потому что при изменении его на 'B' (точно так же, как, меняя струну номера телефона в объекте номера телефона, Вы не изменяете данные, связанные с некоторым изменяемым объектом, Вы переключаетесь от одного значения до другого... так же, как, когда Вы изменяете значение строки...
$foo | Export-CliXml foo.xml
затем позже
$foo = Import-CliXml foo.xml
Обратите внимание, что если $ foo представляет живой объект, при его восстановлении вы получите только его свойства. Однако информация о типе более или менее сохраняется. Например, если вы сохраните объект System.Diagnostics.Process, при его регидратации у вас будет объект Deserialzed.System.Diagnostics.Process.
Кстати, если вам нужно сохранить / получить несколько переменных, вы можете сделать это как так:
Get-Variable bla* | Export-Clixml vars.xml
Import-Clixml .\vars.xml | %{ Set-Variable $_.Name $_.Value }