Сведения о встроенных элементах
Краткое описание
Предоставляет сведения о встроенных элементах PowerShell, доступных для всех объектов PowerShell.
Подробное описание
При создании объектов PowerShell добавляет некоторые скрытые свойства и методы к каждому объекту. Эти свойства и методы называются встроенными элементами. Эти встроенные элементы обычно скрыты от представления. Эти скрытые члены можно увидеть с помощью параметра Force Get-Member.
Представления объектов
Встроенные члены включают набор свойств MemberSet , представляющих представление объекта. Дополнительные сведения о свойствах MemberSet см. в разделе PSMemberSet.
Каждый объект PowerShell содержит следующие свойства.
psbase
MemberSet
psbase
содержит элементы базового объекта без расширения или адаптации. В зависимости от типа объекта он либо экземпляр .NET, завернутый[psobject]
экземпляром, либо, если нет оболочки, это входной объект.psadapted
В элементе
psadapted
MemberSet показаны базовый объект, а также адаптированные элементы, если они присутствуют. Адаптированные элементы добавляются системой расширенных типов (ETS).psextended
В элементе
psextended
MemberSet отображаются только элементы, добавленные файлами Types.ps1xml и командлетом Add-Member. Любой объект можно расширить во время выполнения с помощью командлетаAdd-Member
.psobject
Объект
psobject
MemberSet является богатым источником отражения для любого объекта, включающего методы, свойства и другие сведения об объекте.
Примеры
В этом примере представляет собой хэш-файл, $hash
содержащий сведения о пользователе.
Параметр Force Get-Member
показывает встроенные элементы объекта.
$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…
Использование psobject
аналогично использованию Get-Member
, но обеспечивает большую гибкость. Например, можно перечислить свойства объекта и их значения.
$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
Сравните это с объектом, созданным путем преобразования хэш-файла в PSCustomObject.
$user = [pscustomobject]$hash
$user.psobject.Properties | Select-Object Name, MemberType, Value
Name MemberType Value
---- ---------- -----
Age NoteProperty 33
Name NoteProperty Bob
Обратите внимание, что ключи из хэш-файла были преобразованы в свойства в PSCustomObject. Новые свойства теперь являются частью 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…
Сведения о типе
pstypenames
CodeProperty перечисляет иерархию типов объектов в порядке наследования. Например:
$file = Get-Item C:\temp\test.txt
$file.pstypenames
System.IO.FileInfo
System.IO.FileSystemInfo
System.MarshalByRefObject
System.Object
Выходные данные начинаются с наиболее конкретного типа объекта, System.IO.FileInfo
и продолжается до наиболее универсального типа. System.Object
Методы
PowerShell добавляет два скрытых метода ко всем объектам PowerShell. Эти методы не отображаются с помощью команды или завершения вкладки Get-Member -Force
.
ForEach() и Where()
Where()
Методы ForEach()
доступны для всех объектов PowerShell.
Однако они наиболее полезны при работе с коллекциями. Дополнительные сведения об использовании этих методов см. в about_Arrays.
Свойства
Свойства Count и Length доступны для всех объектов PowerShell, а не только для коллекций. Они похожи друг на друга, но могут работать по-разному в зависимости от типа данных. Например, длина строки — это число символов в строке. Свойство Count — это количество экземпляров объекта.
PS> $str = 'string'
PS> $str.Length
6
PS> $str.Count
1
Дополнительные сведения об этих свойствах см. в about_Properties.
Скалярные типы индексирования массивов
Если объект не является индексированной коллекцией, с помощью оператора индекса для доступа к первому элементу возвращается сам объект. Значения индекса за пределами первого возвращаемого $null
элемента.
PS> (2)[0]
2
PS> (2)[-1]
2
PS> (2)[1] -eq $null
True
PS> (2)[0,0] -eq $null
True
Дополнительные сведения см. в about_Operators.
Метод New() для типов
Начиная с PowerShell 5.0, PowerShell добавляет статический New()
метод для всех типов .NET. В следующих примерах создается тот же результат.
$expression = New-Object -TypeName regex -ArgumentList 'pattern'
$expression = [regex]::new('pattern')
new()
Использование метода лучше, чем использованиеNew-Object
.
Дополнительные сведения см. в статье About Classes and Desired State Configuration (О классах и настройке требуемого состояния).
PowerShell