gpt4 book ai didi

Powershell - 如何使用 $List.convertAll() 或替代 C# 方法来克隆列表

转载 作者:行者123 更新时间:2023-12-03 01:05:06 25 4
gpt4 key购买 nike

假设我有一个列表:

$DeletedUsers = New-Object System.Collections.Generic.List[System.object]

所以我可以轻松地从集合中添加和删除用户。

我希望能够将此列表传递给执行某些操作但不修改原始列表的函数,并且它必须保持相同的通用列表类型。
convertAll()似乎完全符合我的要求,而无需自己使用 foreach-object 编写新列表的创建脚本,但我不明白如何利用重载定义(或完全理解它们的含义)。

C# 中有很多示例,但我无法找到一个在 PoSH 中演示它的示例。

示例场景:

假设 $DeletedUsers 包含 PSCustomObject 类型的用户对象列表。具有典型的“用户”属性,例如部门或就业状态。该列表应该能够传递给将更改用户属性状态的函数,然后可以将其添加到相同 Generic.List 类型的单独输出列表中。

当前示例函数的任何更改。
    Function ProcessUser {

[Cmdletbinding()]
Param($DeletedUsers)

begin{$DeletedUsersClone = $($DeletedUsers).psobject.copy()} #OR similar

process{
$DeletedUsersClone | foreach { $_ | Add-Member -NotePropertyName
"Processed" -NotePropertyValue "Processed:00"; $Outputlist.add($_)}
}
}

影响原始 $DeletedUsers,错误地将处理后的信息添加到应保持静态的列表中。

有其他方法可以防止这种情况影响脚本的最终目标,但问题是:

如何使用内置 C# 方法创建 System.Collections.Generic.List[System.object] 的真实、非引用克隆。

最佳答案

诀窍是使用带有显式转换为委托(delegate)类型的脚本 block 。这看起来像:

$DeletedUsers.ConvertAll([converter[object,object]] {param ($i) <# do convert #> })

关于Powershell - 如何使用 $List.convertAll() 或替代 C# 方法来克隆列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50650200/

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