Skip to content

Instantly share code, notes, and snippets.

@DanielAdeniji
Last active August 6, 2022 13:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DanielAdeniji/43bd8abe899833d0c1072ac2e86bcfd8 to your computer and use it in GitHub Desktop.
Save DanielAdeniji/43bd8abe899833d0c1072ac2e86bcfd8 to your computer and use it in GitHub Desktop.
Set-StrictMode -Version Latest
<#
Declare Person Object
#>
class person
{
[string] $name;
[datetime] $dob;
[Nullable[DateTime]] $dateofLeaving;
[char] $gender;
[int] $age;
}
<#
Declare Variables
#>
[System.Collections.ArrayList] $listofPersons = $null;
[string] $title = "";
[int] $numberofPersonsToFetch =0;
<#
Set Variables
#>
$numberofPersonsToFetch =1;
<#
Instanciate Collection ( $listofPersons )
#>
$listofPersons = New-Object -TypeName "System.Collections.ArrayList";
<#
Function:- addPerson
#>
function addPerson
(
[string] $name `
, [datetime] $dob `
, [char] $gender `
, [Nullable[DateTime]] $dateofLeaving
)
{
<#
Declare local variables
#>
[Nullable[DateTime]] $dtReferenceAge = $null;
<#
Instanciate person object
#>
$obj = [person]::new();
<#
Set Class Property
#>
$obj.name = $name;
$obj.dob = $dob;
$obj.gender = $gender;
<#
If date of leaving is indicated
please use the date provided as base for calculating age
else
use current date
#>
if ($dateofLeaving -ne $null )
{
$obj.dateofLeaving = $dateofLeaving;
$dtReferenceAge = $dateofLeaving;
}
else
{
$dtReferenceAge = [datetime]::Now;
}
<#
https://stackoverflow.com/questions/14959399/powershell-getting-a-persons-age
#>
<#
Get timestamp between reference date and dob
#>
$span = $dtReferenceAge - $dob
$ageSpan = New-Object DateTime -ArgumentList $Span.Ticks;
$obj.age = $ageSpan.year -1;
$ageSpan = $null;
$null = $listofPersons.add($obj);
}
function displaySectionHeader([string] $title)
{
[int] $len =0;
[char] $CHAR_HYPHEN = "-";
[string] $underline ="";
$len = $title.length;
$underline = [String]::new($CHAR_HYPHEN, $len);
Write-Host $title;
Write-Host $underline;
}
<#
Add persons
https://en.wikipedia.org/wiki/Mae_Jemison
#>
$null = addPerson "Mae Jemison" "1956-10-17" "F" $null
#https://en.wikipedia.org/wiki/Ricki_Lake
$null = addPerson "Ricki Lake" "1968-12-21" "F" $null
# https://en.wikipedia.org/wiki/Lauren_Lake
$null = addPerson "Lauren Lake" "1969-07-12" "F" $null
# https://en.wikipedia.org/wiki/John_Lewis
$null = addPerson "John Lewis" "1940-02-21" "M" "2020-06-17"
# https://en.wikipedia.org/wiki/Sidney_Poitier
$null = addPerson "Sidney Portier" "1927-02-20" "M" "2022-01-06"
<#
List all persons
#>
$title = "Persons";
displaySectionHeader $title;
$listofPersons|
select name, dob, gender, dateofLeaving |
Sort name |
Format-Table * -AutoSize
Write-Host "";
Write-Host "";
<#
Get oldest person
a) based on date of birth
#>
$title = "Oldest Person";
displaySectionHeader $title;
$listofPersons|
Sort dob |
select -first ($numberofPersonsToFetch)`
name `
, @{Name = "date of birth"; Expression = { "{0:yyyy-MMM-dd}" -f ($_.dob ) } } `
, @{Name = 'gender'; Expression = {"{0,-6}" -f ($_.gender ) }}`
, @{Name = "date of leaving"; Expression = { "{0:yyyy-MMM-dd}" -f ($_.dateofLeaving ) } } `
, @{Name = "age"; Expression = { ( $_.age) } } |
Format-Table * -AutoSize
Write-Host "";
Write-Host "";
<#
Get oldest person
a) based on date of birth
b) filter out departed
#>
$title = "Oldest Person - Leave out departed";
displaySectionHeader $title;
$listofPersons|
Where-Object { ( $_.dateofLeaving -eq $null ) } |
Sort dob |
select -first ($numberofPersonsToFetch)`
name `
, @{Name = "date of birth"; Expression = { "{0:yyyy-MMM-dd}" -f ($_.dob ) } } `
, @{Name = 'gender'; Expression = {"{0,-6}" -f ($_.gender ) }}`
, @{Name = "age"; Expression = { ( $_.age) } } |
Format-Table * -AutoSize
Write-Host "";
Write-Host "";
<#
Get oldest person
a) based on date of birth
b) filter out departed
d) only females
#>
$title = "Oldest Person - Leave out departed, Gender has to be female";
displaySectionHeader $title;
$listofPersons|
Where-Object { ( $_.dateofLeaving -eq $null ) } |
Where-Object gender -eq "f" |
Sort dob |
select -first ($numberofPersonsToFetch)`
name `
, @{Name = "date of birth"; Expression = { "{0:yyyy-MMM-dd}" -f ($_.dob ) } } `
, @{Name = 'gender'; Expression = {"{0,-6}" -f ($_.gender ) }}`
, @{Name = "age"; Expression = { ( $_.age ) } } |
Format-Table * -AutoSize
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment