Импорт-Clixml PowerShell от строки

Есть ли способ работать Import-Clixml cmdlet на строке или объекте XML?

Это требует, чтобы путь к файлу, как введено произвел объекты PowerShell, и не может быть введено от объекта XML. С тех пор существует ConvertTo-Xml cmdlet, который сериализирует объект PowerShell в объект XML, почему не там преобразование от XML, который сделал бы противоположное?

Я знаю System.Xml.Serialization.XmlSerializer класс, который сделал бы просто это. Однако я хотел бы придерживаться cmdlets, чтобы сделать это.

Есть ли способ сделать это с cmdlets (вероятно, только с Import-Clixml), не создавая временные файлы?

5
задан Peter Mortensen 28 December 2018 в 22:16
поделиться

2 ответа

Очевидной попыткой было бы просто указать путь к переменной:

PS Home:\> $xmldata = gci | ConvertTo-Xml
PS Home:\> Import-Clixml Variable:\xmldata
Import-Clixml : Cannot open file because the current provider (Microsoft.PowerShell.Core\Variable) cannot open a file.
At line:1 char:14
+ Import-Clixml <<<<  Variable:\xmldata
    + CategoryInfo          : InvalidArgument: (:) [Import-Clixml], PSInvalidOperationException
    + FullyQualifiedErrorId : ReadWriteFileNotFileSystemProvider,Microsoft.PowerShell.Commands.ImportClixmlCommand

... что, к сожалению, не удалось. Поэтому я предполагаю, что на самом деле нет способа, который работал бы без временных файлов.

Основная идея ConvertTo-XML - разрешить дальнейшую обработку XML в PowerShell после преобразования объекта в XML. Возникает вопрос, почему вы не можете просто вносить изменения в объект напрямую, вместо того, чтобы манипулировать XML и преобразовывать его обратно?

В противном случае вы все равно можете обернуть временный файл в функцию.

1
ответ дан 15 December 2019 в 06:24
поделиться

Кто-то написал функцию ConvertTo-CliXml .

Таким образом, должно быть возможно написать функцию ConvertFrom-CliXml аналогичным образом. Вам следует изучить командлет Export-CliXml в .NET Reflector , чтобы убедиться, что больше ничего делать не нужно.

Существует также отчет об ошибке в Connect :

Я знаю, что это не решит вашу проблему немедленно, но единственный другой способ - использовать временные файлы в качестве ввода и вывода для командлеты * -CliXml.

1
ответ дан 15 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: