functions/Select-SPRObject.ps1
function Select-SPRObject { <# .SYNOPSIS Makes it easier to alias columns to select and rename for export. .DESCRIPTION Makes it easier to alias columns to select and rename for export. This command also enables the ability to change the default view without destroying objects. A lot of this is from boe, thanks boe! https://learn-powershell.net/2013/08/03/quick-hits-set-the-default-property-display-in-powershell-on-custom-objects/ .PARAMETER InputObject Allows piping .PARAMETER TypeName TypeName creates a new type so that we can use ps1xml to modify the output .PARAMETER Property Only includes specific properties .PARAMETER ExcludeProperty Excludes other properties .EXAMPLE Get-SPRListData -Site intranet.ad.local -List 'My List' | Select-SPRObject -Property 'Title as FullName', Created Returns two visible columns, Name and Created. Name is an alias of Title. .EXAMPLE Get-SPRListData -Site intranet.ad.local -List 'My List' | Select-SPRObject -Property 'Title as FullName', Created | Export-SPRObject -Path C:\temp\items.xml Returns two visible columns, Name and Created. Name is an alias of FullName. Then, an object is exported with only the columns Name and Created #> [CmdletBinding()] param ( [parameter(Mandatory, ValueFromPipeline)] [object]$InputObject, [string[]]$Property, [string[]]$ExcludeProperty, [string]$TypeName ) process { foreach ($object in $InputObject) { if ($TypeName) { $object.PSObject.TypeNames.Insert(0, "spreplicator.$TypeName") } if ($ExcludeProperty) { if ($object.GetType().Name.ToString() -eq 'DataRow') { $ExcludeProperty += 'Item', 'RowError', 'RowState', 'Table', 'ItemArray', 'HasErrors' } $props = ($object | Get-Member | Where-Object MemberType -in 'Property', 'NoteProperty', 'AliasProperty' | Where-Object { $_.Name -notin $ExcludeProperty }).Name $defaultset = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet', [string[]]$props) } else { # property needs to be string if ("$property" -like "* as *") { $props = @() foreach ($p in $property) { if ($p -like "* as *") { $old, $new = $p -isplit " as " # Do not be tempted to not pipe here $object | Add-Member -Force -MemberType AliasProperty -Name $new -Value $old -ErrorAction SilentlyContinue $props += $new } else { $props += $p } } } else { $props = $Property } $defaultset = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet', [string[]]$props) } Select-Object -InputObject $object -Property $props } } } |