gpt4 book ai didi

powershell - 编写 PowerShell cmdlet 时,WriteObject(x, true) 和多个 writeobjects 之间有什么区别?

转载 作者:行者123 更新时间:2023-12-04 18:22:21 26 4
gpt4 key购买 nike

我想编写一个 cmdlet,从数据库中读取多条记录并将它们放入管道。

我想我可以做一个WriteObject(Enumerable<rec>, true)或者我可以自己循环并调用 WriteObject多次。

这两者有什么区别?

最佳答案

这是文档:Cmdlet.WriteObject Method (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 成员进行操作对象。

关于powershell - 编写 PowerShell cmdlet 时,WriteObject(x, true) 和多个 writeobjects 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6103389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com