首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >深度复制PSObject

深度复制PSObject
EN

Stack Overflow用户
提问于 2012-02-09 11:01:29
回答 3查看 4.6K关注 0票数 6

我有一个powershell脚本,在其中我可以执行以下操作

代码语言:javascript
复制
$somePSObjectHashtables = New-Object Hashtable[] $somePSObject.Length;
$somePSObjects = Import-CSV $csvPath
0..($somePSObject.Length - 1) | ForEach-Object {
    $i = $_;
    $somePSObjectHashtables[$i] = @{};
    $somePSObject[$_].PSObject.Properties | ForEach-Object {
        $somePSObjectHashtables[$i][$_.Name] = $_.Value;
    }
}

我需要这样做,因为我想在CSV中制作几个不同的数据副本,以执行几个不同的操作。从某种意义上说,我是在PSObject的结果数组上执行“内连接”。我可以很容易地使用ForEach-Object遍历$somePSObjectHashtables,并在数组的每个成员上调用Hashtable.Clone()。然后,我可以使用New-Object PSObject -Property $someHashTable[$i]获取PSObject的深层副本。

我的问题是,有没有更简单的方法来制作深度副本,而不需要中间的Hashtable?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-09 15:27:34

为了获得非常深的副本,我们可以使用二进制序列化(假设所有数据都是可序列化的;来自CSV的数据肯定是这种情况):

代码语言:javascript
复制
# Get original data
$data = Import-Csv ...

# Serialize and Deserialize data using BinaryFormatter
$ms = New-Object System.IO.MemoryStream
$bf = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
$bf.Serialize($ms, $data)
$ms.Position = 0
$data2 = $bf.Deserialize($ms)
$ms.Close()

# Use deep copied data
$data2
票数 6
EN

Stack Overflow用户

发布于 2019-06-28 15:36:54

请注意,这里有一个简短的,可能更简洁的版本(我非常喜欢):

代码语言:javascript
复制
$data = Import-Csv .\test.csv

$serialData = [System.Management.Automation.PSSerializer]::Serialize($data)

$data2 = [System.Management.Automation.PSSerializer]::Deserialize($serialData)
票数 8
EN

Stack Overflow用户

发布于 2020-06-24 23:55:20

下面是一个更短的函数,我将其用作函数:

代码语言:javascript
复制
using namespace System.Management.Automation
function Clone-Object ($InputObject) {
    <#
    .SYNOPSIS
    Use the serializer to create an independent copy of an object, useful when using an object as a template
    #>
    [psserializer]::Deserialize(
        [psserializer]::Serialize(
            $InputObject
        )
    )
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9204829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档