I’m working with COM objects and would like to insert a custom typename so that I can format the resulting object. Calling the clear or insert methods (see example below) on $track.pstypenames seems to have no effect while doing the same on $track.psobject.typenames does produce the expected outcome. However, despite being able to modify the typename collection via $track.psobject.typenames my format ps1xml file seems to have no effect. I suspect this is the case since running Get-Member on the modified track object still shows System.__ComObject#{00d7fe99-7868-4cc7-ad9e-acfd70d09566} as the type name. It seems that $track.pstypenames is not read-only:
$track.pstypenames.psbase Count : 4 IsReadOnly : False IsFixedSize : False SyncRoot : System.Object IsSynchronized : False
Can someone explain what’s happening or point me in the right direction towards learning more about how to work with types and formatting? Can this type name manipulation only be done to custom objects and not com objects? Thanks in advance.
Example transcript (if this doesn’t render correctly here I’ve also made it available @ https://gist.github.com/lpaglia/a3288e02a4e4bad956b6 ):
[1] scripts:\> $itunes = New-Object -ComObject itunes.application [2] scripts:\> $itunes.CurrentTrack [3] scripts:\> $itunes.play[] [4] scripts:\> $itunes.CurrentTrack Name : [Untitled] Index : 104 sourceID : 72 playlistID : 21271 trackID : 21377 TrackDatabaseID : 6032 Kind : 1 Playlist : System.__ComObject Album : SAP Artist : Alice in Chains BitRate : 192 BPM : 0 Comment : Compilation : False Composer : J. Cantrell DateAdded : 11/4/2014 4:02:13 PM DiscCount : 0 DiscNumber : 0 Duration : 224 Enabled : True EQ : Finish : 224 Genre : Rock Grouping : KindAsString : MPEG audio file ModificationDate : 11/15/2014 9:18:55 AM PlayedCount : 0 PlayedDate : 12/30/1899 12:00:00 AM PlayOrderIndex : 4464 Rating : 0 SampleRate : 48000 Size : 5396996 Start : 0 Time : 3:44 TrackCount : 5 TrackNumber : 5 VolumeAdjustment : 0 Year : 0 Artwork : System.__ComObject Location : C:\Users\Lido\Music\iTunes\iTunes Media\Music\Alice in Chains\SAP5 [Untitled].mp3 Podcast : False RememberBookmark : False ExcludeFromShuffle : False Lyrics : Category : Description : LongDescription : BookmarkTime : 0 VideoKind : 0 SkippedCount : 0 SkippedDate : 12/30/1899 12:00:00 AM PartOfGaplessAlbum : False AlbumArtist : Alice in Chains Show : SeasonNumber : 0 EpisodeID : EpisodeNumber : 0 Size64High : 0 Size64Low : 5396996 Unplayed : False SortAlbum : SortAlbumArtist : SortArtist : SortComposer : SortName : SortShow : AlbumRating : 0 AlbumRatingKind : 1 ratingKind : 1 Playlists : System.__ComObject ReleaseDate : 12/30/1899 12:00:00 AM [5] scripts:\> $track = $itunes.CurrentTrack [6] scripts:\> $track.pstypenames System.__ComObject#{00d7fe99-7868-4cc7-ad9e-acfd70d09566} System.__ComObject System.MarshalByRefObject System.Object [7] scripts:\> $track.psobject.typenames System.__ComObject#{00d7fe99-7868-4cc7-ad9e-acfd70d09566} System.__ComObject System.MarshalByRefObject System.Object [8] scripts:\> $track.pstypenames.clear[] [9] scripts:\> $track.pstypenames System.__ComObject#{00d7fe99-7868-4cc7-ad9e-acfd70d09566} System.__ComObject System.MarshalByRefObject System.Object [10] scripts:\> $track.psobject.typenames.clear[] [11] scripts:\> $track.psobject.typenames [12] scripts:\> $track.pstypenames.Insert[0,'my.custom.type'] [13] scripts:\> $track.pstypenames System.__ComObject#{00d7fe99-7868-4cc7-ad9e-acfd70d09566} System.__ComObject System.MarshalByRefObject System.Object [14] scripts:\> $track.psobject.typenames [15] scripts:\> $track.psobject.typenames.Add['my.custom.type'] [16] scripts:\> $track.psobject.typenames my.custom.type [17] scripts:\> $track.pstypenames System.__ComObject#{00d7fe99-7868-4cc7-ad9e-acfd70d09566} System.__ComObject System.MarshalByRefObject System.Object [18] scripts:\>