2015-05-22 3 views
0

Я пытаюсь выяснить способ сбора 5 частей информации с помощью WMI и поместить эту информацию в массив, а затем экспортировать в файл csv. Любая помощь будет принята с благодарностью. Вот код:Как сгенерировать csv-файл через этот код

$Servers = get-content "c:\temp\HH_Servers.txt" 
foreach ($Server in $Servers){ 
    $GenItems2 = gwmi Win32_OperatingSystem -Comp $Server 
    $Software = gwmi Win32_Product -Comp $Server 
    $systeminfo = foreach ($objItem in $GenItems2){ 
    $objItem.Caption 
} 

#Populate Software Sheet 
$softwareinfo = foreach ($objItem in $Software){ 
    $Server 
    $objItem.Name 
    $objItem.Vendor 
    $objItem.Version 
    } 
} 
+0

Пожалуйста, не используйте кнопку кода фрагмента кода при добавлении кода; это для JavaScript (я знаю, что в подсказке это не сказано). Вместо этого используйте кнопку «Пример кода» (два слева на панели инструментов - это выглядит как '{}') или просто выберите весь свой код и нажмите Ctrl + K. Я исправил форматирование здесь (как и в предыдущем вопросе). :-) –

ответ

1

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

$Servers = Get-Content "c:\temp\HH_Servers.txt" 

$arr = @() 

foreach ($Server in $Servers){ 

    $GenItems2 = gwmi Win32_OperatingSystem -Comp $Server 
    $Software = gwmi Win32_Product -Comp $Server 

    #Populate Software Sheet 
    foreach ($objItem in $Software){ 
     $temp = New-Object psobject 
     $temp | Add-Member -MemberType NoteProperty -Name "Server" -Value $objItem.__SERVER 
     $temp | Add-Member -MemberType NoteProperty -Name "Caption" -Value $GenItems2.Caption 
     $temp | Add-Member -MemberType NoteProperty -Name "ServicePack" -Value $GenItems2.CsdVersion 
     $temp | Add-Member -MemberType NoteProperty -Name "Name" -Value $objItem.Name 
     $temp | Add-Member -MemberType NoteProperty -Name "Vendor" -Value $objItem.Vendor 
     $temp | Add-Member -MemberType NoteProperty -Name "Version" -Value $objItem.Version 
     $arr += $temp 
    } 

} 

$arr | Export-Csv C:\whatever\SoftwareInfo.csv -NoTypeInformation -Encoding ASCII 

Я также позволил себе добавить дополнительное свойство, которое включает в себя пакет обновления уровень операционной системы (может также представлять интерес). Если вам не нужно, просто удалите строку, которая добавит свойство ServicePack.

В случае, если производительность важна, вы также можете пересмотреть использование wmi полностью с момента его сверхмедленности. Если вы хотите узнать об альтернативах, вот хорошая статья от сценариста, который обсуждает вопрос: Use PowerShell to Find Installed Software

+0

Пол, спасибо за ваше время! Он отлично работает, и я смотрю на ссылку, которую вы мне прислали. – NobleMan

+1

Я бы предложил использовать '$ arr + = New-Object -TypeName psobject -Property @ {Caption = $ GenItems2.Caption; ServicePack = $ GenItems2.CsdVersion} ', чтобы вы могли избавиться от 6 вызовов« Add-Member »для программного обеспечения. –

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