functions/public/Get-PSProjectStatus.ps1
Function Get-PSProjectStatus { [CmdletBinding()] [alias("gpstat")] [OutputType("PSProject")] Param( [Parameter( Position = 0, ValueFromPipeline, ValueFromPipelineByPropertyName, HelpMessage = "Enter the parent path to the psproject.json file, e.g. c:\scripts\mymodule.")] [ValidateScript({ Test-Path $_ })] [alias("FullName")] [String]$Path = "." ) Begin { $PSDefaultParameterValues["_verbose:Command"] = $MyInvocation.MyCommand $PSDefaultParameterValues["_verbose:block"] = "Begin" _verbose -message $strings.Starting if ($MyInvocation.CommandOrigin -eq "Runspace") { #Hide this metadata when the command is called from another command _verbose -message ($strings.PSVersion -f $PSVersionTable.PSVersion) _verbose -message ($strings.UsingHost -f $host.Name) _verbose -message ($strings.UsingModule -f $PSProjectStatusModule) } } Process { $PSDefaultParameterValues["_verbose:block"] = "Process" $json = Join-Path (Convert-Path $path) -ChildPath psproject.json if (Test-Path $json) { _verbose -message ($strings.GetStatus -f $json) $in = Get-Content -Path $json | ConvertFrom-Json $psproject = [PSProject]::new() #get property names from the class $properties = $psproject.PSObject.properties.name | Where-Object { $_ -ne "Age" } foreach ($property in $properties) { if ($property -eq 'RemoteRepository') { Write-Debug $strings.RemoteRepositoryInfo $remote = @() foreach ($repo in $in.RemoteRepository) { $remote += [PSProjectRemote]::new($repo.name, $repo.url, $repo.mode) } $psproject.RemoteRepository = $remote } else { Write-Debug ($strings.addProperty -f $property) $psproject.$property = $in.$property } } #The date time is stored as a UTC value so convert it to local $psproject.lastUpdate = $psproject.lastUpdate.ToLocalTime() #write the new object to the pipeline $psproject } else { Write-Warning $($strings.missingJson -f (Convert-Path $path)) } } #process End { $PSDefaultParameterValues["_verbose:Command"] = $MyInvocation.MyCommand $PSDefaultParameterValues["_verbose:block"] = "End" _verbose $strings.Ending } } |