sergey vasin

The IT blog

Создаем пользовательский объект PowerShell для упрощения объединения файлов CSV – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft Scripting Guy, Ed Wilson показывает как создавать пользовательские объекты PowerShell для упрощения объединения файлов CSV.

Q: Привет, ScriptingGuy! Вчера ты рассказывал о создании двух объектов, экспортировании их в CSV и манипуляции со строками для объединения файлов CSV. А существует ли какой-то более понятный способ для решения этой задачи?

A: Конечно, существуют и другие пути объединения объектов WMI и создания CSV. В Windows PowerShell всегда можно найти несколько способов решения одной и той же задачи.

Сначала создаем пользовательский объект

Заметка: сегодняшний пост в сущности – продолжение вчерашнего поста: Используем PowerShell для объединения двух CSV-таблиц. Было бы неплохо ознакомиться сначала с ним.

Перво-наперво, мы создадим пару пользовательских объектов. Наиболее простой путь состоит в использовании командлета Select-Object. Он позволяет свободно переводить различные объекты в пользовательский объект. В пользовательском объекте свойства обладают типом данных NoteProperty.

PS C:\> $osInfo = gwmi win32_operatingsystem |

     select version, caption, serialnumber, osarchitecture

 PS C:\> $osInfo | gm -MemberType NoteProperty

    TypeName: Selected.System.Management.ManagementObject

 Name           MemberType   Definition                                       

—-           ———-   ———-                                      

caption        NoteProperty System.String caption=Microsoft Windows 8 Pro   

osarchitecture NoteProperty System.String osarchitecture=64-bit             

serialnumber   NoteProperty System.String serialnumber=00178-10777-21922-AA381

version        NoteProperty System.String version=6.2.9200       

Поскольку я работаю с объектом, я свободно могу его расширить, используя командлет Add-Member. Этот командлет добавляет новые члены к существующему объекту, таким образом расширяя их. Код для создания двух объектов приведен ниже.

$computer = gwmi win32_computersystem |

    select numberOfProcessors, NumberOfLogicalProcessors, HypervisorPresent

 $osInfo = gwmi win32_operatingsystem |

    select version, caption, serialnumber, osarchitecture

Расширяем существующий объект

Если бы мне было нужно добавить только одно или два свойства к объекту, я мог бы сделать это вручную. Но поскольку объект у меня уже есть – с неопределенным числом свойств – я хочу, чтобы добавление этих свойств происходило автоматически. Поэтому я воспользуюсь командлетом Get-Member для определения свойств объекта. Как было показано выше, интересующие меня свойства относятся к типу NoteProperty. Кроме того, я использую конструкцию foreach, чтобы обработать каждое из свойств пользовательского объекта, сохраненного в переменной $osInfo – но только если –MemberType будет соответствовать NoteProperty.

Foreach($p in Get-Member -InputObject $osInfo -MemberType NoteProperty)

Теперь мне нужно воспользоваться командлетом Add-Member для того, чтобы добавить все свойства с типом NoteProperty к пользовательскому объекту, сохраненному в переменной $computer. Я укажу переменную $computer в качестве значения для параметра InputObject. Код приведен ниже (символ «`» означает продолжение сроки – что сделано для более удобного восприятия). Подвыражение требуется для получения значения каждого свойства.

Add-Member -InputObject $computer -MemberType NoteProperty `

  -Name $p.Name -Value $osInfo.$($p.Name) –Force

После модификации объект можно использовать для создания CSV-таблицы, путем передачи его командлету ConvertTo-CSV (или Export-CSV).

Полный текст скрипта приведен ниже.

Get-OsAndComputerInfoAddMember.ps1

$computer = $osInfo = $null

$computer = gwmi win32_computersystem |

    select numberOfProcessors, NumberOfLogicalProcessors, HypervisorPresent

$osInfo = gwmi win32_operatingsystem |

    select version, caption, serialnumber, osarchitecture

Foreach($p in Get-Member -InputObject $osInfo -MemberType NoteProperty)

{

 Add-Member -InputObject $computer -MemberType NoteProperty `

  -Name $p.Name -Value $osInfo.$($p.Name) -Force

}

$computer | ConvertTo-Csv –NoTypeInformation

Это все, что касается использования Windows PowerShell для создания пользовательского объекта и создания на его основе CSV-таблицы.

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/12/12/create-a-custom-powershell-object-to-simplify-appending-csv-files.aspx


Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Декабрь 28, 2012 в 13:16

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s