Экспорт результатов серверных служб из файла CSV в Powershell - PullRequest
0 голосов
/ 24 апреля 2018

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

Каждый CSV-файл содержит следующие столбцы: Имя, Caption, State, Startmode

Я хотел бы иметь возможность сравнить различия и предложил небольшой скрипт 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 ]

0 голосов
/ 24 апреля 2018

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

$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
0 голосов
/ 25 апреля 2018

Сравнение двух файлов одновременно звучит очень неэффективно. Почему бы не объединить все ваши 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
0 голосов
/ 24 апреля 2018

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

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


$comparison | Export-CSV -path $someFullPath
...