This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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