# Sample sets
$DataA = "Name,LastLogon,WhenCreated", "Bob,01/01/2016,01/01/2015", "Tim,01/01/2014,01/01/2013" | ConvertFrom-Csv
$DataB = "DisplayName,LastLogonTime,LastLoggedOnUserAccount", "Bob,01/01/2016,Bob", "Tim,01/01/2014,Dave" | ConvertFrom-Csv
$properties = $DataA[0].PSObject.Properties.Name + $DataB[0].PSObject.Properties.Name
foreach ($itemA in $DataA) {
# Match DataB
$itemB = $DataB | Where-Object DisplayName -eq $itemA.Name
foreach ($property in $itemB.PSObject.Properties) {
$itemA | Add-Member $property.Name $property.Value
}
$itemA | Select-Object $properties
}
# Sample sets
$DataA = "Name,LastLogon,WhenCreated", "Bob,01/01/2016,01/01/2015", "Tim,01/01/2014,01/01/2013" | ConvertFrom-Csv
$DataB = "DisplayName,LastLogonTime,LastLoggedOnUserAccount", "Bob,01/01/2016,Bob", "Tim,01/01/2014,Dave" | ConvertFrom-Csv
$properties = $DataA[0].PSObject.Properties.Name + $DataB[0].PSObject.Properties.Name
$IndexedProperty = 'DisplayName'
$DataBIndex = @{}
for ($i = 0; $i -lt $DataB.Count; $i++) {
$DataBIndex.Add($DataB[$i].$IndexedProperty, $i)
}
foreach ($itemA in $DataA) {
# Match DataB
if ($DataBIndex.Contains($itemA.Name)) {
$itemB = $DataB[$DataBIndex.($itemA.Name)]
}
foreach ($property in $itemB.PSObject.Properties) {
$itemA | Add-Member $property.Name $property.Value
}
$itemA | Select-Object $properties
}
$DataA = Get-ADUser -SearchBase "OU=DN of OU" -SearchScope 1 -Properties LastLogon,whenCreated -Filter {LastLogon -lt $time -AND enabled -eq $true -AND whenCreated -lt $time} |
select-object Name,@{Name="LastLogon"; Expression={[DateTime]::FromFileTime($_.lastLogon).ToString('yyyy-MM-dd hh:mm:ss')}},WhenCreated,
@{Name="ReferenceDate"; Expression={($datetoday)}},@{N='ADAccountDaysInactive'; E={$($(Get-Date) - $([DateTime]::FromFileTime($_.lastLogon))).Days}} |
Export-CSV -Path D:\Export\DataA.csv -NoTypeInformation -Append -Encoding UTF8
$mbxall = Get-Mailbox -ResultSize Unlimited -OrganizationalUnit $dnou | Where {$_.OrganizationalUnit -eq "consoto.com/Users"} |
Select-Object alias,displayname
$mbxinactive = ForEach($mbx in $mbxall)
{
$DataB = Get-MailboxStatistics $mbx.alias | where {$_.LastLogonTime -lt $time -AND $_.WhenMailboxCreated -lt $time} |
Select-Object displayname,lastlogontime,lastloggedonuseraccount,@{Name="ReferenceDate"; Expression={($datetoday)}},
@{N='MailboxDaysInactive'; E={ ((Get-Date) - ($_.LastLogonTime)).Days} } |
Export-CSV -Path D:\Export\DataB.csv -NoTypeInformation -Append
$DataC = Compare-Object $csv1.name $csv2.displayname -IncludeEqual | ? {$_.SideIndicator -eq "=="} | Export-CSV D:\Export\Difference.csv -NoTypeInformation
# Sample sets
$DataA = "Name,LastLogon,WhenCreated", "Bob,01/01/2016,01/01/2015", "Tim,01/01/2014,01/01/2013" | ConvertFrom-Csv
$DataB = "DisplayName,LastLogonTime,LastLoggedOnUserAccount", "Bob,01/01/2016,Bob", "Tim,01/01/2014,Dave" | ConvertFrom-Csv
# Fabricate a key property
$DataB = $DataB | Select-Object @{n='Name';e={ $_.DisplayName }}, *
# Join the arrays
@($DataA) + @($DataB) |
Group-Object Name |
Where-Object Count -ge 2 | # Filter out any users which do not have an entry in both lists
ForEach-Object {
# Create a new object for the output
$psObject = New-Object PSObject
# Write every field from each of the matching objects to the output object
foreach ($item in $_.Group) {
foreach ($property in $item.PSObject.Properties) {
$psObject | Add-Member $property.Name $property.Value -Force
}
}
$psObject
}
LastLogon : 01/01/2016
WhenCreated : 01/01/2015
Name : Bob
DisplayName : Bob
LastLogonTime : 01/01/2016
LastLoggedOnUserAccount : Bob
LastLogon : 01/01/2014
WhenCreated : 01/01/2013
Name : Tim
DisplayName : Tim
LastLogonTime : 01/01/2014
LastLoggedOnUserAccount : Dave
$DataA = Import-CSV D:\Import\DataA.csv | ConvertFrom-Csv
$DataB = Import-CSV D:\Import\DataB.csv | ConvertFrom-Csv
$properties = $DataA[0].PSObject.Properties.Name + $DataB[0].PSObject.Properties.Name
$IndexedProperty = 'DisplayName'
$DataBIndex = @{}
for ($i = 0; $i -lt $DataB.Count; $i++) {
$DataBIndex.Add($DataB[$i].$IndexedProperty, $i)
}
foreach ($itemA in $DataA) {
# Match DataB
if ($DataBIndex.Contains($itemA.Name)) {
$itemB = $DataB[$DataBIndex.($itemA.Name)]
}
foreach ($property in $itemB.PSObject.Properties) {
$itemA | Add-Member $property.Name $property.Value
}
$itemA | Select-Object $properties | Export-CSV D:\Export\Result.csv
}
$mbxall = Get-Mailbox -ResultSize Unlimited -OrganizationalUnit $dnou | Where {$_.OrganizationalUnit -eq "contoso.com/Users"} |
Select-Object alias,displayname,distinguishedname
ForEach($mbx in $mbxall)
{
$DataB = Get-MailboxStatistics $mbx.alias | where {$_.LastLogonTime -lt $time -AND $_.WhenMailboxCreated -lt $time} |
Select-Object displayname,lastlogontime,lastloggedonuseraccount,@{Name="ReferenceDate"; Expression={($datetoday)}},
@{N='MailboxDaysInactive'; E={ ((Get-Date) - ($_.LastLogonTime)).Days} },@{N='DistinguishedName'; E={($mbxall.distinguishedname)} } |
Export-CSV -Path D:\Export\DataB.csv -NoTypeInformation -Append
}