Полезный ответ ди-джея показывает самый простой способ зафиксировать вывод любой команды (успех) в переменной - путем прямого назначения.
Что касается того, что вы пытались:
>$output
>
, оператор перенаправления вывода поддерживает перенаправление только на файлы указано их именем / путем (он также поддерживает , подавляя вывод с >$null
) - вы не можете использовать его для сохранения вывода в переменной .
Следовательно, значение $output
будет интерпретироваться как имя / путь целевого файла;если переменная $output
никогда не создавалась, это равносильно > $null
, т. е. вывод suppression .
Также обратите внимание, что файлы, создаваемые >
, неизменно plain-text файлы, которые отражают тот же формат вывода, который вы видите в консоли (терминале), и поэтому не подходят для программной обработки.
Byнапротив, общий параметр -OutVariable
(-ov
), который вы упоминаете в комментарии , делает , позволяет захватывать выходные объекты команды в переменную , не мешаявывод команды.
То есть вывод команды все еще (также) записывается в выходной поток, и если этот вывод не используется (другой командой, назначением переменной или перенаправлением)), он по-прежнему выводится на консоль.
Например, -OutVariable output
сохраняет выходные данные командлета / расширенной функции в переменной $output
- обратите внимание на отсутствие $
в аргументе -OutVariable
:
PS> Get-Date -OutVariable output; $output
Thursday, June 27, 2019 10:17:07 PM # direct Get-Date output
Thursday, June 27, 2019 10:17:07 PM # output from $output
Следовательно, -OutVariable
(-ov
) полезно:
, если вы хотите видеть вывод команды в консоли, а также записывать этот вывод в переменную для последующего анализа.
, если вы хотите захватить вывод промежуточной команды внутри конвейера без вмешательства в конвейер.
A Небольшое предостережение re -OutVariable
(-ov
) в том, что оно:
создает не обычные массивы PowerShell ([object[]]
), а экземпляры [System.Collections.ArrayList]
.
создает - одноэлементный - [System.Collections.ArrayList]
, даже если команда выводит только объект single (как, например, Get-Date
).
Это удивительное поведение обсуждается в этой проблеме GitHub .
Однако, учитывая гибкую обработку коллекции PowerShell и функцию перечисления членов *1107*, поведение на практике не всегда может быть проблематичным.