Повторение действия для нескольких объектов (командлет ForEach-Object) — КиберПедия 

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

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Повторение действия для нескольких объектов (командлет ForEach-Object)

2022-10-28 23
Повторение действия для нескольких объектов (командлет ForEach-Object) 0.00 из 5.00 0 оценок
Заказать работу

Командлет ForEach-Object использует блоки сценариев и дескриптор $_ для текущего объекта конвейера, чтобы та или иная команда была выполнена для всех объектов конвейера. Эта возможность позволяет выполнить некоторые сложные действия.

Одним из них является обработка данных с целью повышения их применимости. Например, класс Win32_LogicalDisk из инструментария управления Windows может использоваться для просмотра сведений о свободном месте на каждом локальном диске. Для запрашиваемых данных используется единица измерения байт, что затрудняет чтение.

PS> Get-WmiObject -Class Win32_LogicalDisk     DeviceID: C: DriveType: 3 ProviderName: FreeSpace: 50665070592 Size   : 203912880128 VolumeName: Local Disk

 

Значение свойства FreeSpace можно преобразовать в мегабайты, дважды разделив исходное значение на 1024: после первого деления результат будет представлен в килобайтах, после второго — в мегабайтах. Для этого в блоке сценария ForEach-Object нужно ввести:

Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {($_.FreeSpace)/1024.0/1024.0} 48318.01171875

 

К сожалению, теперь с выводимыми данными не связаны никакие метки. Свойства WMI предназначены только для чтения, поэтому нельзя преобразовать непосредственно значение свойства FreeSpace. Если ввести:

Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {$_.FreeSpace = ($_.FreeSpace)/1024.0/1024.0}

 

то будет получено сообщение об ошибке.

"FreeSpace" является свойством ReadOnly. В строке:1 знак:70 + Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {$_.F <<<< r eeSpace = ($_.FreeSpace)/1024.0/1024.0}

 

Реорганизовать данные можно с помощью более сложных методов, но более простым решением является создание нового объекта с помощью командлета Select-Object.

Выделение частей объектов (командлет Select-Object)

Командлет Select-Object позволяет создавать новые объекты Windows PowerShell, которые содержат избранные свойства существующих объектов, используемых при создании новых. Чтобы создать новый объект, который содержит только свойства Name и FreeSpace WMI-класса Win32_LogicalDisk, введите следующее:

PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace   Name                               FreeSpace ----                               --------- C:                                 50664845312

 

После выполнения этой команды нельзя увидеть тип данных; но если результат передать по конвейеру командлету Get-Member после ключевого слова Select-Object, то можно увидеть новый тип объекта PSCustomObject:

PS> Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace| Get-Member     TypeName: System.Management.Automation.PSCustomObject   Name   MemberType Definition ----   ---------- ---------- Equals Method  System.Boolean Equals(Object obj) GetHashCode Method  System.Int32 GetHashCode() GetType Method  System.Type GetType() ToString Method  System.String ToString() FreeSpace NoteProperty FreeSpace=... Name     NoteProperty System.String Name=C:

 

Командлет Select-Object имеет достаточно широкое применение. Одним из примеров является репликация данных, которые затем можно изменить. Таким образом можно решить проблему, рассмотренную в предыдущей главе. Значение свойства FreeSpace вновь созданных объектов можно обновить, и выводимые данные будут содержать описательную метку:

Get-WmiObject -Class Win32_LogicalDisk | Select-Object -Property Name,FreeSpace | ForEach-Object -Process {$_.FreeSpace = ($_.FreeSpace)/1024.0/1024.0; $_} Name                                                             FreeSpace ----                                                             --------- C:                                                           48317.7265625

 

Сортировка объектов

С помощью командлета Sort-Object отображаемые данные можно организовать таким образом, чтобы упростить их просмотр. Командлету Sort-Object передаются имена свойств, по которым нужно произвести сортировку, и возвращает данные отсортированными по значениям этих свойств.

Рассмотрим проблему перечисления экземпляров класса Win32_SystemDriver. Чтобы отсортировать данные сначала по свойству State, а затем по свойству Name, необходимо ввести следующую команду:

Get-WmiObject -Class Win32_SystemDriver | Sort-Object -Property State,Name | Format-Table -Property Name,State,Started,DisplayName -AutoSize -Wrap

 

Несмотря на длину отображаемого текста, можно увидеть, что элементы с одинаковым состоянием сгруппированы:

Name      State Started DisplayName ----      ----- ------- ----------- ACPI      Running True Microsoft ACPI Driver AFD       Running True AFD AmdK7     Running True AMD K7 Processor Driver AsyncMac  Running True RAS Asynchronous Media Driver ... Abiosdsk  Stopped False Abiosdsk ACPIEC    Stopped False ACPIEC aec       Stopped False Microsoft Kernel Acoustic Echo Canceller ...

 

Объекты можно отсортировать в обратном порядке, для чего требуется указать параметр Descending. Это изменяет порядок сортировки таким образом, что имена сортируются в обратном алфавитном порядке, а числа — по убыванию.

PS> Get-WmiObject -Class Win32_SystemDriver | Sort-Object -Property State,Name -Descending | Format-Table -Property Name,State,Started,DisplayName -AutoSize -Wrap   Name      State Started DisplayName ----      ----- ------- ----------- WS2IFSL   Stopped False Windows Socket 2.0 Non-IFS Service Provider Supp                           ort Environment wceusbsh  Stopped False Windows CE USB Serial Host Driver... ... wdmaud    Running True Microsoft WINMM WDM Audio Compatibility Driver Wanarp    Running True Remote Access IP ARP Driver ...

 


Поделиться с друзьями:

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.009 с.