программирование,

Удобная функция сравнения объектов в Powershell

Jul 25, 2019 · 2 мин. на прочтение
Удобная функция сравнения объектов в Powershell
Поделиться

На просторах интернет нашёл удобную функцию для сравнений объектов Powershell.

Вот её немного усовершенствованная версия.

Function Compare-ObjectProperties {
    Param(
        [PSObject]$ReferenceObject,
        [PSObject]$DifferenceObject
        
    )
    $Exclusions = "WhenC|Server|ServerName|Identity|Id|Guid|FQDN|DistinguishedName|AdminDisplayVersion|MetabasePath"
    

    $objprops = $ReferenceObject   | Get-Member -MemberType Property,NoteProperty | % Name
    $objprops += $DifferenceObject | Get-Member -MemberType Property,NoteProperty | % Name
    $objprops = $objprops | Sort | Select -Unique
    $diffs = @()
    foreach ($objprop in $objprops) {
        $diff = Compare-Object $ReferenceObject $DifferenceObject -Property $objprop
        if ($objprop -notmatch $Exclusions ){
        if ($diff) {            
            $diffprops = @{
                PropertyName=$objprop
                RefValue =($diff | ? {$_.SideIndicator -eq '<='} | % $($objprop))
                DiffValue=($diff | ? {$_.SideIndicator -eq '=>'} | % $($objprop))
            }
            $diffs += New-Object PSObject -Property $diffprops
        }     
        }   
    }
    if ($diffs) {return ($diffs | Select PropertyName,RefValue,DiffValue)}     
} 

А вот пример использования.

$mbx1 = Get-Mailbox mdanshin
$mbx2 = Get-Mailbox aivanov

Compare-ObjectProperties $mbx1 $mbx2 | ogv

В результате получаем удобный вывод по всем отличающимся свойствам двух объектов. Я надеюсь, что эта функция пригодится Вам для сравнения конфигураций Exchange. Последнее время часто было такое, что настройки новый серверов, конекторов и т.п. отличались. Теперь у Вас есть удобное средство для сравнения старых и новых настроек.

Обратите внимание на переменную $Exclusions. В ней можно задавать свойства, которые Вы хотите исключить из сравнения. Ну и понятно, что эту функцию можно использовать для любых объектов, не только Exchange.

Подпишитесь на новости
Чтобы не пропустить новые статьи. Я никогда не рассылаю спам!