При отображении свойств PowerShell автоматически форматирует свойства типов, формат отображения которых не определен в файле *.format.ps1xml
, в виде таблицы для максимум 4 свойств. 5 или более свойств отображаются в виде списка. Когда вы выбираете свойство Matches с помощью Select-Object
, вы выбираете одно свойство объекта Microsoft.PowerShell.Commands.MatchInfo
. С Foreach-Object
вы отображаете все свойства объекта System.Text.RegularExpressions.Match
.
Использование Select-Object -ExpandProperty Matches
приведет к тому, что выходные данные будут выглядеть так же, как Foreach
, потому что будут выводиться RegularExpressions.Match
объекты.
Если вы поместите Get-Member
после обоих примеров, которые производят вывод, вы увидите, что они выводят объекты различных типов.
Редактировать: Вот объяснение форматирования, которое происходит для каждой команды.
cat errors.txt | Select-String "'(?<code>\w+)'.+ID (?<id>[^:]+)"
Вывод Select-String
- это объект Microsoft.PowerShell.Commands.MatchInfo
, который имеет 8 свойств. Эти свойства не отображаются по умолчанию, поскольку формат отображения MatchInfo
определен в PowerShellCore.format.ps1xml
для отображения результата метода MatchInfo
ToString()
.
$mat | Select-Object -Property Matches
В этом случае вывод Select-Object
представляет собой пользовательский объект Selected.Microsoft.PowerShell.Commands.MatchInfo
со свойством Matches
, которое было скопировано из объекта MatchInfo
. Поскольку для типа Selected.Microsoft.PowerShell.Commands.MatchInfo
не задан формат отображения по умолчанию, PowerShell автоматически форматирует его в виде таблицы, поскольку он имеет менее 5 свойств (в этом случае Matches
является единственным свойством).
$mat | ForEach { $_.Matches }
В Foreach-Object
ScriptBlock выводится свойство Matches
объекта MatchInfo
. Свойство Matches
является System.Text.RegularExpressions.Match
, которое имеет 6 свойств. Поскольку для типа System.Text.RegularExpressions.Match
не задан формат отображения по умолчанию, объекты Match
отображаются в виде списка, поскольку имеется более 4 свойств.