У меня есть этот скрипт, который берет два объекта и сравнивает каждое свойство и свойство примечания, в этом случае я пытаюсь сравнить два объекта ADUser, возвращаемые Get-ADUser
:
Function Compare-ObjectProperties {
Param(
[PSObject]$ReferenceObject,
[PSObject]$DifferenceObject
)
$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 ($diff) {
$diffprops = @{
PropertyName=$objprop
RefValue=($diff | ? {$_.SideIndicator -eq '<='} | % $($objprop))
DiffValue=($diff | ? {$_.SideIndicator -eq '=>'} | % $($objprop))
}
$diffs += New-Object PSObject -Property $diffprops
}
}
if ($diffs) {$diffs | select propertyname,refvalue,diffvalue}
}
$ad1 = Get-ADUser user1 -Properties *
$ad2 = Get-ADUser user2 -Properties *
Compare-ObjectProperties $ad1 $ad2 | select propertyname,refvalue,diffvalue
в результате всего два поля: имя свойства и значение ссылки. Третье поле кажется не помещающимся на экране. Format-Table -AutoSize
вообще не меняет результат (я также пробовал параметры переноса, длины и авторазмера).
На самом деле, даже если я использую Out-File result.txt
, результат будет включать только эти два столбца. Я думаю, что одна из команд в сценарии использует форматирование, которое переопределяет форматную таблицу и другие мои попытки, но я не уверен, какую именно и как увидеть.
Скрипт отлично работает, если я сравниваю объекты с более короткими свойствами. Я даже могу просто использовать get-aduser user1
(опустив -properties *
), и поскольку результат намного компактнее, он возвращает все три поля.