{"id":20452760,"url":"https://github.com/tinuwalther/podepshtml","last_synced_at":"2026-02-28T10:33:34.032Z","repository":{"id":246370761,"uuid":"820887842","full_name":"tinuwalther/PodePSHTML","owner":"tinuwalther","description":"An example for using pode and PSHTML with mySQLite and Pester v5+.","archived":false,"fork":false,"pushed_at":"2024-08-18T13:56:01.000Z","size":4136,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-08T21:35:23.073Z","etag":null,"topics":["bootstrap","mermaid","pester","pode","pshtml","psnettools","sqlite"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tinuwalther.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"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":"2024-06-27T11:31:01.000Z","updated_at":"2024-08-18T13:57:52.000Z","dependencies_parsed_at":"2024-06-27T16:39:23.044Z","dependency_job_id":"67fb22f5-beda-4b8d-9e0c-12b03a306890","html_url":"https://github.com/tinuwalther/PodePSHTML","commit_stats":null,"previous_names":["tinuwalther/podepshtml"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tinuwalther/PodePSHTML","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tinuwalther%2FPodePSHTML","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tinuwalther%2FPodePSHTML/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tinuwalther%2FPodePSHTML/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tinuwalther%2FPodePSHTML/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tinuwalther","download_url":"https://codeload.github.com/tinuwalther/PodePSHTML/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tinuwalther%2FPodePSHTML/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29930344,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-28T09:58:13.507Z","status":"ssl_error","status_checked_at":"2026-02-28T09:57:57.047Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["bootstrap","mermaid","pester","pode","pshtml","psnettools","sqlite"],"created_at":"2024-11-15T11:10:15.506Z","updated_at":"2026-02-28T10:33:34.004Z","avatar_url":"https://github.com/tinuwalther.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PodePSHTML\n\n- [PodePSHTML](#podepshtml)\n    - [Overview](#overview)\n        - [Start page](#start-page)\n        - [Pode page](#pode-page)\n        - [Asset page](#asset-page)\n        - [SQLite page](#sqlite-page)\n        - [Pester page](#pester-page)\n        - [Mermaid page](#mermaid-page)\n    - [FileWatcher](#filewatcher)\n        - [Re-build Index by FileWatcher](#re-build-index-by-filewatcher)\n        - [Re-build Pode by FileWatcher](#re-build-pode-by-filewatcher)\n        - [Re-build Asset by FileWatcher](#re-build-asset-by-filewatcher)\n    - [API](#api)\n        - [Re-build Index by API](#re-build-index-by-api)\n        - [Re-build Pode by API](#re-build-pode-by-api)\n        - [Re-build Asset by API](#re-build-asset-by-api)\n        - [Re-build SQLite by API](#re-build-sqlite-by-api)\n        - [Re-build Pester by API](#re-build-pester-by-api)\n        - [Re-build Mermaid by API](#re-build-mermaid-by-api)\n\n## Overview\n\nThis is an example for using pode and PSHTML with mySQLite and Pester v5+.\n\nRequires pode, PSHTML, PsNetTools, Pester and mySQLite (mySQLite supports only Windows and Linux).\n\n````powershell\nInstall-Module -Name Pode, PSHTML, mySQLite, PsNetTools, Pester -SkipPublisherCheck -Repository PSGallery -Force -Verbose\n````\n\nClone the code from my repository:\n\n````powershell\ngit clone https://github.com/tinuwalther/PodePSHTML.git\n````\n\nStart pode:\n\n````powershell\npwsh ./PodePSHTML/PodeServer.ps1\n````\n\n````powershell\nPress Ctrl. + C to terminate the Pode server\nVERBOSE: Adding Route: [Get] /        # endpoint for the Index page\nVERBOSE: Adding Route: [Get] /pode    # endpoint for the Pode page\nVERBOSE: Adding Route: [Get] /update  # endpoint for the Assets page\nVERBOSE: Adding Route: [Get] /sqlite  # endpoint for the SQLite page\nVERBOSE: Adding Route: [Get] /pester  # endpoint for the Pester Tests page\nVERBOSE: Adding Route: [Get] /mermaid # endpoint for the Mermaid Diagram page\n````\n\nOr pull the image from [docker hub](https://hub.docker.com/r/tinuwalther/pode) and run the container.\n\n``docker pull tinuwalther/pode:latest``\n\n``docker run -e TZ=\"Europe/Zurich\" --hostname pshtml --name podepshtml -p 8080:8080 -d tinuwalther/pode``\n\nOpen your preffered browser and enter http://localhost:8080/ in the address - enjoy PodePSHTML!\n\n### Start page\n\n![PodePSHTM-Index](./public/img/PodePSHTML-4.6.2.png)\n\nThis is the default index page, based on bootstrap 4.6.2. Here you can cklick on the Buttons to visit the given page. If the dropdown-navbar does not work, please update the page with the REST API method. You can re-build this page with the FileWatcher- or REST API method.\n\n### Pode page\n\n![PodePSHTM-Index](./public/img/Pode.png)\n\nThis page describe how you can use pode. You can re-build this page with the FileWatcher- or REST API method.\n\n### Asset page\n\n![PodePSHTM-Index](./public/img/Asset.png)\n\nThis page describe how you can update the assets for Bootstrap, Jquery, Chartjs and Mermaid. You can re-build this page with the FileWatcher- or REST API method.\n\n### SQLite page\n\n![PodePSHTM-Index](./public/img/SQLite.png)\n\nThis page display some data of a table from a local SQLite database. The database is located at ./PodePSHTML/db/psxi.db and contains the tables classic_ESXiHosts, classic_summary, cloud_ESXiHosts, and cloud_summary to create a query for. You can update this page with the REST API method.\n\n### Pester page\n\n![PodePSHTM-Index](./public/img/Pester0.png)![PodePSHTM-Index](./public/img/Pester1.png)![PodePSHTM-Index](./public/img/Pester2.png)![PodePSHTM-Index](./public/img/Pester3.png)\n\nThis page display the result of some Pester Tests. The Script for the PesterTests is located at ./PodePSHTML/bin/Invoke-PesterResult.Tests.You can update this page with the REST API method. ps1.\n\n### Mermaid page\n\n![PodePSHTM-Index](./public/img/Mermaid0.png)![PodePSHTM-Index](./public/img/Mermaid1.png)![PodePSHTM-Index](./public/img/Mermaid2.png)\n\nThis page display a Diagram of an ESXi Host Inventory from a local SQLite database. The database is located at ./PodePSHTML/db/psxi.db. It runs a query on the table classic_ESXiHosts. You can update this page the with REST API method.\n\n[TOP](#)\n\n## FileWatcher\n\n![PodePSHTM-Index](./public/img/RequestByFileWatcher.png)\n\nThere is a FileWatcher registered on ./PodePSHTML/upload.\n\n````powershell\nVERBOSE: Creating FileWatcher for './PodePSHTML/upload'\nVERBOSE: -\u003e Registering event: Changed\nVERBOSE: -\u003e Registering event: Created\nVERBOSE: -\u003e Registering event: Deleted\nVERBOSE: -\u003e Registering event: Renamed\n````\n\nThe FileWatcher monitors files (with an extension) in the folder. It wait for events of type Changed, Created, Deleted, and Renamed.\n\n### Re-build Index by FileWatcher\n\nRe-builds the Index.pode page:\n\n````powershell\nNew-Item ./PodePSHTML/upload -Force -Name index.txt\n````\n\n### Re-build Pode by FileWatcher\n\nThe FileWatcher monitors for a file pode.txt of the type Created or Changed (Move-Item, New-Item).\n\nRe-builds the Pode-Server.pode page:\n\n````powershell\nNew-Item ./PodePSHTML/upload -Force -Name pode.txt\n````\n\n### Re-build Asset by FileWatcher\n\nThe FileWatcher monitors for a file asset.txt of the type Created or Changed (Move-Item, New-Item).\n\nRe-builds the Update-Assets.pode page without update the bootstrap files for CSS and JS:\n\n````powershell\nNew-Item ./PodePSHTML/upload -Force -Name asset.txt\n````\n\n[TOP](#)\n\n## API\n\n![PodePSHTM-Index](./public/img/RequestByApi.png)\n\nIt's also possible, to send REST API requests to pode. For each of the pages exists an endpoint.\n\n````powershell\nVERBOSE: Adding Route: [Post] /api/index   #API endpoint for the Index page\nVERBOSE: Adding Route: [Post] /api/pode    #API endpoint for the Pode page\nVERBOSE: Adding Route: [Post] /api/asset   #API endpoint for the Assets page\nVERBOSE: Adding Route: [Post] /api/sqlite  #API endpoint for the SQLite page\nVERBOSE: Adding Route: [Post] /api/pester  #API endpoint for the Pester Tests page\nVERBOSE: Adding Route: [Post] /api/mermaid #API endpoint for the Mermaid Diagram page\n````\n\n### Re-build Index by API\n\nRe-builds the Index.pode page:\n\n````powershell\nInvoke-WebRequest -Uri http://localhost:8080/api/index -Method Post\n````\n\n````powershell\nStatusCode        : 200\nStatusDescription : OK\n````\n\n### Re-build Pode by API\n\nRe-builds the Pode-Server.pode page:\n\n````powershell\nInvoke-WebRequest -Uri http://localhost:8080/api/pode -Method Post\n````\n\n````powershell\nStatusCode        : 200\nStatusDescription : OK\n````\n\n### Re-build Asset by API\n\nRe-builds the Update-Assets.pode page and update the bootstrap files for CSS and JS:\n\n````powershell\nInvoke-WebRequest -Uri http://localhost:8080/api/asset -Method Post\n````\n\n````powershell\nStatusCode        : 200\nStatusDescription : OK\n````\n\nThe new page with the current CSS and JS:\n\n![PodePSHTM-Index](./public/img/PodePSHTML.png)\n\n### Re-build SQLite by API\n\nRe-builds the SQLite-Data.pode page with own sql query:\n\n````powershell\n$SqlQuery = 'SELECT * FROM \"classic_ESXiHosts\" Limit 5'\nInvoke-WebRequest -Uri http://localhost:8080/api/sqlite -Method Post -Body $SqlQuery\n````\n\n````powershell\n$SqlQuery = 'SELECT HostName, Version, vCenterServer, Cluster, ConnectionState, Created, Manufacturer, Model, PhysicalLocation FROM \"classic_ESXiHosts\" Limit 7'\nInvoke-WebRequest -Uri http://localhost:8080/api/sqlite -Method Post -Body $SqlQuery\n````\n\n````powershell\nStatusCode        : 200\nStatusDescription : OK\n````\n\n### Re-build Pester by API\n\nRe-builds the Pester-Result.pode pagew with own destinations to test:\n\n````powershell\nInvoke-WebRequest -Uri http://localhost:8080/api/pester -Method Post -Body '[\"sbb.ch\",\"admin.ch\"]'\n````\n\n````powershell\nStatusCode        : 200\nStatusDescription : OK\n````\n\n### Re-build Mermaid by API\n\nRe-builds the Mermaid-Diagram.pode page with own sql query:\n\n````powershell\nInvoke-WebRequest -Uri http://localhost:8080/api/mermaid -Method Post -Body 'SELECT * FROM \"cloud_ESXiHosts\" ORDER BY HostName'\n````\n\n````powershell\nStatusCode        : 200\nStatusDescription : OK\n````\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftinuwalther%2Fpodepshtml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftinuwalther%2Fpodepshtml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftinuwalther%2Fpodepshtml/lists"}