{"id":15021187,"url":"https://github.com/automatedlab/automatedlab","last_synced_at":"2026-10-19T08:48:41.299Z","repository":{"id":37413004,"uuid":"66317384","full_name":"AutomatedLab/AutomatedLab","owner":"AutomatedLab","description":"AutomatedLab is a provisioning solution and framework that lets you deploy complex labs on HyperV and Azure with simple PowerShell scripts. It supports all Windows operating systems from 2008 R2 to 2022, some Linux distributions and various products like AD, Exchange, PKI, IIS, etc.","archived":false,"fork":false,"pushed_at":"2026-07-06T09:40:52.000Z","size":39817,"stargazers_count":2225,"open_issues_count":31,"forks_count":384,"subscribers_count":83,"default_branch":"develop","last_synced_at":"2026-09-11T00:25:18.654Z","etag":null,"topics":["active","active-directory","automated-deployment","azure","deployment","directory","domain-controller","exchange","hyper","hyperv","lab-machine","pki","powershell","scripted","scripted-deployment"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AutomatedLab.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null}},"created_at":"2016-08-23T00:08:15.000Z","updated_at":"2026-09-05T15:17:49.000Z","dependencies_parsed_at":"2026-03-13T13:06:56.529Z","dependency_job_id":null,"html_url":"https://github.com/AutomatedLab/AutomatedLab","commit_stats":{"total_commits":3140,"total_committers":72,"mean_commits":"43.611111111111114","dds":0.5114649681528662,"last_synced_commit":"9b2a98675ad9dc20d54b71de84768652a6fec12b"},"previous_names":[],"tags_count":293,"template":false,"template_full_name":null,"purl":"pkg:github/AutomatedLab/AutomatedLab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AutomatedLab%2FAutomatedLab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AutomatedLab%2FAutomatedLab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AutomatedLab%2FAutomatedLab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AutomatedLab%2FAutomatedLab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AutomatedLab","download_url":"https://codeload.github.com/AutomatedLab/AutomatedLab/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AutomatedLab%2FAutomatedLab/sbom","scorecard":{"id":18007,"data":{"date":"2025-08-11","repo":{"name":"github.com/AutomatedLab/AutomatedLab","commit":"ea2028fab9c4e35db2e79cf29c6c223731f80a99"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":7,"reason":"Found 14/19 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 12 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Binary-Artifacts","score":3,"reason":"binaries present in source code","details":["Warn: binary detected: AutomatedLabCore/Tools/FluentFTP.dll:1","Warn: binary detected: AutomatedLabCore/Tools/HyperV/Bginfo.exe:1","Warn: binary detected: AutomatedLabCore/Tools/HyperV/nvspbind.exe:1","Warn: binary detected: LabSources/Tools/WinSAT.exe:1","Warn: binary detected: LabSources/Tools/WinSATAPI.dll:1","Warn: binary detected: LabSources/Tools/git.exe:1","Warn: binary detected: LabSources/Tools/oscdimg.exe:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 5.58.17 not signed: https://api.github.com/repos/AutomatedLab/AutomatedLab/releases/236535546","Warn: release artifact 5.58.16 not signed: https://api.github.com/repos/AutomatedLab/AutomatedLab/releases/236505993","Warn: release artifact 5.58.15 not signed: https://api.github.com/repos/AutomatedLab/AutomatedLab/releases/236153534","Warn: release artifact 5.58.14 not signed: https://api.github.com/repos/AutomatedLab/AutomatedLab/releases/231469356","Warn: release artifact 5.58.13 not signed: https://api.github.com/repos/AutomatedLab/AutomatedLab/releases/231458876","Warn: release artifact 5.58.17 does not have provenance: https://api.github.com/repos/AutomatedLab/AutomatedLab/releases/236535546","Warn: release artifact 5.58.16 does not have provenance: https://api.github.com/repos/AutomatedLab/AutomatedLab/releases/236505993","Warn: release artifact 5.58.15 does not have provenance: https://api.github.com/repos/AutomatedLab/AutomatedLab/releases/236153534","Warn: release artifact 5.58.14 does not have provenance: https://api.github.com/repos/AutomatedLab/AutomatedLab/releases/231469356","Warn: release artifact 5.58.13 does not have provenance: https://api.github.com/repos/AutomatedLab/AutomatedLab/releases/231458876"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'develop'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-14T16:12:25.249Z","repository_id":37413004,"created_at":"2025-08-14T16:12:25.249Z","updated_at":"2025-08-14T16:12:25.249Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38352851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["active","active-directory","automated-deployment","azure","deployment","directory","domain-controller","exchange","hyper","hyperv","lab-machine","pki","powershell","scripted","scripted-deployment"],"created_at":"2024-09-24T19:56:15.295Z","updated_at":"2026-10-19T08:48:41.291Z","avatar_url":"https://github.com/AutomatedLab.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AutomatedLab\n\nBuild | Status | Last Commit | Latest Release\n--- | --- | --- | ---\nDevelop | [![Build status dev](https://ci.appveyor.com/api/projects/status/9yynk81k3k05nasp/branch/develop?svg=true)](https://ci.appveyor.com/project/automatedlab/automatedlab) | [![GitHub last commit](https://img.shields.io/github/last-commit/AutomatedLab/AutomatedLab/develop.svg)](https://github.com/AutomatedLab/AutomatedLab/tree/develop/)\nMaster | [![Build status](https://ci.appveyor.com/api/projects/status/9yynk81k3k05nasp/branch/master?svg=true)](https://ci.appveyor.com/project/automatedlab/automatedlab) | [![GitHub last commit](https://img.shields.io/github/last-commit/AutomatedLab/AutomatedLab/master.svg)](https://github.com/AutomatedLab/AutomatedLab/tree/master/) | [![GitHub release](https://img.shields.io/github/release/AutomatedLab/AutomatedLab.svg)](https://github.com/AutomatedLab/AutomatedLab/releases)[![PowerShell Gallery](https://img.shields.io/powershellgallery/v/AutomatedLab.svg)](https://www.powershellgallery.com/packages/AutomatedLab/)\n\n[![GitHub issues](https://img.shields.io/github/issues/AutomatedLab/AutomatedLab.svg)](https://github.com/AutomatedLab/AutomatedLab/issues)\n[![Downloads](https://img.shields.io/github/downloads/AutomatedLab/AutomatedLab/total.svg?label=Downloads\u0026maxAge=999)](https://github.com/AutomatedLab/AutomatedLab/releases)\n[![PowerShell Gallery](https://img.shields.io/powershellgallery/dt/AutomatedLab.svg)](https://www.powershellgallery.com/packages/AutomatedLab/)\n\n## Project Summary\n\nAutomatedLab (AL) enables you to setup test and lab environments on Hyper-v or Azure with multiple products or just a single VM in a very short time. There are only two requirements you need to make sure: You need the DVD ISO images and a Hyper-V host or an Azure subscription.\n\n## Sponsors\n\nHuge thanks to our regular sponsor [@chocolatey](https://github.com/chocolatey)! In case you have lived under a rock (or worked mainly on non-Windows systems) for the past decade, Chocolatey\nis a brilliant package management system with a public binary package gallery as well as self-hosted options complete with enterprise-grade support. Give it a try with\na local lab environment - it could not be easier 😊 Start with a Domain Controller and a Certificate Authority to validate not only package distribution, but also digital signatures. Our samples\nsuch as the [NuGet server](https://automatedlab.org/en/latest/Wiki/SampleScripts/Scenarios/en-us/NuGetServer/) or [Azure DevOps](https://github.com/dsccommunity/DscWorkshop/tree/main/Lab) all include galleries that Chocolatey can use for publishing and downloading packages.\n\n### Requirements\n\nApart from the module itself your system needs to meet the following requirements:\n\n- Windows Management Framework 5+ (Windows)\n- .NET 4.7.1 (Windows PowerShell) or .NET Core 2.x (PowerShell 6+)\n- OS\n  - Windows Server 2012 R2+/Windows 8.1+ (Hyper-V, Azure)\n  - Linux (Azure)\n  - macOS (Azure, best-effort support since neither @raandree nor @nyanhp have Apple devices)\n- Recommended OS language is en-us\n- Admin privileges are required on Windows\n- ISO files for all operating systems (Hyper-V only) and roles to be deployed (Hyper-V, Azure)\n- Intel VT-x or AMD/V capable CPU\n- A decent amount of RAM\n- Low-Latency high-throughput storage (No spinning disks please, as there are issues related to them)\n\n#### Windows\n\n- Windows Management Framework 5+ or ideally PowerShell 7\n- Windows Server 2012 R2+/Windows 8.1+\n- Recommended OS language is en-us\n- Admin privileges are required\n\n#### Linux, macOS\n\n- Supported host OS (Azure, Proxmox): Fedora, Ubuntu, Ubuntu WSL \u0026 Azure Cloud Shell\n- Supported Linux guests: CentOS/RHEL/Fedora (any flavor), Ubuntu Server (Desktop ISO is **not** supported), OpenSUSE/SUSE\n- macOS supported on best effort due to lack of Apple devices - feel free to sponsor two though :D\n- Regularly tested on Fedora (non-WSL) and Ubuntu (WSL). Due to fragmented nature of Linux distributions, support is best-effort and takes time\n- PowerShell Core 6+\n- SSH or gss-ntlmssp to enable remoting (*mandatory - no remoting, no way for AutomatedLab to do its thing*)\n  - If in doubt, try to `Install-Module PSWSMAN; Install-WSMAN` - no success warranted\n- IP and route commands available\n- **Azure subscription**\n  - At the moment, AutomatedLab only works using Azure when using Linux.\n  - KVM planned for a later date by virtue of libvirt.\n\n### Download AutomatedLab\n\nThere are two options installing AutomatedLab:\n\n- You can use the [MSI installer](https://github.com/AutomatedLab/AutomatedLab/releases) published on GitHub.\n- Or you install from the [PowerShell Gallery](https://www.powershellgallery.com/packages/AutomatedLab/) using the cmdlet Install-Module. Please refer to the [wiki](https://automatedlab.org/en/latest) for some details.\n\n### [1. Installation](https://automatedlab.org/en/latest/Wiki/Basic/install/)\n\n### [2. Getting started](https://automatedlab.org/en/latest/Wiki/Basic/gettingstarted/)\n\n### [3. Contributing](/CONTRIBUTING.md)\n\n### [Version History](/CHANGELOG.md)\n\n### Supported products\n\nThis solution supports setting up virtual machines with the following products\n\n- Windows 7, 2008 R2, 8 / 8.1 and 2012 / 2012 R2, 10 / 2016, 2019, 2022\n- SQL Server 2012, 2014, 2016, 2017, 2019, 2022\n- Visual Studio 2012, 2013, 2015\n- Team Foundation Services 2018, Azure DevOps Server\n- Exchange 2013, 2016, 2019\n- System Center Orchestrator 2012\n- System Center Operations Manager 2019\n- System Center Service Manager 2019\n- Microsoft Endpoint Manager Configuration Manager 1902 (and newer)\n- MDT\n- ProGet (Private PowerShell Gallery)\n- Office 2013, 2016, 2019\n- DSC Pull Server (with SQL Reporting)\n- Dynamics 365\n- Remote Desktop Services including HTML5 web client\n\n### Feature List\n\n- AutomatedLab (AL) makes the setup of labs extremely easy. Setting up a lab with just a single machine is [only 3 lines](/LabSources/SampleScripts/Introduction/01%20Single%20Win10%20Client.ps1). And even [complex labs](/LabSources/SampleScripts/HyperV/BigLab%202012R2%20EX%20SQL%20ORCH%20VS%20OFF.ps1) can be defined with about 100 lines (see [sample scripts](https://github.com/AutomatedLab/AutomatedLab/tree/master/LabSources/SampleScripts)).\n- Labs on Azure can be connected to each other or connected to a Hyper-V lab [using a single command](https://github.com/AutomatedLab/AutomatedLab/wiki/Connect-on-premises-and-cloud-labs).\n- AL can be used to setup scenarios to demo a [PowerShell Gallery using Inedo ProGet](/LabSources/SampleScripts/Scenarios/ProGet%20Lab%20-%20HyperV.ps1), [PowerShell DSC Pull Server scenarios](/LabSources/SampleScripts/Scenarios/DSC%20Pull%20Scenario%201%20(Pull%20Configuration).ps1), ADFS or a lab with [3 Active Directory forests trusting each other](/LabSources/SampleScripts/Scenarios/Multi-AD%20Forest%20with%20Trusts.ps1).\n- Create, restore and remove snapshots of some or all lab machines with one cmdlet (Checkpoint-LabVM, Restore-LabVMSnapshot, Remove-LabVMSnapshot).\n- Install Windows Features on one, some or all lab machines with one line of code (Install-LabWindowsFeature).\n- Install software to a bunch of lab machines with just one cmdlet (Install-LabSoftwarePackages). You only need to know the argument to make the MSI or EXE go into silent installation mode. This can also work in parallel thanks to PowerShell workflows.\n- Run any custom activity (Script or ScriptBlock) on a number of lab machines (Invoke-LabCommand). You do not have to care about credentials or double-hop authentication issues as CredSsp is always enabled and can be used with the UseCredSsp switch.\n- Creating a [virtual environment that is connected to the internet](/LabSources/SampleScripts/Introduction/05%20Single%20domain-joined%20server%20(internet%20facing).ps1) was never easier. The only requirements are defining an external facing virtual switch and a machine with two network cards that acts as the router. AL takes care about all the configuration details like setting the gateway on all machines and also the DNS settings (see introduction script [05 Single domain-joined server (internet facing).ps1](/LabSources/SampleScripts/Introduction/05%20Single%20domain-joined%20server%20(internet%20facing).ps1)).\n- AL offers offline patching with a single command. As all machines a based on one disk per OS, it is much more efficient to patch the ISO files that are used to create the base images (Update-LabIsoImage). See script [11 ISO Offline Patching.ps1](/LabSources/SampleScripts/Introduction/11%20ISO%20Offline%20Patching.ps1) for more details.\n- If a lab is no longer required, one command is enough to remove everything to be ready to start from scratch (Remove-Lab)\n\n### Local build\n\nWhile we frequently release prereleases to the PowerShell Gallery, you might be interested\nto build the entire module locally yourself.\n\nWhile the steps remain the same, the prerequisites are slightly different on Windows and Linux\n\nWindows:\n  - Installer required? WiX 3 targets installed properly (!)\n  - .NET SDKs 4.6.2 (targeting) and 6.0+\nLinux:\n  - .NET 6.0+\n\nAfter the prerequisites are satisfied, you can use `.build/StartLocalBuild.ps1` to\nrun a local build in a fresh PowerShell session that does not already have AutomatedLab imported.\nWe are loading a library, so importing a different library version will not work.\nIf you would like to skip the Pester validation, specify the parameter `SkipValidation`.\nTo build the installer, use the parameter `BuildInstaller`.\n\nRunning the local build also updates your module path, so that you are directly using your\nfreshly built modules.\n\nThe result is a folder `publish` containing all AutomatedLab modules, while `requiredmodules`\ncontains all required modules.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fautomatedlab%2Fautomatedlab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fautomatedlab%2Fautomatedlab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fautomatedlab%2Fautomatedlab/lists"}