<# | |
Author: I. Strachan | |
Version: | |
Version History: | |
Purpose: Validate AD User attributes | |
#> | |
[CmdletBinding(SupportsShouldProcess = $True)] | |
Param( | |
$csvFile = 'd:\scripts\ps1\source\csv\SetUser.csv' | |
) | |
#region Import Csv file | |
$csvUsers = Import-Csv -Path $csvFile -Delimiter "`t" -Encoding UTF8 | |
$userProperties = ($csvUsers | Get-Member -MemberType NoteProperty).Name | | |
Where-Object {$_ -ne 'OU'} | |
#endregion | |
#region Main | |
$csvUsers | | |
Foreach-Object { | |
$Expected = $_ | |
Describe "Processing User: $($Expected.SamAccountName)" { | |
Context "Verifying AD User properties for $($Expected.DisplayName)" { | |
#Get AD user properties | |
$Actual = Get-ADUser -Identity $Expected.SamAccountName -Properties $userProperties | |
ForEach( $property in $userProperties){ | |
if (([string]::isNullOrEmpty($Expected.$property))) { | |
$Expected.$property = $null | |
$lableExpected = '<not set>' | |
} | |
else{ | |
$lableExpected = $Expected.$property | |
} | |
it "Verifying user property: $($property) / $($lableExpected)"{ | |
$Actual.$property | Should be $Expected.$property | |
} | |
} | |
} | |
} | |
} | |
#endregion | |
#Run PesterTest and save results | |
$resultsTest = Invoke-Pester D:\scripts\ps1\dsa\ADUser.Properties.Tests.ps1 -PassThru | |
#Get All failed tests | |
$failedTests = $resultsTest.TestResult.where{$_.Passed -eq $false} | |
$failedTests | | |
ForEach-Object{ | |
$result = $_.Name.Split(':')[-1] | |
$arrResult = $result.Split('/') | |
[PSCustomObject]@{ | |
SamAccountName = ($_.Describe.split(':').Trim())[-1] | |
Property = $arrResult[0].Trim() | |
Expected = $arrResult[1].Trim() | |
} | |
} -OutVariable failedObjects | |
#Export Failed objects | |
$failedObjects | | |
Export-Csv -Path D:\Scripts\ps1\source\csv\FailedTests.csv -Delimiter "`t" -NoTypeInformation -Encoding UTF8 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment