Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Краткое описание
Предоставляет сведения о встроенных элементах PowerShell, доступных для всех объектов PowerShell.
Длинное описание
При создании объектов PowerShell добавляет некоторые скрытые свойства и методы к каждому объекту. Эти свойства и методы называются встроенными элементами . Эти встроенные элементы обычно скрыты от вида. Эти скрытые элементы можно увидеть с помощью параметра Force команды Get-Member.
Представления объектов
Встроенные элементы включают набор свойств MemberSet, представляющих представление объекта. Дополнительные сведения о свойствах MemberSet см. в разделе PSMemberSet .
Каждый объект PowerShell содержит следующие свойства.
psbaseЭлемент
psbaseMemberSet содержит элементы базового объекта без расширения или адаптации. В зависимости от типа объекта это либо экземпляр .NET, завернутый экземпляром[psobject], либо, если нет оболочки, это сам входной объект.psadaptedpsadaptedMemberSet показывает базовый объект плюс адаптированные члены, если они присутствуют. Адаптированные элементы добавляются системой расширенных типов (ETS).psextendedВ наборе
psextendedMemberSet показываются только члены, добавленные файлами Types.ps1xml и командлетом Add-Member. Любой объект можно расширить во время выполнения с помощью командлетаAdd-Member.psobjectpsobjectMemberSet — богатый источник рефлексии для любого объекта, содержащего методы, свойства и другую информацию об объекте.
Примеры
В этом примере $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. Новые свойства теперь являются частью psextendedMemberSet.
$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()
Методы ForEach() и Where() доступны для всех объектов PowerShell.
Однако они наиболее полезны при работе с коллекциями. Дополнительные сведения об использовании этих методов см. в разделе about_Arrays.
PowerShell 7.6-preview.5 добавлен PSForEach() в качестве псевдонима для ForEach() метода и PSWhere() в качестве псевдонима Where() для метода. Используйте эти псевдонимы, чтобы избежать конфликтов и ForEach()Where() которые могут быть определены в базовом классе объекта. Например, System.Collections.Generic.List<T> класс определяет собственный ForEach() метод. Используйте PSForEach() для предотвращения вызова метода базового класса.
Свойства
Не все скалярные типы имеют свойства Count или Length в базовом типе. PowerShell добавляет отсутствующие свойства в качестве встроенного элемента для всех скалярных типов.
Примечание.
Неинициализированные переменные неявно инициализируются $null.
$null является скалярной величиной и имеет встроенные количество и длину 0.
Хотя свойства Count и Length похожи, они могут работать по-разному в зависимости от типа данных. Например, длина строки — это количество символов в строке. Свойство 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.
PowerShell