67 lines
3.4 KiB
PowerShell
67 lines
3.4 KiB
PowerShell
function ConvertTo-ScrumTeam {
|
|
<#
|
|
.SYNOPSIS
|
|
Converts a list of teams to a list of ScrumTeam objects (better for formatting, querying).
|
|
The data is driven dynamically off either the Confluence page via Get-ScrumTeamsFromConfluence or from a cached file once retrieved.
|
|
|
|
.PARAMETER Team
|
|
Dynamic team data. Should be a table, a-la the Confluence page.
|
|
#>
|
|
param (
|
|
[Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
|
|
[System.Collections.Hashtable[]]$Team
|
|
)
|
|
begin {
|
|
$logLead = (Get-LogLeadName)
|
|
$checkedHeadersAlready = $false
|
|
$expectedHeaders = @('Team','Product Owner','Strategic Product Manager','Scrum Master','Tech Lead','Eng Manager','JIRA Board','Team Slack Channel') | Sort-Object -Unique
|
|
|
|
$defaultTypeName = 'ScrumTeam'
|
|
$defaultKeys = @('Team')
|
|
$defaultDisplaySet = @()
|
|
foreach ($header in $expectedHeaders) {
|
|
# Remove spaces so that the property names don't have spaces.
|
|
# This makes typing property names much easier.
|
|
$defaultDisplaySet += $header.Replace(' ','')
|
|
}
|
|
$defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet',[string[]]$defaultDisplaySet)
|
|
$defaultKeyPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultKeyPropertySet',[string[]]$defaultKeys)
|
|
$PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet,$defaultKeyPropertySet)
|
|
}
|
|
process {
|
|
if (!$checkedHeadersAlready) {
|
|
$headers = @($Team.Keys | Sort-Object -Unique)
|
|
$spacedHeadersEqual = ((Compare-Object -ReferenceObject $expectedHeaders -DifferenceObject $headers).Count -eq 0)
|
|
$unspacedHeadersEqual = ((Compare-Object -ReferenceObject $defaultDisplaySet -DifferenceObject $headers).Count -eq 0)
|
|
if (!$spacedHeadersEqual -and !$unspacedHeadersEqual) {
|
|
Write-Warning "$logLead : The headers provided in the input object don't match the expected (hard-coded) headers from Confluence.$([System.Environment]::NewLine)This will make output printing seem to be missing data.$([System.Environment]::NewLine)Please update the format.ps1xml and $((Format-UnderlineText "{function:ConvertTo-ScrumTeam}")) with the new Confluence table headers."
|
|
Write-Host "$logLead : [Actual Headers] : $($headers -join ',')"
|
|
Write-Host "$logLead : [Expected Headers] : $($expectedHeaders -join ',')"
|
|
$checkedHeadersAlready = $true
|
|
} else {
|
|
$checkedHeadersAlready = $true
|
|
}
|
|
}
|
|
|
|
$return = @()
|
|
|
|
foreach ($teamObject in $Team) {
|
|
try {
|
|
$properties = @{}
|
|
foreach ($key in $teamObject.Keys) {
|
|
$properties[$key.Replace(' ','')] = $teamObject.$key
|
|
}
|
|
|
|
$scrumTeam = New-Object PSCustomObject -Property $properties
|
|
$scrumTeam.PSObject.TypeNames.Insert(0,$defaultTypeName)
|
|
$scrumTeam | Add-Member -MemberType MemberSet -Name PSStandardMembers -Value $PSStandardMembers
|
|
$return += $scrumTeam
|
|
} catch {
|
|
Write-Warning "$logLead : Could not convert item to ScrumTeam object. Check error below."
|
|
Write-ErrorObject -ErrorItem $PSItem
|
|
}
|
|
}
|
|
|
|
return $return
|
|
}
|
|
} |