Каждый элемент переменной $var
имеет тип MatchInfo
.Вам необходимо привести их к string
следующим образом:
[string[]]$var
или
$var.foreach([string])
Чтение Методы ForEach и Where :
ForEach (тип convertToType)
Уникальный для метода ForEach
, вы можете передать тип в метод ForEach
, если хотите преобразовать каждый элемент в коллекции в другой тип.Например, представьте, что у вас есть коллекция объектов, и вы хотите преобразовать эти объекты в их строковый эквивалент.Вот как это выглядело бы с методом ForEach
:
# Get a collection of processes
$processes = Get-Process
# Convert the objects in that collection into their string equivalent
$processes.foreach([string])
Вы могли бы выполнить ту же задачу, вставив коллекцию в массив типа string (например, [string[]]$processes
) и вставивМассив на самом деле значительно быстрее, однако есть очень хороший шанс, что вы даже не заметите разницу во времени выполнения, если не будете работать с очень, очень большой коллекцией.Несмотря на разницу во времени, я буду склонен предпочитать синтаксис метода ForEach в определенных ситуациях, если он позволяет мне поддерживать элегантность в реализации, избегая лишних круглых скобок в сценариях, которые я пишу.
Пример фрагмент кода (обновлен с учетом комментария Lee_Dailey ):
$var = $exeoutput.trim() | Select-String "Height|Width|Compress"
'-' * 15
$var.foreach([string])
'-' * 15
Результат:
---------------
Compression : CCITT Group 4
Width : 3180
Height : 4908
---------------
Обратите внимание, что echo
является псевдонимомдля Write-Output
командлет :
Этот командлет обычно используется в сценариях для отображения строк и других объектов на консоли.Однако из-за поведения по умолчанию для отображения объектов в конце конвейера обычно нет необходимости использовать командлет .
Обратите внимание, что можноумножить числа, строки и массивы (см. -'- '* 15˙ вместо ----------------
).