Вот документация: Метод Cmdlet.WriteObject (Object, Boolean)
А вот пример:
# Writes objects one by one
function Test1
{
[CmdletBinding()]param()
$data | %{ $PSCmdlet.WriteObject($_) }
}
# Writes the collection and allows the core to enumerate it one level.
# Numbers of written objects is the collection item count.
function Test2
{
[CmdletBinding()]param()
$PSCmdlet.WriteObject($data, $true)
}
# Writes the collection as a single object.
# Numbers of written objects is 1.
function Test3
{
[CmdletBinding()]param()
$PSCmdlet.WriteObject($data, $false)
}
function Test
{
(Test1).GetType().Name
(Test2).GetType().Name
(Test3).GetType().Name
}
$data = New-Object System.Collections.ArrayList
Write-Host "1 item"
$null = $data.Add('hello')
Test
Write-Host "2+ items"
$null = $data.Add('world')
Test
Выход:
1 item
String
String
ArrayList
2+ items
Object[]
Object[]
ArrayList
Таким образом, вызов WriteObject(item)
для каждого элемента в коллекции в основном совпадает с WriteObject(items, true)
; в обоих случаях сама коллекция исчезла.
WriteObject(items, false)
отличается; он возвращает ссылку на коллекцию, и вызывающая сторона может эффективно использовать ее в зависимости от сценария. Например, если коллекция является объектом DataTable
(не развернутым набором элементов DataRow
), то вызывающая сторона может работать с DataTable
членами возвращаемого объекта.