sergey vasin

The IT blog

Используем PowerShell для объединения двух CSV-таблиц – Hey, Scripting Guy! Blog

leave a comment »

Резюме: Microsoft Scripting Guy, Ed Wilson рассказывает об объединении двух CSV-таблиц путем расширения столбцов.

Q: Привет, Scripting Guy. У меня есть одна проблема на работе. Наша компания находится в постоянном процессе приобретений и объединений. Каждые несколько недель наша сеть полностью изменяется и нам приходится включать новый домен или лес в нашу инфраструктуру Active Directory. В добавок ко всему, мы готовимся к аудиту SOX. Я решил сохранить некоторую информацию в базе данных SQL Express. Проблема в том, что я не так хорошо знаю SQL Server. Я хочу импортировать данные в SQL из CSV. Я знаю как это сделать (я каждый день читаю блог Hey, Scriptig Guy!). Чего я не знаю, так это того, как получить данные из двух классов WMI и превратить их в одну строку в формате CSV. Можете мне помочь?

A: Я много писал о работе с CSV-файлами, но даже не подозревал, что кому-то может понадобиться расширить столбцы. Когда речь идет об объединении файлов CSV, обычно в существующий файл добавляются новые столбцы, содержащие такие же типы данных.

Добавляем один CSV к другому

В качестве примера я собираюсь запросить классы WMI Win32_ComputerSystem и Win32_OperatingSystem. Но первое, что я сделаю – это инициализирую переменные, установив их значение в $Null. Это убережет меня об ошибок, если я запущу скрипт более одного раза – при каждом его запуске переменные будут очищаться.

$computer = $osInfo = $compOSInfo = $null

Мне интересны только несколько свойств каждого класса WMI. По соображениям совместимости, я использую командлет Get-WMIObject (хотя предлагаемая техника подходит и для командлета Get-CimInstance). Я воспользуюсь командлетом Select-Object для отбора определенных свойств каждого класса и затем командлетом ConvertTo-CSV, для конвертации полученной информации в CSV-формат. Мне не нужна информация о типах, поэтому я использую параметр –NoTypeInformation. Оба запроса приведены ниже.

$computer = gwmi win32_computersystem |

select numberOfProcessors, NumberOfLogicalProcessors, HypervisorPresent |

ConvertTo-Csv -NoTypeInformation

$osInfo = gwmi win32_operatingsystem |

select version, caption, serialnumber, osarchitecture |

ConvertTo-Csv –NoTypeInformation

Создаем новый заголовок и новую строку данных

Теперь мне нужно совместить сроки заголовков двух таблиц CSV. Переменная $computer содержит две строки данных. Первая строка – это имена колонок, а вторая – сами данные.

PS C:\> $computer

«numberOfProcessors»,»NumberOfLogicalProcessors»,»HypervisorPresent»

«1»,»8″,»True»

Переменная $osInfo содержит другой набор заголовков и данных.

PS C:\> $osInfo

«version»,»caption»,»serialnumber»,»osarchitecture»

«6.2.9200»,»Microsoft Windows 8 Pro»,»00178-10777-21922-AA381″,»64-bit»

Для создания нового ряда заголовков, мне нужно объединить первые линии содержимого переменных $computerInfo и $osInfo. Также мне нужно убедиться, что между двумя отдельными рядами присутствует запятая. Результаты я сохраню в новой переменной $compOSInfo.

$compOSInfo = «{0},{1}» -f $computer[0],$osInfo[0]

Теперь мне нужно создать новую строку данных. Для начала мне нужно перейти на новую строку. Для этого я использую специальные символы «rn». Теперь я объединю содержимое второй строки переменной $computer с содержимым второй строки переменной $osInfo. Как и в предыдущем случае, я добавляю запятую между объединяемыми рядами.

$compOSInfo += «`r`n{0},{1}» -f $computer[1],$osInfo[1]

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

Get-OSAndComputerInfo.ps1

$computer = $osInfo = $compOSInfo = $null

$computer = gwmi win32_computersystem |

select numberOfProcessors, NumberOfLogicalProcessors, HypervisorPresent |

ConvertTo-Csv -NoTypeInformation

$osInfo = gwmi win32_operatingsystem |

select version, caption, serialnumber, osarchitecture |

ConvertTo-Csv -NoTypeInformation

$compOSInfo = «{0},{1}» -f $computer[0],$osInfo[0]

$compOSInfo += «`r`n{0},{1}» -f $computer[1],$osInfo[1]

$compOSInfo

Это все, что касается объединения двух CSV-таблиц.

Автор:

Ed Wilson, Microsoft Scripting Guy

Оригинал:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/12/11/use-powershell-to-add-two-pieces-of-csv-data-together.aspx


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

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


Реклама

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

Декабрь 28, 2012 в 10:24

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

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s