About intrinsic members
Short description
Provides information about PowerShell's intrinsic members that are available to all PowerShell objects.
Detailed description
When objects are created, PowerShell adds some "hidden" properties and methods to each object. These properties and methods are known as intrinsic members. These intrinsic members are normally hidden from view. These hidden members can be seen using the Force parameter of Get-Member.
Object views
The intrinsic members include a set of MemberSet properties that represent a view of the object. For more information about MemberSet properties, see PSMemberSet.
Every PowerShell object includes the following properties.
psbase
The
psbase
MemberSet contains the members of the base object without extension or adaptation. Depending on the object type it's either a .NET instance wrapped by a[psobject]
instance or, if there's no wrapper, it's the input object itself.psadapted
The
psadapted
MemberSet shows the base object plus the adapted members, if present. Adapted members are added by the Extended Type System (ETS).psextended
The
psextended
MemberSet only shows the members added by the Types.ps1xml files and the Add-Member cmdlet. Any object can be extended at runtime using theAdd-Member
cmdlet.psobject
The
psobject
MemberSet a rich source of reflection for any object that includes methods, properties, and other information about the object.
Examples
For this example, $hash
is a hashtable containing information about a user.
The Force parameter of Get-Member
shows us the intrinsic members of the
object.
$hash = @{
Age = 33
Name = 'Bob'
}
$hash | Get-Member -Force -MemberType MemberSet, CodeProperty
TypeName: System.Collections.Hashtable
Name MemberType Definition
---- ---------- ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=7…
psadapted MemberSet psadapted {Item, IsReadOnly, IsFixedSize, IsSynchronized, Keys, Values, SyncRoot, Count, Add,…
psbase MemberSet psbase {Item, IsReadOnly, IsFixedSize, IsSynchronized, Keys, Values, SyncRoot, Count, Add, Cl…
psextended MemberSet psextended {}
psobject MemberSet psobject {Members, Properties, Methods, ImmediateBaseObject, BaseObject, TypeNames, get_Membe…
Using psobject
is similar to using Get-Member
, but provides more
flexibility. For example, you can enumerate the properties of an object and
their values.
$hash.psobject.Properties | Select-Object Name, MemberType, Value
Name MemberType Value
---- ---------- -----
IsReadOnly Property False
IsFixedSize Property False
IsSynchronized Property False
Keys Property {Age, Name}
Values Property {33, Bob}
SyncRoot Property {[Age, 33], [Name, Bob]}
Count Property 2
Compare that to the object created by converting the hashtable to a PSCustomObject.
$user = [pscustomobject]$hash
$user.psobject.Properties | Select-Object Name, MemberType, Value
Name MemberType Value
---- ---------- -----
Age NoteProperty 33
Name NoteProperty Bob
Notice that the keys from the hashtable have been converted to properties in
the PSCustomObject. The new properties are now part of the psextended
MemberSet.
$user | Get-Member -Force -MemberType MemberSet, CodeProperty
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
pstypenames CodeProperty System.Collections.ObjectModel.Collection`1[[System.String, System.Private.CoreLib, Version=7…
psadapted MemberSet psadapted {ToString, GetType, Equals, GetHashCode}
psbase MemberSet psbase {ToString, GetType, Equals, GetHashCode}
psextended MemberSet psextended {Age, Name}
psobject MemberSet psobject {Members, Properties, Methods, ImmediateBaseObject, BaseObject, TypeNames, get_Membe…
Type information
The pstypenames
CodeProperty lists the object type hierarchy in order of
inheritance. For example:
$file = Get-Item C:\temp\test.txt
$file.pstypenames
System.IO.FileInfo
System.IO.FileSystemInfo
System.MarshalByRefObject
System.Object
The Output starts with the most specific object type, System.IO.FileInfo
, and
continues down to the most generic type, System.Object
.
Methods
PowerShell adds two hidden methods to all PowerShell objects. These methods are
not visible using the Get-Member -Force
command or tab completion.
ForEach() and Where()
The ForEach()
and Where()
methods are available to all PowerShell objects.
However, they're most useful when working with collections. For more
information on how to use these methods, see about_Arrays.
Properties
The Count and Length properties are available to all PowerShell objects, not just collections. These are similar to each other but may work differently depending on the data type. For example, the Length of a string is the number of characters in the string. The Count property is the number of instances of the object.
PS> $str = 'string'
PS> $str.Length
6
PS> $str.Count
1
For more information about these properties, see about_Properties.
Array indexing scalar types
When an object isn't an indexed collection, using the index operator to access
the first element returns the object itself. Index values beyond the first
element return $null
.
PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True
For more information, see about_Operators.
New() method for types
Beginning in PowerShell 5.0, PowerShell adds a static New()
method for all
.NET types. The following examples produce the same result.
$expression = New-Object -TypeName regex -ArgumentList 'pattern'
$expression = [regex]::new('pattern')
Using the new()
method performs better than using New-Object
.
For more information, see about_Classes.