{"id":14064214,"url":"https://github.com/jdhitsolutions/PSProjectStatus","last_synced_at":"2025-07-29T17:32:46.732Z","repository":{"id":46235600,"uuid":"470213192","full_name":"jdhitsolutions/PSProjectStatus","owner":"jdhitsolutions","description":"A set of PowerShell tools for tracking module development status. The module uses a JSON file to create a custom object with information about your module. You can use this internally to track the status of your module including a simple to-do tracker.","archived":false,"fork":false,"pushed_at":"2024-02-15T15:57:23.000Z","size":4586,"stargazers_count":19,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-23T00:33:41.660Z","etag":null,"topics":["json-schema","powershell","powershell-classes","powershell-module"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jdhitsolutions.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"License.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-15T15:09:22.000Z","updated_at":"2024-08-13T07:06:25.229Z","dependencies_parsed_at":"2023-12-22T15:59:49.301Z","dependency_job_id":"efcba6e9-38b8-4fef-858c-404f1253a6de","html_url":"https://github.com/jdhitsolutions/PSProjectStatus","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdhitsolutions%2FPSProjectStatus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdhitsolutions%2FPSProjectStatus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdhitsolutions%2FPSProjectStatus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdhitsolutions%2FPSProjectStatus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jdhitsolutions","download_url":"https://codeload.github.com/jdhitsolutions/PSProjectStatus/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228032924,"owners_count":17858917,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["json-schema","powershell","powershell-classes","powershell-module"],"created_at":"2024-08-13T07:03:45.285Z","updated_at":"2025-07-29T17:32:46.720Z","avatar_url":"https://github.com/jdhitsolutions.png","language":"PowerShell","funding_links":[],"categories":["PowerShell"],"sub_categories":[],"readme":"# PSProjectStatus\n\n[![PSGallery Version](https://img.shields.io/powershellgallery/v/PSProjectStatus.png?style=for-the-badge\u0026label=PowerShell%20Gallery)](https://www.powershellgallery.com/packages/PSProjectStatus/) [![PSGallery Downloads](https://img.shields.io/powershellgallery/dt/PSProjectStatus.png?style=for-the-badge\u0026label=Downloads)](https://www.powershellgallery.com/packages/PSProjectStatus/)\n\n![icon](images/psproject-icon.png)This PowerShell module is designed to make it easier to manage your projects and modules. It provides a snapshot overview of the project's status. You can use this to quickly determine when you last worked on a module and what high-level tasks remain. Status information is stored in a JSON file that resides in the module's root directory. If you have initialized *git* for the module, the project status will include the current branch.\n\n## Installation\n\nInstall this module from the [PowerShell Gallery](https://www.powershellgallery.com/packages/PSProjectStatus).\n\n```powershell\nInstall-Module PSProjectStatus\n```\n\nOr you can use the [`Microsoft.PowerShell.PSResourceGet`](https://github.com/PowerShell/PSResourceGet/) module.\n\n```powershell\nInstall-PSResource PSProjectStatus -Scope AllUsers\n```\n\nThis module is supported in Windows PowerShell 5.1 and PowerShell 7.\n\n## Module Commands\n\n### Status\n\n- [New-PSProjectStatus](docs/New-PSProjectStatus.md)\n- [Get-PSProjectStatus](docs/Get-PSProjectStatus.md)\n- [Set-PSProjectStatus](docs/Set-PSProjectStatus.md)\n\n### Tasks\n\n- [New-PSProjectTask](docs/New-PSProjectTask.md)\n- [Get-PSProjectTask](docs/Get-PSProjectTask.md)\n- [Remove-PSProjectTask](docs/Remove-PSProjectTask.md)\n\n### Other\n\n- [Get-PSProjectReport](docs/Get-PSProjectReport.md)\n- [Get-PSProjectGitStatus](docs/Get-PSProjectGitStatus.md)\n- [Open-PSProjectStatusHelp](docs/Open-PSProjectStatusHelp.md)\n\nAfter importing the module you can run `Open-PSProjectStatusHelp` which will open a PDF version of this document in the default application associated with PDF files. Or if you are running PowerShell 7, you can use the `-AsMarkdown` dynamic parameter to read this file using markdown formatting. Not all markdown features may render properly in the console.\n\n## Class-Based\n\nThe project status is based on a private class-based definition. The PowerShell classes are used to construct the JSON file which in turn is used to create a `PSProject` object and update its properties.\n\n```powershell\nClass PSProjectRemote {\n  [string]$Name\n  [string]$Url\n  [gitMode]$Mode\n\n  PSProjectRemote ($Name, $url, $mode) {\n      $this.Name = $Name\n      $this.url = $url\n      $this.mode = $mode\n  }\n  #allow an empty remote setting\n  PSProjectRemote() {\n      $this.Name = ''\n      $this.url = ''\n  }\n}\n\nClass PSProjectTask {\n  [string]$ProjectName\n  [string]$Path\n  [string]$TaskDescription\n  [version]$ProjectVersion\n  [int]$TaskID\n\n  PSProjectTask ($TaskDescription,$Path,$ProjectName,$ProjectVersion) {\n      $this.ProjectName = $ProjectName\n      $this.Path = $Path\n      $this.TaskDescription = $TaskDescription\n      $this.ProjectVersion = $ProjectVersion\n  }\n}\n\n#I have formatted longer lines with artificial line breaks to fit a\n#printed page.\nClass PSProject {\n  [string]$Name = (Split-Path (Get-Location).path -Leaf)\n  [string]$Path = (Convert-Path (Get-Location).path)\n  [DateTime]$LastUpdate = (Get-Date)\n  [string[]]$Tasks = @()\n  [PSProjectStatus]$Status = 'Development'\n  [Version]$ProjectVersion = (Test-ModuleManifest \".\\$(Split-Path $pwd `\n  -Leaf).psd1\" -ErrorAction SilentlyContinue).version\n  [string]$GitBranch = ''\n  #using .NET classes to ensure compatibility with non-Windows platforms\n  [string]$UpdateUser = \"$([System.Environment]::UserDomainName)\\`\n  $([System.Environment]::Username)\"\n  [string]$Computername = [System.Environment]::MachineName\n  [PSProjectRemote[]]$RemoteRepository = @()\n  [string]$Comment = ''\n\n  [void]Save() {\n      $json = Join-Path -Path $this.path -ChildPath psproject.json\n      #convert the ProjectVersion to a string in the JSON file\n      #convert the LastUpdate to a formatted date string\n      $this | Select-Object @{Name = '$schema'; Expression = {\n      'https://raw.githubusercontent.com/jdhitsolutions/PSProjectStatus/\n      main/psproject.schema.json' } },\n      Name, Path,\n      @{Name = 'LastUpdate'; Expression = { '{0:o}' -f $_.LastUpdate }},\n      @{Name = 'Status'; Expression = { $_.status.toString() }},\n      @{Name = 'ProjectVersion'; Expression = {\n        $_.ProjectVersion.toString()}},UpdateUser,Computername,\n        RemoteRepository,Tasks,GitBranch,Comment |\n      ConvertTo-Json | Out-File -FilePath $json -Encoding utf8\n  }\n  [void]RefreshProjectVersion() {\n      $this.ProjectVersion = (Test-ModuleManifest \".\\$(Split-Path $pwd `\n       -Leaf).psd1\" -ErrorAction SilentlyContinue).version\n  }\n  [void]RefreshUser() {\n      $this.UpdateUser = \"$([System.Environment]::UserDomainName)\\`\n      $([System.Environment]::Username)\"\n  }\n  [void]RefreshComputer() {\n      $this.Computername = [System.Environment]::MachineName\n  }\n  [void]RefreshRemoteRepository() {\n      if (Test-Path .git) {\n          $remotes = git remote -v\n          if ($remotes) {\n              $repos = @()\n              foreach ($remote in $remotes) {\n                  $split = $remote.split()\n                  $RemoteName = $split[0]\n                  $Url = $split[1]\n                  $Mode = $split[2].replace('(', '').Replace(')', '')\n                  $repos += [PSProjectRemote]::new($RemoteName, $url,\n                  $mode)\n              } #foreach\n              $this.RemoteRepository = $repos\n          } #if remotes found\n      }\n  }\n\n  [void]RefreshAll() {\n      $this.RefreshProjectVersion()\n      $this.RefreshUser()\n      $this.RefreshComputer()\n      $this.RefreshRemoteRepository()\n      $this.Save()\n  }\n}```\n\nThe class includes a status enumeration.\n\n```powershell\nenum PSProjectStatus {\n    Development\n    Updating\n    Stable\n    AlphaTesting\n    BetaTesting\n    ReleaseCandidate\n    Patching\n    UnitTesting\n    AcceptanceTesting\n    Other\n}\n```\n\nAt this time it is not possible to include a user-defined project status. It is hoped that you can find something appropriate from the current status list.\n\nThe `Age` ScriptProperty and `VersionInfo` property sets are added to the object as type extensions.\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cTypes\u003e\n  \u003cType\u003e\n    \u003cName\u003ePSProject\u003c/Name\u003e\n    \u003cMembers\u003e\n      \u003cPropertySet\u003e\n        \u003cName\u003eversionInfo\u003c/Name\u003e\n        \u003cReferencedProperties\u003e\n          \u003cName\u003eName\u003c/Name\u003e\n          \u003cName\u003eStatus\u003c/Name\u003e\n          \u003cName\u003eVersion\u003c/Name\u003e\n          \u003cName\u003eGitBranch\u003c/Name\u003e\n          \u003cName\u003eLastUpdate\u003c/Name\u003e\n        \u003c/ReferencedProperties\u003e\n      \u003c/PropertySet\u003e\n      \u003cAliasProperty\u003e\n        \u003cName\u003eVersion\u003c/Name\u003e\n        \u003cReferencedMemberName\u003eProjectVersion\u003c/ReferencedMemberName\u003e\n      \u003c/AliasProperty\u003e\n      \u003cAliasProperty\u003e\n        \u003cName\u003eUsername\u003c/Name\u003e\n        \u003cReferencedMemberName\u003eUpdateUser\u003c/ReferencedMemberName\u003e\n      \u003c/AliasProperty\u003e\n      \u003cScriptProperty\u003e\n        \u003cName\u003eAge\u003c/Name\u003e\n        \u003cGetScriptBlock\u003e (Get-Date) - $this.lastUpdate \u003c/GetScriptBlock\u003e\n      \u003c/ScriptProperty\u003e\n    \u003c/Members\u003e\n  \u003c/Type\u003e\n\u003c/Types\u003e\n```\n\n\u003e Note that some screen shots may be incomplete as I am still adding properties to the PSProject class.\n\n## Creating a Project Status\n\nTo create a project status file, navigate to the module root and run [New-PSProjectStatus](docs/New-PSProjectStatus.md). The default status is `Development`\n\n![New PSProject Status](images/new-psprojectstatus.png)\n\nYou can update properties when you create the project status.\n\n```powershell\nNew-PSProjectStatus -LastUpdate (Get-Item .\\*.psd1).LastWriteTime `\n-Status Updating -tasks \"update help\"\n```\n\n![new custom project status](images/new-psprojectstatus2.png)\n\nThe command will create `psproject.json` in the root folder.\n\n```json\n{\n  \"$schema\": \"https://raw.githubusercontent.com/jdhitsolutions/\n  PSProjectStatus/main/psproject.schema.json\",\n  \"Name\": \"PSHelpDesk\",\n  \"Path\": \"C:\\\\Scripts\\\\PSHelpDesk\",\n  \"LastUpdate\": \"2024-02-20T09:47:33-05:00\",\n  \"Status\": \"Updating\",\n  \"ProjectVersion\": \"0.1.0\",\n  \"UpdateUser\": \"PROSPERO\\\\Jeff\",\n  \"Computername\": \"PROSPERO\",\n  \"RemoteRepository\": [],\n  \"Tasks\": [\n    \"update help\"\n  ],\n  \"GitBranch\": \"dev\",\n  \"Tags : [],\n  \"Comment\": \"\"\n}\n```\n\nNote that the update time is formatted as a UTC string. The project version will be pulled from the module manifest if found. You can set this to a different value manually in the JSON file or by running `Set-PSProjectStatus`.\n\n\u003e :octocat: If you are using *git* with your module you may want to add `psproject.json` to your `.gitignore` file.\n\n## Getting a Project Status\n\nThe easiest way to view a project status is by using [Get-PSProjectStatus](docs/Get-PSProjectStatus.md).\n\n```powershell\nPS C:\\scripts\\PSCalendar\u003e Get-PSProjectStatus\n\n   Name: PSCalendar [C:\\Scripts\\PSCalendar]\n\nLastUpdate             Status         Tasks                 GitBranch        Age\n----------             ------         -----                 ---------        ---\n3/3/2024 10:24:49 AM   Patching       {Update help docu...      2.9.0   12.07:07\n```\n\nIf the PowerShell host supports ANSI, a status of `Stable` will be displayed in Green. `Development` will be shown in Red and `Updating` in Yellow.\n\nThe module has a default list view.\n\n```powershell\nPS C:\\scripts\\PSCalendar\u003e Get-PSProjectStatus | Format-List\n\n   Project: PSCalendar [C:\\Scripts\\PSCalendar]\n\nVersion    : 2.9.0\nStatus     : Patching\nTasks      : {Update help documentation, Issue #31,Issue #34,Issue #33}\nGitBranch  : 2.9.0\nLastUpdate : 3/3/2024 10:24:49 AM\n```\n\nThis makes it easier to view tasks.\n\n## Updating a Project Status\n\nTo update the project status, you could always manually update the JSON file in your script editor. Use this code snippet to get the DateTime value in the proper format.\n\n```powershell\nGet-Date -format o | Set-Clipboard\n```\n\nPaste the value into the file.\n\nThe `Status` value is an integer indicating a private enumeration value.\n\n```text\nDevelopment = 0\nUpdating = 1\nStable = 2\nAlphaTesting = 3\nBetaTesting = 4\nReleaseCandidate = 5\nPatching = 6\nUnitTesting = 7\nAcceptanceTesting = 8\nOther = 9\nArchive = 10\n```\n\nOr use the [Set-PSProjectStatus](docs/Set-PSProjectStatus.md) function.\n\n```powershell\nPS C:\\scripts\\PSHelpDesk\\\u003e $tasks = \"add printer status function\",\n\"revise user password function\"\nPS C:\\scripts\\PSHelpDesk\u003e Set-PSProjectStatus -LastUpdate (Get-Date) `\n-Status Development -Tasks $tasks -Concatenate\n\n\n   Name: PSHelpDesk [C:\\Scripts\\PSHelpDesk]\n\nLastUpdate             Status        Tasks                  GitBranch        Age\n----------             ------        -----                  ---------        ---\n3/15/2024 5:53:54 PM   Development   {update help, add...         dev   00.00:00\n```\n\nWhen defining tasks, use `-Concatenate` to append the tasks. Otherwise, tasks will be overwritten with the new value.\n\n## Source Control Status\n\nThe commands in this module assume you are most likely using `git` for source control. The status object will automatically detect the local git branch. It will also detect the primary remote repositories.\n\n![remote repository status](images/remote-repository.png)\n\n## Manually Updating with the Object\n\nThe PSProject class has been updated since the first version of this module was released. You can use the object's methods to refresh some properties. Here is an example of an incomplete status.\n\n```powershell\nPS C:\\Scripts\\WingetTools\u003e Get-PSProjectStatus | Select-Object *\n\nName             : WingetTools\nStatus           : Stable\nVersion          :\nGitBranch        : main\nLastUpdate       : 3/17/2024 9:46:35 AM\nAge              : 9.00:22:39.3936893\nPath             : C:\\Scripts\\WingetTools\nProjectVersion   :\nUpdateUser       : THINKX1-JH\\Jeff\nComputername     :\nRemoteRepository : {}\nTasks            : {}\nComment          :\nTags             : {}\n```\n\nTo update, get a reference to the project status object.\n\n```powershell\n$p = Get-PSProjectStatus\n```\n\n`Get-Member` will show you the available methods.\n\n![psproject methods](images/psproject-methods.png)\n\nInvoke the methods that apply to your project. You need to invoke the `Save()` method to commit the changes to the JSON file.\n\n```powershell\n$p.RefreshComputer()\n$p.RefreshUser()\n$p.RefreshProjectVersion()\n$p.RefreshRemoteRepository()\n$p.save()\n```\n\nAs an alternative can use the `RefreshAll()` method which will invoke all the refresh methods __and__ save the file.\n\n## Project Tasks\n\nThis module is intended to be a _simple_ project management tool. You can use it to track tasks or to-do items. These are added to the `Tasks` property as an array of strings. You can manually add them to the JSON file or use the `Set-PSProjectStatus` function.\n\n```powershell\nC:\\Scripts\\PSProjectStatus\u003e $params = @{\n Tasks=\"Update missing online help links\"\n Concatenate=$true\n }\n\nC:\\Scripts\\PSProjectStatus\u003e Set-PSProjectStatus @params\n\n   Name: PSProjectStatus [C:\\Scripts\\PSProjectStatus]\n\nLastUpdate             Status         Tasks                 GitBranch        Age\n----------             ------         -----                 ---------        ---\n12/22/2024 9:08:30 AM  Updating       {Consider a schema …     0.11.0   00.00:00\n```\n\nOr you can use the task-related commands.\n\n![Get-PSProjectTask](images/get-psprojecttask.png)\n\nIf the PowerShell host supports it, you should get ANSI formatting. The task ID is automatically generated for each item and displayed in square brackets.\n\nYou can also add a task.\n\n![New-PSProjectTask](images/new-psprojecttask.png)\n\nYou can manually remove items from the JSON file or use the `Remove-PSProjectTask` function. You will need to know the task id.\n\n```powershell\nRemove-PSProjectTask -TaskID 4\n```\n\nNote: *The `PSProjectTask` object is defined in a PowerShell class. The class is defined with future enhancements in mind. Not all defined properties are used at this time.*\n\n## Project Management\n\nIf you have many projects, you can use this module to manage all of them.\n\n```powershell\nGet-ChildItem -Path c:\\scripts -Directory |\nGet-PSProjectStatus -WarningAction SilentlyContinue\n```\n\n![list projects](images/list-projects.png)\n\nYou will want to suppress Warning messages. If you are running PowerShell 7 and have the `Microsoft.PowerShell.ConsoleGuiTools` module installed, you can run a script like this:\n\n```powershell\n#requires -version 7.2\n#requires -module Microsoft.PowerShell.ConsoleGuiTools\n\n#open a project using the PSProject status\n\nImport-Module PSProjectStatus -Force\n\n#Enumerate all directories and get the project status for each\n$all = Get-ChildItem -Path C:\\scripts -Directory |\nGet-PSProjectStatus -WarningAction SilentlyContinue\n\n#Pipe directory output to Out-ConsoleGridView\n#and open the selected project in VS Code\n$all | Sort-Object Status, LastUpdate |\nSelect-Object Path, Status,\n@{Name = \"Tasks\"; Expression = { $_.Tasks -join ',' } },\nGitBranch, LastUpdate |\nOut-ConsoleGridView -Title \"PSProject Management\" -OutputMode Single |\nForEach-Object { code $_.path }\n```\n\nThis will give you a list of projects.\n\n![project list](images/manage-psproject.png)\n\nYou can select a single project, press Enter, and open the folder in VS Code. You could write a similar script for Windows PowerShell using `Out-GridView`.\n\n### [Get-PSProjectReport](docs\\Get-PSProjectReport.md)\n\nBeginning with version `0.10.0` you can use `Get-PSProjectReport` to simplify project management.\n\nYou can get all of your projects.\n\n```powershell\nGet-PSProjectReport c:\\scripts\n```\n\nYou can filter by status.\n\n```powershell\nPS C:\\\u003e Get-PSProjectReport c:\\scripts -Status Other\n\n   Name: PSMessaging [C:\\Scripts\\PSMessaging]\n\nLastUpdate             Status            Tasks         GitBranch        Age\n----------             ------            -----         ---------        ---\n7/20/2022 11:58:54 AM  Other             {}                master  192.02:11\n```\n\nAnd you can filter by age.\n\n```powershell\nPS C:\\\u003e Get-PSProjectReport c:\\scripts -NewerThan 10 -Status Stable\n\n\n   Name: PluralsightTools [C:\\Scripts\\PluralsightTools]\n\nLastUpdate             Status            Tasks             GitBranch        Age\n----------             ------            -----             ---------        ---\n1/20/2023 2:20:39 PM   Stable            {convert modu...       main   07.23:51\n```\n\n## Project Tags\n\nSupport for tags was added in version 0.12.0. You can define tags when you create the project status file.\n\n```powershell\nNew-PSProjectStatus -Tasks \"prototype\" -Tags tui - -version 0.2.0\n```\n\nOr you can add them later.\n\n```powershell\nSet-PSProjectStatus -Tags \"beta\",\"tui\"\n```\n\nWhen using this command you need to redefine existing tags. Or add the tags manually to the JSON file.\n\nYou can view tags with a formatted list view.\n\n```powershell\nPS C:\\work\\terminalgui\u003e Get-PSProjectStatus | Format-List\n\n   Project: terminalgui [C:\\work\\terminalgui]\n\nVersion    : 0.2.0\nStatus     : Development\nTasks      : {prototype}\nTags       : {beta, tui}\nGitBranch  :\nLastUpdate : 12/27/2024 5:11:30 PM\nAge        : 00:02:48.0251636\n```\n\nYou are most likely to use tags when managing multiple projects. `Get-PSProjectReport` includes a `-Tag` parameter so that you can filter from your parent folder.\n\n```powershell\nPS C:\\\u003e Get-PSProjectReport -path c:\\scripts -Tag json\n\n   Name: PSProjectStatus [C:\\Scripts\\PSProjectStatus]\n\nLastUpdate             Status        Tasks                 GitBranch        Age\n----------             ------        -----                 ---------        ---\n12/27/2024 5:16:52 PM  Updating      {Create TUI-based m…     0.12.0   00.00:00\n```\n\nIf you want to remove tags, either manually edit the JSON file or use `Set-PSProjectStatus` and set an empty array.\n\n```powershell\nSet-PSProjectStatus -Tags @()\n```\n\n## Removing Project Status\n\nIf no you longer want to track the project status for a given folder, simply delete the associated JSON file. As an alternative, you can set the status to `Archive`.\n\n## Module Extensions\n\n### Type Extensions\n\nThe commands in this module have defined type extensions. Alias and script properties have been defined.\n\n```powershell\nPS C:\\Scripts\\PSProjectStatus\u003e Get-PSProjectstatus |\nGet-Member -MemberType Properties,PropertySet\n\n   TypeName: PSProject\n\nName             MemberType     Definition\n----             ----------     ----------\nUsername         AliasProperty  Username = UpdateUser\nVersion          AliasProperty  Version = ProjectVersion\nComment          Property       string Comment {get;set;}\nComputername     Property       string Computername {get;set;}\nGitBranch        Property       string GitBranch {get;set;}\nLastUpdate       Property       datetime LastUpdate {get;set;}\nName             Property       string Name {get;set;}\nPath             Property       string Path {get;set;}\nProjectVersion   Property       version ProjectVersion {get;set;}\nRemoteRepository Property       PSProjectRemote[] RemoteRepository  ...\nStatus           Property       PSProjectStatus Status {get;set;}\nTags             Property       string[] Tags {get;set;}\nTasks            Property       string[] Tasks {get;set;}\nUpdateUser       Property       string UpdateUser {get;set;}\nInfo             PropertySet    Info {Name, Status, Version, GitBranc...\nversionInfo      PropertySet    versionInfo {Name, Status, Version, G...\nAge              ScriptProperty System.Object Age {get=(Get-Date) -  ...\n```\n\nThe property sets make it easier to display a group of related properties.\n\n```powershell\nPS C:\\Scripts\\PSProjectStatus\u003e Get-PSProjectstatus | Select-Object Info\n\nName      : PSProjectStatus\nStatus    : AcceptanceTesting\nVersion   : 0.13.0\nGitBranch : 0.13.0\nTasks     : {Create TUI-based management tools, Consider extending schema\n            for a structured Task item [Issue 10],\n            Pester tests}\nTags      : {}\nComment   : none\n\nPS C:\\Scripts\\PSProjectStatus\u003e Get-PSProjectStatus |\nSelect-Object VersionInfo,Age\n\nName       : PSProjectStatus\nStatus     : AcceptanceTesting\nVersion    : 0.13.0\nGitBranch  : 0.13.0\nLastUpdate : 12/30/2023 1:43:37 PM\nAge        : 00:03:56.0703713\n```\n\n### Formatting\n\nThe module uses custom and default formatting for projects and tasks. The default format is a table. There are examples you can see in several screenshots above. You can use also `Format-List`.\n\n```powershell\nPS C:\\Scripts\\PSProjectStatus\u003e Get-PSProjectStatus | Format-List\n\n   Project: PSProjectStatus [C:\\Scripts\\PSProjectStatus]\n\nVersion    : 0.15.0\nStatus     : Updating\nTasks      : {Create TUI-based management tools, Consider extending schema for\n             a structured Task item [Issue 10], Pester tests, Consider adding a\n             project type, eg module, to the schema…}\nTags       : {json, class-based}\nGitBranch  : 0.15.0\nLastUpdate : 7/16/2024 1:07:22 PM\nAge        : 173.20:28:04\n```\n\nThere is also a named view you can use.\n\n```powershell\nPS C:\\Scripts\\PSProjectStatus\u003e Get-PSProjectStatus |\nFormat-List -View info\n\n   Project: PSProjectStatus [C:\\Scripts\\PSProjectStatus]\n\nStatus  : Updating\nTasks   : {Create TUI-based management tools, Consider extending schema\n          for a structured Task item [Issue 10], Pester tests, Consider\n          adding a project type, eg module, to the schema…}\nTags    : {json, class-based}\nComment :\nAge     : 173.20:28:37\n```\n\n### Verbose, Warning, and Debug\n\nThe commands in this module use localized string data to display verbose, warning, and debug messages. The module uses a private helper function to display verbose messaging. Each module command can be identified with a different ANSI color scheme.\n\n![Sample verbose output](images/verbose-output.png)\n\n__Note__ *Localized string data to languages other than English was done with GitHub CoPilot, so I can't guarantee the accuracy or quality of the translations. As of version `0.16.0` the supported cultures are `fr-FR`*\n\nThe defined ANSI sequences are stored in a hashtable variable called `$PSProjectANSI`.\n\n```powershell\n$PSProjectANSI = @{\n    'Get-PSProjectGitStatus' = '[1;38;5;51m'\n    'Get-PSProjectReport'    = '[1;38;5;111m'\n    'Get-PSProjectStatus'    = '[1;96m'\n    'Get-PSProjectTask'      = '[1;38;5;10m'\n    'New-PSProjectStatus'    = '[1;38;5;208m'\n    'New-PSProjectTask'      = '[1;38;5;159m'\n    'Remove-PSProjectTask'   = '[1;38;5;195m'\n    'Set-PSProjectStatus'    = '[1;38;5;214m'\n    Default                  = '[1;38;5;51m'\n}\n```\n\nYou can change a setting by modifying the variable. You can use ANSI sequences or `$PSStyle`\n\n```powershell\n$PSProjectANSI[\"Get-PSProjectStatus\"] = \"[1;92m\"\n$PSProjectANSI[\"Get-PSProjectGitStatus\"] = $PSStyle.Foreground.Cyan\n```\n\nThese changes only persist for the duration of your PowerShell session or until you re-import the module. Use your profile script to import the module and update the variable.\n\n```powershell\nImport-Module PSProjectStatus\n$PSProjectANSI[\"Get-PSProjectStatus\"] = \"[1;38;5;140m\"\n$PSProjectANSI[\"Get-PSProjectGitStatus\"] = \"[1;38;5;77m\"\n```\n\n:heavy_exclamation_mark: You must use a PowerShell console that supports ANSI escape sequences. The PowerShell ISE __does not__ support this feature.\n\n## Editor Integration\n\nIf you import this module into your PowerShell editor, either Visual Studio Code or the PowerShell ISE, the module will add an update function called `Update-PSProjectStatus`. You can run the command from the integrated terminal or use the appropriate shortcut (see below). The command will the status based on user input, update the `LastUpdate` time to the current date and time, update the project version from the module manifest (if found), and update the git branch if found.\n\nYou need to make sure your terminal or console window is set to your project's root directory.\n\n### PowerShell ISE\n\nIf you import the module in the PowerShell ISE, it will add a menu shortcut under `Add-Ons`.\n\n![add-on menu](images/ise-update.png)\n\nClick the shortcut and a status menu will be displayed in the console pane.\n\n![ISE update status](images/update-psprojectstatus-ise.png)\n\nSelect a status and press \u003ckbd\u003eEnter\u003c/kbd\u003e The function will call `Set-PSProjectStatus` and display the updated `versioninfo` property.\n\n### VS Code\n\nLikewise, in VS Code open the command palette and go to `PowerShell: Show Additional commands from PowerShell modules`. You should see an option to update.\n\n![VSCode additional command](images/code-update.png)\n\nSelect the menu choice and switch to the integrated terminal window.\n\n![VSCode update status](images/update-psprojectstatus.png)\n\nThe menu will loop and display until you enter a valid number or press Enter with no value. The summary will be displayed as a VSCode information message.\n\n### JSON Schema\n\nA public JSON [schema file](https://raw.githubusercontent.com/jdhitsolutions/PSProjectStatus/main/psproject.schema.json) was published with `v0.8.0`. If you edit the `psproject.json` file in VSCode, you should get tab completion for many of the settings. If you have a configuration file created with an earlier version of the module, run `Set-PSProjectStatus` with any parameter. This will insert the schema reference into the JSON file. Then you can edit the file in VSCode.\n\n## Cross-Platform Support\n\nThe commands in this module should work under PowerShell 7.x cross-platform. Beginning with version 0.14.0, commands have been updated to store the path using operating system-appropriate paths. The only potential issue you might encounter is if you manage the same project files in Windows and Linux, e.g. using WSL. If that is the case, I recommend you run `Set-PSProjectStatus` before running any other commands. This will ensure the path in the JSON file is correct.\n\n## Road Map\n\nThese are a few things I'm considering or have been suggested.\n\n+ Additional properties\n  + priority\n  + project type\n+ Editor integration to manage project tasks\n+ Extending the schema to support tasks\n+ Archiving completed tasks to a separate JSON file\n+ A WPF or TUI form to display the project status and make it easier to edit tasks\n\n:left_speech_bubble: If you have any suggestions on how to extend this module or tips to others on how you are using it, please feel free to use the [Discussions](https://github.com/jdhitsolutions/PSProjectStatus/discussions) section of this module's GitHub repository.\n\n\u003e :thumbsup: Project icon by [Icons8](https://icons8.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdhitsolutions%2FPSProjectStatus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdhitsolutions%2FPSProjectStatus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdhitsolutions%2FPSProjectStatus/lists"}