Поделиться через


about_Properties

Назначение: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

РАЗДЕЛ

about_Properties

КРАТКОЕ ОПИСАНИЕ

Содержит описание использования свойств объектов в Windows PowerShell.

ПОДРОБНОЕ ОПИСАНИЕ

В Windows PowerShell используются структурированные наборы данных, называемые объектами, для представления элементов в хранилищах данных или состояния компьютера. Чаще всего вы работаете с объектами, которые являются частью Microsoft .NET Framework, но также можете создавать пользовательские объекты в Windows PowerShell.

Связь между элементом и его объектом очень тесная. При изменении объекта изменяется и представляемый им элемент. Например, получая файл в Windows PowerShell, вы получаете не сам файл. Вы получаете объект FileInfo, который представляет файл. Когда изменяется объект FileInfo, файл также изменяется.

Большинство объектов имеют свойства. Свойства — это данные, связанные с объектом. Разные типы объектов имеют различные свойства. Например, объект FileInfo, который представляет файл, имеет свойство IsReadOnly, содержащее значение $True, если файл имеет атрибут только для чтения, и $False в противном случае. Объект DirectoryInfo, который представляет каталог файловой системы, имеет свойство Parent, содержащее путь к родительскому каталогу.

СВОЙСТВА ОБЪЕКТА

Чтобы получить свойства объекта, используйте командлет Get-Member. Например, чтобы получить список свойств объекта FileInfo, используйте командлет Get-ChildItem для получения объекта FileInfo, представляющего файл. Затем с помощью оператора конвейера (|) передайте объект FileInfo в командлет Get-Member. Приведенная ниже команда получает файл PowerShell.exe и передает его командлету Get-Member. Автоматическая переменная $Pshome содержит путь к каталогу установки Windows PowerShell.

         Get-ChildItem $pshome\PowerShell.exe | Get-Member

В выходных данных команды содержатся элементы объекта FileInfo. Элементы включают как свойства, так и методы. Работая в Windows PowerShell, вы имеете доступ ко всем элементам объектов.

Чтобы вывести только свойства объекта, но не методы, используйте параметр MemberType командлета Get-Member со значением «property», как показано в примере ниже.

         Get-ChildItem $pshome\PowerShell.exe | Get-Member -MemberType property

            TypeName: System.IO.FileInfo
        
         Name              MemberType Definition
         ----              ---------- ----------
         Attributes        Property   System.IO.FileAttributes Attributes {get;set;}
         CreationTime      Property   System.DateTime CreationTime {get;set;}
         CreationTimeUtc   Property   System.DateTime CreationTimeUtc {get;set;}
         Directory         Property   System.IO.DirectoryInfo Directory {get;}
         DirectoryName     Property   System.String DirectoryName {get;}
         Exists            Property   System.Boolean Exists {get;}
         Extension         Property   System.String Extension {get;}
         FullName          Property   System.String FullName {get;}
         IsReadOnly        Property   System.Boolean IsReadOnly {get;set;}
         LastAccessTime    Property   System.DateTime LastAccessTime {get;set;}
         LastAccessTimeUtc Property   System.DateTime LastAccessTimeUtc {get;set;}
         LastWriteTime     Property   System.DateTime LastWriteTime {get;set;}
         LastWriteTimeUtc  Property   System.DateTime LastWriteTimeUtc {get;set;}
         Length            Property   System.Int64 Length {get;}
         Name              Property   System.String Name {get;}

Узнав свойства, вы можете применять их в командах Windows PowerShell.

ЗНАЧЕНИЯ СВОЙСТВ

Все объекты определенного типа имеют одинаковые свойства, но значения свойств описывают конкретный объект. Например, каждый объект FileInfo имеет свойство CreationTime, но значение этого свойства различно для каждого файла.

Самый простой способ получить значения свойств объекта — использовать метод точки. Укажите объект. Например, введите переменную, содержащую объект, или команду, которая получает этот объект. Затем введите точку (.) и имя свойства.

Например, приведенная ниже команда отобразит значение свойства CreationTime файла PowerShell.exe. Команда Get-ChildItem возвращает объект FileInfo, представляющий файл PowerShell.exe. Команда заключена в скобки, чтобы гарантировать ее выполнение до того, как будет получен доступ к какому-либо свойству. За командой Get-ChildItem следует точка и имя свойства CreationTime.

         C:\PS> (Get-ChildItem $pshome\PowerShell.exe).creationtime
         Tuesday, March 18, 2008 12:07:52 AM

Также можно сохранить объект в переменной и затем извлечь его свойства с помощью метода точки, как показано в примере ниже.

         C:\PS> $a = Get-ChildItem $pshome\PowerShell.exe
         C:\PS> $a.CreationTime
         Tuesday, March 18, 2008 12:07:52 AM

Также можно использовать командлеты Select-Object и Format-List для отображения значений свойств объекта. Командлеты Select-Object и Format-List оба имеют параметр Property. С помощью параметра Property можно задать одно или несколько свойств и их значения. Либо можно использовать подстановочный знак (*) для обозначения всех свойств.

Например, приведенная ниже команда отобразит значения всех свойств файла PowerShell.exe.

         C:\PS> Get-ChildItem $pshome\PowerShell.exe | Format-List -property *

         PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe
         PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\Windows\system32\WindowsPowerShell\v1.0
         PSChildName       : PowerShell.exe
         PSDrive           : C
         PSProvider        : Microsoft.PowerShell.Core\FileSystem
         PSIsContainer     : False
         VersionInfo       : File:             C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe
                             InternalName:     POWERSHELL
                             OriginalFilename: PowerShell.EXE.MUI
                             File Version:      6.1.6570.1 (fbl_srv_PowerShell(nigels).070711-0102)
                             FileDescription:  PowerShell.EXE
                             Product:          Microsoft® Windows® Operating System
                             ProductVersion:   6.1.6570.1
                             Debug:            False
                             Patched:          False
                             PreRelease:       False
                             PrivateBuild:     True
                             SpecialBuild:     False
                             Language:         English (United States)

         BaseName          : PowerShell
         Mode              : -a---
         Name              : PowerShell.exe
         Length            : 160256
         DirectoryName     : C:\Windows\system32\WindowsPowerShell\v1.0
         Directory         : C:\Windows\system32\WindowsPowerShell\v1.0
         IsReadOnly        : False
         Exists            : True
         FullName          : C:\Windows\system32\WindowsPowerShell\v1.0\PowerShell.exe
         Extension         : .exe
         CreationTime      : 3/18/2008 12:07:52 AM
         CreationTimeUtc   : 3/18/2008 7:07:52 AM
         LastAccessTime    : 3/19/2008 8:13:58 AM
         LastAccessTimeUtc : 3/19/2008 3:13:58 PM
         LastWriteTime     : 3/18/2008 12:07:52 AM
         LastWriteTimeUtc  : 3/18/2008 7:07:52 AM
         Attributes        : Archive
        

СТАТИЧЕСКИЕ СВОЙСТВА

В Windows PowerShell можно использовать статические свойства классов .NET. В отличие от стандартных свойств, которые являются свойствами объекта, статические свойства являются свойствами класса.

Чтобы определить статические свойства класса, используйте параметр Static командлета Get-Member.

Например, приведенная ниже команда возвращает статические свойства класса System.DateTime.

        Get-Date | Get-Member -MemberType Property -Static

           TypeName: System.DateTime

        Name     MemberType Definition
        ----     ---------- ----------
        MaxValue Property   static datetime MaxValue {get;}
        MinValue Property   static datetime MinValue {get;}
        Now      Property   datetime Now {get;}
        Today    Property   datetime Today {get;}
        UtcNow   Property   datetime UtcNow {get;}

Чтобы получить значение статического свойства, используйте приведенный ниже синтаксис.

        [<ClassName>]::<Property>

Например, приведенная ниже команда возвращает значение статического свойства UtcNow класса System.DateTime.

        [System.DateTime]::UtcNow

СВОЙСТВА СКАЛЯРНЫХ ОБЪЕКТОВ И КОЛЛЕКЦИЙ

Свойства отдельного («скалярного») объекта определенного типа часто отличаются от свойств коллекции объектов этого же типа.

Например, каждая служба имеет свойство DisplayName, но его нет у коллекции служб. Аналогичным образом все коллекции имеют свойство Count, которое сообщает, сколько объектов имеется в коллекции, но отдельные объекты не имеют такого свойства.

Начиная с версии Windows PowerShell 3.0 Windows PowerShell пытается предотвратить возникновение ошибок сценариев в результате различий в свойствах скалярных объектов и коллекций.

– Если вы указываете коллекцию, но запрашиваете свойство, которое имеется только у отдельных («скалярных») объектов, Windows PowerShell возвращает значение этого свойства для каждого объекта коллекции.

– Если вы запрашиваете свойство Count или Length для нуля объектов или одного объекта, Windows PowerShell возвращает правильное значение.

Если свойство имеется как у отдельных объектов, так и у коллекции, Windows PowerShell не изменяет результат.

Эта функция также работает применительно к методам скалярных объектов и коллекций. Подробнее см. в разделе about_Methods.

ПРИМЕРЫ

Например, у каждой службы есть свойство DisplayName. Приведенная ниже команда возвращает значение свойства DisplayName службы Audiosrv.

        PS C:\>(Get-Service Audiosrv).DisplayName
        Windows Audio

Однако у коллекции или массива служб нет свойства DisplayName. Приведенная ниже команда пытается получить свойство DisplayName всех служб в Windows PowerShell 2.0.

        PS C:\>(Get-Service).DisplayName
        PS C:\>

Начиная с версии Windows PowerShell 3.0 та же команда возвращает значение свойства DisplayName каждой службы, возвращаемой командлетом Get-Service.

        PS C:\>(Get-Service).DisplayName
        Application Experience
        Application Layer Gateway Service
        Windows All-User Install Agent
        Application Identity
        Application Information
        ...

В свою очередь, коллекция из двух или более служб имеет свойство Count, которое содержит число объектов в коллекции.

        PS C:\>(Get-Service).Count
        176

У отдельных служб нет свойства Count или Length, как показано в этой команде в Windows PowerShell 2.0.

        PS C:\>(Get-Service Audiosrv).Count
        PS C:\>

Начиная с версии Windows PowerShell 3.0 эта команда возвращает правильное значение свойства Count.

        PS C:\>(Get-Service Audiosrv).Count
        1

СМ. ТАКЖЕ

about_Methods

about_Objects

Get-Member

Select-Object

Format-List