function Copy-ObjectProperties { <# .SYNOPSIS Copies properties from one object to another #> param( [Parameter(Position = 0, Mandatory = $true)] [Object]$SourceObject, [Parameter(Position = 1, Mandatory = $true)] [Object]$DestinationObject, [Parameter(Position = 2, Mandatory = $false)] [string[]]$PropertiesToSkip ) foreach ($property in $SourceObject.PsObject.Properties) { if (($PropertiesToSkip -notcontains $property.Name) -and ($null -ne $DestinationObject.PsObject.Properties.Match($property.Name)) -and ($DestinationObject.PsObject.Properties[$property.Name].TypeNameOfValue -eq $property.TypeNameOfValue) -and ($DestinationObject.PsObject.Properties[$property.Name].IsSettable)) { $DestinationObject.PsObject.Properties[$property.Name].Value = $property.Value } } $DestinationObject }