Как известно, PowerShell — это объектная среда. И это позволяет передавать результаты выполнения одной команды в другую в виде объектов. Это же касается и вывода этих самых результатов на консоль. То есть, в случае, если мы не используем командлеты Format-*, то по сути на экране мы получаем приведенные к текстовому виду объекты.
Здесь есть одна особенность. Если мы не указываем какой-либо специальный командлет для обработки вывода, то используется Out-Default.
То есть строки
Get-Process
и
Get-Process | Out-Default
являются равноценными.
Зная этот факт, мы можем сделать следующую вещь:
$PSDefaultParameterValues["Out-Default:OutVariable"] = "Result"
Что мы сделали?
Переменная $PSDefaultParameterValues используется для указания значений параметров по умолчанию. Используя предыдущий пример, разберем синтаксис.
Out-Default — это командлет.
OutVaribale — это параметр.
Result — его значение.
Теперь, где бы мы не использовали командлет Out-Default, в случае, если значение параметра OutVariable не будет указано явным образом, то его значение будет равно «Result».
Вспоминая начало статьи, где мы говорили о том, что командлет Out-Default используется по умолчанию при отсутствии каких-либо других командлетов для вывода, результатом наших манипуляций станет возможность обнаружить результат выполнения последней веденной команды в переменной $Result.
В упрощенном виде это может выглядеть так:
Get-Process -Name p* powershell.exe $Result powershell.exe Get-Process -Name e* explorer.exe $Result explorer.exe
Естественно, если мы явно передадим результат выполнения командлета какой-либо другой команде, то наша переменная $Result новых данных не получит и останется с прежним значением.
Get-Process -Name s* | Out-Host svchost.exe $Result explorer.exe
Страницы в социальных сетях:
Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell