【问题标题】:unable to append error messages to csv with powershell export-csv无法使用 powershell export-csv 将错误消息附加到 csv
【发布时间】:2020-06-28 10:27:45
【问题描述】:

我编写了以下示例脚本,可让我收集环境中所有服务器的信息。但是,我无法访问所有服务器,有时我会收到想要捕获并存储在 result.csv 文件中的错误。


$Servers = Get-Content .\servers.txt
foreach ($Server in $Servers){

try {
    Get-CimInstance Win32_OperatingSystem -ComputerName $server -ErrorAction Stop | Select-Object CSName, Caption, Version, OSArchitecture, InstallDate, LastBootUpTime | Export-Csv -append .\result.csv

} catch {

   $Error[0].Exception | Export-csv -Append .\resulttest.csv

}
}

通常脚本可以工作,但是当我尝试保存错误时,我收到消息:

Export-csv:无法将 CSV 内容附加到以下文件: .\resulttest.csv。附加对象没有属性 对应于以下列:CSName。继续 不匹配的属性,添加 -Force 开关并重试。在 C:\temp\script\serverdata.ps1:10 字符:26 + $Error[0].异常 |导出-csv -追加 .\resulttest.csv + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidData: (CSName:String) [Export-Csv], InvalidOperationException + 完全质量

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 您可能想看看this。要么使用两个 CSV,一个输出成功结果,另一个输出失败结果,或者使用PowerShell calculated property,如示例所示。

标签: powershell csv export-to-csv


【解决方案1】:

你可以试试这个:

$Servers = Get-Content .\servers.txt

$Servers | ForEach-Object {
    $server = $_
    try {
        Get-CimInstance Win32_OperatingSystem -ComputerName $server -ErrorAction Stop | 
        Select-Object CSName, Caption, Version, OSArchitecture, InstallDate, LastBootUpTime, @{Name = 'Result'; Expression = {'OK'}}
    } 
    catch {
        # output an object with the same properties.
        "" | Select-Object @{Name = 'CSName'; Expression = {$server}}, 
                           Caption, Version, OSArchitecture, InstallDate, LastBootUpTime, 
                           @{Name = 'Result'; Expression = {'ERROR: {0}' -f $Error[0].Exception.Message}}
    }
} | Export-Csv .\result.csv -NoTypeInformation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2018-02-08
    • 2020-12-06
    • 2012-03-02
    • 2017-10-19
    • 2020-02-17
    相关资源
    最近更新 更多