Экспорт результатов серверных служб из файла CSV в Powershell

Я пытаюсь сравнить сервисы, работающие на 9 серверах, которые должны иметь одинаковую настройку, но в настоящее время не так. Я решил создать скрипт, который экспортирует все сервисы из powershell в файл csv, поэтому я сравниваю серверы от a до b, от a до c, от a до d и т. Д.

Каждый CSV-файл содержит следующие столбцы: имя, заголовок, состояние, начальный режим

Я хотел бы иметь возможность сравнить различия и придумал небольшой скрипт powershell, показанный ниже

$IWB06 = import-csv C:\PS_Temp\PIN-VUHOIWB06_Services.csv
$IWB09 = import-csv C:\PS_Temp\PIN-VUHOIWB09_Services.csv
Compare-Object -ReferenceObject $IWB06 -DifferenceObject $IWB09 -Property 'Unique ID', 'name', 'caption', 'state', 'startmode', 'comparrison' -PassThru -IncludeEqual |
    Format-Table -AutoSize

Моя единственная проблема заключается в том, что это отображается на консоли PowerShell, но я не могу экспортировать результаты в файл CSV.

Любое предложение о том, как экспортировать то, что отображается в консоли в файл CSV

3 ответа

Замените свою последнюю строку следующим:

$Results = Compare-Object -ReferenceObject $IWB06 -DifferenceObject $IWB09 -Property 'Unique ID', 'name', 'caption', 'state', 'startmode', 'comparrison' -PassThru -IncludeEqual
$Results | Export-Csv -NoTypeInformation -Encoding Unicode -Path C:\temp\MyResult.csv #Replace with your output csv destination

Сравнение двух файлов одновременно звучит очень неэффективно. Почему бы не объединить все ваши CSV в один объект с дополнительным столбцом, обозначающим источник. Вы могли бы тогда использовать Group-Object чтобы подвести итог. Что-то вроде этого:

$path = 'C:\PS_Temp\{0}'

(ls *.csv).Name | % {
    $file = $_
    Write-Host $_
    (Import-Csv ($path -f $_)).'Unique ID' | % {
        New-Object psobject -Property @{
            file = $file
            id = $_
        }
    }
} | Group-Object id | % {
    $_ | Add-Member -MemberType NoteProperty -Name Files -Value ($_.Group.file -Join '|') -PassThru 
} | Select Name, Files, Count

Это простой пример, использующий только уникальный идентификатор, но вы можете расширить его, чтобы включить другие столбцы.

Вывод будет что-то вроде этого:

Name Files                               Count
---- -----                               -----
3    PIN-VUHOIWB06.csv|PIN-VUHOIWB09.csv     2
4    PIN-VUHOIWB06.csv|PIN-VUHOIWB09.csv     2
5    PIN-VUHOIWB06.csv|PIN-VUHOIWB09.csv     2
6    PIN-VUHOIWB06.csv|PIN-VUHOIWB09.csv     2
7    PIN-VUHOIWB06.csv                       1
8    PIN-VUHOIWB06.csv                       1
9    PIN-VUHOIWB06.csv                       1
1    PIN-VUHOIWB09.csv                       1
2    PIN-VUHOIWB09.csv                       1

Добавьте это к своему коду:

$comparison = Compare-Object -ReferenceObject $IWB06 -DifferenceObject $IWB09 -Property 'Unique ID', 'name', 'caption', 'state', 'startmode', 'comparrison' -PassThru -IncludeEqual |


$comparison | Export-CSV -path $someFullPath
Другие вопросы по тегам