Powershell: Compare-Object : Cannot bind argument to parameter 'DifferenceObject' because it is null
11:41 24 Oct 2017


I'm trying to compare AD users list with distribution list (O365). Foreach loop give me results as expected:

$AD = @($(Get-ADuser -Filter *).UserPrincipalName)
$DL = @($(Get-DistributionGroupMember -Identity "Everyone").WindowsLiveId)
ForEach ($name in $AD) {if ($DL -notcontains $name) {Write-Output $name}}

But when I'm trying to use Compare-Object command:

$AD = @($(get-aduser -Filter *).UserPrincipalName)
$DL = @($(Get-DistributionGroupMember -Identity "Everyone").WindowsLiveId)
Compare-Object -DifferenceObject $AD -ReferenceObject $DL

Console giving me error:

Compare-Object : Cannot bind argument to parameter 'DifferenceObject' because it is null.
At line:1 char:34
+ Compare-Object -DifferenceObject $AD -ReferenceObject $DL
+                                  ~~~
    + CategoryInfo          : InvalidData: (:) [Compare-Object], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Microsoft.PowerShell.Commands.CompareObjectCommand

Do you have any ideas why Compare-Object complaining on $AD array. It is definitely not null and not empty.

arrays powershell variables office365