{"id":1254,"date":"2026-10-15T15:32:00","date_gmt":"2026-10-15T15:32:00","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/?p=1254"},"modified":"2026-10-15T15:32:01","modified_gmt":"2026-10-15T15:32:01","slug":"terraform-tflint-terraform-docs-trivy-tenv-pre-commit-tools-installation-guide-for-windows-powershell","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/tutorials\/terraform-tflint-terraform-docs-trivy-tenv-pre-commit-tools-installation-guide-for-windows-powershell\/","title":{"rendered":"Terraform tflint terraform-docs trivy tenv pre-commit Tools \u2014 Installation Guide for Windows PowerShell"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Updated: October 2026 | Windows 10\/11 | PowerShell 5.1 \/ 7<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This guide covers installing, verifying, and running the first commands for five Terraform development tools.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Tool<\/th><th>Purpose<\/th><th>First command<\/th><\/tr><tr><td>TFLint<\/td><td>Terraform linting and best practices<\/td><td><code>tflint<\/code><\/td><\/tr><tr><td>terraform-docs<\/td><td>Generate Terraform documentation<\/td><td><code>terraform-docs markdown table .<\/code><\/td><\/tr><tr><td>Trivy<\/td><td>Security and IaC scanning<\/td><td><code>trivy config .<\/code><\/td><\/tr><tr><td>tenv<\/td><td>Manage Terraform\/OpenTofu versions<\/td><td><code>tenv tf install latest<\/code><\/td><\/tr><tr><td>pre-commit<\/td><td>Automatically run checks before commits<\/td><td><code>pre-commit run --all-files<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">1. Prerequisites<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open Windows PowerShell or Windows Terminal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check your Windows package manager and development tools:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>winget --version\ngit --version\npy --version\nterraform version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If Git and Python are missing, install them:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>winget install -e --id Git.Git\nwinget install -e --id Python.Python.3.13<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Restart PowerShell after installing software so the updated PATH is loaded.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. TFLint<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">TFLint checks Terraform code for potential errors, deprecated syntax, unused declarations, and provider-specific issues.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Install (WinGet):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>winget install -e --id TerraformLinters.tflint<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tflint --version\nGet-Command tflint<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">First execution in your Terraform project:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd C:\\terraform-project\n\n# Initialize configured TFLint plugins\ntflint --init\n\n# Scan Terraform files in the current directory\ntflint\n\n# Scan Terraform directories recursively\ntflint --recursive\n\n# Show available options\ntflint --help<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>--init<\/code> installs any configured external ruleset plugins; the built-in Terraform ruleset is already included.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Official source: <a href=\"https:\/\/github.com\/terraform-linters\/tflint\">TFLint installation and usage<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Terraform Docs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>terraform-docs<\/code> automatically generates documentation for Terraform providers, resources, variables, outputs, and modules.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Install using Scoop:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If Scoop is not installed, run the following in a regular (non-administrator) PowerShell session:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser\nInvoke-RestMethod -Uri https:\/\/get.scoop.sh | Invoke-Expression<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Now install terraform-docs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>scoop bucket add terraform-docs https:\/\/github.com\/terraform-docs\/scoop-bucket\nscoop install terraform-docs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>terraform-docs --version\nGet-Command terraform-docs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">First execution:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd C:\\terraform-project\n\n# Generate Markdown documentation in the terminal\nterraform-docs markdown table .\n\n# Generate README.md automatically\nterraform-docs markdown table --output-file README.md --output-mode inject .\n\n# View the generated documentation\nGet-Content README.md\n\n# Help\nterraform-docs --help<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The <code>inject<\/code> option updates the generated documentation section without replacing the rest of an existing README.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Official source: <a href=\"https:\/\/terraform-docs.io\/user-guide\/installation\/\">Terraform Docs installation<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Trivy<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Trivy scans Terraform configurations for security misconfigurations and can also scan container images, dependencies, and secrets.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Install (WinGet):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>winget install -e --id AquaSecurity.Trivy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>trivy --version\nGet-Command trivy<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">First execution:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd C:\\terraform-project\n\n# Scan Terraform code for security misconfigurations\ntrivy config .\n\n# Show only high and critical findings\ntrivy config --severity HIGH,CRITICAL .\n\n# Scan vulnerabilities, secrets, and misconfigurations\ntrivy fs --scanners vuln,misconfig,secret .\n\n# Scan a container image\ntrivy image alpine:3.21\n\n# Show command help\ntrivy --help<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The first scan may download Trivy&#8217;s security databases and checks, so internet connectivity is required.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Official source: <a href=\"https:\/\/www.trivy.dev\/docs\/latest\/getting-started\/installation\/\">Trivy installation<\/a> and <a href=\"https:\/\/www.trivy.dev\/docs\/latest\/guide\/coverage\/iac\/terraform\/\">Terraform scanning<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. tenv<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>tenv<\/code> is a version manager for Terraform, OpenTofu, Terragrunt, and related tools. It is useful when different projects require different Terraform versions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Install (WinGet):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>winget install -e --id Tofuutils.Tenv<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tenv version\nGet-Command tenv<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">First execution:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Install the latest stable Terraform version\ntenv tf install latest\n\n# Select the latest installed Terraform version\ntenv tf use latest\n\n# Verify Terraform\nterraform version\n\n# List locally installed Terraform versions\ntenv tf list\n\n# Detect the version selected for the current directory\ntenv tf detect\n\n# List available remote Terraform versions\ntenv tf list-remote<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Optional: Install OpenTofu<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tenv tofu install latest\ntenv tofu use latest\ntofu version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If Terraform was previously installed separately, check which executable PowerShell is using:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Get-Command terraform -All<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The tenv-managed executable should take precedence in PATH for tenv version switching to work correctly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Official source: <a href=\"https:\/\/github.com\/tofuutils\/tenv\">tenv documentation<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. pre-commit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>pre-commit<\/code> runs automated checks before Git commits to help catch problems early.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Install using Python and pipx:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Install pipx\npy -m pip install --user pipx\n\n# Add pipx executables to PATH\npy -m pipx ensurepath<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Restart PowerShell, then run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pipx install pre-commit<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verify:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pre-commit --version\nGet-Command pre-commit<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">First execution inside a Git repository:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd C:\\terraform-project\n\n# Initialize Git only if this is not already a repository\ngit init\n\n# Generate a sample hook configuration\npre-commit sample-config | Out-File -Encoding utf8 .pre-commit-config.yaml\n\n# Install Git hooks\npre-commit install\n\n# Stage files for the initial test\ngit add .\n\n# Run hooks against all tracked files\npre-commit run --all-files\n\n# View available commands\npre-commit --help<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Once installed, configured checks run automatically when you execute <code>git commit<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Official source: <a href=\"https:\/\/pre-commit.com\/\">pre-commit documentation<\/a> and <a href=\"https:\/\/pipx.pypa.io\/latest\/how-to\/install-pipx.html\">pipx installation<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Verify all five installations together<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After completing the installations and reopening PowerShell, run:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Write-Host \"=== TFLint ===\"\ntflint --version\n\nWrite-Host \"=== Terraform Docs ===\"\nterraform-docs --version\n\nWrite-Host \"=== Trivy ===\"\ntrivy --version\n\nWrite-Host \"=== tenv ===\"\ntenv version\n\nWrite-Host \"=== pre-commit ===\"\npre-commit --version\n\nWrite-Host \"=== Terraform ===\"\nterraform version<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">8. Quick hands-on Terraform lab<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you don&#8217;t have an existing Terraform project, create a sample project first.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Create a demo directory\nNew-Item -ItemType Directory -Force \"$HOME\\terraform-tools-demo\" | Out-Null\nSet-Location \"$HOME\\terraform-tools-demo\"\n\n# Create example Terraform code\n@'\nterraform {\n  required_version = \"&gt;= 1.5.0\"\n}\n\nvariable \"project_name\" {\n  description = \"Name of the demo project\"\n  type        = string\n  default     = \"terraform-demo\"\n}\n\noutput \"project_name\" {\n  description = \"Selected project name\"\n  value       = var.project_name\n}\n'@ | Set-Content -Encoding utf8 main.tf\n\n# Run checks\nterraform fmt\nterraform validate\ntflint --init\ntflint\nterraform-docs markdown table .\ntrivy config .<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">These commands allow you to test Terraform formatting, validation, linting, documentation generation, and security scanning on Windows without creating cloud infrastructure.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. Quick command reference<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><th>Tool<\/th><th>Install<\/th><th>Verify<\/th><th>First run<\/th><\/tr><tr><td>TFLint<\/td><td><code>winget install -e --id TerraformLinters.tflint<\/code><\/td><td><code>tflint --version<\/code><\/td><td><code>tflint --init; tflint<\/code><\/td><\/tr><tr><td>Terraform Docs<\/td><td><code>scoop install terraform-docs<\/code><\/td><td><code>terraform-docs --version<\/code><\/td><td><code>terraform-docs markdown table .<\/code><\/td><\/tr><tr><td>Trivy<\/td><td><code>winget install -e --id AquaSecurity.Trivy<\/code><\/td><td><code>trivy --version<\/code><\/td><td><code>trivy config .<\/code><\/td><\/tr><tr><td>tenv<\/td><td><code>winget install -e --id Tofuutils.Tenv<\/code><\/td><td><code>tenv version<\/code><\/td><td><code>tenv tf install latest<\/code><\/td><\/tr><tr><td>pre-commit<\/td><td><code>pipx install pre-commit<\/code><\/td><td><code>pre-commit --version<\/code><\/td><td><code>pre-commit run --all-files<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The installation commands were checked against current documentation and package listings. They have not been executed on your Windows computer. The terraform-docs Scoop command assumes its bucket was added in Section 3.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Updated: October 2026 | Windows 10\/11 | PowerShell 5.1 \/ 7 This guide covers installing, verifying, and running the first commands for five Terraform development tools. Tool&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1254","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/comments?post=1254"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1254\/revisions"}],"predecessor-version":[{"id":1255,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1254\/revisions\/1255"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=1254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=1254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=1254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}