Расширенная система типов ETS

Может сложиться впечатление, что язык PowerShell не содержит типов, т. к. редко бывает нужно указывать тип переменной. Однако на самом деле PowerShell основан на типах данных, поскольку он позволяет работать с различными типами объектов: с не очень удачными типами. NET и с типами инструментальных средств управления Windows, модели составных объектов, объектов данных ActiveX, интерфейсов службы Active Directory, расширяемого языка разметки и даже собственных объектов. Но помнить обо всех этих типах необязательно, потому что PowerShell понимает различные типы объектов и использует свою интерпретацию таких объектов. В каком-то смысле PowerShell пытается обеспечить общий уровень абстракции, который делает осмысленным любое взаимодействие объектов, независимо от их типа. Этот уровень абстракции под названием PSObj ect является общим объектом, применяемым для всех обращений к объектам в PowerShell. Он может инкапсулировать любой базовый объект, любые экземпляры и явный или неявный доступ к адаптированным и типизированным расширенным членам, в зависимости от типа базового объекта. Более того, он может сообщить свой тип и динамически добавлять новые члены. Для этого в PowerShell используется расширенная система типов, которая предоставляет интерфейс, позволяющий разработчикам командлетов и сценариев PowerShell при необходимости манипулировать объектами и изменять их.

При использовании командлета Get-Member информация возвращается из объекта PSObj ect. Иногда PSObj ect блокирует члены, методы и свойства исходного объекта. Блокированную информацию можно просмотреть с помощью свойства BaseObj ect со стандартным именем PSBase. Например, команда позволяет просмотреть заблокированную информацию для коллекции объектов $Procs. Понятно, что это тема для очень продвинутых пользователей, т. к. имя PSBase скрыто. Единственный случай, когда его следует использовать — это когда PSObj ect неправильно интерпретирует объект или вы хотите разобраться в самых потаенных уголках PowerShell.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *