diff --git a/.ci/pester.tests.ps1 b/.ci/pester.tests.ps1
new file mode 100644
index 0000000..dbfa8c5
--- /dev/null
+++ b/.ci/pester.tests.ps1
@@ -0,0 +1,12 @@
+Describe -Tag:('ModuleValidation') 'Module Basic Tests' {
+
+ It 'is present' {
+ $module = Get-Module -Name $moduleName
+ $module | Should -Be $true
+ }
+
+ It ('passes Test-ModuleManifest') {
+ Test-ModuleManifest -Path $moduleManifest | Should -Not -BeNullOrEmpty
+ $? | Should -Be $true
+ }
+}
diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml
new file mode 100644
index 0000000..ce11ad8
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug.yml
@@ -0,0 +1,178 @@
+---
+name: Bug Report
+description: Is something not working as expected? Submit a bug.
+title: 'Please add a short description.'
+labels: ["bug", "needs-triage"]
+projects: ["vmware/22"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Before filing an issue, please [search the existing issues](https://github.com/vmware/powershell-module-for-cloud-foundation-reporting/issues?q=is%3Aissue+is%3Aopen+label%3Abug) (open or closed), and use the [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) feature to add up-votes to existing issues.
+
+ When filing an issue, please include the following information.
+ - type: checkboxes
+ id: terms
+ attributes:
+ label: Code of Conduct
+ description: The Code of Conduct applies to you when interacting with the community here on GitHub and contributing code.
+ options:
+ - label: I have read and agree to the [Code of Conduct](https://github.com/vmware/powershell-module-for-cloud-foundation-reporting/blob/main/CODE_OF_CONDUCT.md).
+ required: true
+ - label: Vote on this issue by adding a 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue initial description to help the maintainers prioritize.
+ required: false
+ - label: Do not leave "+1" or other comments that do not add relevant information or questions.
+ required: false
+ - label: If you are interested in working on this issue or have submitted a pull request, please leave a comment.
+ required: false
+ - type: input
+ id: version-vcf
+ attributes:
+ label: VMware Cloud Foundation
+ description: Please provide the VMware Cloud Foundation version.
+ placeholder: x.y.z
+ validations:
+ required: true
+ - type: input
+ id: version-powershell
+ attributes:
+ label: PowerShell Version
+ description: >
+ Please provide the PowerShell version.
+
+ Results of: `$PSVersionTable`
+ placeholder: Windows PowerShell 5.1
+ validations:
+ required: true
+ - type: input
+ id: version-powercli
+ attributes:
+ label: PowerCLI Version
+ description: >
+ Please provide the VMware PowerCLI version.
+
+ Results of `Get-InstalledModule VMware.PowerCLI`
+ placeholder: x.y.z
+ validations:
+ required: true
+ - type: input
+ id: module-version
+ attributes:
+ label: Module Version
+ description: >-
+ Please provide the PowerShell module version.
+
+ Results of: `Get-InstalledModule VMware.CloudFoundation.Reporting`
+ placeholder: x.y.z
+ validations:
+ required: true
+ - type: input
+ id: version-powervalidatedsolutions
+ attributes:
+ label: PowerValidatedSolutions Version
+ description: >-
+ Please provide the PowerShell module version.
+
+ Results of: `Get-InstalledModule PowerValidatedSolutions`
+ placeholder: x.y.z
+ validations:
+ required: true
+ - type: input
+ id: version-powervcf
+ attributes:
+ label: PowerVCF Version
+ description: >
+ Please provide the PowerVCF version.
+
+ Results of `Get-InstalledModule PowerVCF`
+ placeholder: x.y.z
+ validations:
+ required: true
+ - type: input
+ id: guest-os
+ attributes:
+ label: Guest Operating System
+ description: Please provide the guest operating system.
+ placeholder: Windows Server 2022
+ validations:
+ required: true
+ - type: textarea
+ id: environment
+ attributes:
+ label: Environment Details
+ description: Please add any information you can provide about the environment.
+ validations:
+ required: false
+ - type: textarea
+ id: description
+ attributes:
+ label: Description
+ description: >-
+ Please provide a clear and concise description of the issue you are
+ experiencing.
+ validations:
+ required: true
+ - type: textarea
+ id: debug
+ attributes:
+ label: Error or Debug Output
+ description: |
+ Please provide a link to a [GitHub Gist](https://gist.github.com/) containing the complete error or debug output.
+ placeholder: |
+ Link to a GitHub Gist. Please do not paste the debug output in the
+ issue.
+ validations:
+ required: true
+ - type: textarea
+ id: expected-behavior
+ attributes:
+ label: Expected Behavior
+ description: >
+ What is it you expected to happen?
+
+ This should be a description of how the functionality you tried to use
+ is supposed to work.
+ validations:
+ required: true
+ - type: textarea
+ id: actual-behavior
+ attributes:
+ label: Actual Behavior
+ description: What actually happened that's different from the expected behavior?
+ validations:
+ required: true
+ - type: textarea
+ id: steps-to-reproduce
+ attributes:
+ label: Steps to Reproduce
+ description: Please provide the steps to reproduce the issue.
+ validations:
+ required: true
+ - type: textarea
+ id: logs
+ attributes:
+ label: Log Fragments and Files
+ description: >
+ Please include appropriate redacted log fragments. If the log is longer than a
+ few dozen lines, please include the URL to the
+ [Gist](https://gist.github.com/) of the log or use the [GitHub detailed
+ format](https://gist.github.com/ericclemmons/b146fe5da72ca1f706b2ef72a20ac39d)
+ instead of posting it directly in the issue.
+ validations:
+ required: false
+ - type: textarea
+ id: screenshot
+ attributes:
+ label: Screenshots
+ description: Screenshots of the issue, if applicable.
+ validations:
+ required: false
+ - type: textarea
+ id: references
+ attributes:
+ label: References
+ description: |
+ Please provide any related GitHub issues or pull requests (open or closed) or documentation.
+ Learn about [Referencing Github Issues](https://help.github.com/articles/basic-writing-and-formatting-syntax/#referencing-issues-and-pull-requests).
+ placeholder: |
+ #GH-0000
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..7652d10
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,8 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Module Documentation
+ url: 'https://vmware.github.io/powershell-module-for-vmware-cloud-foundation-recovery'
+ about: Having trouble with the module? Check out the documentation.
+ - name: VMware Cloud Foundation Product Documentation
+ url: https://vmware.com/go/vcf-docs
+ about: Manage VM and container-based workloads with the hybrid cloud platform, built on full stack hyper-converged infrastructure.
diff --git a/.github/ISSUE_TEMPLATE/docs.yml b/.github/ISSUE_TEMPLATE/docs.yml
new file mode 100644
index 0000000..dbcfbbf
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/docs.yml
@@ -0,0 +1,45 @@
+---
+name: Documentation
+description: Found a typo or something that needs clarification?
+title: 'Please add a short description.'
+labels: ["documentation", "needs-review"]
+projects: ["vmware/22"]
+body:
+ - type: markdown
+ attributes:
+ value: >
+ When filing a documentation issue, please include the following information.
+ - type: checkboxes
+ id: terms
+ attributes:
+ label: Code of Conduct
+ description: >-
+ This project has a [Code of Conduct](https://github.com/vmware/powershell-module-for-cloud-foundation-reporting/blob/main/CODE_OF_CONDUCT.md)
+ that all participants are expected to understand and follow.
+ options:
+ - label: I have read and agree to the project's Code of Conduct.
+ required: true
+ - type: input
+ id: version-module
+ attributes:
+ label: Module Version
+ description: Please provide the module version.
+ validations:
+ required: true
+ - type: textarea
+ id: motivation
+ attributes:
+ label: Motivation
+ description: Why should we update our docs or examples?
+ validations:
+ required: false
+ - type: textarea
+ id: suggestion
+ attributes:
+ label: Suggestion
+ description: What should we do instead?
+ validations:
+ required: false
+ - type: markdown
+ attributes:
+ value: "### Community Note\n* Please vote on this issue by adding a \U0001F44D [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue to help the community and maintainers prioritize this request\n* Please do not leave \"+1\" or other comments that do not add relevant new information or questions, they generate extra noise for issue followers and do not help prioritize the request\n* If you are interested in working on this issue or have submitted a pull request, please leave a comment\n"
diff --git a/.github/ISSUE_TEMPLATE/enhancement.yml b/.github/ISSUE_TEMPLATE/enhancement.yml
new file mode 100644
index 0000000..de2bb44
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/enhancement.yml
@@ -0,0 +1,61 @@
+---
+name: Enhancement Request
+description: Is something critical missing? Suggest an enhancement.
+title: 'Please add a short description.'
+labels: ["enhancement", "needs-review"]
+projects: ["vmware/22"]
+body:
+ - type: markdown
+ attributes:
+ value: >
+ Before filing an enhancement, please search the existing issues and use the
+ [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/)
+ feature to add up-votes to existing requests.
+
+
+ When filing an enhancement, please include the following information.
+ - type: checkboxes
+ id: terms
+ attributes:
+ label: Code of Conduct
+ description: >-
+ This project has a [Code of
+ Conduct](https://github.com/vmware/powershell-module-for-cloud-foundation-reporting/blob/main/CODE_OF_CONDUCT.md)
+ that all participants are expected to understand and follow.
+ options:
+ - label: I have read and agree to the project's Code of Conduct.
+ required: true
+ - label: Vote on this issue by adding a 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to the original issue initial description to help the maintainers prioritize.
+ required: false
+ - label: Do not leave "+1" or other comments that do not add relevant information or questions.
+ required: false
+ - label: If you are interested in working on this issue or have submitted a pull request, please leave a comment.
+ required: false
+ - type: textarea
+ id: description
+ attributes:
+ label: Description
+ description: A written overview of the enhancement.
+ validations:
+ required: true
+ - type: textarea
+ id: use-case
+ attributes:
+ label: Use Case(s)
+ description: Any relevant use-cases that you see.
+ validations:
+ required: true
+ - type: textarea
+ id: potential-configuration
+ attributes:
+ label: Potential Configuration
+ description: Provide a potential configuration.
+ validations:
+ required: true
+ - type: textarea
+ id: references
+ attributes:
+ label: References
+ description: Provide any references.
+ validations:
+ required: false
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..b0cc2f7
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,7 @@
+---
+version: 2
+updates:
+- package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "daily"
diff --git a/.github/icon-400px.png b/.github/icon-400px.png
new file mode 100644
index 0000000..baaa0df
Binary files /dev/null and b/.github/icon-400px.png differ
diff --git a/.github/icon-400px.svg b/.github/icon-400px.svg
new file mode 100644
index 0000000..c1e64ed
--- /dev/null
+++ b/.github/icon-400px.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/.github/icon-85px.svg b/.github/icon-85px.svg
new file mode 100644
index 0000000..86b2803
--- /dev/null
+++ b/.github/icon-85px.svg
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/.github/labeler-issues.yml b/.github/labeler-issues.yml
new file mode 100644
index 0000000..7d8fb20
--- /dev/null
+++ b/.github/labeler-issues.yml
@@ -0,0 +1,3 @@
+---
+pending-review:
+ - '.*'
diff --git a/.github/labeler-pull-requests.yml b/.github/labeler-pull-requests.yml
new file mode 100644
index 0000000..c0de566
--- /dev/null
+++ b/.github/labeler-pull-requests.yml
@@ -0,0 +1,22 @@
+---
+chore:
+ - changed-files:
+ - any-glob-to-any-file:
+ - ".ci/**/*"
+ - ".github/**/*"
+ - ".gitignore"
+documentation:
+ - changed-files:
+ - any-glob-to-any-file:
+ - "**/*.md"
+ - "Makefile"
+ - "**/*.md"
+ - "mkdocs.yml"
+github-actions:
+ - changed-files:
+ - any-glob-to-any-file:
+ - ".github/workflows/**/*"
+needs-review:
+ - changed-files:
+ - any-glob-to-any-file:
+ - "**"
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 0000000..ef33abb
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,96 @@
+
+
+.
+
+### Summary
+
+.
+
+### Type
+
+
+
+- [ ] Bugfix
+- [ ] Enhancement or Feature
+- [ ] Code Style or Formatting
+- [ ] Documentation
+- [ ] Refactoring
+- [ ] Chore
+- [ ] Other
+ Please describe:.
+
+### Breaking Changes?
+
+
+
+- [ ] Yes, there are breaking changes.
+- [ ] No, there are no breaking changes..
+
+### Test and Documentation
+
+
+
+- [ ] Tests have been completed.
+- [ ] Documentation has been added or updated.
+
+.
+
+### Issue References
+
+.
+
+### Additional Information
+
+
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 0000000..53efe00
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,25 @@
+name: Publish Documentation
+on:
+ workflow_dispatch:
+permissions:
+ contents: write
+jobs:
+ publish-docs:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
+ with:
+ fetch-depth: 0
+ - name: Setup Python
+ uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
+ with:
+ python-version: 3.x
+ - name: Install Dependencies
+ run: |
+ pip install mkdocs-material
+ pip install --requirement docs/requirements.txt
+ - name: Publish Documentation
+ run: |
+ mkdocs gh-deploy --force
+ if: ${{ success() }}
diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml
new file mode 100644
index 0000000..16d6bcd
--- /dev/null
+++ b/.github/workflows/issues.yml
@@ -0,0 +1,19 @@
+---
+name: Issue Triage
+
+on:
+ issues:
+ types:
+ - opened
+
+jobs:
+ label-issues:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Apply Issue Triage Labels
+ uses: github/issue-labeler@c1b0f9f52a63158c4adc09425e858e87b32e9685 # v3.4
+ with:
+ repo-token: '${{ secrets.GITHUB_TOKEN }}'
+ configuration-path: .github/labeler-issues.yml
+ enable-versioned-regex: 0
+ include-title: 1
diff --git a/.github/workflows/lock-threads.yml b/.github/workflows/lock-threads.yml
new file mode 100644
index 0000000..93337dc
--- /dev/null
+++ b/.github/workflows/lock-threads.yml
@@ -0,0 +1,34 @@
+---
+name: Lock Threads
+
+on:
+ schedule:
+ - cron: 30 00 * * *
+
+jobs:
+ lock:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: dessant/lock-threads@d42e5f49803f3c4e14ffee0378e31481265dda22 # v5.0.0
+ with:
+ github-token: '${{ secrets.GITHUB_TOKEN }}'
+ issue-comment: >
+ I'm going to lock this issue because it has been closed for 30
+ days. This helps our maintainers find and focus on the active
+ issues.
+
+
+ If you have found a problem that seems similar to this,
+ please open a new issue and complete the issue template so we can
+ capture all the details necessary to investigate further.
+ issue-inactive-days: '30'
+ pr-comment: >
+ I'm going to lock this pull request because it has been closed for
+ 30 days. This helps our maintainers find and focus on the active
+ issues.
+
+
+ If you have found a problem that seems related to this
+ change, please open a new issue and complete the issue template so
+ we can capture all the details necessary to investigate further.
+ pr-inactive-days: '30'
diff --git a/.github/workflows/pull-requests.yml b/.github/workflows/pull-requests.yml
new file mode 100644
index 0000000..73c044e
--- /dev/null
+++ b/.github/workflows/pull-requests.yml
@@ -0,0 +1,27 @@
+---
+name: Pull Request Labels
+
+on:
+ pull_request_target:
+ branches:
+ - develop
+ types:
+ - opened
+ - synchronize
+ - reopened
+ - edited
+ - ready_for_review
+
+jobs:
+ labeler:
+ name: Labeler
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pull-requests: write
+ steps:
+ - name: Apply Labels
+ uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0
+ with:
+ configuration-path: .github/labeler-pull-requests.yml
+ repo-token: '${{ secrets.GITHUB_TOKEN }}'
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..781263a
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,235 @@
+name: Release
+
+on:
+ push:
+ tags:
+ - "v[0-9]+.[0-9]+.[0-9]+*"
+
+permissions:
+ contents: write
+
+jobs:
+ create-release:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
+ with:
+ fetch-depth: 0
+ - name: Check Version
+ shell: pwsh
+ if: startsWith(github.ref, 'refs/tags/v')
+ run: |
+ $tag = $env:GITHUB_REF.Replace('refs/tags/v', '')
+ $manifestName = (Get-ChildItem -Path $env:GITHUB_WORKSPACE -Filter *.psd1).Name
+ $moduleVersion = [regex]::Match((Get-Content -Path ./$manifestName -Raw), '(?<=ModuleVersion\s*=\s*'')[^'']+(?='')').Value
+ $version = $moduleVersion -split '\.' | Select-Object -First 3 | Join-String -Separator '.'
+ $release = ($tag -replace '^v') -split '\.' | Select-Object -First 3 | Join-String -Separator '.'
+ if ($version -ne $release) {
+ Write-Error "FAILED: Comparing module version '$version' with release tag 'v$tag'."
+ exit 1
+ } else {
+ Write-Output "SUCCESS: Comparing module version '$version' with release tag 'v$tag'."
+ }
+ - name: Check Changelog
+ shell: pwsh
+ run: |
+ $version = $env:GITHUB_REF.Replace('refs/tags/', '')
+ $changelog = Get-Content -Path CHANGELOG.md
+ $foundVersion = $false
+ foreach ($line in $changelog) {
+ if ($line -match "^## $version$") {
+ $foundVersion = $true
+ continue
+ }
+ if ($foundVersion -and $line -match "^## ") {
+ break
+ }
+ }
+ if ($foundVersion) {
+ Write-Output "SUCCESS: Locating release in the changelog for version '$version'."
+ } else {
+ Write-Error "FAILED: Locating release in the changelog for version '$version'."
+ exit 1
+ }
+ - name: Create Release Branch
+ shell: pwsh
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ $version = $env:GITHUB_REF.Replace('refs/tags/', '')
+ $releaseBranch = "release/$version"
+ $git = Get-Command git | Select-Object -ExpandProperty Definition
+ & $git config --global user.name "github-actions[bot]"
+ & $git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
+ & $git checkout -b $releaseBranch
+ & $git push origin $releaseBranch
+ if ($LASTEXITCODE -ne 0) {
+ Write-Error "FAILED: Creating release branch '$releaseBranch'."
+ } else {
+ Write-Output "SUCCESS: Creating release branch '$releaseBranch'."
+ }
+ - name: Rebase Main Branch
+ shell: pwsh
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ $version = $env:GITHUB_REF.Replace('refs/tags/', '')
+ $releaseBranch = "release/$version"
+ $git = Get-Command git | Select-Object -ExpandProperty Definition
+ & $git config --global user.name "github-actions[bot]"
+ & $git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
+ & $git checkout $releaseBranch
+ & $git pull origin $releaseBranch
+ & $git checkout main
+ & $git pull origin main
+ & $git rebase $releaseBranch
+ & $git push origin main
+ if ($LASTEXITCODE -ne 0) {
+ Write-Error "FAILED: Rebasing main branch from release branch '$releaseBranch'."
+ } else {
+ Write-Output "SUCCESS: Rebasing main branch from release branch '$releaseBranch'."
+ }
+ - name: Install GitHub CLI
+ run: |
+ type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y)
+ curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
+ && sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
+ && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
+ && sudo apt update \
+ && sudo apt install gh -y
+ - name: Create Release
+ shell: pwsh
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ $version = $env:GITHUB_REF.Replace('refs/tags/', '')
+ $changelog = Get-Content -Path CHANGELOG.md
+ $releaseNotes = $null
+ $foundVersion = $false
+ foreach ($line in $changelog) {
+ if ($line -match "^## $version$") {
+ $foundVersion = $true
+ continue
+ }
+ if ($foundVersion -and $line -match "^## ") {
+ break
+ }
+ if ($foundVersion) {
+ $releaseNotes += $line + "`n"
+ }
+ }
+ $gh = Get-Command gh | Select-Object -ExpandProperty Definition
+ & $gh release create $version --title "$version" --notes "$releaseNotes" --target "release/$version"
+ if ($LASTEXITCODE -ne 0) {
+ Write-Error "FAILED: Creating GitHub release '$version'."
+ } else {
+ Write-Output "SUCCESS: Creating GitHub release '$version'."
+ }
+ publish-docs:
+ needs: create-release
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
+ with:
+ ref: ${{ github.event.release.tag_name }}
+ fetch-depth: 0
+ - name: Setup Python
+ uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
+ with:
+ python-version: 3.x
+ - name: Install Dependencies
+ run: |
+ pip install mkdocs-material
+ pip install --requirement docs/requirements.txt
+ - name: Publish Documentation
+ run: |
+ mkdocs gh-deploy --force
+ if: ${{ success() }}
+ publish-module:
+ needs: [create-release, publish-docs]
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
+ with:
+ ref: ${{ github.event.release.tag_name }}
+ fetch-depth: 0
+ - name: Publish Module to PowerShell Gallery
+ shell: pwsh
+ env:
+ PSGALLERY_API_KEY: ${{ secrets.PSGALLERY_API_KEY }}
+ run: |
+ Write-Output "INFO: Preparing Ubuntu-based GitHub runner for publishing module to the PowerShell Gallery."
+ Write-Output "INFO: Setting the PowerShell Gallery as a trusted repository."
+ Set-PSRepository psgallery -InstallationPolicy trusted
+ Write-Output "INFO: Locating module manifest in '$env:GITHUB_WORKSPACE'."
+ $moduleManifest = (Get-ChildItem -Path $env:GITHUB_WORKSPACE -Filter *.psd1).Name
+ if ($moduleManifest) {
+ Write-Output "SUCCESS: Manifest '$moduleManifest' found in '$env:GITHUB_WORKSPACE'."
+ } else {
+ Write-Output "FAILURE: Manifest not found in '$env:GITHUB_WORKSPACE'."
+ }
+ if ($moduleManifest -match '^(.*)\.psd1$') {
+ $moduleName = $Matches[1]
+ Write-Output "SUCCESS: Determining module name from manifest '$moduleManifest'."
+ } else {
+ Write-Error "FAILED: Determining module name from manifest '$moduleManifest'."
+ }
+ Write-Output "INFO: Reading module manifest '$moduleManifest'."
+ $moduleManifestData = Import-PowerShellDataFile -Path $moduleManifest
+ Write-Output "INFO: Determining module dependencies."
+ $requiredModules = $moduleManifestData.RequiredModules
+ if ($requiredModules) {
+ Write-Output "SUCCESS: Module dependencies were found."
+ Write-Output "INFO: Required modules are $($requiredModules.ModuleName -join ', ')."
+ Write-Output "INFO: Setting location to the PowerShell modules location on a Ubuntu-based GitHub runner."
+ Set-Location '/home/runner/.local/share/powershell/Modules/'
+ foreach ($module in $requiredModules) {
+ $requiredModuleName = $module.ModuleName
+ New-Item $requiredModuleName -ItemType Directory
+ Write-Output "INFO: Performing workaround for github.com/PowerShell/PowerShell/issues/7722."
+ Write-Output "INFO: Creating placeholder manifest for $requiredModuleName at $((Get-Location).Path)/$requiredModuleName/$requiredModuleName.psd1"
+ New-Item "./$requiredModuleName/$requiredModuleName.psd1" -ItemType File
+ }
+ } else {
+ Write-Output "INFO: No module dependencies were found."
+ }
+ Write-Output "INFO: Setting location to the GitHub workspace at '$env:GITHUB_WORKSPACE'."
+ Set-Location $env:GITHUB_WORKSPACE
+ Write-Output "INFO: Publishing module to the PowerShell Gallery."
+ $remove = @('.ci', '.dependencies', '.git', '.github', '.gitignore', '.vscode', 'docs', 'CODEOWNERS', 'CODE_OF_CONDUCT.md', 'CONTRIBUTING.md', 'Makefile', 'mkdocs.yml')
+ $random = Get-Random -Count 1
+ $destinationPath = Join-Path -Path $env:GITHUB_WORKSPACE -ChildPath $random
+ $manifestName = (Get-ChildItem -Path $env:GITHUB_WORKSPACE -Filter *.psd1).Name
+ $moduleVersion = [regex]::Match((Get-Content -Path ./$manifestName -Raw), '(?<=ModuleVersion\s*=\s*'')[^'']+(?='')').Value
+ if ($manifestName -match '^(.*)\.psd1$') {
+ $moduleName = $Matches[1]
+ Write-Output "SUCCESS: Determining module name from manifest file name '$moduleName'."
+ } else {
+ Write-Error "FAILED: Determining module name from manifest file name '$moduleName'."
+ }
+ $modulePath = Join-Path -Path $destinationPath -ChildPath $moduleName
+ $createModulePath = New-Item -Path $modulePath -ItemType Directory -Force
+ if ($createModulePath) {
+ Write-Output "SUCCESS: Creating staging path '$modulePath'."
+ } else {
+ Write-Error "FAILED: Creating staging path '$modulePath'."
+ }
+ Get-ChildItem -Force | Where-Object { $_.Name -notin $remove -and $_.Name -ne $random } | Copy-Item -Destination $modulePath -Recurse
+ Get-ChildItem -Depth 5 -Path $modulePath | Format-Table -AutoSize
+ $moduleManifest = Join-Path -Path $modulePath -ChildPath "$moduleName.psd1"
+ if (Test-Path -Path $moduleManifest) {
+ Publish-Module -Path $modulePath -NuGetApiKey $env:PSGALLERY_API_KEY
+ Start-Sleep -Seconds 30
+ $module = Find-Module -Name $moduleName -RequiredVersion "$moduleVersion"
+ if ($module) {
+ Write-Output "SUCCESS: Publishing module '$moduleName' version '$moduleVersion' to PowerShell Gallery."
+ } else {
+ Write-Error "FAILED: Publishing module '$moduleName' version '$moduleVersion' to PowerShell Gallery."
+ }
+ } else {
+ Write-Error "FAILED: Module manifest file not found at path '$moduleManifest'."
+ }
+
\ No newline at end of file
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
new file mode 100644
index 0000000..453d4d3
--- /dev/null
+++ b/.github/workflows/stale.yml
@@ -0,0 +1,46 @@
+---
+name: Manage Stale Items
+
+on:
+ schedule:
+ - cron: 00 00 * * *
+
+jobs:
+ stale:
+ runs-on: ubuntu-latest
+ permissions:
+ issues: write
+ pull-requests: write
+ steps:
+ - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9.0.0
+ with:
+ repo-token: '${{ secrets.GITHUB_TOKEN }}'
+ days-before-stale: 60
+ days-before-close: 30
+ exempt-issue-labels: 'needs-triage'
+ exempt-pr-labels: 'needs-review'
+ remove-stale-when-updated: true
+ delete-branch: false
+ stale-issue-label: stale
+ stale-issue-message: >
+ 'Marking this issue as stale due to inactivity. This helps us focus
+ on the active issues. If this issue receives no comments in the next
+ 30 days it will automatically be closed.
+
+
+ If this issue was automatically closed and you feel this issue
+ should be reopened, we encourage creating a new issue linking back
+ to this one for added context.
+
+ Thank you!'
+ stale-pr-label: stale
+ stale-pr-message: >
+ 'Marking this pull request as stale due to inactivity. This helps us
+ focus on the active pull requests. If this pull request receives no
+ comments in the next 30 days it will automatically be closed.
+
+ If this pull request was automatically closed and you feel this pull
+ request should be reopened, we encourage creating a new pull request
+ linking back to this one for added context.
+
+ Thank you!'
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
new file mode 100644
index 0000000..bf16460
--- /dev/null
+++ b/.github/workflows/tests.yml
@@ -0,0 +1,71 @@
+name: Tests
+
+on:
+ push:
+ branches: [develop]
+ paths:
+ - "**.psm1"
+ - "**.psd1"
+ workflow_dispatch:
+
+jobs:
+ basic_tests:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
+ - name: Run Basic Tests
+ working-directory: ${{ github.workspace }}
+ shell: pwsh
+ run: |
+ Write-Output "INFO: Setting PowerShell Gallery as a trusted repository."
+ Set-PSRepository psgallery -InstallationPolicy trusted
+ $moduleManifest = (Get-ChildItem -Path $env:GITHUB_WORKSPACE -Filter *.psd1).Name
+ if ($moduleManifest) {
+ Write-Output "SUCCESS: Manifest '$moduleManifest' found in '$env:GITHUB_WORKSPACE'."
+ } else {
+ Write-Output "FAILURE: Manifest not found in '$env:GITHUB_WORKSPACE'."
+ }
+ if ($moduleManifest -match '^(.*)\.psd1$') {
+ $moduleName = $Matches[1]
+ Write-Output "SUCCESS: Determining module name from manifest'$moduleManifest'."
+ } else {
+ Write-Error "FAILED: Determining module name from manifest '$moduleManifest'."
+ }
+ Write-Output "INFO: Reading module manifest '$moduleManifest'."
+ $moduleManifestData = Import-PowerShellDataFile -Path $moduleManifest
+ $requiredModules = $moduleManifestData.RequiredModules
+ $requiredModules = $requiredModules | Where-Object { $_.ModuleName -ne 'VMware.vSphere.SsoAdmin' }
+ Write-Output "INFO: Required modules are $($requiredModules.ModuleName -join ', ')."
+ foreach ($module in $requiredModules) {
+ $requiredModuleName = $module.ModuleName
+ $licenseUri = [System.Uri] (Find-Module -Name $requiredModuleName).LicenseUri
+ $gitUri = $licenseUri.AbsoluteUri.Split('/blob/')[0].TrimEnd('/') -replace '\.git$'
+ $requiredModuleFolder = Join-Path -Path $PSScriptRoot -ChildPath "dependencies/$requiredModuleName"
+ if (-not (Test-Path -Path $requiredModuleFolder -PathType Container)) {
+ Write-Output "INFO: Cloning module '$requiredModuleName' from '$gitUri' to '$requiredModuleFolder'."
+ git clone $gitUri $requiredModuleFolder | Out-Null
+ if (Test-Path -Path $requiredModuleFolder -PathType Container) {
+ Write-Output "SUCCESS: Module '$requiredModuleName' was cloned."
+ } else {
+ Write-Error "FAILED: Module '$requiredModuleName' was not cloned."
+ }
+ }
+ Write-Output "INFO: Importing module '$requiredModuleName' from '$requiredModuleFolder'."
+ Import-Module -Name (Join-Path -Path $requiredModuleFolder -ChildPath "$requiredModuleName.psd1") -Force
+ if (Get-Module -Name $requiredModuleName) {
+ Write-Output "SUCCESS: Module '$requiredModuleName' was imported."
+ } else {
+ Write-Error "FAILED: Module '$requiredModuleName' was not imported."
+ }
+ }
+ Write-Output "INFO: Importing module '$moduleName' from '$moduleManifest'."
+ Import-Module -Name (Resolve-Path $moduleManifest).Path -Force -ErrorAction Stop
+ if (Get-Module -Name $moduleName) {
+ Write-Output "SUCCESS: Module '$moduleName' was imported."
+ } else {
+ Write-Error "FAILED: Module '$moduleName' was not imported."
+ }
+ Write-Output "INFO: Installing module 'Pester' from PSGallery."
+ Install-Module -Name Pester -confirm:$false -Force
+ Write-Output "INFO: Invoking Pester tests."
+ Invoke-Pester -Path "./.ci/pester.tests.ps1" -Output Detailed -PassThru
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8841ef2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+# MacOS
+## Ignore desktop services files.
+**/.DS_Store
+
+# MkDocs
+## Ignore site directory.
+**/.site/**
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..0a7757e
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,7 @@
+# Release History.
+
+## v1.0.0
+
+> Release Date: Unreleased
+
+Initial availability of the PowerShell Module for VMware Cloud Foundation Recovery.
diff --git a/CODEOWNERS b/CODEOWNERS
new file mode 100644
index 0000000..14a9907
--- /dev/null
+++ b/CODEOWNERS
@@ -0,0 +1 @@
+* @vmware/powershell-module-for-vmware-cloud-foundation-recovery-maintainers
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..547dc4f
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,127 @@
+# Contributor Covenant Code of Conduct.
+
+## Our Pledge
+
+We as members, contributors, and leaders pledge to make participation in powershell-module-for-vmware-cloud-foundation-reporting project and our
+community a harassment-free experience for everyone, regardless of age, body
+size, visible or invisible disability, ethnicity, sex characteristics, gender
+identity and expression, level of experience, education, socio-economic status,
+nationality, personal appearance, race, religion, or sexual identity
+and orientation.
+
+We pledge to act and interact in ways that contribute to an open, welcoming,
+diverse, inclusive, and healthy community..
+
+## Our Standards
+
+Examples of behavior that contributes to a positive environment for our
+community include:
+
+* Demonstrating empathy and kindness toward other people
+* Being respectful of differing opinions, viewpoints, and experiences
+* Giving and gracefully accepting constructive feedback
+* Accepting responsibility and apologizing to those affected by our mistakes,
+ and learning from the experience
+* Focusing on what is best not just for us as individuals, but for the
+ overall community
+
+Examples of unacceptable behavior include:
+
+* The use of sexualized language or imagery, and sexual attention or
+ advances of any kind
+* Trolling, insulting or derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or email
+ address, without their explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+ professional setting.
+
+## Enforcement Responsibilities
+
+Community leaders are responsible for clarifying and enforcing our standards of
+acceptable behavior and will take appropriate and fair corrective action in
+response to any behavior that they deem inappropriate, threatening, offensive,
+or harmful.
+
+Community leaders have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct, and will communicate reasons for moderation
+decisions when appropriate..
+
+## Scope
+
+This Code of Conduct applies within all community spaces, and also applies when
+an individual is officially representing the community in public spaces.
+Examples of representing our community include using an official e-mail address,
+posting via an official social media account, or acting as an appointed
+representative at an online or offline event..
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported to the community leaders responsible for enforcement at oss-coc@vmware.com.
+All complaints will be reviewed and investigated promptly and fairly.
+
+All community leaders are obligated to respect the privacy and security of the
+reporter of any incident..
+
+## Enforcement Guidelines
+
+Community leaders will follow these Community Impact Guidelines in determining
+the consequences for any action they deem in violation of this Code of Conduct:.
+
+### 1. Correction
+
+**Community Impact**: Use of inappropriate language or other behavior deemed
+unprofessional or unwelcome in the community.
+
+**Consequence**: A private, written warning from community leaders, providing
+clarity around the nature of the violation and an explanation of why the
+behavior was inappropriate. A public apology may be requested..
+
+### 2. Warning
+
+**Community Impact**: A violation through a single incident or series
+of actions.
+
+**Consequence**: A warning with consequences for continued behavior. No
+interaction with the people involved, including unsolicited interaction with
+those enforcing the Code of Conduct, for a specified period of time. This
+includes avoiding interactions in community spaces as well as external channels
+like social media. Violating these terms may lead to a temporary or
+permanent ban..
+
+### 3. Temporary Ban
+
+**Community Impact**: A serious violation of community standards, including
+sustained inappropriate behavior.
+
+**Consequence**: A temporary ban from any sort of interaction or public
+communication with the community for a specified period of time. No public or
+private interaction with the people involved, including unsolicited interaction
+with those enforcing the Code of Conduct, is allowed during this period.
+Violating these terms may lead to a permanent ban..
+
+### 4. Permanent Ban
+
+**Community Impact**: Demonstrating a pattern of violation of community
+standards, including sustained inappropriate behavior, harassment of an
+individual, or aggression toward or disparagement of classes of individuals.
+
+**Consequence**: A permanent ban from any sort of public interaction within
+the community..
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage],
+version 2.0, available at
+https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
+
+Community Impact Guidelines were inspired by [Mozilla's code of conduct
+enforcement ladder](https://github.com/mozilla/diversity).
+
+[homepage]: https://www.contributor-covenant.org
+
+For answers to common questions about this code of conduct, see the FAQ at
+https://www.contributor-covenant.org/faq. Translations are available at
+https://www.contributor-covenant.org/translations.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..b204c97
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,132 @@
+# Contributing
+
+The project team welcomes contributions from the community. Whether it is a bug report, an enhancement request, or documentation update, we greatly value feedback and contributions from our community.
+
+Before you start working with project, please read our [Developer Certificate of Origin][vmware-cla-dco].
+
+All contributions to this repository must be signed as described on that page. Your signature certifies that you wrote the patch or have the right to pass it on as an open-source patch..
+
+## Issues
+
+We welcome you to use the GitHub issues for bug reports, enhancement requests, feature requests, or documentation updates.
+
+When filing an issue, please check existing open, or recently closed, issues to make sure someone else has not already reported the issue.
+
+Please try to include as much information as you can. Details like these are incredibly useful:
+
+- A reproducible test case or series of steps.
+- Any modifications you have made relevant to the bug.
+- Anything unusual about your environment or deployment.
+
+You can also start a discussion on the [discussions][gh-discussions] area to ask questions or share ideas..
+
+## Pull Requests
+
+Contributions using pull requests are appreciated. Before opening a pull request, please ensure that:
+
+1. You check existing open, and recently merged, pull requests to make sure it has not already been addressed for an upcoming release.
+2. You [open a discussion][gh-discussions] to discuss any significant work with the maintainer(s).
+3. You [open an issue][gh-issues] with a clear description of the problem you are trying to solve if one does not already exist.
+4. You are working against the latest source on the `develop` branch.
+
+To submit a pull request, please:
+
+1. Fork the repository and clone your fork.
+2. Create a topic branch from the `develop` branch. For example, `feat/add-x` or `fix/update-y`.
+3. Modify the source. Please focus the scope on the specific change you are contributing.
+4. Ensure that local tests, if any, pass.
+5. Update the documentation, if required. See the `docs` directory for the documentation source.
+6. Commit to your fork [using clear commit messages][git-commit]. Please use [Conventional Commits][conventional-commits].
+7. Submit a pull request, answering any default questions in the pull request, and linking to any related issues for context. See [GitHub flavored markdown syntax][gh-markdown] for references.
+8. Submit a work in progress pull request as a **draft pull request**. Mark the pull request as **ready for review** when you are ready for feedback.
+9. Review any automated checks on the the pull request pass.
+10. Stay engaged in the pull request review process.
+
+GitHub provides additional document on [forking a repository][gh-forks] and [creating a pull request][gh-pulls]..
+
+### Contributor Workflow
+
+This is a general outline of the workflow for contributing to this project:
+
+- Create a topic branch from where you want to base your work.
+- Make commits of logical units.
+- Make sure your commit messages are [in the proper format][conventional-commits].
+- Push your changes to a topic branch in your fork of the repository.
+- Submit a pull request.
+
+Example:
+
+``` shell
+git remote add upstream https://github.com//.git
+git checkout --branch feat/add-x develop
+git commit --signoff --message "feat: add support for x
+ Added support for x.
+
+ Signed-off-by: Jane Doe
+
+ Ref: #123"
+git push origin feat/add-x
+```
+
+### Formatting Commit Messages
+
+We follow the conventions on [How to Write a Git Commit Message][git-commit] and [Conventional Commits][conventional-commits].
+
+Be sure to include any related GitHub issue references in the commit message.
+
+Example:
+
+```markdown
+feat: add support for x
+
+Added support for x.
+
+Signed-off-by: Jane Doe
+
+Ref: #123
+```
+
+See [GitHub flavored markdown syntax][gh-markdown] for referencing issues, pull requests, and commits..
+
+### Rebasing the Pull Request with Upstream
+
+When your branch gets out of sync with the upstream `develop` branch, use the following to update:
+
+``` shell
+git checkout feat/add-x
+git fetch --all
+git pull --rebase upstream develop
+git push --force-with-lease origin feat/add-x
+```
+
+### Updating a Pull Request
+
+If your pull request fails to pass or needs changes based on code review, you will most likely want to squash these changes into existing commits.
+
+If your pull request contains a single commit or your changes are related to the most recent commit, you can simply amend the commit.
+
+``` shell
+git add .
+git commit --amend
+git push --force-with-lease origin feat/add-x
+```
+
+If you need to squash changes into an earlier commit, you can use:
+
+``` shell
+git add .
+git commit --fixup
+git rebase --interactive --autosquash develop
+git push --force-with-lease origin feat/add-x
+```
+
+Be sure to add a comment to the pull request indicating your new changes are ready to review. GitHub does not generate a notification when you `git push`.
+
+[conventional-commits]: https://www.conventionalcommits.org/en/v1.0.0/
+[git-commit]: http://chris.beams.io/posts/git-commit/
+[gh-discussions]: https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/discussions
+[gh-forks]: https://help.github.com/articles/fork-a-repo/
+[gh-issues]:https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/issues
+[gh-markdown]: https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown
+[gh-pulls]: https://help.github.com/articles/creating-a-pull-request/
+[vmware-cla-dco]: https://cla.vmware.com/dco
diff --git a/LICENSE b/LICENSE
index 034a9f9..db2bb43 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,24 +1,27 @@
BSD 2-Clause License
-Copyright (c) 2024, VMware
+Copyright 2024 Broadcom. All Rights Reserved.
Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
+modification, are permitted provided that the following conditions are
+met:
-1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..d752dd7
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,19 @@
+# Copyright 2023-2024 Broadcom. All Rights Reserved.
+# SPDX-License-Identifier: BSD-2
+
+docs-install:
+ pip install mkdocs-material
+ pip install --requirement docs/requirements.txt
+
+docs-serve:
+ mkdocs serve
+
+docs-serve-live:
+ mkdocs serve --livereload -w ./
+
+docs-build:
+ mkdocs build
+
+docs-uninstall:
+ pip uninstall mkdocs-material mkdocs -y
+ pip uninstall --requirement docs/requirements.txt -y
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..ab4e66b
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,9 @@
+PowerShell Module for VMware Cloud Foundation Recovery
+Copyright 2024 Broadcom. All Rights Reserved.
+
+This product is licensed to you under the BSD-2 license (the "License"). You may not use this product except in
+compliance with the BSD-2 License.
+
+This product may include a number of subcomponents with separate copyright notices and license terms. Your use of
+these subcomponents is subject to the terms and conditions of the subcomponent's license, as noted in the LICENSE
+file.
diff --git a/README.md b/README.md
index 3b150fa..3b380b3 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,77 @@
-# powershell-module-for-vmware-cloud-foundation-recovery
\ No newline at end of file
+
+
+
+
+# PowerShell Module for VMware Cloud Foundation Recovery
+
+[
][docs-module]
+[
][changelog]
+
+[
][psgallery-module]
+
.
+
+## Overview
+
+`VMware.CloudFoundation.Recovery` is a PowerShell module that has been written to support the ability to automate and accelerate the recovery of a [VMware Cloud Foundation][docs-vmware-cloud-foundation] instance through the use of
+PowerShell cmdlets..
+
+## Documentation
+
+Please refer to the [documentation][docs-module] for more information on how to use this module..
+
+## Contributing
+
+The project team welcomes contributions from the community. Before you start working with project, please read our
+[Developer Certificate of Origin][vmware-cla-dco].
+
+All contributions to this repository must be signed as described on that page. Your signature certifies that you wrote
+the patch or have the right to pass it on as an open-source patch.
+
+For more detailed information, refer to the [contribution guidelines][contributing] to get started..
+
+## Support
+
+While this module is not supported by VMware Support Services, it is supported by the project maintainers and its community of users.
+
+Use the GitHub [issues][gh-issues] to report bugs or suggest features and enhancements. Issues are monitored by the maintainers and are prioritized based on criticality and community [reactions][gh-reactions].
+
+Before filing an issue, please search the issues and use the reactions feature to add votes to matching issues. Please include as much information as you can. Details like these are incredibly useful in helping the us evaluate and prioritize any changes:
+
+- A reproducible test case or series of steps.
+- Any modifications you've made relevant to the bug.
+- Anything unusual about your environment or deployment.
+
+You can also start a discussion on the GitHub [discussions][gh-discussions] area to ask questions or share ideas..
+
+## License
+
+Copyright 2024 Broadcom. All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
+following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
+disclaimer.
+
+1. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
+disclaimer in the documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES;LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+[//]: Links
+
+[changelog]: CHANGELOG.md
+[contributing]: CONTRIBUTING.md
+[docs-vmware-cloud-foundation]: https://docs.vmware.com/en/VMware-Cloud-Foundation
+[docs-module]: https://vmware.github.io/powershell-module-for-vmware-cloud-foundation-recovery
+[gh-discussions]: https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/discussions
+[gh-issues]: https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/issues
+[gh-reactions]: https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/
+[psgallery-module]: https://www.powershellgallery.com/packages/VMware.CloudFoundation.Recovery
+[vmware-cla-dco]: https://cla.vmware.com/dco
diff --git a/VMware.CloudFoundation.Recovery.psd1 b/VMware.CloudFoundation.Recovery.psd1
new file mode 100644
index 0000000..ab27351
--- /dev/null
+++ b/VMware.CloudFoundation.Recovery.psd1
@@ -0,0 +1,135 @@
+# Copyright 2024 Broadcom. All Rights Reserved.
+# SPDX-License-Identifier: BSD-2
+
+# Module manifest for module 'VMware.CloudFoundation.Recovery'
+# Generated by: Broadcom
+# Generated on: 2024-02-28
+
+@{
+
+ # Script module or binary module file associated with this manifest.
+ RootModule = '.\VMware.CloudFoundation.Recovery.psm1'
+
+ # Version number of this module.
+ ModuleVersion = '0.0.1.1000'
+
+ # Supported PSEditions
+ # CompatiblePSEditions = @()
+
+ # ID used to uniquely identify this module
+ GUID = '65f3eeff-29ff-455c-820e-057f7c51d9ae'
+
+ # Author of this module
+ Author = 'Broadcom'
+
+ # Company or vendor of this module
+ CompanyName = 'Broadcom'
+
+ # Copyright statement for this module
+ Copyright = 'Copyright 2024 Broadcom. All Rights Reserved.'
+
+ # Description of the functionality provided by this module
+ Description = 'PowerShell Module for VMware Cloud Foundation Recovery'
+
+ # Minimum version of the PowerShell engine required by this module
+ PowerShellVersion = '7.2.0'
+
+ # Name of the PowerShell host required by this module
+ # PowerShellHostName = ''
+
+ # Minimum version of the PowerShell host required by this module
+ # PowerShellHostVersion = ''
+
+ # Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
+ # DotNetFrameworkVersion = ''
+
+ # Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
+ # ClrVersion = ''
+
+ # Processor architecture (None, X86, Amd64) required by this module
+ # ProcessorArchitecture = ''
+
+ # Modules that must be imported into the global environment prior to importing this module
+ RequiredModules = @(
+ @{
+ ModuleName = 'PowerVCF';
+ ModuleVersion = '2.4.0'
+ }
+ )
+
+ # Assemblies that must be loaded prior to importing this module
+ # RequiredAssemblies = @()
+
+ # Script files (.ps1) that are run in the caller's environment prior to importing this module.
+ # ScriptsToProcess = @()
+
+ # Type files (.ps1xml) to be loaded when importing this module
+ # TypesToProcess = @()
+
+ # Format files (.ps1xml) to be loaded when importing this module
+ # FormatsToProcess = @()
+
+ # Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
+ # NestedModules = @()
+
+ # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
+ FunctionsToExport = '*'
+
+ # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
+ CmdletsToExport = @()
+
+ # Variables to export from this module
+ VariablesToExport = '*'
+
+ # Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
+ AliasesToExport = @()
+
+ # DSC resources to export from this module
+ # DscResourcesToExport = @()
+
+ # List of all modules packaged with this module
+ # ModuleList = @()
+
+ # List of all files packaged with this module
+ # FileList = @()
+
+ # Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
+ PrivateData = @{
+
+ PSData = @{
+
+ # Tags applied to this module. These help with module discovery in online galleries.
+ Tags = @('VMware', 'CloudFoundation', 'VMwareCloudFoundation')
+
+ # A URL to the license for this module.
+ LicenseUri = 'https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/blob/main/LICENSE'
+
+ # A URL to the main website for this project.
+ ProjectUri = 'https://vmware.github.io/powershell-module-for-vmware-cloud-foundation-recovery'
+
+ # A URL to an icon representing this module.
+ IconUri = 'https://raw.githubusercontent.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/main/.github/icon-85px.svg'
+
+ # ReleaseNotes of this module
+ ReleaseNotes = 'https://vmware.github.io/powershell-module-for-vmware-cloud-foundation-recovery/release-notes/'
+
+ # Prerelease string of this module
+ # Prerelease = ''
+
+ # Flag to indicate whether the module requires explicit user acceptance for install/update/save
+ # RequireLicenseAcceptance = $false
+
+ # External dependent modules of this module
+ # ExternalModuleDependencies = @()
+
+ } # End of PSData hashtable
+
+ } # End of PrivateData hashtable
+
+ # HelpInfo URI of this module
+ # HelpInfoURI = ''
+
+ # Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
+ # DefaultCommandPrefix = ''
+
+}
diff --git a/VMware.CloudFoundation.Recovery.psm1 b/VMware.CloudFoundation.Recovery.psm1
new file mode 100644
index 0000000..85d52dd
--- /dev/null
+++ b/VMware.CloudFoundation.Recovery.psm1
@@ -0,0 +1,28 @@
+# Copyright 2024 Broadcom. All Rights Reserved.
+# SPDX-License-Identifier: BSD-2
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+If ($PSEdition -eq 'Core') {
+ $Script:PSDefaultParameterValues = @{
+ "invoke-restmethod:SkipCertificateCheck" = $true
+ "invoke-webrequest:SkipCertificateCheck" = $true
+ }
+} else {
+ Add-Type @"
+ using System.Net;
+ using System.Security.Cryptography.X509Certificates;
+ public class TrustAllCertsPolicy : ICertificatePolicy {
+ public bool CheckValidationResult(
+ ServicePoint srvPoint, X509Certificate certificate,
+ WebRequest request, int certificateProblem) {
+ return true;
+ }
+ }
+"@
+
+ [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
+}
diff --git a/docs/assets/images/icon-color.svg b/docs/assets/images/icon-color.svg
new file mode 100644
index 0000000..c1e64ed
--- /dev/null
+++ b/docs/assets/images/icon-color.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assets/images/icon-white.svg b/docs/assets/images/icon-white.svg
new file mode 100644
index 0000000..f86a55a
--- /dev/null
+++ b/docs/assets/images/icon-white.svg
@@ -0,0 +1,23 @@
+
+
+
diff --git a/docs/assets/stylesheets/extra.css b/docs/assets/stylesheets/extra.css
new file mode 100644
index 0000000..05a6786
--- /dev/null
+++ b/docs/assets/stylesheets/extra.css
@@ -0,0 +1,6 @@
+.green {
+ color: green;
+}
+.red {
+ color: red;
+}
diff --git a/docs/community/code-of-conduct.md b/docs/community/code-of-conduct.md
new file mode 100644
index 0000000..5d10766
--- /dev/null
+++ b/docs/community/code-of-conduct.md
@@ -0,0 +1 @@
+--8<-- "./CODE_OF_CONDUCT.md"
diff --git a/docs/community/contributing.md b/docs/community/contributing.md
new file mode 100644
index 0000000..3d8e4d5
--- /dev/null
+++ b/docs/community/contributing.md
@@ -0,0 +1 @@
+--8<-- "./CONTRIBUTING.md"
diff --git a/docs/community/index.md b/docs/community/index.md
new file mode 100644
index 0000000..5121a52
--- /dev/null
+++ b/docs/community/index.md
@@ -0,0 +1,11 @@
+# Community
+
+This PowerShell module is the work of many contributors and the project team appreciates your help!
+
+Thank you for your interest in the project. Whether it's a bug report, enhancement, correction, or
+additional documentation, we greatly value feedback and contributions from our community.
+
+Name | Role | GitHub |
+----------------|--------------|-----------------------------------------------------------------|
+Ken Gould | Maintainer | [:fontawesome-brands-github:](https://github.com/feardamhan) |
+Brian O'Connell | Maintainer | [:fontawesome-brands-github:](https://github.com/LifeOfBrianOC) |
diff --git a/docs/community/support.md b/docs/community/support.md
new file mode 100644
index 0000000..0454ff8
--- /dev/null
+++ b/docs/community/support.md
@@ -0,0 +1,20 @@
+# Support
+
+:octicons-heart-24: While this module is not supported by VMware Support Services, it is supported by the project maintainers and its community of users.
+
+:octicons-issue-opened-24: Use the GitHub [issues][issues] to report bugs or suggest enhancements.
+
+:octicons-thumbsup-24: Issues are monitored by the maintainers and are prioritized based on criticality and community [reactions][reactions].
+
+:octicons-search-24: Before opening an issue, please [search the issues][issues-search] and use the reactions to add votes to matching issues. Please include as much information as you can. Details like these are incredibly useful in helping the us evaluate and prioritize any changes:
+
+- A reproducible test case or series of steps.
+- Any modifications you've made relevant to the bug.
+- Anything unusual about your environment or deployment.
+
+:octicons-comment-discussion-24: You can also start a discussion on the GitHub [discussions][discussions] area to ask questions or share ideas.
+
+[discussions]: https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/discussions
+[issues]: https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/issues
+[issues-search]: https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/issues?q=is%3Aissue+is%3Aopen+label%3Abug
+[reactions]: https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/
diff --git a/docs/documentation/functions/Add-HostsToCluster.md b/docs/documentation/functions/Add-HostsToCluster.md
new file mode 100644
index 0000000..4c58d83
--- /dev/null
+++ b/docs/documentation/functions/Add-HostsToCluster.md
@@ -0,0 +1,173 @@
+# Add-HostsToCluster
+
+## Synopsis
+
+Adds ESXi hosts to a vSphere cluster using data from the SDDC Manager backup.
+
+## Syntax
+
+```powershell
+Add-HostsToCluster [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-extractedSDDCDataFile] [-sddcManagerFQDN] [-sddcManagerAdmin] [-sddcManagerAdminPassword] [-ProgressAction ] []
+```
+
+## Description
+
+The `Add-HostsToCluster` cmdlet adds ESXi hosts to a vSphere cluster using data from the SDDC Manager backup.
+
+## Examples
+
+### Example 1
+
+```powershell
+Add-HostsToCluster -vCenterFQDN "sfo-m01-vc02.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01" -extractedSDDCDataFile ".\extracted-sddc-data.json" -sddcManagerFQDN "sfo-vcf01.sfo.rainpole.io" -sddcManagerAdmin "administrator@vsphere.local" -sddcManagerAdminPassword "VMw@re1!"
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance hosting the vSphere cluster to which the ESXi hosts will be added.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance hosting the vSphere cluster to which the ESXi hosts will be added.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance hosting the vSphere cluster to which the ESXi hosts will be added.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance to which the ESXi hosts will be added.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -extractedSDDCDataFile
+
+Relative or absolute to the `extracted-sddc-data.json` file (previously created by `New-ExtractDataFromSDDCBackup`) on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -sddcManagerFQDN
+
+FQDN of SDDC Manager.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -sddcManagerAdmin
+
+SDDC Manager API username with ADMIN role.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -sddcManagerAdminPassword
+
+SDDC Manager API username password.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 8
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Add-VMKernelsToHost.md b/docs/documentation/functions/Add-VMKernelsToHost.md
new file mode 100644
index 0000000..de0e789
--- /dev/null
+++ b/docs/documentation/functions/Add-VMKernelsToHost.md
@@ -0,0 +1,157 @@
+# Add-VMKernelsToHost
+
+## Synopsis
+
+Adds VMkernels to ESXi hosts using data from the SDDC Manager inventory to map the correct IP addresses.
+
+## Syntax
+
+```powershell
+Add-VMKernelsToHost [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-sddcManagerFQDN] [-sddcManagerAdmin] [-sddcManagerAdminPassword] [-ProgressAction ] []
+```
+
+## Description
+
+The `Add-VMKernelsToHost` cmdlet adds VMkernels to ESXi hosts using data from the SDDC Manager inventory to map the correct IP addresses.
+
+## Examples
+
+### Example 1
+
+```powershell
+Add-VMKernelsToHost -vCenterFQDN "sfo-m01-vc01.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01" -sddcManagerFQDN "sfo-vcf01.sfo.rainpole.io" -sddcManagerAdmin "administrator@vsphere.local" -sddcManagerAdminPassword "VMw@re1!"
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance hosting the ESXi hosts to which VMkernels will be added.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance hosting the ESXi hosts to which VMkernels will be added.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance hosting the ESXi hosts to which VMkernels will be added.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance hosting the ESXi hosts to which VMkernels will be added.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -sddcManagerFQDN
+
+FQDN of SDDC Manager.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -sddcManagerAdmin
+
+SDDC Manager API username with ADMIN role.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -sddcManagerAdminPassword
+
+SDDC Manager API username password.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Backup-ClusterDRSGroupsAndRules.md b/docs/documentation/functions/Backup-ClusterDRSGroupsAndRules.md
new file mode 100644
index 0000000..5b18116
--- /dev/null
+++ b/docs/documentation/functions/Backup-ClusterDRSGroupsAndRules.md
@@ -0,0 +1,61 @@
+# Backup-ClusterDRSGroupsAndRules
+
+## Synopsis
+
+Backs up the vSphere DRS Groups and Rules for the specified cluster.
+
+## Syntax
+
+```powershell
+Backup-ClusterDRSGroupsAndRules [-clusterName] [-ProgressAction ] []
+```
+
+## Description
+
+The `Backup-ClusterDRSGroupsAndRules` cmdlet backs up the vSphere DRS Groups and Rules for the specified cluster.
+
+## Examples
+
+### Example 1
+
+```powershell
+Backup-ClusterDRSGroupsAndRules -clusterName "sfo-m01-cl01"
+```
+
+## Parameters
+
+### -clusterName
+
+Cluster whose vSphere DRS Groups and Rules you wish to backup.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Backup-ClusterVMLocations.md b/docs/documentation/functions/Backup-ClusterVMLocations.md
new file mode 100644
index 0000000..35a68c1
--- /dev/null
+++ b/docs/documentation/functions/Backup-ClusterVMLocations.md
@@ -0,0 +1,61 @@
+# Backup-ClusterVMLocations
+
+## Synopsis
+
+Backs up the VM Locations for the specified cluster.
+
+## Syntax
+
+```powershell
+Backup-ClusterVMLocations [-clusterName] [-ProgressAction ] []
+```
+
+## Description
+
+The `Backup-ClusterVMLocations` cmdlet backs up the VM Locations for the specified cluster.
+
+## Examples
+
+### Example 1
+
+```powershell
+Backup-ClusterVMLocations -clusterName "sfo-m01-cl01"
+```
+
+## Parameters
+
+### -clusterName
+
+Cluster whose VM Locations you wish to backup.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Backup-ClusterVMOverrides.md b/docs/documentation/functions/Backup-ClusterVMOverrides.md
new file mode 100644
index 0000000..0f0171a
--- /dev/null
+++ b/docs/documentation/functions/Backup-ClusterVMOverrides.md
@@ -0,0 +1,61 @@
+# Backup-ClusterVMOverrides
+
+## Synopsis
+
+Backs up the VM Overrides for the specified cluster.
+
+## Syntax
+
+```powershell
+Backup-ClusterVMOverrides [-clusterName] [-ProgressAction ] []
+```
+
+## Description
+
+The `Backup-ClusterVMOverrides` cmdlet backs up the VM Overrides for the specified cluster.
+
+## Examples
+
+### Example 1
+
+```powershell
+Backup-ClusterVMOverrides -clusterName "sfo-m01-cl01"
+```
+
+## Parameters
+
+### -clusterName
+
+Cluster whose VM Overrides you wish to backup.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Confirm-VCFInstanceRecoveryPreReqs.md b/docs/documentation/functions/Confirm-VCFInstanceRecoveryPreReqs.md
new file mode 100644
index 0000000..5c79658
--- /dev/null
+++ b/docs/documentation/functions/Confirm-VCFInstanceRecoveryPreReqs.md
@@ -0,0 +1,23 @@
+# Confirm-VCFInstanceRecoveryPreReqs
+
+## Synopsis
+
+Checks for the presence of supporting software and modules for this module.
+
+## Syntax
+
+```powershell
+Confirm-VCFInstanceRecoveryPreReqs
+```
+
+## Description
+
+The `Confirm-VCFInstanceRecoveryPreReqs` cmdlet checks for the presence of supporting software and modules for this module.
+
+## Examples
+
+### Example 1
+
+```powershell
+Confirm-VCFInstanceRecoveryPreReqs
+```
diff --git a/docs/documentation/functions/Invoke-NSXEdgeClusterRecovery.md b/docs/documentation/functions/Invoke-NSXEdgeClusterRecovery.md
new file mode 100644
index 0000000..ae38410
--- /dev/null
+++ b/docs/documentation/functions/Invoke-NSXEdgeClusterRecovery.md
@@ -0,0 +1,179 @@
+# Invoke-NSXEdgeClusterRecovery
+
+## Synopsis
+
+Redeploys the NSX Edges from the provided vSphere cluster.
+
+## Syntax
+
+```powershell
+Invoke-NSXEdgeClusterRecovery [-nsxManagerFqdn] [-nsxManagerAdmin] [-nsxManagerAdminPassword] [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-extractedSDDCDataFile] [-ProgressAction ] []
+```
+
+## Description
+
+The `Invoke-NSXEdgeClusterRecovery` cmdlet redeploys the NSX Edges from the provided vSphere cluster.
+
+## Examples
+
+### Example 1
+
+```powershell
+Invoke-NSXEdgeClusterRecovery -nsxManagerFqdn "sfo-m01-nsx01.sfo.rainpole.io" -nsxManagerAdmin "admin" -nsxManagerAdminPassword "VMw@re1!VMw@re1!" -vCenterFQDN "sfo-m01-vc01.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01"
+```
+
+## Parameters
+
+```powershell
+Invoke-NSXEdgeClusterRecovery -nsxManagerFqdn "sfo-m01-nsx01.sfo.rainpole.io" -nsxManagerAdmin "admin" -nsxManagerAdminPassword "VMw@re1!VMw@re1!" -vCenterFQDN "sfo-m01-vc01.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -resourcePoolName "VCF-edge_sfo-m01-ec01_ResourcePool_7d6d6cb0abdfae659f6d36046ac7ddbc"
+```
+
+## Parameters
+
+### -nsxManagerFqdn
+
+Fully qualified domain name of the NSX Manager whose Edges need to be redeployed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -nsxManagerAdmin
+
+Admin user for the NSX Manager whose Edges need to be redeployed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -nsxManagerAdminPassword
+
+Admin Password of the NSX Manager whose Edges need to be redeployed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance that hosts the vSphere cluster whose Edges need to be redeployed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance that hosts the vSphere cluster whose NSX Edges need to be redeployed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance that hosts the vSphere cluster whose NSX Edges need to be redeployed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance whose Edges need to be redeployed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -extractedSDDCDataFile
+
+Relative or absolute to the `extracted-sddc-data.json` file (previously created by `New-ExtractDataFromSDDCBackup`) on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 8
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Move-ClusterHostNetworkingToVss.md b/docs/documentation/functions/Move-ClusterHostNetworkingToVss.md
new file mode 100644
index 0000000..d913264
--- /dev/null
+++ b/docs/documentation/functions/Move-ClusterHostNetworkingToVss.md
@@ -0,0 +1,205 @@
+# Move-ClusterHostNetworkingToVss
+
+## Synopsis
+
+Moves all ESXi hosts in a cluster from a vSphere Distributed Switch to a vSphere Standard Switch.
+
+## Syntax
+
+```powershell
+Move-ClusterHostNetworkingToVss [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-vdsName] [-mtu] [-vmnic] [-mgmtVlanId] [-vMotionVlanId] [-vSanVlanId] [-ProgressAction ] []
+```
+
+## Description
+
+The `Move-ClusterHostNetworkingToVss` cmdlet moves all ESXi hosts in a cluster from a vSphere Distributed Switch to a vSphere Standard Switch.
+
+## Examples
+
+### Example 1
+
+```powershell
+Move-ClusterHostNetworkingToVss -vCenterFQDN "sfo-m01-vc02.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01" -vdsName "sfo-m01-cl01-vds01" -mtu 9000 -vmnic "vmnic1" -mgmtVlanId 1611 -vMotionVlanId 1612 -vSanVlanId 1613
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance hosting the vSphere cluster which should be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance hosting the vSphere cluster which should be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance hosting the vSphere cluster which should be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance hosting the virtual machines to be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vdsName
+
+Name of the vDS from which the ESXi hosts should be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -mtu
+
+MTU to be assigned to the temporary vSphere Standard Switch.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vmnic
+
+vmnic to be moved from the vSphere Distributed Switch to the vSphere Standard Switch.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -mgmtVlanId
+
+Management network VLAN ID.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 8
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vMotionVlanId
+
+vMotion network VLAN ID.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 9
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vSanVlanId
+
+vSAN network VLAN ID.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 10
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Move-ClusterHostsToRestoredVcenter.md b/docs/documentation/functions/Move-ClusterHostsToRestoredVcenter.md
new file mode 100644
index 0000000..314bf03
--- /dev/null
+++ b/docs/documentation/functions/Move-ClusterHostsToRestoredVcenter.md
@@ -0,0 +1,176 @@
+# Move-ClusterHostsToRestoredVcenter
+
+## Synopsis
+
+Moves ESXi Hosts from a temporary vCenter Server / vSphere cluster to the restored vCenter Server / vSphere cluster.
+
+Used for management domain cluster recovery.
+
+## Syntax
+
+```powershell
+Move-ClusterHostsToRestoredVcenter [-tempvCenterFqdn] [-tempvCenterAdmin] [-tempvCenterAdminPassword] [-clusterName] [-restoredvCenterFQDN] [-restoredvCenterAdmin] [-restoredvCenterAdminPassword] [-extractedSDDCDataFile] [-ProgressAction ] []
+```
+
+## Description
+
+The `Move-ClusterHostsToRestoredVcenter` cmdlet moves ESXi Hosts from a temporary vCenter Server / vSphere cluster to the restored vCenter Server / vSphere cluster.
+Used for management domain cluster recovery.
+
+## Examples
+
+### Example 1
+
+```powershell
+Move-ClusterHostsToRestoredVcenter -tempvCenterFqdn "sfo-m01-vc02.sfo.rainpole.io" -tempvCenterAdmin "administrator@vsphere.local" -tempvCenterAdminPassword "VMw@re1!" -restoredvCenterFQDN "sfo-m01-vc01.sfo.rainpole.io" -restoredvCenterAdmin "administrator@vsphere.local" -restoredvCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01" -extractedSDDCDataFile ".\extracted-sddc-data.json"
+```
+
+## Parameters
+
+### -tempvCenterFqdn
+
+Fully qualified domain name of the temporary vCenter Server instance.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -tempvCenterAdmin
+
+Admin user for the temporary vCenter Server instance.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -tempvCenterAdminPassword
+
+Admin password for the temporary vCenter Server instance.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the restored vSphere cluster instance in the temporary vCenter.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -restoredvCenterFQDN
+
+Fully qualified domain name of the restored vCenter Server instance.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -restoredvCenterAdmin
+
+Admin user for the restored vCenter Server instance.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -restoredvCenterAdminPassword
+
+Admin password for the restored vCenter Server instance.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -extractedSDDCDataFile
+
+Relative or absolute to the `extracted-sddc-data.json` file (previously created by `New-ExtractDataFromSDDCBackup`) on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 8
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Move-ClusterVMsToFirstHost.md b/docs/documentation/functions/Move-ClusterVMsToFirstHost.md
new file mode 100644
index 0000000..86f10a6
--- /dev/null
+++ b/docs/documentation/functions/Move-ClusterVMsToFirstHost.md
@@ -0,0 +1,109 @@
+# Move-ClusterVMsToFirstHost
+
+## Synopsis
+
+Moves all virtual machines in a cluster to a single ESXi host.
+
+## Syntax
+
+```powershell
+Move-ClusterVMsToFirstHost [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-ProgressAction ] []
+```
+
+## Description
+
+The `Move-ClusterVMsToFirstHost` cmdlet moves all virtual machines in a cluster to a single ESXi host.
+
+## Examples
+
+### Example 1
+
+```powershell
+Move-ClusterVMsToFirstHost -vCenterFQDN "sfo-m01-vc02.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01"
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance hosting the virtual machines to be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance hosting the virtual machines to be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance hosting the virtual machines to be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance hosting the virtual machines to be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Move-ClusterVmnicTovSwitch.md b/docs/documentation/functions/Move-ClusterVmnicTovSwitch.md
new file mode 100644
index 0000000..bc06230
--- /dev/null
+++ b/docs/documentation/functions/Move-ClusterVmnicTovSwitch.md
@@ -0,0 +1,157 @@
+# Move-ClusterVmnicTovSwitch
+
+## Synopsis
+
+Moves virtual machines to the temporary vSphere Standard Switch.
+
+## Syntax
+
+```powershell
+Move-ClusterVmnicTovSwitch [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-mtu] [-VLanId] [-vmnic] [-ProgressAction ] []
+```
+
+## Description
+
+The `Move-ClusterVmnicTovSwitch` cmdlet moves virtual machines to the temporary vSphere Standard Switch.
+
+## Examples
+
+### Example 1
+
+```powershell
+Move-ClusterVmnicTovSwitch -vCenterFQDN "sfo-m01-vc02.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01" -mtu 9000 -VLanId 1611 -vmnic "vmnic1"
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance hosting the virtual machines to be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance hosting the virtual machines to be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance hosting the virtual machines to be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance hosting the virtual machines to be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -mtu
+
+MTU to be assigned to the temporary vSphere Standard Switch.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -VLanId
+
+Management network VLAN ID.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vmnic
+
+vmnic to be used for the vSphere Standard Switch.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Move-MgmtVmsToTempPg.md b/docs/documentation/functions/Move-MgmtVmsToTempPg.md
new file mode 100644
index 0000000..98cc531
--- /dev/null
+++ b/docs/documentation/functions/Move-MgmtVmsToTempPg.md
@@ -0,0 +1,109 @@
+# Move-MgmtVmsToTempPg
+
+## Synopsis
+
+Moves all management virtual machines in the provided vSphere cluster to a temporary management port group.
+
+## Syntax
+
+```powershell
+Move-MgmtVmsToTempPg [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-ProgressAction ] []
+```
+
+## Description
+
+The `Move-MgmtVmsToTempPg` cmdlet moves all management virtual machines in the provided vSphere cluster to a temporary management port group.
+
+## Examples
+
+### Example 1
+
+```powershell
+Move-MgmtVmsToTempPg -vCenterFQDN "sfo-m01-vc02.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01"
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance hosting the vSphere cluster / virtual machines which should be removed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance hosting the vSphere cluster / virtual machines which should be removed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance hosting the vSphere cluster / virtual machines which should be removed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance hosting the virtual machines to be moved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/New-ExtractDataFromSDDCBackup.md b/docs/documentation/functions/New-ExtractDataFromSDDCBackup.md
new file mode 100644
index 0000000..59dc7b1
--- /dev/null
+++ b/docs/documentation/functions/New-ExtractDataFromSDDCBackup.md
@@ -0,0 +1,77 @@
+# New-ExtractDataFromSDDCBackup
+
+## Synopsis
+
+Decrypts and extracts the contents of the provided SDDC Manager backup, parses it for information required for instance recovery and stores the data in a file called `extracted-sddc-data.json`.
+
+## Syntax
+
+```powershell
+New-ExtractDataFromSDDCBackup [-backupFilePath] [-encryptionPassword] [-ProgressAction ] []
+```
+
+## Description
+
+The `New-ExtractDataFromSDDCBackup` cmdlet decrypts and extracts the contents of the provided SDDC Manager backup, parses it for information required for instance recovery and stores the data in a file called `extracted-sddc-data.json`.
+
+## Examples
+
+### Example 1
+
+```powershell
+New-ExtractDataFromSDDCBackup -backupFilePath "F:\backup\vcf-backup-sfo-vcf01-sfo-rainpole-io-2023-09-19-10-53-02.tar.gz" -encryptionPassword "VMw@re1!VMw@re1!"
+```
+
+## Parameters
+
+### -backupFilePath
+
+Relative or absolute to the SDDC Manager backup file on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -encryptionPassword
+
+The password that should be used to decrypt the SDDC Manager backup file ie the password that was used to encrypt it originally.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/New-NSXManagerOvaDeployment.md b/docs/documentation/functions/New-NSXManagerOvaDeployment.md
new file mode 100644
index 0000000..b207e96
--- /dev/null
+++ b/docs/documentation/functions/New-NSXManagerOvaDeployment.md
@@ -0,0 +1,157 @@
+# New-NSXManagerOvaDeployment
+
+## Synopsis
+
+Presents a list of NSX ManAgers associated with the provided VCF Workload Domain, and deploys an NSX Manager from OVA using data previously extracted from the SDDC Manager backup.
+
+## Syntax
+
+```powershell
+New-NSXManagerOvaDeployment [-tempvCenterFqdn] [-tempvCenterAdmin] [-tempvCenterAdminPassword] [-extractedSDDCDataFile] [-workloadDomain] [-restoredNsxManagerDeploymentSize] [-nsxManagerOvaFile] [-ProgressAction ] []
+```
+
+## Description
+
+The `New-NSXManagerOvaDeployment` resents a list of NSX ManAgers associated with the provided VCF Workload Domain, and deploys an NSX Manager from OVA using data previously extracted from the SDDC Manager backup.
+
+## Examples
+
+### Example 1
+
+```powershell
+New-NSXManagerOvaDeployment -tempvCenterFqdn "sfo-m01-vc02.sfo.rainpole.io" -tempvCenterAdmin "administrator@vsphere.local" -tempvCenterAdminPassword "VMw@re1!" -extractedSDDCDataFile ".\extracted-sddc-data.json" -workloadDomain "sfo-m01" -restoredNsxManagerDeploymentSize medium -nsxManagerOvaFile "F:\OVA\nsx-unified-appliance-3.2.2.1.0.21487565.ova"
+```
+
+## Parameters
+
+### -tempvCenterFqdn
+
+Fully qualified domain name of the target vCenter Server instance to deploy the NSX Manager OVA to.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -tempvCenterAdmin
+
+Admin user for the target vCenter Server instance to deploy the NSX Manager OVA to.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -tempvCenterAdminPassword
+
+Admin password for the target vCenter Server instance to deploy the NSX Manager OVA to.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -extractedSDDCDataFile
+
+Relative or absolute to the `extracted-sddc-data.json` file (previously created by `New-ExtractDataFromSDDCBackup`) on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -workloadDomain
+
+Name of the workload domain that the NSX Manager to deployed to is associated with.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -restoredNsxManagerDeploymentSize
+
+Size of the NSX Manager appliance to deploy.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -nsxManagerOvaFile
+
+Relative or absolute to the NSX Manager OVA on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/New-ReconstructedPartialBringupJsonSpec.md b/docs/documentation/functions/New-ReconstructedPartialBringupJsonSpec.md
new file mode 100644
index 0000000..5dfdff8
--- /dev/null
+++ b/docs/documentation/functions/New-ReconstructedPartialBringupJsonSpec.md
@@ -0,0 +1,222 @@
+# New-ReconstructedPartialBringupJsonSpec
+
+## Synopsis
+
+Reconstructs a management domain bringup JSON spec based on information scraped from the backup being restored from.
+
+## Syntax
+
+```powershell
+New-ReconstructedPartialBringupJsonSpec [-tempVcenterIp] [-tempVcenterHostname] [-extractedSDDCDataFile] [-vcfLocalUserPassword] [-vcfRootUserPassword] [-vcfRestApiPassword] [-vcfSecondUserPassword] [-transportVlanId] [-dedupEnabled] [-vds0nics] [-vcenterServerSize] [-ProgressAction ] []
+```
+
+## Description
+
+The `New-ReconstructedPartialBringupJsonSpec` cmdlet reconstructs a management domain bringup JSON spec based on information scraped from the backup being restored from.
+
+## Examples
+
+### Example 1
+
+```powershell
+New-ReconstructedPartialBringupJsonSpec -extractedSDDCDataFile ".\extracted-sddc-data.json" -tempVcenterIp "172.16.11.170" -tempVcenterHostname "sfo-m01-vc02" -vcfLocalUserPassword "VMw@re1!VMw@re1!" -vcfRootUserPassword "VMw@re1!" -vcfRestApiPassword "VMw@re1!" -vcfSecondUserPassword "VMw@re1!" -transportVlanId 1614 -dedupEnabled $false -vds0nics "vmnic0","vmnic1" -vcenterServerSize "small"
+```
+
+## Parameters
+
+### -tempVcenterIp
+
+As a temporary vCenter will be used, a temporary IP Address must be provided for use.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -tempVcenterHostname
+
+As a temporary vCenter will be used, a temporary hostname must be provided for use.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -extractedSDDCDataFile
+
+Relative or absolute to the `extracted-sddc-data.json` file (previously created by `New-ExtractDataFromSDDCBackup`) on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vcfLocalUserPassword
+
+Password to be assigned to the local user account.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vcfRootUserPassword
+
+Password to be assigned to the root user account.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vcfRestApiPassword
+
+Password to be assigned to the API user account.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vcfSecondUserPassword
+
+Password to be assigned to the vcf user account.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -transportVlanId
+
+VLAN ID to be used for the transport VLAN.
+Should be the same as that used in the original build.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 8
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -dedupEnabled
+
+Boolean value to specify with depude should be enabled or not.
+
+```yaml
+Type: Boolean
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 9
+Default value: False
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vds0nics
+
+Comma separated list of vmnics to assign to the first vds in the format "vmnic0","vmnic1".
+
+```yaml
+Type: Array
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 10
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vcenterServerSize
+
+Size of the vCenter Server appliance to be deployed for the temporary vCenter.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 11
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/New-SDDCManagerOvaDeployment.md b/docs/documentation/functions/New-SDDCManagerOvaDeployment.md
new file mode 100644
index 0000000..9f13887
--- /dev/null
+++ b/docs/documentation/functions/New-SDDCManagerOvaDeployment.md
@@ -0,0 +1,189 @@
+# New-SDDCManagerOvaDeployment
+
+## Synopsis
+
+Deploys an SDDC Manager appliance from OVA using data previously extracted from the SDDC Manager backup.
+
+## Syntax
+
+```powershell
+New-SDDCManagerOvaDeployment [-tempvCenterFqdn] [-tempvCenterAdmin] [-tempvCenterAdminPassword] [-extractedSDDCDataFile] [-sddcManagerOvaFile] [-rootUserPassword] [-vcfUserPassword] [-localUserPassword] [-basicAuthUserPassword] [-ProgressAction ] []
+```
+
+## Description
+
+The `New-SDDCManagerOvaDeployment` deploys an SDDC Manager appliance from OVA using data previously extracted from the SDDC Manager backup.
+
+## Examples
+
+### Example 1
+
+```powershell
+New-SDDCManagerOvaDeployment -tempvCenterFqdn "sfo-m01-vc02.sfo.rainpole.io" -tempvCenterAdmin "administrator@vsphere.local" -tempvCenterAdminPassword "VMw@re1!" -extractedSDDCDataFile ".\extracted-sddc-data.json" -sddcManagerOvaFile "F:\OVA\VCF-SDDC-Manager-Appliance-4.5.1.0-21682411.ova" -rootUserPassword "VMw@re1!" -vcfUserPassword "VMw@re1!" -localUserPassword "VMw@re1!" -basicAuthUserPassword "VMw@re1!"
+```
+
+## Parameters
+
+### -tempvCenterFqdn
+
+Fully qualified domain name of the target vCenter Server instance to deploy the SDDC Manager OVA to.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -tempvCenterAdmin
+
+Admin user for the target vCenter Server instance to deploy the SDDC Manager OVA to.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -tempvCenterAdminPassword
+
+Admin password for the target vCenter Server instance to deploy the SDDC Manager OVA to.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -extractedSDDCDataFile
+
+Relative or absolute to the `extracted-sddc-data.json` file (previously created by `New-ExtractDataFromSDDCBackup`) on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -sddcManagerOvaFile
+
+Relative or absolute to the SDDC Manager OVA on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -rootUserPassword
+
+Password for the root user on the newly deployed appliance.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vcfUserPassword
+
+Password for the vcf user on the newly deployed appliance.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -localUserPassword
+
+Password for the local admin user on the newly deployed appliance.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 8
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -basicAuthUserPassword
+
+Password for the basic auth user on the newly deployed appliance.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 9
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/New-UploadAndModifySDDCManagerBackup.md b/docs/documentation/functions/New-UploadAndModifySDDCManagerBackup.md
new file mode 100644
index 0000000..5be129b
--- /dev/null
+++ b/docs/documentation/functions/New-UploadAndModifySDDCManagerBackup.md
@@ -0,0 +1,173 @@
+# New-UploadAndModifySDDCManagerBackup
+
+## Synopsis
+
+Uploads the provided SDDC Manager backup file to SDDC Manager, decrypts and extracts it, replaces the SSH keys for the management domain vCenter with the current keys, then compresses and re-encrypts the files ready for subsequent restore.
+
+## Syntax
+
+```powershell
+New-UploadAndModifySDDCManagerBackup [-rootUserPassword] [-vcfUserPassword] [-backupFilePath] [-encryptionPassword] [-extractedSDDCDataFile] [-tempvCenterFqdn] [-tempvCenterAdmin] [-tempvCenterAdminPassword] [-ProgressAction ] []
+```
+
+## Description
+
+The `New-UploadAndModifySDDCManagerBackup` cmdlet uploads the provided SDDC Manager backup file to SDDC Manager, decrypts and extracts it, replaces the SSH keys for the management domain vCenter with the current keys, then compresses and re-encrypts the files ready for subsequent restore.
+
+## Examples
+
+### Example 1
+
+```powershell
+New-UploadAndModifySDDCManagerBackup -rootUserPassword "VMw@re1!" -vcfUserPassword "VMw@re1!" -backupFilePath "F:\backup\vcf-backup-sfo-vcf01-sfo-rainpole-io-2023-09-19-10-53-02.tar.gz" -encryptionPassword "VMw@re1!VMw@re1!" -extractedSDDCDataFile ".\extracted-sddc-data.json" -tempvCenterFqdn "sfo-m01-vc02.sfo.rainpole.io" -tempvCenterAdmin "Administrator@vsphere.local" -tempvCenterAdminPassword VMw@re1!"
+```
+
+## Parameters
+
+### -rootUserPassword
+
+Password for the root user of the SDDC Manager appliance.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vcfUserPassword
+
+Password for the vcf user of the SDDC Manager appliance.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -backupFilePath
+
+Relative or absolute to the SDDC Manager backup file on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -encryptionPassword
+
+The password that should be used to decrypt the SDDC Manager backup file ie the password that was used to encrypt it originally.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -extractedSDDCDataFile
+
+Relative or absolute to the `extracted-sddc-data.json` file (previously created by `New-ExtractDataFromSDDCBackup`) on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -tempvCenterFqdn
+
+Fully qualified domain name of the target vCenter that hosts the SDDC Manager VM.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -tempvCenterAdmin
+
+Admin user for the target vCenter that hosts the SDDC Manager VM.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -tempvCenterAdminPassword
+
+Admin password for the target vCenter that hosts the SDDC Manager VM.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 8
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/New-vCenterOvaDeployment.md b/docs/documentation/functions/New-vCenterOvaDeployment.md
new file mode 100644
index 0000000..61aeed9
--- /dev/null
+++ b/docs/documentation/functions/New-vCenterOvaDeployment.md
@@ -0,0 +1,157 @@
+# New-vCenterOvaDeployment
+
+## Synopsis
+
+Deploys a vCenter Server appliance from OVA using data previously extracted from the SDDC Manager backup.
+
+## Syntax
+
+```powershell
+New-vCenterOvaDeployment [-tempvCenterFqdn] [-tempvCenterAdmin] [-tempvCenterAdminPassword] [-extractedSDDCDataFile] [-workloadDomain] [-restoredvCenterDeploymentSize] [-vCenterOvaFile] [-ProgressAction ] []
+```
+
+## Description
+
+The `New-vCenterOvaDeployment` deploys a vCenter Server appliance from OVA using data previously extracted from the SDDC Manager backup.
+
+## Examples
+
+### Example 1
+
+```powershell
+New-vCenterOvaDeployment -tempvCenterFqdn "sfo-m01-vc02.sfo.rainpole.io" -tempvCenterAdmin "administrator@vsphere.local" -tempvCenterAdminPassword "VMw@re1!" -extractedSDDCDataFile ".\extracted-sddc-data.json" -workloadDomain "sfo-m01" -restoredvCenterDeploymentSize "small" -vCenterOvaFile "F:\OVA\VMware-vCenter-Server-Appliance-7.0.3.01400-21477706_OVF10.ova"
+```
+
+## Parameters
+
+### -tempvCenterFqdn
+
+Fully qualified domain name of the target vCenter Server instance to deploy the vCenter Server OVA to.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -tempvCenterAdmin
+
+Admin user for the target vCenter Server instance to deploy the vCenter Server OVA to.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -tempvCenterAdminPassword
+
+Admin password for the target vCenter Server instance to deploy the vCenter Server OVA to.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -extractedSDDCDataFile
+
+Relative or absolute to the `extracted-sddc-data.json` file (previously created by `New-ExtractDataFromSDDCBackup`) on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -workloadDomain
+
+Name of the workload domain that the vCenter Server instance to deployed to is associated with.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -restoredvCenterDeploymentSize
+
+Size of the vCenter Server appliance to deploy.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterOvaFile
+
+Relative or absolute to the vCenter Server OVA on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Remove-ClusterHostsFromVds.md b/docs/documentation/functions/Remove-ClusterHostsFromVds.md
new file mode 100644
index 0000000..f4e984c
--- /dev/null
+++ b/docs/documentation/functions/Remove-ClusterHostsFromVds.md
@@ -0,0 +1,125 @@
+# Remove-ClusterHostsFromVds
+
+## Synopsis
+
+Removes all ESXi hosts in the provided vSphere cluster from the provided vSphere Distributed Switch.
+
+## Syntax
+
+```powershell
+Remove-ClusterHostsFromVds [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-vdsName] [-ProgressAction ] []
+```
+
+## Description
+
+The `Remove-ClusterHostsFromVds` cmdlet removes all ESXi hosts in the provided vSphere cluster from the provided vSphere Distributed Switch.
+
+## Examples
+
+### Example 1
+
+```powershell
+Remove-ClusterHostsFromVds -vCenterFQDN "sfo-m01-vc02.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01" -vdsName "sfo-m01-cl01-vds01"
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance hosting the vSphere cluster / vSphere Distributed Switch from which ESXi hosts should be removed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance hosting the vSphere cluster / vSphere Distributed Switch from which ESXi hosts should be removed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance hosting the vSphere cluster / vSphere Distributed Switch from which ESXi hosts should be removed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance from which ESXi hosts should be removed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vdsName
+
+Name of the vSphere Distributed Switch to remove cluster hosts from.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Remove-NonResponsiveHosts.md b/docs/documentation/functions/Remove-NonResponsiveHosts.md
new file mode 100644
index 0000000..4f878e8
--- /dev/null
+++ b/docs/documentation/functions/Remove-NonResponsiveHosts.md
@@ -0,0 +1,109 @@
+# Remove-NonResponsiveHosts
+
+## Synopsis
+
+Removes non-responsive hosts from a cluster.
+
+## Syntax
+
+```powershell
+Remove-NonResponsiveHosts [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-ProgressAction ] []
+```
+
+## Description
+
+The `Remove-NonResponsiveHosts` cmdlet removes non-responsive hosts from a cluster.
+
+## Examples
+
+### Example 1
+
+```powershell
+Remove-NonResponsiveHosts -vCenterFQDN "sfo-m01-vc01.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01"
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance hosting the vSphere cluster from which to remove non-responsive hosts.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance hosting the vSphere cluster from which to remove non-responsive hosts.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance hosting the vSphere cluster from which to remove non-responsive hosts.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance from which to remove non-responsive hosts.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Remove-StandardSwitch.md b/docs/documentation/functions/Remove-StandardSwitch.md
new file mode 100644
index 0000000..1ab33b3
--- /dev/null
+++ b/docs/documentation/functions/Remove-StandardSwitch.md
@@ -0,0 +1,109 @@
+# Remove-StandardSwitch
+
+## Synopsis
+
+Removes a temporary vSphere Standard Switch from all ESXi hosts in a cluster.
+
+## Syntax
+
+```powershell
+Remove-StandardSwitch [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-ProgressAction ] []
+```
+
+## Description
+
+The `Remove-StandardSwitc`h cmdlet removes a temporary vSphere Standard Switch from all ESXi hosts in a cluster.
+
+## Examples
+
+### Example 1
+
+```powershell
+Remove-StandardSwitch -vCenterFQDN "sfo-m01-vc01.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01"
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance hosting the ESXi hosts from which the vSphere Standard Switch will be removed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance hosting the ESXi hosts from which the vSphere Standard Switch will be removed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance hosting the ESXi hosts from which the vSphere Standard Switch will be removed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance hosting the ESXi hosts from which the vSphere Standard Switch will be removed.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Resolve-PhysicalHostServiceAccounts.md b/docs/documentation/functions/Resolve-PhysicalHostServiceAccounts.md
new file mode 100644
index 0000000..c46d80e
--- /dev/null
+++ b/docs/documentation/functions/Resolve-PhysicalHostServiceAccounts.md
@@ -0,0 +1,173 @@
+# Resolve-PhysicalHostServiceAccounts
+
+## Synopsis
+
+Creates a new VCF Service Account on each ESXi host and remediates the SDDC Manager inventory.
+
+## Syntax
+
+```powershell
+Resolve-PhysicalHostServiceAccounts [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-svcAccountPassword] [-sddcManagerFQDN] [-sddcManagerAdmin] [-sddcManagerAdminPassword] [-ProgressAction ] []
+```
+
+## Description
+
+The `Resolve-PhysicalHostServiceAccounts` cmdlet creates a new VCF Service Account on each ESXi host and remediates the SDDC Manager inventory.
+
+## Examples
+
+### Example 1
+
+```powershell
+Resolve-PhysicalHostServiceAccounts -vCenterFQDN "sfo-w01-vc01.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-w01-cl01" -svcAccountPassword "VMw@re123!" -sddcManagerFQDN "sfo-vcf01.sfo.rainpole.io" -sddcManagerAdmin "administrator@vsphere.local" -sddcManagerAdminPassword "VMw@re1!"
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance hosting the ESXi hosts to be updated.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance hosting the ESXi hosts to be updated.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance hosting the ESXi hosts to be updated.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance hosting the ESXi hosts to be updated.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -svcAccountPassword
+
+Service account password to be used.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -sddcManagerFQDN
+
+FQDN of SDDC Manager.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -sddcManagerAdmin
+
+SDDC Manager API username with ADMIN role.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -sddcManagerAdminPassword
+
+SDDC Manager API username password.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 8
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Resolve-PhysicalHostTransportNodes.md b/docs/documentation/functions/Resolve-PhysicalHostTransportNodes.md
new file mode 100644
index 0000000..12ab102
--- /dev/null
+++ b/docs/documentation/functions/Resolve-PhysicalHostTransportNodes.md
@@ -0,0 +1,157 @@
+# Resolve-PhysicalHostTransportNodes
+
+## Synopsis
+
+Resolves the state of ESXi Transport Nodes in a restored NSX Manager when the ESXi hosts have been rebuilt.
+
+## Syntax
+
+```powershell
+Resolve-PhysicalHostTransportNodes [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-nsxManagerFqdn] [-nsxManagerAdmin] [-nsxManagerAdminPassword] [-ProgressAction ] []
+```
+
+## Description
+
+The `Resolve-PhysicalHostTransportNodes` cmdlet resolves the state of ESXi Transport Nodes in a restored NSX Manager when the ESXi hosts have been rebuilt.
+
+## Examples
+
+### Example 1
+
+```powershell
+Resolve-PhysicalHostTransportNodes -vCenterFQDN "sfo-m01-vc01.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01" -NsxManagerFQDN "sfo-m01-nsx01a.sfo.rainpole.io" -NsxManagerAdmin "admin" -NsxManagerAdminPassword "VMw@re1!VMw@re1!"
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance that hosts the vSphere cluster whose ESXi hosts need to be resolved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance that hosts the vSphere cluster whose ESXi hosts need to be resolved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance that hosts the vSphere cluster whose ESXi hosts need to be resolved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance whose ESXi hosts need to be resolved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -nsxManagerFqdn
+
+Fully qualified domain name of the NSX Manager where hosts need to be resolved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -nsxManagerAdmin
+
+Admin user for the NSX Manager where hosts need to be resolved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -nsxManagerAdminPassword
+
+Admin Password of the NSX Manager where hosts need to be resolved.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 7
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Restore-ClusterDRSGroupsAndRules.md b/docs/documentation/functions/Restore-ClusterDRSGroupsAndRules.md
new file mode 100644
index 0000000..8cb94da
--- /dev/null
+++ b/docs/documentation/functions/Restore-ClusterDRSGroupsAndRules.md
@@ -0,0 +1,77 @@
+# Restore-ClusterDRSGroupsAndRules
+
+## Synopsis
+
+Restores the vSphere DRS Groups and Rules for the specified cluster.
+
+## Syntax
+
+```powershell
+Restore-ClusterDRSGroupsAndRules [-clusterName] [-jsonFile] [-ProgressAction ] []
+```
+
+## Description
+
+The `Restore-ClusterDRSGroupsAndRules` cmdlet restores the vSphere DRS Groups and Rules for the specified cluster.
+
+## Examples
+
+### Example 1
+
+```powershell
+Restore-ClusterDRSGroupsAndRules -clusterName "sfo-m01-cl01" -jsonFile ".\sfo-m01-cl01-drsConfiguration.json"
+```
+
+## Parameters
+
+### -clusterName
+
+Cluster whose vSphere DRS Groups and Rules you will restore.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -jsonFile
+
+Path to the JSON file that contains the backup for the vSphere DRS Groups and Rules for the cluster.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Restore-ClusterVMLocations.md b/docs/documentation/functions/Restore-ClusterVMLocations.md
new file mode 100644
index 0000000..6eaa6bb
--- /dev/null
+++ b/docs/documentation/functions/Restore-ClusterVMLocations.md
@@ -0,0 +1,77 @@
+# Restore-ClusterVMLocations
+
+## Synopsis
+
+Restores the VM Locations for the specified cluster.
+
+## Syntax
+
+```powershell
+Restore-ClusterVMLocations [-clusterName] [-jsonFile] [-ProgressAction ] []
+```
+
+## Description
+
+The `Restore-ClusterVMLocations` cmdlet restores the VM Locations for the specified cluster.
+
+## Examples
+
+### Example 1
+
+```powershell
+Restore-ClusterVMLocations -clusterName "sfo-m01-cl01" -jsonFile ".\sfo-m01-cl01-vmLocations.json"
+```
+
+## Parameters
+
+### -clusterName
+
+Cluster whose VM Locations you will restore.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -jsonFile
+
+Path to the JSON file that contains the backup for the VM Locations for the cluster.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Restore-ClusterVMOverrides.md b/docs/documentation/functions/Restore-ClusterVMOverrides.md
new file mode 100644
index 0000000..d568b9b
--- /dev/null
+++ b/docs/documentation/functions/Restore-ClusterVMOverrides.md
@@ -0,0 +1,77 @@
+# Restore-ClusterVMOverrides
+
+## Synopsis
+
+Restores the VM Overrides for the specified cluster.
+
+## Syntax
+
+```powershell
+Restore-ClusterVMOverrides [-clusterName] [-jsonFile] [-ProgressAction ] []
+```
+
+## Description
+
+The `Restore-ClusterVMOverrides` cmdlet restores the VM Overrides for the specified cluster.
+
+## Examples
+
+### Example 1
+
+```powershell
+Restore-ClusterVMOverrides -clusterName "sfo-m01-cl01" -jsonFile ".\sfo-m01-cl01-vmOverrides.json"
+```
+
+## Parameters
+
+### -clusterName
+
+Cluster whose VM Overrides you will restore.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -jsonFile
+
+Path to the JSON file that contains the backup for the VM Overrides for the cluster.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Set-ClusterDRSLevel.md b/docs/documentation/functions/Set-ClusterDRSLevel.md
new file mode 100644
index 0000000..ed54c95
--- /dev/null
+++ b/docs/documentation/functions/Set-ClusterDRSLevel.md
@@ -0,0 +1,127 @@
+# Set-ClusterDRSLevel
+
+## Synopsis
+
+Modifies the vSphere DRS level of a vSphere cluster.
+
+## Syntax
+
+```powershell
+Set-ClusterDRSLevel [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-DrsAutomationLevel] [-ProgressAction ] []
+```
+
+## Description
+
+The `Set-ClusterDRSLevel` cmdlet modifies the vSphere DRS level of a vSphere cluster.
+
+## Examples
+
+### Example 1
+
+```powershell
+Set-ClusterDRSLevel -vCenterFQDN "sfo-m01-vc01.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01" -DrsAutomationLevel "Manual"
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance hosting the vSphere cluster to be updated.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance hosting the vSphere cluster to be updated.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance hosting the vSphere cluster to be updated.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance to be updated.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -DrsAutomationLevel
+
+vSphere DRS Automation Level to be set.
+
+One of: FullyAutomated or Manual.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/documentation/functions/Set-ClusterHostsvSanIgnoreClusterMemberList.md b/docs/documentation/functions/Set-ClusterHostsvSanIgnoreClusterMemberList.md
new file mode 100644
index 0000000..3dba9a2
--- /dev/null
+++ b/docs/documentation/functions/Set-ClusterHostsvSanIgnoreClusterMemberList.md
@@ -0,0 +1,141 @@
+# Set-ClusterHostsvSanIgnoreClusterMemberList
+
+## Synopsis
+
+Toggles the vSAN Ignore Cluster Member List Updates setting on a vSAN cluster ESXi host.
+
+## Syntax
+
+```powershell
+Set-ClusterHostsvSanIgnoreClusterMemberList [-vCenterFQDN] [-vCenterAdmin] [-vCenterAdminPassword] [-clusterName] [-extractedSDDCDataFile] [-setting] [-ProgressAction ] []
+```
+
+## Description
+
+The `Set-ClusterHostsvSanIgnoreClusterMemberList` cmdlet toggles the vSAN Ignore Cluster Member List Updates setting on a vSAN cluster ESXi host.
+
+## Examples
+
+### Example 1
+
+```powershell
+Set-ClusterHostsvSanIgnoreClusterMemberList -vCenterFQDN "sfo-m01-vc02.sfo.rainpole.io" -vCenterAdmin "administrator@vsphere.local" -vCenterAdminPassword "VMw@re1!" -clusterName "sfo-m01-cl01" -extractedSDDCDataFile ".\extracted-sddc-data.json" -setting "enable"
+```
+
+## Parameters
+
+### -vCenterFQDN
+
+Fully qualified domain name of the vCenter Server instance hosting the ESXi hosts to be updated.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 1
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdmin
+
+Admin user for the vCenter Server instance hosting the ESXi hosts to be updated.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 2
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -vCenterAdminPassword
+
+Admin password for the vCenter Server instance hosting the ESXi hosts to be updated.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 3
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -clusterName
+
+Name of the vSphere cluster instance hosting the ESXi hosts to be updated.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 4
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -extractedSDDCDataFile
+
+Relative or absolute to the `extracted-sddc-data.json` file (previously created by `New-ExtractDataFromSDDCBackup`) on the local filesystem.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 5
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -setting
+
+The setting to apply to the ESXi hosts - either enable or disable.
+
+```yaml
+Type: String
+Parameter Sets: (All)
+Aliases:
+
+Required: True
+Position: 6
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### -ProgressAction
+
+Progress Action.
+
+```yaml
+Type: ActionPreference
+Parameter Sets: (All)
+Aliases: proga
+
+Required: False
+Position: Named
+Default value: None
+Accept pipeline input: False
+Accept wildcard characters: False
+```
+
+### Common Parameters
+
+This cmdlet supports the common parameters: `-Debug`, `-ErrorAction`, `-ErrorVariable`, `-InformationAction`, `-InformationVariable`, `-OutVariable`, `-OutBuffer`, `-PipelineVariable`, `-Verbose`, `-WarningAction`, and `-WarningVariable`. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216).
diff --git a/docs/favicon.ico b/docs/favicon.ico
new file mode 100644
index 0000000..4be711f
Binary files /dev/null and b/docs/favicon.ico differ
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..dbd35fa
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,63 @@
+
+
+
+
+# PowerShell Module for VMware Cloud Foundation Recovery
+
+`VMware.CloudFoundation.Recovery` is a PowerShell module that has been written to support the ability to automate and accelerate the recovery of a [VMware Cloud Foundation][docs-vmware-cloud-foundation] instance through the use of
+PowerShell cmdlets.
+
+[:material-powershell: PowerShell Gallery][psgallery-module-recovery]{ .md-button .md-button--primary }.
+
+## Requirements.
+
+### Platforms
+
+The following table lists the supported platforms for this module.
+
+Platform | Support
+-------------------------------------------------------------|------------------------------------
+:fontawesome-solid-cloud: VMware Cloud Foundation 5.1 | :fontawesome-solid-check:{ .green }
+:fontawesome-solid-cloud: VMware Cloud Foundation 5.0 | :fontawesome-solid-check:{ .green }
+:fontawesome-solid-cloud: VMware Cloud Foundation 4.5 | :fontawesome-solid-check:{ .green }
+
+### Operating Systems
+
+The following table lists the supported operating systems for this module.
+
+Operating System | Version
+---------------------------------------------------------------------|-----------
+:fontawesome-brands-windows: Microsoft Windows Server | 2019, 2022
+
+### PowerShell
+
+The following table lists the supported editions and versions of PowerShell for this module.
+
+Edition | Version
+---------------------------------------------------------------------|----------
+:material-powershell: [PowerShell Core][microsoft-powershell] | >= 7.2.0
+
+### Module Dependencies
+
+The following table lists the required dependencies for this module.
+
+Dependency | Version | Publisher | Reference
+-----------------------------------------------------|-----------|---------------------------|---------------------------------------------------------------------------
+[VMware.PowerCLI][psgallery-module-powercli] | >= 13.1.0 | Broadcom | :fontawesome-solid-book: [Documentation][developer-module-powercli]
+[PowerVCF][psgallery-module-powervcf] | >= 2.4.0 | Broadcom | :fontawesome-solid-book: [Documentation][docs-module-powervcf]
+[Posh-SSH][psgallery-module-poshssh] | >= 3.0.8 | Carlos Perez | :fontawesome-brands-github: [GitHUb][github-module-poshssh]
+[7Zip4Powershell][psgallery-module-7zip4powershell] | >= 2.4.0 | Thomas Freudenberg | :fontawesome-brands-github: [GitHub][github-module-7zip4powershell]
+[OpenSSL for Windows][download-win64openssl] | >= 3.2.1 | Shining Light Productions | :octicons-package-dependencies-24: [Download][download-win64openssl]
+
+[docs-vmware-cloud-foundation]: https://docs.vmware.com/en/VMware-Cloud-Foundation/index.html
+[microsoft-powershell]: https://docs.microsoft.com/en-us/powershell
+[psgallery-module-7zip4powershell]: https://www.powershellgallery.com/packages/7Zip4Powershell
+[psgallery-module-poshssh]: https://www.powershellgallery.com/packages/Posh-SSH
+[psgallery-module-powercli]: https://www.powershellgallery.com/packages/VMware.PowerCLI
+[psgallery-module-powervcf]: https://www.powershellgallery.com/packages/PowerVCF
+[psgallery-module-recovery]: https://www.powershellgallery.com/packages/VMware.CloudFoundation.Recovery
+[developer-module-powercli]: https://developer.vmware.com/tool/vmware-powercli
+[docs-module-powervcf]: https://vmware.github.io/powershell-module-for-vmware-cloud-foundation
+[github-module-7zip4powershell]: https://github.com/thoemmi/7Zip4Powershell
+[github-module-poshssh]: https://github.com/darkoperator/Posh-SSH
+[download-win64openssl]: https://slproweb.com/products/Win32OpenSSL.html
diff --git a/docs/install.md b/docs/install.md
new file mode 100644
index 0000000..0fa832e
--- /dev/null
+++ b/docs/install.md
@@ -0,0 +1,63 @@
+# Installing the Module
+
+Verify that your system has a [supported edition and version](index.md#powershell) of PowerShell installed.
+
+=== ":material-pipe: Connected Environment"
+
+ For environments connected to the Internet, you can install the [module dependencies](index.md#module-dependencies) from the PowerShell Gallery by running the following commands in the PowerShell console:
+
+ ```powershell
+ --8<-- "./docs/snippets/install-module.ps1"
+ ```
+
+ Import the modules before proceeding:
+
+ For example:
+
+ ```powershell
+ --8<-- "./docs/snippets/import-module.ps1"
+ ```
+
+=== ":material-pipe-disconnected: Disconnected Environment"
+
+ For environments disconnected from the Internet _(e.g., dark-site, air-gapped)_, you can save the [module dependencies](index.md#module-dependencies) from the PowerShell Gallery by running the following commands in the PowerShell console:
+
+ === ":fontawesome-brands-windows: Windows"
+
+ From a system with an Internet connection, save the module dependencies from the PowerShell Gallery by running the following commands in the PowerShell console:
+
+ ```powershell
+ --8<-- "./docs/snippets/save-module-local-windows.ps1"
+ ```
+
+ From the system with the Internet connection, copy the module dependencies to a target system by running the following commands in the PowerShell console:
+
+ ```powershell
+ --8<-- "./docs/snippets/copy-module-local-windows.ps1"
+ ```
+
+ On the target system, import the module dependencies by running the following commands in the PowerShell console:
+
+ ```powershell
+ --8<-- "./docs/snippets/import-module.ps1"
+ ```
+
+Once installed, any cmdlets associated with `VMware.CloudFoundation.CertificateManagement` and the its dependencies will be available for use.
+
+To view the cmdlets for available in the module, run the following command in the PowerShell console.
+
+```powershell
+Get-Command -Module VMware.CloudFoundation.CertificateManagement
+```
+
+To view the help for any cmdlet, run the `Get-Help` command in the PowerShell console.
+
+For example:
+
+```powershell
+Get-Help -Name
+```
+
+```powershell
+Get-Help -Name -Examples
+```
diff --git a/docs/license.md b/docs/license.md
new file mode 100644
index 0000000..160fd8e
--- /dev/null
+++ b/docs/license.md
@@ -0,0 +1 @@
+--8<-- "./LICENSE"
diff --git a/docs/release-notes.md b/docs/release-notes.md
new file mode 100644
index 0000000..52d30d2
--- /dev/null
+++ b/docs/release-notes.md
@@ -0,0 +1 @@
+--8<-- "./CHANGELOG.md"
diff --git a/docs/requirements.txt b/docs/requirements.txt
new file mode 100644
index 0000000..a3fb468
--- /dev/null
+++ b/docs/requirements.txt
@@ -0,0 +1,4 @@
+mkdocs-git-revision-date-localized-plugin>=1.2.2
+mkdocs-markdownextradata-plugin>=0.2.5
+mkdocs-minify-plugin>=0.7.2
+mkdocs-open-in-new-tab>=1.0.3
diff --git a/docs/snippets/copy-module-local-windows.ps1 b/docs/snippets/copy-module-local-windows.ps1
new file mode 100644
index 0000000..598c97e
--- /dev/null
+++ b/docs/snippets/copy-module-local-windows.ps1
@@ -0,0 +1 @@
+Copy-Item -Path F:\Module\* -Destination '\\\C$\Program Files\WindowsPowerShell\Modules\' -Recurse
\ No newline at end of file
diff --git a/docs/snippets/import-module.ps1 b/docs/snippets/import-module.ps1
new file mode 100644
index 0000000..6f77811
--- /dev/null
+++ b/docs/snippets/import-module.ps1
@@ -0,0 +1,5 @@
+Import-Module -Name VMware.PowerCLI
+Import-Module -Name PowerVCF
+Import-Module -Nmae Posh-SSH
+Import-Module -Name 7Zip4PowerShell
+Import-Module -Name VMware.CloudFoundation.Recovery
diff --git a/docs/snippets/install-module.ps1 b/docs/snippets/install-module.ps1
new file mode 100644
index 0000000..82ffb40
--- /dev/null
+++ b/docs/snippets/install-module.ps1
@@ -0,0 +1,6 @@
+Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
+Install-Module -Name VMware.PowerCLI -MinimumVersion 13.1.0 -Repository PSGallery
+Install-Module -Name PowerVCF -MinimumVersion 2.4.0 -Repository PSGallery
+Install-Module -Name 7Zip4PowerShell -MinimumVersion 2.4.0 -Repository PSGallery
+Install-Module -Name Posh-SSH -MinimumVersion 3.0.8 -Repository PSGallery
+Install-Module -Name VMware.CloudFoundation.Rocovery -Repository PSGallery
diff --git a/docs/snippets/installed-module.ps1 b/docs/snippets/installed-module.ps1
new file mode 100644
index 0000000..367ce0a
--- /dev/null
+++ b/docs/snippets/installed-module.ps1
@@ -0,0 +1 @@
+Get-InstalledModule -Name VMware.CloudFoundation.Recovery
diff --git a/docs/snippets/save-module-local-windows.ps1 b/docs/snippets/save-module-local-windows.ps1
new file mode 100644
index 0000000..d9bb2fc
--- /dev/null
+++ b/docs/snippets/save-module-local-windows.ps1
@@ -0,0 +1,5 @@
+Save-Module -Name VMware.PowerCLI -MinimumVersion 13.1.0 -Path F:\Module\ -Repository PSGallery
+Save-Module -Name PowerVCF -MinimumVersion 2.4.0 -Path F:\Module\ -Repository PSGallery
+Save-Module -Name 7Zip4PowerShell -MinimumVersion 2.4.0 -Path F:\Module\ -Repository PSGallery
+Save-Module -Name Posh-SSH -MinimumVersion 3.0.8 -Path F:\Module\ -Repository PSGallery
+Save-Module -Name VMware.CloudFoundation.Recovery -Path F:\Module\ -Repository PSGallery
diff --git a/docs/snippets/update-module.ps1 b/docs/snippets/update-module.ps1
new file mode 100644
index 0000000..ae80bb1
--- /dev/null
+++ b/docs/snippets/update-module.ps1
@@ -0,0 +1 @@
+Update-Module -Name VMware.CloudFoundation.Recovery
diff --git a/docs/snippets/update-modules.ps1 b/docs/snippets/update-modules.ps1
new file mode 100644
index 0000000..b7944d1
--- /dev/null
+++ b/docs/snippets/update-modules.ps1
@@ -0,0 +1,4 @@
+Update-Module -Name VMware.PowerCLI
+Update-Module -Name PowerVCF
+Update-Module -Name 7Zip4PowerShell
+Update-Module -Name Posh-SSH
diff --git a/docs/snippets/vars-vcf.ps1 b/docs/snippets/vars-vcf.ps1
new file mode 100644
index 0000000..a10d63b
--- /dev/null
+++ b/docs/snippets/vars-vcf.ps1
@@ -0,0 +1,3 @@
+$sddcManagerFqdn = "sfo-vcf01.sfo.rainpole.io"
+$sddcManagerUser = "admin@local"
+$sddcManagerPass = "VMw@re1!VMw@re1!"
diff --git a/docs/update.md b/docs/update.md
new file mode 100644
index 0000000..bf253cb
--- /dev/null
+++ b/docs/update.md
@@ -0,0 +1,19 @@
+# Updating the Module
+
+Update the PowerShell module from the PowerShell Gallery by running the following commands:
+
+```powershell
+--8<-- "./docs/snippets/update-module.ps1"
+```
+
+To verify that the PowerShell module is updated, run the following command in the PowerShell console.
+
+```powershell
+--8<-- "./docs/snippets/installed-module.ps1"
+```
+
+If a dependency does not meet the minimum requirements, run the appropriate `Update-Module` command for the dependency in the PowerShell console.
+
+```powershell
+--8<-- "./docs/snippets/update-modules.ps1"
+```
diff --git a/docs/user-access.md b/docs/user-access.md
new file mode 100644
index 0000000..ccc8860
--- /dev/null
+++ b/docs/user-access.md
@@ -0,0 +1,7 @@
+# User Access
+
+Each cmdlet may provide one or more usage examples. Many of the cmdlets require that credentials are provided to output to the PowerShell console.
+
+The cmdlets in this module, and its dependencies, may return data from multiple platform components. The credentials for most of the platform components are returned to the cmdlets by retrieving credentials from the SDDC Manager inventory and using these credentials, as needed, within cmdlet operations.
+
+For the best experience, for cmdlets that connect to SDDC Manager, use the VMware Cloud Foundation API user `admin@local` or an account with the **ADMIN** role in SDDC Manager (e.g., `administrator@vsphere.local`).
diff --git a/mkdocs.yml b/mkdocs.yml
new file mode 100644
index 0000000..04de197
--- /dev/null
+++ b/mkdocs.yml
@@ -0,0 +1,167 @@
+# Project Information
+site_name: VMware.CloudFoundation.Recovery
+site_description: PowerShell Module for VMware Cloud Foundation Recovery
+site_url: https://vmware.github.io/powershell-module-for-vmware-cloud-foundation-recovery
+site_author: Broadcom
+docs_dir: docs
+site_dir: .site
+use_directory_urls: true
+
+# Repository
+repo_url: https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery
+edit_uri: blob/main/docs/
+
+# Copyright
+copyright: |
+ Copyright © 2005-2024 Broadcom. All Rights Reserved.
+ The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
+
+# Configuration
+theme:
+ name: material
+ favicon: favicon.ico
+ logo: assets/images/icon-white.svg
+ icon:
+ repo: fontawesome/brands/github
+ palette:
+ - media: "(prefers-color-scheme: light)"
+ scheme: default
+ primary: indigo
+ accent: indigo
+ toggle:
+ icon: material/toggle-switch
+ name: Dark Theme
+ - media: "(prefers-color-scheme: dark)"
+ scheme: slate
+ primary: indigo
+ accent: indigo
+ toggle:
+ icon: material/toggle-switch-off-outline
+ name: Light Theme
+ font:
+ text: Roboto
+ code: Roboto Mono
+ features:
+ - content.action.edit
+ - content.action.view
+ - content.code.annotate
+ - content.code.copy
+ - content.tabs.link
+ - navigation.expand
+ - navigation.footer
+ - navigation.header
+ - navigation.indexes
+ - navigation.instant
+ - navigation.tabs
+ - navigation.tabs.sticky
+ - navigation.top
+ - navigation.tracking
+ - search.highlight
+ - search.share
+ - search.suggest
+ - toc.follow
+
+# Plugins
+plugins:
+- search:
+ separator: '[\s\u200b\-,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])'
+- open-in-new-tab
+- markdownextradata:
+ jinja_options:
+ variable_start_string: "${{"
+ variable_end_string: "}}"
+- git-revision-date-localized:
+ enabled: !ENV [CI, false]
+ enable_creation_date: false
+ exclude:
+ - index.md
+ fallback_to_build_date: true
+ type: timeago
+
+# Customization
+extra:
+ config:
+ repo_url: https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery
+ repo_url_raw: https://raw.githubusercontent.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery
+ version:
+ default: latest
+ provider: mike
+extra_css:
+ - assets/stylesheets/extra.css
+
+# Extensions
+markdown_extensions:
+- admonition
+- attr_list
+- md_in_html
+- pymdownx.emoji:
+ emoji_index: !!python/name:material.extensions.emoji.twemoji
+ emoji_generator: !!python/name:material.extensions.emoji.to_svg
+ options:
+ custom_icons:
+ - material/.icons
+- pymdownx.inlinehilite
+- pymdownx.highlight:
+ use_pygments: true
+- pymdownx.snippets:
+ check_paths: true
+- pymdownx.superfences:
+ custom_fences:
+ - name: mermaid
+ class: mermaid
+ format: !!python/name:pymdownx.superfences.fence_code_format
+- pymdownx.tabbed:
+ alternate_style: true
+- pymdownx.details
+- tables
+- toc:
+ permalink: true
+
+# Navigation
+nav:
+- Getting Started:
+ - index.md
+ - Installation: install.md
+ - Updating: update.md
+ - User Access: user-access.md
+ - Release Notes: release-notes.md
+ - Release Milestones: https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/milestones
+ - License: license.md
+- Reference:
+ - Functions:
+ - documentation/functions/Add-HostsToCluster.md
+ - documentation/functions/Add-VMKernelsToHost.md
+ - documentation/functions/Backup-ClusterDRSGroupsAndRules.md
+ - documentation/functions/Backup-ClusterVMLocations.md
+ - documentation/functions/Backup-ClusterVMOverrides.md
+ - documentation/functions/Confirm-VCFInstanceRecoveryPreReqs.md
+ - documentation/functions/Invoke-NSXEdgeClusterRecovery.md
+ - documentation/functions/Move-ClusterHostNetworkingToVss.md
+ - documentation/functions/Move-ClusterHostsToRestoredVcenter.md
+ - documentation/functions/Move-ClusterVMsToFirstHost.md
+ - documentation/functions/Move-ClusterVmnicTovSwitch.md
+ - documentation/functions/Move-MgmtVmsToTempPg.md
+ - documentation/functions/New-ExtractDataFromSDDCBackup.md
+ - documentation/functions/New-NSXManagerOvaDeployment.md
+ - documentation/functions/New-ReconstructedPartialBringupJsonSpec.md
+ - documentation/functions/New-SDDCManagerOvaDeployment.md
+ - documentation/functions/New-UploadAndModifySDDCManagerBackup.md
+ - documentation/functions/New-vCenterOvaDeployment.md
+ - documentation/functions/Remove-ClusterHostsFromVds.md
+ - documentation/functions/Remove-NonResponsiveHosts.md
+ - documentation/functions/Remove-StandardSwitch.md
+ - documentation/functions/Resolve-PhysicalHostServiceAccounts.md
+ - documentation/functions/Resolve-PhysicalHostTransportNodes.md
+ - documentation/functions/Restore-ClusterDRSGroupsAndRules.md
+ - documentation/functions/Restore-ClusterVMLocations.md
+ - documentation/functions/Restore-ClusterVMOverrides.md
+ - documentation/functions/Set-ClusterDRSLevel.md
+ - documentation/functions/Set-ClusterHostsvSanIgnoreClusterMemberList.md
+- Community:
+ - community/index.md
+ - Contributing: community/contributing.md
+ - Discussions: https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/discussions
+ - Search Issues: https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/issues
+ - Open an Issue: https://github.com/vmware/powershell-module-for-vmware-cloud-foundation-recovery/issues/new/choose
+ - Support: community/support.md
+ - Code of Conduct: community/code-of-conduct.md