PSCustomObject с разными типами строкC#

Место общения программистов C#
Anonymous
PSCustomObject с разными типами строк

Сообщение Anonymous »

У меня есть рабочий процесс, который довольно требователен к получаемым объектам PSCustomObject. Я часто использую Select-Object, чтобы получить свойства объектов, которые хочу сохранить, и иногда мне нужно преобразовать некоторые значения в более удобные форматы. Самый простой способ сделать это — использовать @{Name='Name'; Техника Expression = {'Expression'}}.
НО эта техника портит PSCustomObject таким образом, что блокирует мой дальнейший рабочий процесс.
Проблему можно воспроизвести следующим образом:

Код: Выделить всё

$object = [pscustomobject]@{
Text        = "This is a string"
}
В выводе ниже определение строки — «строка Text=Это строка»

Код: Выделить всё

$object | Select-Object * | Get-Member

При добавлении нового NoteProperty с помощью метода Select-Object определением является «System.String Text2=Это строка».
Это что выдаст мой следующий командлет.

Код: Выделить всё

$WhatHappensToText = $object | Select-Object @{Name='Text'; Expression={$_.Text}}
$WhatHappensToText | Get-Member

При удалении лишнего, как показано ниже, определение возвращается к «строка Text2=Это строка».
Экспорт в Clixml и повторный импорт не выполняются. то же самое

Код: Выделить всё

$WhatHappensToText | ConvertTo-Json | ConvertFrom-Json | Get-Member

Если я добавлю новое свойство NoteProperty вот так, определение будет «строка Text2=Это строка», как мне нравится

Код: Выделить всё

$object2 = $object | Select-Object *
$object2 | foreach-object {$_ | Add-Member -MemberType NoteProperty -Name Text2 -Value $_.Text}
$object2 | Get-Member

У меня есть следующие вопросы:
Почему @{Name='Name'; Техника Expression = {'Expression'}}, добавляющая System.String к определению, а не строку, как в сценарии добавления элемента?
Есть ли способ сделать @ {Имя = 'Имя'; Метод Expression = {'Expression'}} добавляет строку, а не System.String?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ring-types

Вернуться в «C#»