gpt4 book ai didi

Powershell 管道 - 返回一个在管道内创建的新对象

转载 作者:行者123 更新时间:2023-12-05 09:26:06 31 4
gpt4 key购买 nike

我再次遇到同样的问题,我有我的默认处理方式,但它一直困扰着我。
有没有更好的办法?

所以基本上我有一个运行的管道,在管道内做一些事情,并想从管道内返回一个键/值对。
我希望整个管道返回一个类型为 psobject(或 pscustomobject)的对象。

这是我每次都这样做的方式。我在管道的开头创建了一个哈希表,并使用 .Add() 方法将管道内的键/值对添加到此哈希表。
之后,我通过将 hashtbale 传递给 New-Object 的 -Property 参数来创建一个 psobject。
这给了我想要的结果。

Get-Process | Sort -Unique Name | ForEach-Object -Begin { $ht = @{} } -Process {

# DO STUFF
$key = $_.Name
$val = $_.Id

# Add Entry to Hashtable
$ht.Add($key,$val)
}

# Create PSObject from Hashtable
$myAwesomeNewObject = New-Object psobject -Property $ht

# Done - returns System.Management.Automation.PSCustomObject
$myAwesomeNewObject.GetType().FullName

但这看起来有点笨拙,有没有更优雅的方法呢?

像这样:

[PSObject]$myAwesomeNewObject = Get-Process | Sort -Unique Name | ForEach-Object -Process {

# DO STUFF
$key = $_.Name
$val = $_.Id

# return Key/Val Pair
@{$key=$val}
}

# Failed - returns System.Object[]
$myAwesomeNewObject.GetType().FullName

不幸的是,这不起作用,因为管道返回了一个哈希表数组,但我希望你现在知道我正在努力实现什么。

谢谢

最佳答案

不确定这是否更优雅,但只是另一种方式,它使用匿名函数,因此 $ht 在执行后将不再可用,并转换为 [pscustomobject] 而不是使用 New-Object:

[pscustomobject] (Get-Process | Sort -Unique Name | & {
begin { $ht = @{ } }
process {
# DO STUFF
$key = $_.Name
$val = $_.Id

# Add Entry to Hashtable
$ht.Add($key, $val)
}
end { $ht }
})

关于Powershell 管道 - 返回一个在管道内创建的新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74495144/

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