【问题标题】:Parse log and export to CSV解析日志并导出为 CSV
【发布时间】:2019-07-26 20:55:52
【问题描述】:

导出后我需要帮助完成此脚本并提供更多详细信息。我需要做的是在多台机器上运行它并导出为 CSV。我想在第一列中有计算机名称,然后在第二列中有包含错误的字符串。我想将 CSV 导出到\\servername\folder\...

Get-Content "$env:windir\Panther\setuperr.log" | Where-Object {
    $_.Contains("Can't retrieve group.........")
} | Select-Object -Last 1

【问题讨论】:

  • 太棒了!那么,您为实现自己的目标做了哪些努力,又是如何让您失望的呢?
  • 请查看How to Ask。添加例如问题日志文件的一部分。

标签: powershell export-to-csv


【解决方案1】:

您可以通过 PowerShell remoting 执行此操作。由于您没有发布任何关于您要查询的机器的信息,我假设如下:

  • 您使用的是 PowerShell 5.x
  • 您的遥控器是 WindowServer 2012 R2 或更高版本,或 Win10
  • 基于这些instructions 允许和激活 PS 远程处理

如果是这样,您可以通过-ComputerName-Session 参数集组合使用Invoke-Command。这是Invoke-Commanddocumentation。简单例子:

$computerNames = "pc1.domain", "pc2.domain"

$results = @()
foreach ($computerName in $computerNames) {
    $session = New-PSSession -ComputerName $computerName -Credential (Get-Credential)        
    $result = Invoke-Command -Session $session -ScriptBlock {
       # Lets assume that this code from OP is correct
       $foundRow = Get-Content "$env:windir\Panther\setuperr.log" | Where-Object {
          $_.Contains("Can't retrieve group.........") } | Select-Object -Last 1
       # Return custom object to caller
       [PSCustomObject]@{
           FoundRow = $foundRow
           ComputerName = $env:COMPUTERNAME
       }
    }
    $results += $result
}

$results 是一个对象数组,其中每个对象包含一个FoundRowComputerName 属性。此对象通过管道传送到 Export-Csv (docu) cmdlet:

$results | Export-Csv -NoTypeInformation -Path C:\temp\your.csv 

如果您不想每次都键入凭据,则可以创建一个包含计算机名称和加密凭据的 CSV 文件。这个link 解释了如何以加密方式存储凭据。要浏览数据,您可以使用 Get-ContentConvertFrom-Csv cmdlet。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2018-02-16
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多