2013-02-27 2 views
1

Извините за странное название, я не знал, как сформулировать вопрос. Я относительно новичок в Powershell, и я пишу программу. В принципе, у меня есть массив, в котором пользователь выбрал настройки или хочет иметь «Выбранный» из запроса GWMI, хранящегося в «$ settings_array». Я хочу вывести результаты в CSV. Когда я пытаюсь запустить его, в CSV выводится только первый оператор Select. Выход в текстовое поле отлично работает. Я знаю, что это имеет какое-то отношение к тому, как оно хранится в массиве на каждой итерации. $ resultList инициализируется как массив ($ resultList = @()). Существуют сотни строк кода для формы и других функций, но вот соответствующий код. Спасибо за помощь! Дайте мне знать, если мне нужно больше написать код.Powershell - Экспорт в CSV на основе выбранных объектов из массива

$colItems = GWMI Win32_NetworkAdapterConfiguration -computername $PCname -namespace "root\CimV2" -filter "IpEnabled = TRUE" 
ForEach ($objItem in $colItems) 
{ 
    ForEach ($objItem2 in $settings_array) 
    { 
     $resultList += $objItem | Select $objItem2 
     $richTextBox1.Appendtext("$objItem2" + ": " + $objItem.$objItem2 + "`r`n") 
     $richtextbox1.ScrollToCaret() 
    } 
} 
$resultList | export-csv "$ScriptDir\Exports\$Outputfile" 
+0

Это сработало: '$ colItems | Select-Object -Property $ settings_array | export-csv "$ ScriptDir \ Exports \ $ Outputfile" -NoType "после создания массива настроек в той же функции. Создание $ settings_array в отдельной функции создает ошибки. – Thomas

ответ

1

CSV изготовлен из рядов и столбцов. Каждый объект в экспортируемом массиве получает строку, и каждый объект получает значение столбца для каждого свойства. Вы каждый раз добавляете новую запись/объект в список результатов с единственным свойством (каждый объект имеет только одно свойство). Причина, по которой вы получаете только первое, состоит в том, что ваши записи содержат разные имена свойств. Чтобы решить эту проблему «нестатические свойства», powershell берет свойства первого объекта как шаблон для файла csv. Поскольку object2, object3 и т. Д. Не включают одно и то же свойство, они будут пустыми. Однако, когда вы нажимаете на другой объект с тем же свойством, что и первый объект, значение также будет включено. Ex. вы получаете свойство Name для всех сетевых адаптеров, но пустые значения для остальных.

Ваш образец отсутствует информация, например. как $settings_array построен. Если это обычная строка-массив, как:

$settings_array = "Name", "DisplayName", "Test" 

или

$settings_array = @("Name", "DisplayName", "Test") 

Затем вы можете передать весь массив select.

$colItems = GWMI Win32_NetworkAdapterConfiguration -computername $PCname -namespace "root\CimV2" -filter "IpEnabled = TRUE" 
ForEach ($objItem in $colItems) 
{ 
    #Write to screen 
    ForEach ($objItem2 in $settings_array) 
    { 
     $richTextBox1.Appendtext("$objItem2" + ": " + $objItem.$objItem2 + "`r`n") 
     $richtextbox1.ScrollToCaret() 
    } 
} 
#Save to CSV 
$colItems | Select-Object -Property $settings_array | export-csv "$ScriptDir\Exports\$Outputfile" 

Обратите внимание на последнюю строку. Теперь цикл foreach используется только для вашего содержимого textbox, в то время как последняя строка форматирует CSV так, как должна.

EDIT Попробуйте это, чтобы получить параметры:

Function GetSettings { 
    $out = @() 
    Foreach ($objItem in $chklstGetMIPRet.CheckedItems) { 
     $out += $objItem.ToString() 
    } 
    $out 
} 
$settings_array = GetSettings 
+0

Спасибо за ответ ... Я попробую это, когда вернусь к работе. $ Settings_array построены с проходящими через петлю аналогична Еогеаспа ($ пункта в $ chklistbox.SelectedItems) $ settings_array + = $ пункта Я не могу вспомнить точный синтаксис прямо сейчас, но это массив строк. – Thomas

+0

Я пробовал это решение, но получаю следующее: Select-Object: Невозможно преобразовать System.Management.Automation.PSObject в один из следующих типов {System.String, System.Management.Automation.ScriptBlock}. В E: \ Scripts \ CSTools \ CSTools.ps1: 713 char: 56 + $ colItems | Select-Object <<<< -Property $ sett ings_array | Export-CSV "$ SCRIPTDIR \ Экспорт \ $ OUTPUTFILE" + CategoryInfo: InvalidArgument: (:) [Select-Object], NotSupport edException + FullyQualifiedErrorId: DictionaryKeyUnknownType, Microsoft.PowerShell.Co mmands.SelectObjectCommand – Thomas

+0

Вот код для $ settings_array 'Function Settings() { Foreach ($ objItem в $ chklstGetMIPRet.CheckedItems) {$ settings_array1 + = [String] $ objItem} Возврат $ settings_array1} $ settings_array = Настройки ($ this)' – Thomas

0

Просто кончик SimPE: вы можете экспортировать в XML с экспортом-CLIXML и независимо от количества колонны, все они будут добавлены в файл.

Смежные вопросы