2015-05-22 2 views
0

У меня есть сценарий, который хорошо помещает в лист рассылки. Проблема в том, что мне нужно экспортировать его как файл csv. Все петли foreach полностью меня озадачивают здесь, где можно разместить функции csv экспорта в скрипте. Если бы кто-то мог научить меня тому, как получить поля в файл csv, было бы весьма полезно.Экспорт как CSV вместо файла XLS

$date = 0 
$date = get-date -format "yyyy-MMM-dd-hhmm" 
$date 

#New Excel Application 
$Excel = New-Object -Com Excel.Application 
$Excel.visible = $False 

# Create 1 worksheets 
$Excel = $Excel.Workbooks.Add() 

# Assign each worksheet to a variable and 
# name the worksheet. 
$Sheet1 = $Excel.Worksheets.Item(1) 
$Sheet1.Name = "HH_SERVERS" 

#Create Heading for General Sheet 
$Sheet1.Cells.Item(1, 1) = "Machine_Name" 
$Sheet1.Cells.Item(1, 2) = "OS" 
$Sheet1.Cells.Item(1, 3) = "Software" 
$Sheet1.Cells.Item(1, 4) = "Vendor" 
$Sheet1.Cells.Item(1, 5) = "Version" 

$colSheets = ($Sheet1) 
foreach ($colorItem in $colSheets) 
{ 
    $intRow = 2 
    $intRowDisk = 2 
    $intRowSoft = 2 
    $intRowNet = 2 
    $WorkBook = $colorItem.UsedRange 
    $WorkBook.Interior.ColorIndex = 20 
    $WorkBook.Font.ColorIndex = 11 
    $WorkBook.Font.Bold = $True 
} 

#Auto Fit all sheets in the Workbook 
foreach ($colorItem in $colSheets) 
{ 
    $WorkBook = $colorItem.UsedRange 
    $WorkBook.EntireColumn.AutoFit() 
    clear 
} 

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

    # Populate General Sheet(1) with information 
    foreach ($objItem in $GenItems2) 
    { 
     $Sheet1.Cells.Item($intRow, 2) = $objItem.Caption 
    } 

    #Populate Software Sheet 

    foreach ($objItem in $Software) 
    { 
     $Sheet1.Cells.Item($intRowSoft, 1) = $Server 
     $Sheet1.Cells.Item($intRowSoft, 3) = $objItem.Name 
     $Sheet1.Cells.Item($intRowSoft, 4) = $objItem.Vendor 
     $Sheet1.Cells.Item($intRowSoft, 5) = $objItem.Version 
     $intRowSoft = $intRowSoft + 1 
    } 
} 

$outputfile = "c:\temp\" + $date.toString() + "-HH_Server_Software" 
$Excel.SaveAs($outputfile) 
$Excel.Close() 

Write-Host "*******************************" -ForegroundColor Green 
Write-Host "The Report has been completed." -ForeGroundColor Green 
Write-Host "*******************************" -ForegroundColor Green 
# ======================================================================== 
# END of Script 
# ================== 
+1

Вы не можете сохранить целую книгу как файл CSV. вам нужно сохранить отдельный лист. Это предположение, но '$ Excel.Worksheets.Item (1) .SaveAs (" file.csv ", 6)'. 6 - число, связанное с форматом файла CSV. – Matt

ответ

1

Вы не можете сохранить всю книгу как CSV. Вместо этого вам нужно сохранить индивидуальный рабочий лист. Значение формат файла для CSV является 6 (не помню, где я нашел что, хотя):

$xlCSV = 6  
$outputfile = "c:\temp\" + $date.toString() + "-HH_Server_Software.csv" 
$Sheet1.SaveAs($outputfile, $xlCSV) 

(протестированные на Windows 7 с Excel 2013)

Благодаря @ Matt для комментария с ссылка на XLFileFormat Enumerations.

+0

Ken: https://msdn.microsoft.com/en-us/library/office/ff198017.aspx. Кен белый, чтобы быть конкретным – Matt

+0

@Matt: Спасибо. Добавил его к ответу, с благодарностью за его поиск. :-) –

+0

Спасибо, что ответили ребята. Один вопрос. Должна ли установка быть на машине? Если это так, это не сработает. Нам не разрешено устанавливать его на серверах, где мы можем запустить скрипт. – NobleMan

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