Private/Copy-PSObject.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Function Copy-PSObject {
  [CmdLetBinding()]
  Param
  (   
    [Parameter(
        Mandatory = $True,
        ValueFromPipeLine = $True,
        Position = 0
    )]
    [PSObject]
    $InputObject
  )
  
  Begin {
    # Setup objects for use
    $Stream = New-Object System.IO.MemoryStream
    $Binary = New-Object System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
  }
  
  Process 
  { 
    # Serialize data using BinaryFormatter
    $Binary.Serialize($Stream, $InputObject)
    
    # Reset Stream position
    $Stream.Position = 0
  }
  
  End {
    # Return a copy of the original object
    $Binary.Deserialize($Stream)
    
    # Close the stream
    $Stream.Close()
  }
}