Могу ли я передавать выходные данные Powershell в ускоритель?

#powershell #type-accelerators

#powershell #тип-ускорители

Вопрос:

Я получил путь к файлу к xml-ресурсу, запросив аргументы планировщика задач. Я хотел бы передать пути к этим файлам в [xml], чтобы возвращать данные с помощью XPath.

В Интернете я вижу, что используются ускорители и переменные, например

 $xml = [XML](Get-Content .Test.xml)
  

пробовал использовать конвейер для преобразования в xml, но это XML-объект, содержащий путь к файлу, поэтому мне нужно преобразовать в [xml] — в надежде сделать это в конвейере, потенциально для> 1 xmldocument

Возможно ли передать в [ускорители типов] ? Должен ли я передавать данные в New-Object или Tee-Variable, как требуется?

Я надеюсь, что в конечном итоге смогу создать однострочный файл для опроса нескольких узлов (например, LastRan, lastResult)

в настоящее время у меня есть это, которое работает только для одного

 ([xml](Get-Content ((Get-ScheduledTask -TaskPath *mytask* | select -First 1).Actions.Arguments | % {$_.Split('"')[-2]}))).MyDocument.LastRan
  

возвращает значение LastRan из узла MyDocument .

Заранее спасибо 👍

Комментарии:

1. Для меня непонятно, о чем вы спрашиваете, возможно, вы можете предоставить образец XML-файла и объяснить, чего вы ждете.

Ответ №1:

Если вы хотите использовать конвейерный ввод, вам нужно создать функцию и установить атрибут параметра ValueFromPipeline

 Function Convert-XML {
    Param(
        [Parameter(ValueFromPipeline)]$xml
    )

    process{
        [xml]$xml
    }
}
  

Тогда вы могли бы взять содержимое XML-файла (все сразу, а не построчно)

 Get-Content .Test.xml -Raw | Convert-XML
  

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

Комментарии:

1. Но имейте в виду… это не будет объединять ваши XML-файлы в корневом узле.. Вы получаете только коллекцию XML-объектов. И «ConvertFrom-Xml» было бы лучше.