将 EventViewerLogs 存储在 Powershell 的 Excel 电子表格中
Storing EventViewerLogs in Excel spreadsheet from Powershell
我想存储以下的输出:
$Application = Get-EventLog -LogName Application | Where-Object {($_.EntryType -like 'Error' -or $_.EntryType -like 'Warning')};
在 excel 电子表格中。
我试过:$Application | Out-File E:\app.csv;
我得到的输出为:
如您所见,excel 电子表格中的列未单独对齐,而且 values/content 列不完整并以 (...) 结尾。
我想在 excel 电子表格中正确存储每一列的完整值。
如评论中所述,您正在寻找 Export-Csv
cmdlet,其中 Converts objects into a series of comma-separated (CSV) strings and saves the strings in a CSV file
。你可以这样做 -
$Application = Get-EventLog -LogName Application | Where-Object {($_.EntryType -like 'Error' -or $_.EntryType -like 'Warning')};
$Application | Export-Csv -path E:\app.csv -NoTypeInformation
您的问题的下一步是将 csv
文件转换为 excel
文件,因为您需要将数据存储在 excel 电子表格中。下面是我成功使用了一段时间的代码。
#Define locations and delimiter
$csv = "E:\app.csv" #Location of the source file
$xlsx = "E:\app.xlsx" #Desired location of output
$delimiter = ";" #Specify the delimiter used in the file
# Create a new Excel workbook with one empty sheet
$excel = New-Object -ComObject excel.application
$workbook = $excel.Workbooks.Add(1)
$worksheet = $workbook.worksheets.Item(1)
# Build the QueryTables.Add command and reformat the data
$TxtConnector = ("TEXT;" + $csv)
$Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1"))
$query = $worksheet.QueryTables.item($Connector.name)
$query.TextFileOtherDelimiter = $delimiter
$query.TextFileParseType = 1
$query.TextFileColumnDataTypes = ,1 * $worksheet.Cells.Columns.Count
$query.AdjustColumnWidth = 1
# Execute & delete the import query
$query.Refresh()
$query.Delete()
# Save & close the Workbook as XLSX.
$Workbook.SaveAs($xlsx,51)
$excel.Quit()
以上代码会将 csv
文件转换为 XLSX
文件。您可以查看this了解更多信息。
您可以使用 -Delimiter "
#seperator"
导出到 csv 以分隔 excel
中的列
它可能看起来像这样
$Application | Export-Csv C:\test.csv -Delimiter ";"
我想存储以下的输出:
$Application = Get-EventLog -LogName Application | Where-Object {($_.EntryType -like 'Error' -or $_.EntryType -like 'Warning')};
在 excel 电子表格中。
我试过:$Application | Out-File E:\app.csv;
我得到的输出为:
如您所见,excel 电子表格中的列未单独对齐,而且 values/content 列不完整并以 (...) 结尾。
我想在 excel 电子表格中正确存储每一列的完整值。
如评论中所述,您正在寻找 Export-Csv
cmdlet,其中 Converts objects into a series of comma-separated (CSV) strings and saves the strings in a CSV file
。你可以这样做 -
$Application = Get-EventLog -LogName Application | Where-Object {($_.EntryType -like 'Error' -or $_.EntryType -like 'Warning')};
$Application | Export-Csv -path E:\app.csv -NoTypeInformation
您的问题的下一步是将 csv
文件转换为 excel
文件,因为您需要将数据存储在 excel 电子表格中。下面是我成功使用了一段时间的代码。
#Define locations and delimiter
$csv = "E:\app.csv" #Location of the source file
$xlsx = "E:\app.xlsx" #Desired location of output
$delimiter = ";" #Specify the delimiter used in the file
# Create a new Excel workbook with one empty sheet
$excel = New-Object -ComObject excel.application
$workbook = $excel.Workbooks.Add(1)
$worksheet = $workbook.worksheets.Item(1)
# Build the QueryTables.Add command and reformat the data
$TxtConnector = ("TEXT;" + $csv)
$Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1"))
$query = $worksheet.QueryTables.item($Connector.name)
$query.TextFileOtherDelimiter = $delimiter
$query.TextFileParseType = 1
$query.TextFileColumnDataTypes = ,1 * $worksheet.Cells.Columns.Count
$query.AdjustColumnWidth = 1
# Execute & delete the import query
$query.Refresh()
$query.Delete()
# Save & close the Workbook as XLSX.
$Workbook.SaveAs($xlsx,51)
$excel.Quit()
以上代码会将 csv
文件转换为 XLSX
文件。您可以查看this了解更多信息。
您可以使用 -Delimiter "
#seperator"
导出到 csv 以分隔 excel
它可能看起来像这样
$Application | Export-Csv C:\test.csv -Delimiter ";"