Есть ли способ работать Import-Clixml
cmdlet на строке или объекте XML?
Это требует, чтобы путь к файлу, как введено произвел объекты PowerShell, и не может быть введено от объекта XML. С тех пор существует ConvertTo-Xml cmdlet, который сериализирует объект PowerShell в объект XML, почему не там преобразование от XML, который сделал бы противоположное?
Я знаю System.Xml.Serialization.XmlSerializer
класс, который сделал бы просто это. Однако я хотел бы придерживаться cmdlets, чтобы сделать это.
Есть ли способ сделать это с cmdlets (вероятно, только с Import-Clixml
), не создавая временные файлы?
Очевидной попыткой было бы просто указать путь к переменной:
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 и преобразовывать его обратно?
В противном случае вы все равно можете обернуть временный файл в функцию.
Кто-то написал функцию ConvertTo-CliXml .
Таким образом, должно быть возможно написать функцию ConvertFrom-CliXml аналогичным образом. Вам следует изучить командлет Export-CliXml в .NET Reflector , чтобы убедиться, что больше ничего делать не нужно.
Существует также отчет об ошибке в Connect :
Я знаю, что это не решит вашу проблему немедленно, но единственный другой способ - использовать временные файлы в качестве ввода и вывода для командлеты * -CliXml.