{"owner":"Azure","repo":"azure-powershell","hasSkills":true,"totalSkillsCount":4,"totalTokensCount":3985,"categories":["copilot-instructions","mcp-config","marketplace","plugin-manifest"],"hasMcp":true,"mcpConfig":{"mcpServers":{"azure-powershell":{"command":"npx","args":["-y","@modelcontextprotocol/server-azure-powershell"]}}},"found":[".github/copilot-instructions.md",".cursor/mcp.json",".claude-plugin/marketplace.json",".claude-plugin/plugin.json"],"skills":{".github/copilot-instructions.md":"# Azure PowerShell Repository\n\nAzure PowerShell is a collection of 200+ PowerShell modules for managing Azure resources. The repository contains modules with two types of projects: SDK-based projects and AutoRest-generated projects, all built using .NET and MSBuild.\n\n## Architecture Overview\n\nAzure PowerShell consists of **two main development approaches for projects**:\n\n1. **SDK-based projects** - Hand-written C# cmdlets with custom business logic\n2. **AutoRest-based projects** - Auto-generated from OpenAPI specs via AutoRest PowerShell (mostly newer Azure services)\n\nAlways check project type before making changes - SDK vs AutoRest projects have different development patterns.\n\n### Modules vs Projects\n- **Module**: A complete PowerShell module (e.g., `Az.Compute`) that can consist of multiple projects\n- **Project**: Individual C# project within a module, developed with one approach (SDK-based OR AutoRest)\n- **Hybrid Module**: Contains both SDK-based and AutoRest projects (e.g., `Az.Resources` with both approaches)\n\nAlways reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.\n\n## Working Effectively\n\n### Prerequisites and Setup\nFirst-time setup requires these exact steps:\n- **CRITICAL**: Ensure you have network connectivity to Azure DevOps package feeds. Build failures with \"Name or service not known\" errors indicate firewall/connectivity issues that must be resolved before building.\n- Install .NET SDK 8.0+ and .NET Framework Dev Pack 4.7.2+: `dotnet --version` should show 8.0+\n- Install PowerShell 7+: `pwsh --version` should show 7.0+\n- Install platyPS module: `pwsh -c \"Install-Module -Name platyPS -Force -Scope CurrentUser\"`\n- Install PSScriptAnalyzer: `pwsh -c \"Install-Module -Name PSScriptAnalyzer -Force -Scope CurrentUser\"`\n- Set PowerShell execution policy: `pwsh -c \"Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser\"`\n\n### Building the Repository\n**NEVER CANCEL** any build commands - they may take 45-60 minutes to complete.\n\nCore build commands (run from repository root):\n- Clean: `dotnet msbuild build.proj /t:Clean` -- takes ~15 seconds\n- Full build: `dotnet msbuild build.proj` -- takes 45-60 minutes. NEVER CANCEL. Set timeout to 90+ minutes.\n- Build specific module: `dotnet msbuild build.proj /p:Scope=Accounts` -- takes 15-30 minutes\n- Generate help: `dotnet msbuild build.proj /t:GenerateHelp` -- takes 10-15 minutes. NEVER CANCEL. Set timeout to 30+ minutes.\n- Static analysis: `dotnet msbuild build.proj /t:StaticAnalysis` -- takes 10-15 minutes. NEVER CANCEL. Set timeout to 30+ minutes.\n- Run tests: `dotnet msbuild build.proj /t:Test` -- takes 15+ minutes. NEVER CANCEL. Set timeout to 45+ minutes.\n\nAlternative PowerShell build commands:\n- Build single module: `pwsh -c \"./tools/BuildScripts/BuildModules.ps1 -RepoRoot $(pwd) -Configuration Debug -TargetModule Accounts\"` -- takes 5-15 minutes depending on module size\n\n### Testing\n**NEVER CANCEL** test commands - they can take 15+ minutes.\n\nTest execution patterns:\n- All tests: `dotnet msbuild build.proj /t:Test` -- takes 15+ minutes. NEVER CANCEL.\n- Core tests only: `dotnet msbuild build.proj /t:Test /p:TestsToRun=Core` -- tests Compute, Network, Resources, Sql, Websites modules\n- Individual module tests: Navigate to module test directory and run `dotnet test` or use Pester\n\nTest framework uses .NET 6 target framework and Azure Test Framework for recording/playback of HTTP requests.\n\n### Manual Validation Scenarios\n**CRITICAL**: Always perform manual validation after making changes. Simply building is not sufficient.\n\n**Core validation steps:**\n1. Build succeeds: `dotnet msbuild build.proj /p:Scope=YourModule` \n2. Static analysis passes: `dotnet msbuild build.proj /t:StaticAnalysis`  \n3. Help generation succeeds: `dotnet msbuild build.proj /t:GenerateHelp`\n4. Tests pass: Navigate to test directory and run tests for your module\n\n**Manual testing scenarios:**\nAfter building, always test real functionality:\n```powershell\n# Import the built module\nImport-Module ./artifacts/Debug/Az.YourModule/Az.YourModule.psd1\n\n# Verify cmdlets are available  \nGet-Command -Module Az.YourModule\n\n# Test a basic cmdlet workflow (example for Compute module)\n# Get-AzVM -ResourceGroupName \"test-rg\" \n# New-AzVM -Name \"test-vm\" -ResourceGroupName \"test-rg\" -Location \"East US\" -Image \"Win2019Datacenter\" -Credential (Get-Credential)\n\n# For AutoRest projects, test generated cmdlets\n# Get-AzQuota -SubscriptionId \"your-subscription-id\"\n\n# Verify help is working\nGet-Help Your-AzCmdlet -Examples\n\n# Test parameter validation and error handling\nGet-AzVM -InvalidParameterName \"test\"\n```\n\n**Required pre-commit validation workflow:**\n1. Clean and build your module: `dotnet msbuild build.proj /t:Clean; dotnet msbuild build.proj /p:Scope=YourModule`\n2. Run static analysis: `dotnet msbuild build.proj /t:StaticAnalysis` \n3. Import and manually test your cmdlets using realistic scenarios\n4. Run your module's specific tests: `cd src/YourModule/YourModule.Test; dotnet test`\n5. Update ChangeLog.md files with your changes\n\n## Common Build Issues and Workarounds\n\n### Network Connectivity Issues\n**CRITICAL**: If you see \"Failed to download package\" or \"Name or service not known\" errors:\n- This indicates firewall/proxy issues blocking access to Azure DevOps package feeds\n- Affected URLs: `*.vsblob.vsassets.io`, `pkgs.dev.azure.com`\n- Workaround 1: Configure corporate proxy/firewall to allow these domains\n- Workaround 2: Use VPN or different network environment  \n- **DO NOT** attempt to modify NuGet.Config - this will break the build\n\n### Incomplete Builds\nIf build appears to hang or shows no progress:\n- **DO NOT CANCEL** - builds can take 45+ minutes with periods of no visible progress\n- Monitor system resources - builds are CPU and network intensive\n- Check network connectivity if stuck on package restore\n- Builds may pause during package downloads or complex compilation steps\n\n### Module-Specific Issues\n- Help generation requires platyPS module to be installed and functioning\n- Static analysis requires PSScriptAnalyzer module  \n- Some projects depend on specific Azure SDK versions from Azure DevOps feeds\n- Missing ChangeLog.md updates will cause PR validation to fail\n\n### Build Artifacts Issues\nIf you see errors like \"Cannot find path '/artifacts/Debug'\":\n- This means the build didn't complete successfully\n- Run a clean build: `dotnet msbuild build.proj /t:Clean; dotnet msbuild build.proj`\n- Check for network connectivity issues during package restore\n\n### PowerShell Module Import Issues\nIf `Import-Module` fails after build:\n- Ensure the build completed successfully and artifacts exist in `/artifacts/Debug/`\n- Try restarting PowerShell session to clear any cached modules\n- Use `-Force` parameter: `Import-Module ./artifacts/Debug/Az.YourModule/Az.YourModule.psd1 -Force`\n\n## Repository Structure and Navigation\n\n### Key Directories\n- `/src/` - All modules, containing both SDK-based projects and AutoRest-based projects\n- `/generated/` - Pure generated code for AutoRest-based projects  \n- `/tools/` - Build scripts, static analysis, testing utilities\n- `/documentation/` - Developer guides, design guidelines, testing docs\n- `/artifacts/` - Build outputs (created during build process)\n\n### Project Types\nTwo types of projects with different development approaches:\n\n**SDK-based projects** (in `/src/`):\n- Hand-written C# cmdlets using Azure .NET SDKs\n- Example: `/src/Accounts/`, `/src/Compute/`\n- Build using main repository build system\n- Follow patterns in `/documentation/development-docs/azure-powershell-developer-guide.md`\n\n**AutoRest-generated projects** (in `/generated/` and some `/src/`):\n- Generated from REST API specifications\n- Example: `/generated/Cdn/Cdn.Autorest/`\n- Have individual build scripts: `build-module.ps1`, `test-module.ps1`, `pack-module.ps1`\n- Follow patterns in individual module `how-to.md` files\n\n**Hybrid modules**: Some modules contain both SDK-based and AutoRest-based projects, requiring understanding of both approaches.\n\n### Important Files\n- `build.proj` - Main MSBuild file for entire repository\n- `NuGet.Config` - Package source configuration (DO NOT MODIFY)\n- `CONTRIBUTING.md` - Contribution guidelines and PR requirements\n- `ChangeLog.md` - Release notes (must be updated for changes)\n\n### Development Workflow Files\n- `/tools/BuildScripts/BuildModules.ps1` - Core module build automation\n- `/tools/GenerateHelp.ps1` - Help documentation generation\n- `/tools/StaticAnalysis/` - Code analysis and validation tools\n- `/tools/Test/` - Testing infrastructure and utilities\n\n## Typical Development Tasks\n\n### Adding a New Cmdlet\n1. Navigate to appropriate module directory in `/src/`\n2. Add cmdlet class following existing patterns\n3. Update module manifest (`.psd1`) if needed\n4. Build module: `dotnet msbuild build.proj /p:Scope=YourModule`\n5. Generate help: `dotnet msbuild build.proj /t:GenerateHelp`\n6. Add tests following patterns in `ModuleName.Test` directory\n7. Update `ChangeLog.md` with your changes\n\n### Individual Module Development\nFor individual module work when you don't need to build the entire repository:\n\n**SDK-based projects** (in `/src/`):\n```bash\n# Build just your module (much faster than full repository build)\ndotnet msbuild build.proj /p:Scope=YourModule\n\n# Build with dependencies (recommended)\ndotnet msbuild build.proj /p:TargetModule=YourModule\n```\n\n**AutoRest projects** (in `/src/` and `/generated/`):\n```bash\n# Most AutoRest projects are built as part of the main build system\ndotnet msbuild build.proj /p:Scope=YourModule\n\n# Some generated projects have individual test scripts\ncd generated/YourModule/YourModule.Autorest\n./test-module.ps1 -Playback    # Run tests in playback mode\n./test-module.ps1 -Record      # Record new tests (requires Azure connection)\n```\n\n**Module testing patterns:**\n```bash\n# Run tests for specific module \ncd src/YourModule/YourModule.Test\ndotnet test\n\n# For Pester-based tests\ncd src/YourModule/YourModule.Test  \npwsh -c \"Invoke-Pester\"\n```\n\n### Running Specific Module Tests\n1. Navigate to module test directory: `cd src/YourModule/YourModule.Test`\n2. Set up test environment (see `/documentation/testing-docs/using-azure-test-framework.md`)\n3. Run tests: `dotnet test` or use PowerShell/Pester patterns\n4. Record new tests in \"Record\" mode, run existing tests in \"Playback\" mode\n\n### Pre-commit Validation\nAlways run before submitting PR:\n1. `dotnet msbuild build.proj /t:Clean`\n2. `dotnet msbuild build.proj /p:Scope=YourModule` -- wait for completion, 15-30 minutes\n3. `dotnet msbuild build.proj /t:StaticAnalysis` -- wait for completion, 10-15 minutes  \n4. Test your specific changes manually by importing and using the cmdlets\n5. Update ChangeLog.md with your changes\n\n## Timing Expectations\n**CRITICAL**: All timing estimates include buffers. NEVER CANCEL commands before these timeouts:\n\n| Command | Expected Time | Timeout Setting |\n|---------|---------------|-----------------|\n| Clean build | 15 seconds | 60 seconds |\n| Full repository build | 45-60 minutes | 90 minutes |\n| Single module build | 15-30 minutes | 45 minutes |\n| Help generation | 10-15 minutes | 30 minutes |\n| Static analysis | 10-15 minutes | 30 minutes |  \n| Test execution | 15+ minutes | 45 minutes |\n\n**NEVER CANCEL** any build or test command before the timeout period. Builds may show no progress for extended periods while downloading packages or compiling.\n\n## Files to Always Update\n- **ChangeLog.md** - Add entry under \"## Upcoming Release\" section\n- **Module-specific ChangeLog.md** - Located at `src/YourModule/YourModule/ChangeLog.md`\n- **Help documentation** - Regenerate using help generation commands\n- **Tests** - Add or update tests for new functionality\n\n## Common Command Reference\n```bash\n# Repository setup\ndotnet --version                    # Check .NET version (need 8.0+)\npwsh --version                     # Check PowerShell version (need 7.0+)\n\n# Build commands  \ndotnet msbuild build.proj /t:Clean                    # Clean build\ndotnet msbuild build.proj                             # Full build (45-60 min)\ndotnet msbuild build.proj /p:Scope=ModuleName         # Build specific module\ndotnet msbuild build.proj /t:GenerateHelp             # Generate help (10-15 min)  \ndotnet msbuild build.proj /t:StaticAnalysis           # Run static analysis (10-15 min)\ndotnet msbuild build.proj /t:Test                     # Run tests (15+ min)\n\n# Module development\npwsh -c \"Import-Module ./artifacts/Debug/Az.ModuleName/Az.ModuleName.psd1\"\npwsh -c \"Get-Command -Module Az.ModuleName\"\n\n# Individual module builds (for AutoRest projects)\ncd generated/ModuleName/ModuleName.Autorest\n./build-module.ps1                 # If available\n./test-module.ps1                  # If available\n```\n\nRemember: This is a large, complex repository with extensive build times. Plan accordingly and never cancel long-running operations.",".cursor/mcp.json":"# Model Context Protocol (MCP) Configuration\n\nPath: `.cursor/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.cursor/mcp.json)",".claude-plugin/marketplace.json":"# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.claude-plugin/marketplace.json)",".claude-plugin/plugin.json":"# claude-plugin Plugin Manifest\n\nPath: `.claude-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.claude-plugin/plugin.json)"},"files":{".github/copilot-instructions.md":"# Azure PowerShell Repository\n\nAzure PowerShell is a collection of 200+ PowerShell modules for managing Azure resources. The repository contains modules with two types of projects: SDK-based projects and AutoRest-generated projects, all built using .NET and MSBuild.\n\n## Architecture Overview\n\nAzure PowerShell consists of **two main development approaches for projects**:\n\n1. **SDK-based projects** - Hand-written C# cmdlets with custom business logic\n2. **AutoRest-based projects** - Auto-generated from OpenAPI specs via AutoRest PowerShell (mostly newer Azure services)\n\nAlways check project type before making changes - SDK vs AutoRest projects have different development patterns.\n\n### Modules vs Projects\n- **Module**: A complete PowerShell module (e.g., `Az.Compute`) that can consist of multiple projects\n- **Project**: Individual C# project within a module, developed with one approach (SDK-based OR AutoRest)\n- **Hybrid Module**: Contains both SDK-based and AutoRest projects (e.g., `Az.Resources` with both approaches)\n\nAlways reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.\n\n## Working Effectively\n\n### Prerequisites and Setup\nFirst-time setup requires these exact steps:\n- **CRITICAL**: Ensure you have network connectivity to Azure DevOps package feeds. Build failures with \"Name or service not known\" errors indicate firewall/connectivity issues that must be resolved before building.\n- Install .NET SDK 8.0+ and .NET Framework Dev Pack 4.7.2+: `dotnet --version` should show 8.0+\n- Install PowerShell 7+: `pwsh --version` should show 7.0+\n- Install platyPS module: `pwsh -c \"Install-Module -Name platyPS -Force -Scope CurrentUser\"`\n- Install PSScriptAnalyzer: `pwsh -c \"Install-Module -Name PSScriptAnalyzer -Force -Scope CurrentUser\"`\n- Set PowerShell execution policy: `pwsh -c \"Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser\"`\n\n### Building the Repository\n**NEVER CANCEL** any build commands - they may take 45-60 minutes to complete.\n\nCore build commands (run from repository root):\n- Clean: `dotnet msbuild build.proj /t:Clean` -- takes ~15 seconds\n- Full build: `dotnet msbuild build.proj` -- takes 45-60 minutes. NEVER CANCEL. Set timeout to 90+ minutes.\n- Build specific module: `dotnet msbuild build.proj /p:Scope=Accounts` -- takes 15-30 minutes\n- Generate help: `dotnet msbuild build.proj /t:GenerateHelp` -- takes 10-15 minutes. NEVER CANCEL. Set timeout to 30+ minutes.\n- Static analysis: `dotnet msbuild build.proj /t:StaticAnalysis` -- takes 10-15 minutes. NEVER CANCEL. Set timeout to 30+ minutes.\n- Run tests: `dotnet msbuild build.proj /t:Test` -- takes 15+ minutes. NEVER CANCEL. Set timeout to 45+ minutes.\n\nAlternative PowerShell build commands:\n- Build single module: `pwsh -c \"./tools/BuildScripts/BuildModules.ps1 -RepoRoot $(pwd) -Configuration Debug -TargetModule Accounts\"` -- takes 5-15 minutes depending on module size\n\n### Testing\n**NEVER CANCEL** test commands - they can take 15+ minutes.\n\nTest execution patterns:\n- All tests: `dotnet msbuild build.proj /t:Test` -- takes 15+ minutes. NEVER CANCEL.\n- Core tests only: `dotnet msbuild build.proj /t:Test /p:TestsToRun=Core` -- tests Compute, Network, Resources, Sql, Websites modules\n- Individual module tests: Navigate to module test directory and run `dotnet test` or use Pester\n\nTest framework uses .NET 6 target framework and Azure Test Framework for recording/playback of HTTP requests.\n\n### Manual Validation Scenarios\n**CRITICAL**: Always perform manual validation after making changes. Simply building is not sufficient.\n\n**Core validation steps:**\n1. Build succeeds: `dotnet msbuild build.proj /p:Scope=YourModule` \n2. Static analysis passes: `dotnet msbuild build.proj /t:StaticAnalysis`  \n3. Help generation succeeds: `dotnet msbuild build.proj /t:GenerateHelp`\n4. Tests pass: Navigate to test directory and run tests for your module\n\n**Manual testing scenarios:**\nAfter building, always test real functionality:\n```powershell\n# Import the built module\nImport-Module ./artifacts/Debug/Az.YourModule/Az.YourModule.psd1\n\n# Verify cmdlets are available  \nGet-Command -Module Az.YourModule\n\n# Test a basic cmdlet workflow (example for Compute module)\n# Get-AzVM -ResourceGroupName \"test-rg\" \n# New-AzVM -Name \"test-vm\" -ResourceGroupName \"test-rg\" -Location \"East US\" -Image \"Win2019Datacenter\" -Credential (Get-Credential)\n\n# For AutoRest projects, test generated cmdlets\n# Get-AzQuota -SubscriptionId \"your-subscription-id\"\n\n# Verify help is working\nGet-Help Your-AzCmdlet -Examples\n\n# Test parameter validation and error handling\nGet-AzVM -InvalidParameterName \"test\"\n```\n\n**Required pre-commit validation workflow:**\n1. Clean and build your module: `dotnet msbuild build.proj /t:Clean; dotnet msbuild build.proj /p:Scope=YourModule`\n2. Run static analysis: `dotnet msbuild build.proj /t:StaticAnalysis` \n3. Import and manually test your cmdlets using realistic scenarios\n4. Run your module's specific tests: `cd src/YourModule/YourModule.Test; dotnet test`\n5. Update ChangeLog.md files with your changes\n\n## Common Build Issues and Workarounds\n\n### Network Connectivity Issues\n**CRITICAL**: If you see \"Failed to download package\" or \"Name or service not known\" errors:\n- This indicates firewall/proxy issues blocking access to Azure DevOps package feeds\n- Affected URLs: `*.vsblob.vsassets.io`, `pkgs.dev.azure.com`\n- Workaround 1: Configure corporate proxy/firewall to allow these domains\n- Workaround 2: Use VPN or different network environment  \n- **DO NOT** attempt to modify NuGet.Config - this will break the build\n\n### Incomplete Builds\nIf build appears to hang or shows no progress:\n- **DO NOT CANCEL** - builds can take 45+ minutes with periods of no visible progress\n- Monitor system resources - builds are CPU and network intensive\n- Check network connectivity if stuck on package restore\n- Builds may pause during package downloads or complex compilation steps\n\n### Module-Specific Issues\n- Help generation requires platyPS module to be installed and functioning\n- Static analysis requires PSScriptAnalyzer module  \n- Some projects depend on specific Azure SDK versions from Azure DevOps feeds\n- Missing ChangeLog.md updates will cause PR validation to fail\n\n### Build Artifacts Issues\nIf you see errors like \"Cannot find path '/artifacts/Debug'\":\n- This means the build didn't complete successfully\n- Run a clean build: `dotnet msbuild build.proj /t:Clean; dotnet msbuild build.proj`\n- Check for network connectivity issues during package restore\n\n### PowerShell Module Import Issues\nIf `Import-Module` fails after build:\n- Ensure the build completed successfully and artifacts exist in `/artifacts/Debug/`\n- Try restarting PowerShell session to clear any cached modules\n- Use `-Force` parameter: `Import-Module ./artifacts/Debug/Az.YourModule/Az.YourModule.psd1 -Force`\n\n## Repository Structure and Navigation\n\n### Key Directories\n- `/src/` - All modules, containing both SDK-based projects and AutoRest-based projects\n- `/generated/` - Pure generated code for AutoRest-based projects  \n- `/tools/` - Build scripts, static analysis, testing utilities\n- `/documentation/` - Developer guides, design guidelines, testing docs\n- `/artifacts/` - Build outputs (created during build process)\n\n### Project Types\nTwo types of projects with different development approaches:\n\n**SDK-based projects** (in `/src/`):\n- Hand-written C# cmdlets using Azure .NET SDKs\n- Example: `/src/Accounts/`, `/src/Compute/`\n- Build using main repository build system\n- Follow patterns in `/documentation/development-docs/azure-powershell-developer-guide.md`\n\n**AutoRest-generated projects** (in `/generated/` and some `/src/`):\n- Generated from REST API specifications\n- Example: `/generated/Cdn/Cdn.Autorest/`\n- Have individual build scripts: `build-module.ps1`, `test-module.ps1`, `pack-module.ps1`\n- Follow patterns in individual module `how-to.md` files\n\n**Hybrid modules**: Some modules contain both SDK-based and AutoRest-based projects, requiring understanding of both approaches.\n\n### Important Files\n- `build.proj` - Main MSBuild file for entire repository\n- `NuGet.Config` - Package source configuration (DO NOT MODIFY)\n- `CONTRIBUTING.md` - Contribution guidelines and PR requirements\n- `ChangeLog.md` - Release notes (must be updated for changes)\n\n### Development Workflow Files\n- `/tools/BuildScripts/BuildModules.ps1` - Core module build automation\n- `/tools/GenerateHelp.ps1` - Help documentation generation\n- `/tools/StaticAnalysis/` - Code analysis and validation tools\n- `/tools/Test/` - Testing infrastructure and utilities\n\n## Typical Development Tasks\n\n### Adding a New Cmdlet\n1. Navigate to appropriate module directory in `/src/`\n2. Add cmdlet class following existing patterns\n3. Update module manifest (`.psd1`) if needed\n4. Build module: `dotnet msbuild build.proj /p:Scope=YourModule`\n5. Generate help: `dotnet msbuild build.proj /t:GenerateHelp`\n6. Add tests following patterns in `ModuleName.Test` directory\n7. Update `ChangeLog.md` with your changes\n\n### Individual Module Development\nFor individual module work when you don't need to build the entire repository:\n\n**SDK-based projects** (in `/src/`):\n```bash\n# Build just your module (much faster than full repository build)\ndotnet msbuild build.proj /p:Scope=YourModule\n\n# Build with dependencies (recommended)\ndotnet msbuild build.proj /p:TargetModule=YourModule\n```\n\n**AutoRest projects** (in `/src/` and `/generated/`):\n```bash\n# Most AutoRest projects are built as part of the main build system\ndotnet msbuild build.proj /p:Scope=YourModule\n\n# Some generated projects have individual test scripts\ncd generated/YourModule/YourModule.Autorest\n./test-module.ps1 -Playback    # Run tests in playback mode\n./test-module.ps1 -Record      # Record new tests (requires Azure connection)\n```\n\n**Module testing patterns:**\n```bash\n# Run tests for specific module \ncd src/YourModule/YourModule.Test\ndotnet test\n\n# For Pester-based tests\ncd src/YourModule/YourModule.Test  \npwsh -c \"Invoke-Pester\"\n```\n\n### Running Specific Module Tests\n1. Navigate to module test directory: `cd src/YourModule/YourModule.Test`\n2. Set up test environment (see `/documentation/testing-docs/using-azure-test-framework.md`)\n3. Run tests: `dotnet test` or use PowerShell/Pester patterns\n4. Record new tests in \"Record\" mode, run existing tests in \"Playback\" mode\n\n### Pre-commit Validation\nAlways run before submitting PR:\n1. `dotnet msbuild build.proj /t:Clean`\n2. `dotnet msbuild build.proj /p:Scope=YourModule` -- wait for completion, 15-30 minutes\n3. `dotnet msbuild build.proj /t:StaticAnalysis` -- wait for completion, 10-15 minutes  \n4. Test your specific changes manually by importing and using the cmdlets\n5. Update ChangeLog.md with your changes\n\n## Timing Expectations\n**CRITICAL**: All timing estimates include buffers. NEVER CANCEL commands before these timeouts:\n\n| Command | Expected Time | Timeout Setting |\n|---------|---------------|-----------------|\n| Clean build | 15 seconds | 60 seconds |\n| Full repository build | 45-60 minutes | 90 minutes |\n| Single module build | 15-30 minutes | 45 minutes |\n| Help generation | 10-15 minutes | 30 minutes |\n| Static analysis | 10-15 minutes | 30 minutes |  \n| Test execution | 15+ minutes | 45 minutes |\n\n**NEVER CANCEL** any build or test command before the timeout period. Builds may show no progress for extended periods while downloading packages or compiling.\n\n## Files to Always Update\n- **ChangeLog.md** - Add entry under \"## Upcoming Release\" section\n- **Module-specific ChangeLog.md** - Located at `src/YourModule/YourModule/ChangeLog.md`\n- **Help documentation** - Regenerate using help generation commands\n- **Tests** - Add or update tests for new functionality\n\n## Common Command Reference\n```bash\n# Repository setup\ndotnet --version                    # Check .NET version (need 8.0+)\npwsh --version                     # Check PowerShell version (need 7.0+)\n\n# Build commands  \ndotnet msbuild build.proj /t:Clean                    # Clean build\ndotnet msbuild build.proj                             # Full build (45-60 min)\ndotnet msbuild build.proj /p:Scope=ModuleName         # Build specific module\ndotnet msbuild build.proj /t:GenerateHelp             # Generate help (10-15 min)  \ndotnet msbuild build.proj /t:StaticAnalysis           # Run static analysis (10-15 min)\ndotnet msbuild build.proj /t:Test                     # Run tests (15+ min)\n\n# Module development\npwsh -c \"Import-Module ./artifacts/Debug/Az.ModuleName/Az.ModuleName.psd1\"\npwsh -c \"Get-Command -Module Az.ModuleName\"\n\n# Individual module builds (for AutoRest projects)\ncd generated/ModuleName/ModuleName.Autorest\n./build-module.ps1                 # If available\n./test-module.ps1                  # If available\n```\n\nRemember: This is a large, complex repository with extensive build times. Plan accordingly and never cancel long-running operations.",".cursor/mcp.json":"# Model Context Protocol (MCP) Configuration\n\nPath: `.cursor/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.cursor/mcp.json)",".claude-plugin/marketplace.json":"# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.claude-plugin/marketplace.json)",".claude-plugin/plugin.json":"# claude-plugin Plugin Manifest\n\nPath: `.claude-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.claude-plugin/plugin.json)"},"items":[{"name":"copilot-instructions.md","path":".github/copilot-instructions.md","rawUrl":"https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.github/copilot-instructions.md","title":"GitHub Copilot Instructions","category":"copilot-instructions","format":"markdown","content":"# Azure PowerShell Repository\n\nAzure PowerShell is a collection of 200+ PowerShell modules for managing Azure resources. The repository contains modules with two types of projects: SDK-based projects and AutoRest-generated projects, all built using .NET and MSBuild.\n\n## Architecture Overview\n\nAzure PowerShell consists of **two main development approaches for projects**:\n\n1. **SDK-based projects** - Hand-written C# cmdlets with custom business logic\n2. **AutoRest-based projects** - Auto-generated from OpenAPI specs via AutoRest PowerShell (mostly newer Azure services)\n\nAlways check project type before making changes - SDK vs AutoRest projects have different development patterns.\n\n### Modules vs Projects\n- **Module**: A complete PowerShell module (e.g., `Az.Compute`) that can consist of multiple projects\n- **Project**: Individual C# project within a module, developed with one approach (SDK-based OR AutoRest)\n- **Hybrid Module**: Contains both SDK-based and AutoRest projects (e.g., `Az.Resources` with both approaches)\n\nAlways reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.\n\n## Working Effectively\n\n### Prerequisites and Setup\nFirst-time setup requires these exact steps:\n- **CRITICAL**: Ensure you have network connectivity to Azure DevOps package feeds. Build failures with \"Name or service not known\" errors indicate firewall/connectivity issues that must be resolved before building.\n- Install .NET SDK 8.0+ and .NET Framework Dev Pack 4.7.2+: `dotnet --version` should show 8.0+\n- Install PowerShell 7+: `pwsh --version` should show 7.0+\n- Install platyPS module: `pwsh -c \"Install-Module -Name platyPS -Force -Scope CurrentUser\"`\n- Install PSScriptAnalyzer: `pwsh -c \"Install-Module -Name PSScriptAnalyzer -Force -Scope CurrentUser\"`\n- Set PowerShell execution policy: `pwsh -c \"Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser\"`\n\n### Building the Repository\n**NEVER CANCEL** any build commands - they may take 45-60 minutes to complete.\n\nCore build commands (run from repository root):\n- Clean: `dotnet msbuild build.proj /t:Clean` -- takes ~15 seconds\n- Full build: `dotnet msbuild build.proj` -- takes 45-60 minutes. NEVER CANCEL. Set timeout to 90+ minutes.\n- Build specific module: `dotnet msbuild build.proj /p:Scope=Accounts` -- takes 15-30 minutes\n- Generate help: `dotnet msbuild build.proj /t:GenerateHelp` -- takes 10-15 minutes. NEVER CANCEL. Set timeout to 30+ minutes.\n- Static analysis: `dotnet msbuild build.proj /t:StaticAnalysis` -- takes 10-15 minutes. NEVER CANCEL. Set timeout to 30+ minutes.\n- Run tests: `dotnet msbuild build.proj /t:Test` -- takes 15+ minutes. NEVER CANCEL. Set timeout to 45+ minutes.\n\nAlternative PowerShell build commands:\n- Build single module: `pwsh -c \"./tools/BuildScripts/BuildModules.ps1 -RepoRoot $(pwd) -Configuration Debug -TargetModule Accounts\"` -- takes 5-15 minutes depending on module size\n\n### Testing\n**NEVER CANCEL** test commands - they can take 15+ minutes.\n\nTest execution patterns:\n- All tests: `dotnet msbuild build.proj /t:Test` -- takes 15+ minutes. NEVER CANCEL.\n- Core tests only: `dotnet msbuild build.proj /t:Test /p:TestsToRun=Core` -- tests Compute, Network, Resources, Sql, Websites modules\n- Individual module tests: Navigate to module test directory and run `dotnet test` or use Pester\n\nTest framework uses .NET 6 target framework and Azure Test Framework for recording/playback of HTTP requests.\n\n### Manual Validation Scenarios\n**CRITICAL**: Always perform manual validation after making changes. Simply building is not sufficient.\n\n**Core validation steps:**\n1. Build succeeds: `dotnet msbuild build.proj /p:Scope=YourModule` \n2. Static analysis passes: `dotnet msbuild build.proj /t:StaticAnalysis`  \n3. Help generation succeeds: `dotnet msbuild build.proj /t:GenerateHelp`\n4. Tests pass: Navigate to test directory and run tests for your module\n\n**Manual testing scenarios:**\nAfter building, always test real functionality:\n```powershell\n# Import the built module\nImport-Module ./artifacts/Debug/Az.YourModule/Az.YourModule.psd1\n\n# Verify cmdlets are available  \nGet-Command -Module Az.YourModule\n\n# Test a basic cmdlet workflow (example for Compute module)\n# Get-AzVM -ResourceGroupName \"test-rg\" \n# New-AzVM -Name \"test-vm\" -ResourceGroupName \"test-rg\" -Location \"East US\" -Image \"Win2019Datacenter\" -Credential (Get-Credential)\n\n# For AutoRest projects, test generated cmdlets\n# Get-AzQuota -SubscriptionId \"your-subscription-id\"\n\n# Verify help is working\nGet-Help Your-AzCmdlet -Examples\n\n# Test parameter validation and error handling\nGet-AzVM -InvalidParameterName \"test\"\n```\n\n**Required pre-commit validation workflow:**\n1. Clean and build your module: `dotnet msbuild build.proj /t:Clean; dotnet msbuild build.proj /p:Scope=YourModule`\n2. Run static analysis: `dotnet msbuild build.proj /t:StaticAnalysis` \n3. Import and manually test your cmdlets using realistic scenarios\n4. Run your module's specific tests: `cd src/YourModule/YourModule.Test; dotnet test`\n5. Update ChangeLog.md files with your changes\n\n## Common Build Issues and Workarounds\n\n### Network Connectivity Issues\n**CRITICAL**: If you see \"Failed to download package\" or \"Name or service not known\" errors:\n- This indicates firewall/proxy issues blocking access to Azure DevOps package feeds\n- Affected URLs: `*.vsblob.vsassets.io`, `pkgs.dev.azure.com`\n- Workaround 1: Configure corporate proxy/firewall to allow these domains\n- Workaround 2: Use VPN or different network environment  \n- **DO NOT** attempt to modify NuGet.Config - this will break the build\n\n### Incomplete Builds\nIf build appears to hang or shows no progress:\n- **DO NOT CANCEL** - builds can take 45+ minutes with periods of no visible progress\n- Monitor system resources - builds are CPU and network intensive\n- Check network connectivity if stuck on package restore\n- Builds may pause during package downloads or complex compilation steps\n\n### Module-Specific Issues\n- Help generation requires platyPS module to be installed and functioning\n- Static analysis requires PSScriptAnalyzer module  \n- Some projects depend on specific Azure SDK versions from Azure DevOps feeds\n- Missing ChangeLog.md updates will cause PR validation to fail\n\n### Build Artifacts Issues\nIf you see errors like \"Cannot find path '/artifacts/Debug'\":\n- This means the build didn't complete successfully\n- Run a clean build: `dotnet msbuild build.proj /t:Clean; dotnet msbuild build.proj`\n- Check for network connectivity issues during package restore\n\n### PowerShell Module Import Issues\nIf `Import-Module` fails after build:\n- Ensure the build completed successfully and artifacts exist in `/artifacts/Debug/`\n- Try restarting PowerShell session to clear any cached modules\n- Use `-Force` parameter: `Import-Module ./artifacts/Debug/Az.YourModule/Az.YourModule.psd1 -Force`\n\n## Repository Structure and Navigation\n\n### Key Directories\n- `/src/` - All modules, containing both SDK-based projects and AutoRest-based projects\n- `/generated/` - Pure generated code for AutoRest-based projects  \n- `/tools/` - Build scripts, static analysis, testing utilities\n- `/documentation/` - Developer guides, design guidelines, testing docs\n- `/artifacts/` - Build outputs (created during build process)\n\n### Project Types\nTwo types of projects with different development approaches:\n\n**SDK-based projects** (in `/src/`):\n- Hand-written C# cmdlets using Azure .NET SDKs\n- Example: `/src/Accounts/`, `/src/Compute/`\n- Build using main repository build system\n- Follow patterns in `/documentation/development-docs/azure-powershell-developer-guide.md`\n\n**AutoRest-generated projects** (in `/generated/` and some `/src/`):\n- Generated from REST API specifications\n- Example: `/generated/Cdn/Cdn.Autorest/`\n- Have individual build scripts: `build-module.ps1`, `test-module.ps1`, `pack-module.ps1`\n- Follow patterns in individual module `how-to.md` files\n\n**Hybrid modules**: Some modules contain both SDK-based and AutoRest-based projects, requiring understanding of both approaches.\n\n### Important Files\n- `build.proj` - Main MSBuild file for entire repository\n- `NuGet.Config` - Package source configuration (DO NOT MODIFY)\n- `CONTRIBUTING.md` - Contribution guidelines and PR requirements\n- `ChangeLog.md` - Release notes (must be updated for changes)\n\n### Development Workflow Files\n- `/tools/BuildScripts/BuildModules.ps1` - Core module build automation\n- `/tools/GenerateHelp.ps1` - Help documentation generation\n- `/tools/StaticAnalysis/` - Code analysis and validation tools\n- `/tools/Test/` - Testing infrastructure and utilities\n\n## Typical Development Tasks\n\n### Adding a New Cmdlet\n1. Navigate to appropriate module directory in `/src/`\n2. Add cmdlet class following existing patterns\n3. Update module manifest (`.psd1`) if needed\n4. Build module: `dotnet msbuild build.proj /p:Scope=YourModule`\n5. Generate help: `dotnet msbuild build.proj /t:GenerateHelp`\n6. Add tests following patterns in `ModuleName.Test` directory\n7. Update `ChangeLog.md` with your changes\n\n### Individual Module Development\nFor individual module work when you don't need to build the entire repository:\n\n**SDK-based projects** (in `/src/`):\n```bash\n# Build just your module (much faster than full repository build)\ndotnet msbuild build.proj /p:Scope=YourModule\n\n# Build with dependencies (recommended)\ndotnet msbuild build.proj /p:TargetModule=YourModule\n```\n\n**AutoRest projects** (in `/src/` and `/generated/`):\n```bash\n# Most AutoRest projects are built as part of the main build system\ndotnet msbuild build.proj /p:Scope=YourModule\n\n# Some generated projects have individual test scripts\ncd generated/YourModule/YourModule.Autorest\n./test-module.ps1 -Playback    # Run tests in playback mode\n./test-module.ps1 -Record      # Record new tests (requires Azure connection)\n```\n\n**Module testing patterns:**\n```bash\n# Run tests for specific module \ncd src/YourModule/YourModule.Test\ndotnet test\n\n# For Pester-based tests\ncd src/YourModule/YourModule.Test  \npwsh -c \"Invoke-Pester\"\n```\n\n### Running Specific Module Tests\n1. Navigate to module test directory: `cd src/YourModule/YourModule.Test`\n2. Set up test environment (see `/documentation/testing-docs/using-azure-test-framework.md`)\n3. Run tests: `dotnet test` or use PowerShell/Pester patterns\n4. Record new tests in \"Record\" mode, run existing tests in \"Playback\" mode\n\n### Pre-commit Validation\nAlways run before submitting PR:\n1. `dotnet msbuild build.proj /t:Clean`\n2. `dotnet msbuild build.proj /p:Scope=YourModule` -- wait for completion, 15-30 minutes\n3. `dotnet msbuild build.proj /t:StaticAnalysis` -- wait for completion, 10-15 minutes  \n4. Test your specific changes manually by importing and using the cmdlets\n5. Update ChangeLog.md with your changes\n\n## Timing Expectations\n**CRITICAL**: All timing estimates include buffers. NEVER CANCEL commands before these timeouts:\n\n| Command | Expected Time | Timeout Setting |\n|---------|---------------|-----------------|\n| Clean build | 15 seconds | 60 seconds |\n| Full repository build | 45-60 minutes | 90 minutes |\n| Single module build | 15-30 minutes | 45 minutes |\n| Help generation | 10-15 minutes | 30 minutes |\n| Static analysis | 10-15 minutes | 30 minutes |  \n| Test execution | 15+ minutes | 45 minutes |\n\n**NEVER CANCEL** any build or test command before the timeout period. Builds may show no progress for extended periods while downloading packages or compiling.\n\n## Files to Always Update\n- **ChangeLog.md** - Add entry under \"## Upcoming Release\" section\n- **Module-specific ChangeLog.md** - Located at `src/YourModule/YourModule/ChangeLog.md`\n- **Help documentation** - Regenerate using help generation commands\n- **Tests** - Add or update tests for new functionality\n\n## Common Command Reference\n```bash\n# Repository setup\ndotnet --version                    # Check .NET version (need 8.0+)\npwsh --version                     # Check PowerShell version (need 7.0+)\n\n# Build commands  \ndotnet msbuild build.proj /t:Clean                    # Clean build\ndotnet msbuild build.proj                             # Full build (45-60 min)\ndotnet msbuild build.proj /p:Scope=ModuleName         # Build specific module\ndotnet msbuild build.proj /t:GenerateHelp             # Generate help (10-15 min)  \ndotnet msbuild build.proj /t:StaticAnalysis           # Run static analysis (10-15 min)\ndotnet msbuild build.proj /t:Test                     # Run tests (15+ min)\n\n# Module development\npwsh -c \"Import-Module ./artifacts/Debug/Az.ModuleName/Az.ModuleName.psd1\"\npwsh -c \"Get-Command -Module Az.ModuleName\"\n\n# Individual module builds (for AutoRest projects)\ncd generated/ModuleName/ModuleName.Autorest\n./build-module.ps1                 # If available\n./test-module.ps1                  # If available\n```\n\nRemember: This is a large, complex repository with extensive build times. Plan accordingly and never cancel long-running operations.","isInternal":false,"tokens":3085,"sizeBytes":12983},{"name":"marketplace.json","path":".claude-plugin/marketplace.json","rawUrl":"https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.claude-plugin/marketplace.json","title":"Claude Plugin Marketplace Catalog","category":"marketplace","format":"json","content":"# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.claude-plugin/marketplace.json)","tokens":300,"sizeBytes":201},{"name":"plugin.json","path":".claude-plugin/plugin.json","rawUrl":"https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.claude-plugin/plugin.json","title":"claude-plugin Plugin Manifest","category":"plugin-manifest","format":"json","content":"# claude-plugin Plugin Manifest\n\nPath: `.claude-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.claude-plugin/plugin.json)","tokens":300,"sizeBytes":187},{"name":"mcp.json","path":".cursor/mcp.json","rawUrl":"https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.cursor/mcp.json","title":"Model Context Protocol (MCP) Configuration","category":"mcp-config","format":"json","content":"# Model Context Protocol (MCP) Configuration\n\nPath: `.cursor/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.cursor/mcp.json)","tokens":300,"sizeBytes":180}],"systemPromptSnippet":"<yakaai_skills repo=\"Azure/azure-powershell\">\n<!-- File: .github/copilot-instructions.md (Tokens: ~3085 | Category: copilot-instructions) -->\n# Azure PowerShell Repository\n\nAzure PowerShell is a collection of 200+ PowerShell modules for managing Azure resources. The repository contains modules with two types of projects: SDK-based projects and AutoRest-generated projects, all built using .NET and MSBuild.\n\n## Architecture Overview\n\nAzure PowerShell consists of **two main development approaches for projects**:\n\n1. **SDK-based projects** - Hand-written C# cmdlets with custom business logic\n2. **AutoRest-based projects** - Auto-generated from OpenAPI specs via AutoRest PowerShell (mostly newer Azure services)\n\nAlways check project type before making changes - SDK vs AutoRest projects have different development patterns.\n\n### Modules vs Projects\n- **Module**: A complete PowerShell module (e.g., `Az.Compute`) that can consist of multiple projects\n- **Project**: Individual C# project within a module, developed with one approach (SDK-based OR AutoRest)\n- **Hybrid Module**: Contains both SDK-based and AutoRest projects (e.g., `Az.Resources` with both approaches)\n\nAlways reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.\n\n## Working Effectively\n\n### Prerequisites and Setup\nFirst-time setup requires these exact steps:\n- **CRITICAL**: Ensure you have network connectivity to Azure DevOps package feeds. Build failures with \"Name or service not known\" errors indicate firewall/connectivity issues that must be resolved before building.\n- Install .NET SDK 8.0+ and .NET Framework Dev Pack 4.7.2+: `dotnet --version` should show 8.0+\n- Install PowerShell 7+: `pwsh --version` should show 7.0+\n- Install platyPS module: `pwsh -c \"Install-Module -Name platyPS -Force -Scope CurrentUser\"`\n- Install PSScriptAnalyzer: `pwsh -c \"Install-Module -Name PSScriptAnalyzer -Force -Scope CurrentUser\"`\n- Set PowerShell execution policy: `pwsh -c \"Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser\"`\n\n### Building the Repository\n**NEVER CANCEL** any build commands - they may take 45-60 minutes to complete.\n\nCore build commands (run from repository root):\n- Clean: `dotnet msbuild build.proj /t:Clean` -- takes ~15 seconds\n- Full build: `dotnet msbuild build.proj` -- takes 45-60 minutes. NEVER CANCEL. Set timeout to 90+ minutes.\n- Build specific module: `dotnet msbuild build.proj /p:Scope=Accounts` -- takes 15-30 minutes\n- Generate help: `dotnet msbuild build.proj /t:GenerateHelp` -- takes 10-15 minutes. NEVER CANCEL. Set timeout to 30+ minutes.\n- Static analysis: `dotnet msbuild build.proj /t:StaticAnalysis` -- takes 10-15 minutes. NEVER CANCEL. Set timeout to 30+ minutes.\n- Run tests: `dotnet msbuild build.proj /t:Test` -- takes 15+ minutes. NEVER CANCEL. Set timeout to 45+ minutes.\n\nAlternative PowerShell build commands:\n- Build single module: `pwsh -c \"./tools/BuildScripts/BuildModules.ps1 -RepoRoot $(pwd) -Configuration Debug -TargetModule Accounts\"` -- takes 5-15 minutes depending on module size\n\n### Testing\n**NEVER CANCEL** test commands - they can take 15+ minutes.\n\nTest execution patterns:\n- All tests: `dotnet msbuild build.proj /t:Test` -- takes 15+ minutes. NEVER CANCEL.\n- Core tests only: `dotnet msbuild build.proj /t:Test /p:TestsToRun=Core` -- tests Compute, Network, Resources, Sql, Websites modules\n- Individual module tests: Navigate to module test directory and run `dotnet test` or use Pester\n\nTest framework uses .NET 6 target framework and Azure Test Framework for recording/playback of HTTP requests.\n\n### Manual Validation Scenarios\n**CRITICAL**: Always perform manual validation after making changes. Simply building is not sufficient.\n\n**Core validation steps:**\n1. Build succeeds: `dotnet msbuild build.proj /p:Scope=YourModule` \n2. Static analysis passes: `dotnet msbuild build.proj /t:StaticAnalysis`  \n3. Help generation succeeds: `dotnet msbuild build.proj /t:GenerateHelp`\n4. Tests pass: Navigate to test directory and run tests for your module\n\n**Manual testing scenarios:**\nAfter building, always test real functionality:\n```powershell\n# Import the built module\nImport-Module ./artifacts/Debug/Az.YourModule/Az.YourModule.psd1\n\n# Verify cmdlets are available  \nGet-Command -Module Az.YourModule\n\n# Test a basic cmdlet workflow (example for Compute module)\n# Get-AzVM -ResourceGroupName \"test-rg\" \n# New-AzVM -Name \"test-vm\" -ResourceGroupName \"test-rg\" -Location \"East US\" -Image \"Win2019Datacenter\" -Credential (Get-Credential)\n\n# For AutoRest projects, test generated cmdlets\n# Get-AzQuota -SubscriptionId \"your-subscription-id\"\n\n# Verify help is working\nGet-Help Your-AzCmdlet -Examples\n\n# Test parameter validation and error handling\nGet-AzVM -InvalidParameterName \"test\"\n```\n\n**Required pre-commit validation workflow:**\n1. Clean and build your module: `dotnet msbuild build.proj /t:Clean; dotnet msbuild build.proj /p:Scope=YourModule`\n2. Run static analysis: `dotnet msbuild build.proj /t:StaticAnalysis` \n3. Import and manually test your cmdlets using realistic scenarios\n4. Run your module's specific tests: `cd src/YourModule/YourModule.Test; dotnet test`\n5. Update ChangeLog.md files with your changes\n\n## Common Build Issues and Workarounds\n\n### Network Connectivity Issues\n**CRITICAL**: If you see \"Failed to download package\" or \"Name or service not known\" errors:\n- This indicates firewall/proxy issues blocking access to Azure DevOps package feeds\n- Affected URLs: `*.vsblob.vsassets.io`, `pkgs.dev.azure.com`\n- Workaround 1: Configure corporate proxy/firewall to allow these domains\n- Workaround 2: Use VPN or different network environment  \n- **DO NOT** attempt to modify NuGet.Config - this will break the build\n\n### Incomplete Builds\nIf build appears to hang or shows no progress:\n- **DO NOT CANCEL** - builds can take 45+ minutes with periods of no visible progress\n- Monitor system resources - builds are CPU and network intensive\n- Check network connectivity if stuck on package restore\n- Builds may pause during package downloads or complex compilation steps\n\n### Module-Specific Issues\n- Help generation requires platyPS module to be installed and functioning\n- Static analysis requires PSScriptAnalyzer module  \n- Some projects depend on specific Azure SDK versions from Azure DevOps feeds\n- Missing ChangeLog.md updates will cause PR validation to fail\n\n### Build Artifacts Issues\nIf you see errors like \"Cannot find path '/artifacts/Debug'\":\n- This means the build didn't complete successfully\n- Run a clean build: `dotnet msbuild build.proj /t:Clean; dotnet msbuild build.proj`\n- Check for network connectivity issues during package restore\n\n### PowerShell Module Import Issues\nIf `Import-Module` fails after build:\n- Ensure the build completed successfully and artifacts exist in `/artifacts/Debug/`\n- Try restarting PowerShell session to clear any cached modules\n- Use `-Force` parameter: `Import-Module ./artifacts/Debug/Az.YourModule/Az.YourModule.psd1 -Force`\n\n## Repository Structure and Navigation\n\n### Key Directories\n- `/src/` - All modules, containing both SDK-based projects and AutoRest-based projects\n- `/generated/` - Pure generated code for AutoRest-based projects  \n- `/tools/` - Build scripts, static analysis, testing utilities\n- `/documentation/` - Developer guides, design guidelines, testing docs\n- `/artifacts/` - Build outputs (created during build process)\n\n### Project Types\nTwo types of projects with different development approaches:\n\n**SDK-based projects** (in `/src/`):\n- Hand-written C# cmdlets using Azure .NET SDKs\n- Example: `/src/Accounts/`, `/src/Compute/`\n- Build using main repository build system\n- Follow patterns in `/documentation/development-docs/azure-powershell-developer-guide.md`\n\n**AutoRest-generated projects** (in `/generated/` and some `/src/`):\n- Generated from REST API specifications\n- Example: `/generated/Cdn/Cdn.Autorest/`\n- Have individual build scripts: `build-module.ps1`, `test-module.ps1`, `pack-module.ps1`\n- Follow patterns in individual module `how-to.md` files\n\n**Hybrid modules**: Some modules contain both SDK-based and AutoRest-based projects, requiring understanding of both approaches.\n\n### Important Files\n- `build.proj` - Main MSBuild file for entire repository\n- `NuGet.Config` - Package source configuration (DO NOT MODIFY)\n- `CONTRIBUTING.md` - Contribution guidelines and PR requirements\n- `ChangeLog.md` - Release notes (must be updated for changes)\n\n### Development Workflow Files\n- `/tools/BuildScripts/BuildModules.ps1` - Core module build automation\n- `/tools/GenerateHelp.ps1` - Help documentation generation\n- `/tools/StaticAnalysis/` - Code analysis and validation tools\n- `/tools/Test/` - Testing infrastructure and utilities\n\n## Typical Development Tasks\n\n### Adding a New Cmdlet\n1. Navigate to appropriate module directory in `/src/`\n2. Add cmdlet class following existing patterns\n3. Update module manifest (`.psd1`) if needed\n4. Build module: `dotnet msbuild build.proj /p:Scope=YourModule`\n5. Generate help: `dotnet msbuild build.proj /t:GenerateHelp`\n6. Add tests following patterns in `ModuleName.Test` directory\n7. Update `ChangeLog.md` with your changes\n\n### Individual Module Development\nFor individual module work when you don't need to build the entire repository:\n\n**SDK-based projects** (in `/src/`):\n```bash\n# Build just your module (much faster than full repository build)\ndotnet msbuild build.proj /p:Scope=YourModule\n\n# Build with dependencies (recommended)\ndotnet msbuild build.proj /p:TargetModule=YourModule\n```\n\n**AutoRest projects** (in `/src/` and `/generated/`):\n```bash\n# Most AutoRest projects are built as part of the main build system\ndotnet msbuild build.proj /p:Scope=YourModule\n\n# Some generated projects have individual test scripts\ncd generated/YourModule/YourModule.Autorest\n./test-module.ps1 -Playback    # Run tests in playback mode\n./test-module.ps1 -Record      # Record new tests (requires Azure connection)\n```\n\n**Module testing patterns:**\n```bash\n# Run tests for specific module \ncd src/YourModule/YourModule.Test\ndotnet test\n\n# For Pester-based tests\ncd src/YourModule/YourModule.Test  \npwsh -c \"Invoke-Pester\"\n```\n\n### Running Specific Module Tests\n1. Navigate to module test directory: `cd src/YourModule/YourModule.Test`\n2. Set up test environment (see `/documentation/testing-docs/using-azure-test-framework.md`)\n3. Run tests: `dotnet test` or use PowerShell/Pester patterns\n4. Record new tests in \"Record\" mode, run existing tests in \"Playback\" mode\n\n### Pre-commit Validation\nAlways run before submitting PR:\n1. `dotnet msbuild build.proj /t:Clean`\n2. `dotnet msbuild build.proj /p:Scope=YourModule` -- wait for completion, 15-30 minutes\n3. `dotnet msbuild build.proj /t:StaticAnalysis` -- wait for completion, 10-15 minutes  \n4. Test your specific changes manually by importing and using the cmdlets\n5. Update ChangeLog.md with your changes\n\n## Timing Expectations\n**CRITICAL**: All timing estimates include buffers. NEVER CANCEL commands before these timeouts:\n\n| Command | Expected Time | Timeout Setting |\n|---------|---------------|-----------------|\n| Clean build | 15 seconds | 60 seconds |\n| Full repository build | 45-60 minutes | 90 minutes |\n| Single module build | 15-30 minutes | 45 minutes |\n| Help generation | 10-15 minutes | 30 minutes |\n| Static analysis | 10-15 minutes | 30 minutes |  \n| Test execution | 15+ minutes | 45 minutes |\n\n**NEVER CANCEL** any build or test command before the timeout period. Builds may show no progress for extended periods while downloading packages or compiling.\n\n## Files to Always Update\n- **ChangeLog.md** - Add entry under \"## Upcoming Release\" section\n- **Module-specific ChangeLog.md** - Located at `src/YourModule/YourModule/ChangeLog.md`\n- **Help documentation** - Regenerate using help generation commands\n- **Tests** - Add or update tests for new functionality\n\n## Common Command Reference\n```bash\n# Repository setup\ndotnet --version                    # Check .NET version (need 8.0+)\npwsh --version                     # Check PowerShell version (need 7.0+)\n\n# Build commands  \ndotnet msbuild build.proj /t:Clean                    # Clean build\ndotnet msbuild build.proj                             # Full build (45-60 min)\ndotnet msbuild build.proj /p:Scope=ModuleName         # Build specific module\ndotnet msbuild build.proj /t:GenerateHelp             # Generate help (10-15 min)  \ndotnet msbuild build.proj /t:StaticAnalysis           # Run static analysis (10-15 min)\ndotnet msbuild build.proj /t:Test                     # Run tests (15+ min)\n\n# Module development\npwsh -c \"Import-Module ./artifacts/Debug/Az.ModuleName/Az.ModuleName.psd1\"\npwsh -c \"Get-Command -Module Az.ModuleName\"\n\n# Individual module builds (for AutoRest projects)\ncd generated/ModuleName/ModuleName.Autorest\n./build-module.ps1                 # If available\n./test-module.ps1                  # If available\n```\n\nRemember: This is a large, complex repository with extensive build times. Plan accordingly and never cancel long-running operations.\n\n<!-- File: .claude-plugin/marketplace.json (Tokens: ~300 | Category: marketplace) -->\n# Claude Plugin Marketplace Catalog\n\nPath: `.claude-plugin/marketplace.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.claude-plugin/marketplace.json)\n\n<!-- File: .claude-plugin/plugin.json (Tokens: ~300 | Category: plugin-manifest) -->\n# claude-plugin Plugin Manifest\n\nPath: `.claude-plugin/plugin.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.claude-plugin/plugin.json)\n\n<!-- File: .cursor/mcp.json (Tokens: ~300 | Category: mcp-config) -->\n# Model Context Protocol (MCP) Configuration\n\nPath: `.cursor/mcp.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/Azure/azure-powershell/HEAD/.cursor/mcp.json)\n</yakaai_skills>"}