невозможно добавить сообщения об ошибках в csv с powershell export-csv - PullRequest
0 голосов
/ 17 марта 2020

Я написал следующий пример сценария, который позволяет мне собирать информацию для всех серверов в среде. Однако у меня нет доступа ко всем серверам, и иногда я получаю сообщение об ошибке, которое хочу перехватить и сохранить в файле 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 char: 26 + $ Ошибка [0] .Exception | Export-csv -Append. \ Resulttest.csv + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidData : (CSName: String) [Export-Csv], InvalidOperationException + FullyQual

Есть идеи о том, как go обойти это?

1 Ответ

2 голосов
/ 17 марта 2020

Вы можете попробовать это:

$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
...