@mytechtoday/augment-extensions 0.1.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +614 -39
- package/augment-extensions/coding-standards/bash/README.md +196 -0
- package/augment-extensions/coding-standards/bash/module.json +163 -0
- package/augment-extensions/coding-standards/bash/rules/naming-conventions.md +336 -0
- package/augment-extensions/coding-standards/bash/rules/universal-standards.md +289 -0
- package/augment-extensions/coding-standards/css/README.md +40 -0
- package/augment-extensions/coding-standards/css/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/css/module.json +44 -0
- package/augment-extensions/coding-standards/css/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/css/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html/README.md +40 -0
- package/augment-extensions/coding-standards/html/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html/module.json +44 -0
- package/augment-extensions/coding-standards/html/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/README.md +194 -0
- package/augment-extensions/coding-standards/html-css-js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/html-css-js/examples/css-examples.css +550 -0
- package/augment-extensions/coding-standards/html-css-js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/html-css-js/examples/html-examples.html +267 -0
- package/augment-extensions/coding-standards/html-css-js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/html-css-js/examples/responsive-layout.html +505 -0
- package/augment-extensions/coding-standards/html-css-js/module.json +48 -0
- package/augment-extensions/coding-standards/html-css-js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-modern-features.md +448 -0
- package/augment-extensions/coding-standards/html-css-js/rules/css-standards.md +492 -0
- package/augment-extensions/coding-standards/html-css-js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/html-css-js/rules/html-standards.md +349 -0
- package/augment-extensions/coding-standards/html-css-js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/html-css-js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/html-css-js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/js/README.md +46 -0
- package/augment-extensions/coding-standards/js/examples/async-examples.js +487 -0
- package/augment-extensions/coding-standards/js/examples/dom-examples.js +667 -0
- package/augment-extensions/coding-standards/js/examples/javascript-examples.js +612 -0
- package/augment-extensions/coding-standards/js/module.json +49 -0
- package/augment-extensions/coding-standards/js/rules/async-patterns.md +515 -0
- package/augment-extensions/coding-standards/js/rules/dom-manipulation.md +439 -0
- package/augment-extensions/coding-standards/js/rules/javascript-standards.md +486 -0
- package/augment-extensions/coding-standards/js/rules/performance.md +463 -0
- package/augment-extensions/coding-standards/js/rules/tooling.md +543 -0
- package/augment-extensions/coding-standards/php/README.md +248 -0
- package/augment-extensions/coding-standards/php/examples/api-endpoint-example.php +204 -0
- package/augment-extensions/coding-standards/php/examples/cli-command-example.php +206 -0
- package/augment-extensions/coding-standards/php/examples/legacy-refactoring-example.php +234 -0
- package/augment-extensions/coding-standards/php/examples/web-application-example.php +211 -0
- package/augment-extensions/coding-standards/php/examples/woocommerce-extension-example.php +215 -0
- package/augment-extensions/coding-standards/php/examples/wordpress-plugin-example.php +189 -0
- package/augment-extensions/coding-standards/php/module.json +166 -0
- package/augment-extensions/coding-standards/php/rules/api-development.md +480 -0
- package/augment-extensions/coding-standards/php/rules/category-configuration.md +332 -0
- package/augment-extensions/coding-standards/php/rules/cli-tools.md +472 -0
- package/augment-extensions/coding-standards/php/rules/cms-integration.md +561 -0
- package/augment-extensions/coding-standards/php/rules/code-quality.md +402 -0
- package/augment-extensions/coding-standards/php/rules/documentation.md +425 -0
- package/augment-extensions/coding-standards/php/rules/ecommerce.md +627 -0
- package/augment-extensions/coding-standards/php/rules/error-handling.md +336 -0
- package/augment-extensions/coding-standards/php/rules/legacy-migration.md +677 -0
- package/augment-extensions/coding-standards/php/rules/naming-conventions.md +279 -0
- package/augment-extensions/coding-standards/php/rules/performance.md +392 -0
- package/augment-extensions/coding-standards/php/rules/psr-standards.md +186 -0
- package/augment-extensions/coding-standards/php/rules/security.md +358 -0
- package/augment-extensions/coding-standards/php/rules/testing.md +403 -0
- package/augment-extensions/coding-standards/php/rules/type-declarations.md +331 -0
- package/augment-extensions/coding-standards/php/rules/web-applications.md +426 -0
- package/augment-extensions/coding-standards/powershell/README.md +154 -0
- package/augment-extensions/coding-standards/powershell/examples/admin-example.ps1 +272 -0
- package/augment-extensions/coding-standards/powershell/examples/automation-example.ps1 +173 -0
- package/augment-extensions/coding-standards/powershell/examples/cloud-example.ps1 +243 -0
- package/augment-extensions/coding-standards/powershell/examples/cross-platform-example.ps1 +297 -0
- package/augment-extensions/coding-standards/powershell/examples/dsc-example.ps1 +224 -0
- package/augment-extensions/coding-standards/powershell/examples/legacy-migration-example.ps1 +340 -0
- package/augment-extensions/coding-standards/powershell/examples/module-example.psm1 +255 -0
- package/augment-extensions/coding-standards/powershell/module.json +165 -0
- package/augment-extensions/coding-standards/powershell/rules/administrative-tools.md +439 -0
- package/augment-extensions/coding-standards/powershell/rules/automation-scripts.md +240 -0
- package/augment-extensions/coding-standards/powershell/rules/cloud-orchestration.md +384 -0
- package/augment-extensions/coding-standards/powershell/rules/configuration-schema.md +383 -0
- package/augment-extensions/coding-standards/powershell/rules/cross-platform-scripts.md +482 -0
- package/augment-extensions/coding-standards/powershell/rules/dsc-configurations.md +296 -0
- package/augment-extensions/coding-standards/powershell/rules/error-handling.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/legacy-migrations.md +466 -0
- package/augment-extensions/coding-standards/powershell/rules/modules-functions.md +244 -0
- package/augment-extensions/coding-standards/powershell/rules/naming-conventions.md +266 -0
- package/augment-extensions/coding-standards/powershell/rules/performance-optimization.md +209 -0
- package/augment-extensions/coding-standards/powershell/rules/security-practices.md +314 -0
- package/augment-extensions/coding-standards/powershell/rules/testing-guidelines.md +268 -0
- package/augment-extensions/coding-standards/powershell/rules/universal-standards.md +197 -0
- package/augment-extensions/coding-standards/python/README.md +12 -8
- package/augment-extensions/coding-standards/python/examples/best-practices.py +373 -0
- package/augment-extensions/coding-standards/python/module.json +8 -4
- package/augment-extensions/coding-standards/python/rules/async-patterns.md +884 -0
- package/augment-extensions/coding-standards/python/rules/documentation.md +831 -0
- package/augment-extensions/coding-standards/python/rules/error-handling.md +855 -68
- package/augment-extensions/coding-standards/python/rules/testing.md +409 -0
- package/augment-extensions/coding-standards/python/rules/tooling.md +446 -0
- package/augment-extensions/coding-standards/python/rules/type-hints.md +115 -50
- package/augment-extensions/collections/html-css-js/README.md +82 -0
- package/augment-extensions/collections/html-css-js/collection.json +41 -0
- package/augment-extensions/domain-rules/database/README.md +161 -0
- package/augment-extensions/domain-rules/database/examples/flat-database-example.md +793 -0
- package/augment-extensions/domain-rules/database/examples/hybrid-database-example.md +1132 -0
- package/augment-extensions/domain-rules/database/examples/nosql-document-example.md +868 -0
- package/augment-extensions/domain-rules/database/examples/nosql-graph-example.md +805 -0
- package/augment-extensions/domain-rules/database/examples/relational-schema-example.md +621 -0
- package/augment-extensions/domain-rules/database/examples/vector-database-example.md +965 -0
- package/augment-extensions/domain-rules/database/module.json +28 -0
- package/augment-extensions/domain-rules/database/rules/flat-databases.md +624 -0
- package/augment-extensions/domain-rules/database/rules/nosql-databases.md +588 -0
- package/augment-extensions/domain-rules/database/rules/nosql-document-stores.md +856 -0
- package/augment-extensions/domain-rules/database/rules/nosql-graph-databases.md +778 -0
- package/augment-extensions/domain-rules/database/rules/nosql-key-value-stores.md +963 -0
- package/augment-extensions/domain-rules/database/rules/performance-optimization.md +1076 -0
- package/augment-extensions/domain-rules/database/rules/relational-databases.md +697 -0
- package/augment-extensions/domain-rules/database/rules/relational-indexing.md +671 -0
- package/augment-extensions/domain-rules/database/rules/relational-query-optimization.md +607 -0
- package/augment-extensions/domain-rules/database/rules/relational-schema-design.md +907 -0
- package/augment-extensions/domain-rules/database/rules/relational-transactions.md +783 -0
- package/augment-extensions/domain-rules/database/rules/security-standards.md +980 -0
- package/augment-extensions/domain-rules/database/rules/universal-best-practices.md +485 -0
- package/augment-extensions/domain-rules/database/rules/vector-databases.md +521 -0
- package/augment-extensions/domain-rules/database/rules/vector-embeddings.md +858 -0
- package/augment-extensions/domain-rules/database/rules/vector-indexing.md +934 -0
- package/augment-extensions/domain-rules/mcp/README.md +150 -0
- package/augment-extensions/domain-rules/mcp/examples/compressed-example.md +522 -0
- package/augment-extensions/domain-rules/mcp/examples/graph-augmented-example.md +520 -0
- package/augment-extensions/domain-rules/mcp/examples/hybrid-example.md +570 -0
- package/augment-extensions/domain-rules/mcp/examples/state-based-example.md +427 -0
- package/augment-extensions/domain-rules/mcp/examples/token-based-example.md +435 -0
- package/augment-extensions/domain-rules/mcp/examples/vector-based-example.md +502 -0
- package/augment-extensions/domain-rules/mcp/module.json +49 -0
- package/augment-extensions/domain-rules/mcp/rules/compressed-mcp.md +595 -0
- package/augment-extensions/domain-rules/mcp/rules/configuration.md +345 -0
- package/augment-extensions/domain-rules/mcp/rules/graph-augmented-mcp.md +687 -0
- package/augment-extensions/domain-rules/mcp/rules/hybrid-mcp.md +636 -0
- package/augment-extensions/domain-rules/mcp/rules/state-based-mcp.md +484 -0
- package/augment-extensions/domain-rules/mcp/rules/testing-validation.md +360 -0
- package/augment-extensions/domain-rules/mcp/rules/token-based-mcp.md +393 -0
- package/augment-extensions/domain-rules/mcp/rules/universal-rules.md +194 -0
- package/augment-extensions/domain-rules/mcp/rules/vector-based-mcp.md +625 -0
- package/augment-extensions/domain-rules/wordpress/README.md +163 -0
- package/augment-extensions/domain-rules/wordpress/module.json +32 -0
- package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -0
- package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -0
- package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -0
- package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -0
- package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -0
- package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -0
- package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -0
- package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -0
- package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -0
- package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -0
- package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -0
- package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -0
- package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -0
- package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -0
- package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -0
- package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -0
- package/augment-extensions/examples/rest-api-plugin/README.md +98 -0
- package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -0
- package/augment-extensions/examples/rest-api-plugin/module.json +40 -0
- package/augment-extensions/examples/woocommerce-extension/README.md +98 -0
- package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -0
- package/augment-extensions/examples/woocommerce-extension/module.json +40 -0
- package/augment-extensions/workflows/beads/module.json +4 -3
- package/augment-extensions/workflows/database/README.md +195 -0
- package/augment-extensions/workflows/database/ai-prompt-testing.md +295 -0
- package/augment-extensions/workflows/database/examples/migration-example.md +498 -0
- package/augment-extensions/workflows/database/examples/optimization-example.md +496 -0
- package/augment-extensions/workflows/database/examples/schema-design-example.md +444 -0
- package/augment-extensions/workflows/database/module.json +42 -0
- package/augment-extensions/workflows/database/rules/data-migration.md +249 -0
- package/augment-extensions/workflows/database/rules/documentation-standards.md +339 -0
- package/augment-extensions/workflows/database/rules/migration-workflow.md +352 -0
- package/augment-extensions/workflows/database/rules/optimization-workflow.md +435 -0
- package/augment-extensions/workflows/database/rules/schema-design-workflow.md +535 -0
- package/augment-extensions/workflows/database/rules/testing-patterns.md +305 -0
- package/augment-extensions/workflows/database/rules/workflow.md +458 -0
- package/augment-extensions/workflows/openspec/module.json +4 -3
- package/augment-extensions/workflows/wordpress-plugin/README.md +232 -0
- package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -0
- package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -0
- package/augment-extensions/workflows/wordpress-plugin/module.json +49 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -0
- package/augment-extensions/writing-standards/screenplay/README.md +171 -0
- package/augment-extensions/writing-standards/screenplay/examples/aaa-hollywood-scene.fountain +164 -0
- package/augment-extensions/writing-standards/screenplay/module.json +124 -0
- package/augment-extensions/writing-standards/screenplay/rules/universal-formatting.md +339 -0
- package/cli/MODULES.md +302 -0
- package/cli/dist/cli.js +142 -9
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/catalog.d.ts +13 -0
- package/cli/dist/commands/catalog.d.ts.map +1 -0
- package/cli/dist/commands/catalog.js +104 -0
- package/cli/dist/commands/catalog.js.map +1 -0
- package/cli/dist/commands/gui.d.ts +6 -0
- package/cli/dist/commands/gui.d.ts.map +1 -0
- package/cli/dist/commands/gui.js +211 -0
- package/cli/dist/commands/gui.js.map +1 -0
- package/cli/dist/commands/init.d.ts.map +1 -1
- package/cli/dist/commands/init.js +12 -0
- package/cli/dist/commands/init.js.map +1 -1
- package/cli/dist/commands/install-rules.d.ts +14 -0
- package/cli/dist/commands/install-rules.d.ts.map +1 -0
- package/cli/dist/commands/install-rules.js +127 -0
- package/cli/dist/commands/install-rules.js.map +1 -0
- package/cli/dist/commands/link.d.ts.map +1 -1
- package/cli/dist/commands/link.js +9 -11
- package/cli/dist/commands/link.js.map +1 -1
- package/cli/dist/commands/list.d.ts.map +1 -1
- package/cli/dist/commands/list.js +11 -28
- package/cli/dist/commands/list.js.map +1 -1
- package/cli/dist/commands/mcp.d.ts +48 -0
- package/cli/dist/commands/mcp.d.ts.map +1 -0
- package/cli/dist/commands/mcp.js +229 -0
- package/cli/dist/commands/mcp.js.map +1 -0
- package/cli/dist/commands/self-remove.d.ts +7 -0
- package/cli/dist/commands/self-remove.d.ts.map +1 -0
- package/cli/dist/commands/self-remove.js +179 -0
- package/cli/dist/commands/self-remove.js.map +1 -0
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +42 -71
- package/cli/dist/commands/show.js.map +1 -1
- package/cli/dist/commands/skill.d.ts +67 -0
- package/cli/dist/commands/skill.d.ts.map +1 -0
- package/cli/dist/commands/skill.js +513 -0
- package/cli/dist/commands/skill.js.map +1 -0
- package/cli/dist/commands/unlink.d.ts +6 -0
- package/cli/dist/commands/unlink.d.ts.map +1 -0
- package/cli/dist/commands/unlink.js +115 -0
- package/cli/dist/commands/unlink.js.map +1 -0
- package/cli/dist/commands/validate.d.ts +6 -0
- package/cli/dist/commands/validate.d.ts.map +1 -0
- package/cli/dist/commands/validate.js +159 -0
- package/cli/dist/commands/validate.js.map +1 -0
- package/cli/dist/utils/catalog-sync.d.ts +22 -0
- package/cli/dist/utils/catalog-sync.d.ts.map +1 -0
- package/cli/dist/utils/catalog-sync.js +157 -0
- package/cli/dist/utils/catalog-sync.js.map +1 -0
- package/cli/dist/utils/character-count.d.ts +56 -0
- package/cli/dist/utils/character-count.d.ts.map +1 -0
- package/cli/dist/utils/character-count.js +190 -0
- package/cli/dist/utils/character-count.js.map +1 -0
- package/cli/dist/utils/documentation-validator.d.ts +18 -0
- package/cli/dist/utils/documentation-validator.d.ts.map +1 -0
- package/cli/dist/utils/documentation-validator.js +233 -0
- package/cli/dist/utils/documentation-validator.js.map +1 -0
- package/cli/dist/utils/install-rules.d.ts +32 -0
- package/cli/dist/utils/install-rules.d.ts.map +1 -0
- package/cli/dist/utils/install-rules.js +375 -0
- package/cli/dist/utils/install-rules.js.map +1 -0
- package/cli/dist/utils/mcp-integration.d.ts +70 -0
- package/cli/dist/utils/mcp-integration.d.ts.map +1 -0
- package/cli/dist/utils/mcp-integration.js +292 -0
- package/cli/dist/utils/mcp-integration.js.map +1 -0
- package/cli/dist/utils/module-system.d.ts +153 -0
- package/cli/dist/utils/module-system.d.ts.map +1 -0
- package/cli/dist/utils/module-system.js +528 -0
- package/cli/dist/utils/module-system.js.map +1 -0
- package/cli/dist/utils/modules-catalog.d.ts +33 -0
- package/cli/dist/utils/modules-catalog.d.ts.map +1 -0
- package/cli/dist/utils/modules-catalog.js +163 -0
- package/cli/dist/utils/modules-catalog.js.map +1 -0
- package/cli/dist/utils/rule-install-hooks.d.ts +19 -0
- package/cli/dist/utils/rule-install-hooks.d.ts.map +1 -0
- package/cli/dist/utils/rule-install-hooks.js +224 -0
- package/cli/dist/utils/rule-install-hooks.js.map +1 -0
- package/cli/dist/utils/skill-system.d.ts +95 -0
- package/cli/dist/utils/skill-system.d.ts.map +1 -0
- package/cli/dist/utils/skill-system.js +313 -0
- package/cli/dist/utils/skill-system.js.map +1 -0
- package/modules.md +534 -70
- package/package.json +12 -3
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
<#
|
|
2
|
+
.SYNOPSIS
|
|
3
|
+
Administrative tools example demonstrating AD/Exchange management with efficient filtering.
|
|
4
|
+
|
|
5
|
+
.DESCRIPTION
|
|
6
|
+
Complete example showing:
|
|
7
|
+
- Active Directory user management with server-side filtering
|
|
8
|
+
- Bulk operations with error handling
|
|
9
|
+
- Audit logging and reporting
|
|
10
|
+
- Exchange mailbox management
|
|
11
|
+
- Progress reporting for long-running operations
|
|
12
|
+
|
|
13
|
+
.PARAMETER Action
|
|
14
|
+
Action to perform (AuditInactiveUsers, DisableInactiveUsers, ExportMailboxSizes)
|
|
15
|
+
|
|
16
|
+
.PARAMETER DaysInactive
|
|
17
|
+
Number of days to consider a user inactive
|
|
18
|
+
|
|
19
|
+
.PARAMETER OutputPath
|
|
20
|
+
Path for output reports
|
|
21
|
+
|
|
22
|
+
.EXAMPLE
|
|
23
|
+
.\admin-example.ps1 -Action AuditInactiveUsers -DaysInactive 90 -OutputPath C:\Reports
|
|
24
|
+
#>
|
|
25
|
+
|
|
26
|
+
#Requires -Version 7.4
|
|
27
|
+
#Requires -Modules ActiveDirectory
|
|
28
|
+
|
|
29
|
+
[CmdletBinding(SupportsShouldProcess)]
|
|
30
|
+
param(
|
|
31
|
+
[Parameter(Mandatory)]
|
|
32
|
+
[ValidateSet('AuditInactiveUsers', 'DisableInactiveUsers', 'ExportMailboxSizes')]
|
|
33
|
+
[string]$Action,
|
|
34
|
+
|
|
35
|
+
[Parameter()]
|
|
36
|
+
[ValidateRange(1, 365)]
|
|
37
|
+
[int]$DaysInactive = 90,
|
|
38
|
+
|
|
39
|
+
[Parameter()]
|
|
40
|
+
[ValidateScript({ Test-Path $_ -PathType Container })]
|
|
41
|
+
[string]$OutputPath = $PWD
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
Set-StrictMode -Version Latest
|
|
45
|
+
$ErrorActionPreference = 'Stop'
|
|
46
|
+
|
|
47
|
+
#region Helper Functions
|
|
48
|
+
|
|
49
|
+
function Write-AuditLog
|
|
50
|
+
{
|
|
51
|
+
[CmdletBinding()]
|
|
52
|
+
param(
|
|
53
|
+
[Parameter(Mandatory)]
|
|
54
|
+
[string]$Message,
|
|
55
|
+
|
|
56
|
+
[Parameter()]
|
|
57
|
+
[ValidateSet('Info', 'Warning', 'Error')]
|
|
58
|
+
[string]$Level = 'Info',
|
|
59
|
+
|
|
60
|
+
[Parameter()]
|
|
61
|
+
[string]$LogPath = (Join-Path $OutputPath "audit-$(Get-Date -Format 'yyyy-MM-dd').log")
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
$timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
|
|
65
|
+
$logEntry = "[$timestamp] [$Level] $Message"
|
|
66
|
+
|
|
67
|
+
Add-Content -Path $LogPath -Value $logEntry
|
|
68
|
+
|
|
69
|
+
switch ($Level)
|
|
70
|
+
{
|
|
71
|
+
'Info' { Write-Verbose $Message }
|
|
72
|
+
'Warning' { Write-Warning $Message }
|
|
73
|
+
'Error' { Write-Error $Message }
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
#endregion
|
|
78
|
+
|
|
79
|
+
#region Active Directory Functions
|
|
80
|
+
|
|
81
|
+
function Get-InactiveADUsers
|
|
82
|
+
{
|
|
83
|
+
[CmdletBinding()]
|
|
84
|
+
param(
|
|
85
|
+
[Parameter(Mandatory)]
|
|
86
|
+
[int]$DaysInactive
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
Write-AuditLog "Searching for users inactive for $DaysInactive days"
|
|
90
|
+
|
|
91
|
+
$cutoffDate = (Get-Date).AddDays(-$DaysInactive)
|
|
92
|
+
|
|
93
|
+
# ✅ GOOD: Server-side filtering with -Filter parameter
|
|
94
|
+
$filterParams = @{
|
|
95
|
+
Filter = "LastLogonDate -lt '$cutoffDate' -and Enabled -eq 'True'"
|
|
96
|
+
Properties = @(
|
|
97
|
+
'LastLogonDate'
|
|
98
|
+
'EmailAddress'
|
|
99
|
+
'Department'
|
|
100
|
+
'Manager'
|
|
101
|
+
'Created'
|
|
102
|
+
)
|
|
103
|
+
ErrorAction = 'Stop'
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
try
|
|
107
|
+
{
|
|
108
|
+
$users = Get-ADUser @filterParams
|
|
109
|
+
Write-AuditLog "Found $($users.Count) inactive users"
|
|
110
|
+
|
|
111
|
+
return $users | Select-Object `
|
|
112
|
+
Name,
|
|
113
|
+
SamAccountName,
|
|
114
|
+
EmailAddress,
|
|
115
|
+
Department,
|
|
116
|
+
LastLogonDate,
|
|
117
|
+
@{Name='DaysInactive'; Expression={ ((Get-Date) - $_.LastLogonDate).Days }},
|
|
118
|
+
Created
|
|
119
|
+
}
|
|
120
|
+
catch
|
|
121
|
+
{
|
|
122
|
+
Write-AuditLog "Failed to query AD users: $_" -Level Error
|
|
123
|
+
throw
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function Disable-InactiveADUsersBulk
|
|
128
|
+
{
|
|
129
|
+
[CmdletBinding(SupportsShouldProcess)]
|
|
130
|
+
param(
|
|
131
|
+
[Parameter(Mandatory, ValueFromPipeline)]
|
|
132
|
+
[Microsoft.ActiveDirectory.Management.ADUser[]]$Users
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
begin
|
|
136
|
+
{
|
|
137
|
+
$successCount = 0
|
|
138
|
+
$failureCount = 0
|
|
139
|
+
$errors = [System.Collections.Generic.List[PSObject]]::new()
|
|
140
|
+
$totalUsers = @($Users).Count
|
|
141
|
+
$currentUser = 0
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
process
|
|
145
|
+
{
|
|
146
|
+
foreach ($user in $Users)
|
|
147
|
+
{
|
|
148
|
+
$currentUser++
|
|
149
|
+
$percentComplete = ($currentUser / $totalUsers) * 100
|
|
150
|
+
|
|
151
|
+
Write-Progress -Activity "Disabling Inactive Users" `
|
|
152
|
+
-Status "Processing $($user.SamAccountName)" `
|
|
153
|
+
-PercentComplete $percentComplete `
|
|
154
|
+
-CurrentOperation "$currentUser of $totalUsers"
|
|
155
|
+
|
|
156
|
+
if ($PSCmdlet.ShouldProcess($user.SamAccountName, 'Disable AD User'))
|
|
157
|
+
{
|
|
158
|
+
try
|
|
159
|
+
{
|
|
160
|
+
# Disable user and add description
|
|
161
|
+
$description = "Disabled on $(Get-Date -Format 'yyyy-MM-dd') - Inactive for $DaysInactive days"
|
|
162
|
+
|
|
163
|
+
Set-ADUser -Identity $user.SamAccountName `
|
|
164
|
+
-Enabled $false `
|
|
165
|
+
-Description $description `
|
|
166
|
+
-ErrorAction Stop
|
|
167
|
+
|
|
168
|
+
$successCount++
|
|
169
|
+
Write-AuditLog "Disabled user: $($user.SamAccountName)"
|
|
170
|
+
}
|
|
171
|
+
catch
|
|
172
|
+
{
|
|
173
|
+
$failureCount++
|
|
174
|
+
$errorObj = [PSCustomObject]@{
|
|
175
|
+
User = $user.SamAccountName
|
|
176
|
+
Error = $_.Exception.Message
|
|
177
|
+
Timestamp = Get-Date
|
|
178
|
+
}
|
|
179
|
+
$errors.Add($errorObj)
|
|
180
|
+
Write-AuditLog "Failed to disable $($user.SamAccountName): $_" -Level Warning
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
end
|
|
187
|
+
{
|
|
188
|
+
Write-Progress -Activity "Disabling Inactive Users" -Completed
|
|
189
|
+
|
|
190
|
+
$summary = "Bulk disable complete: $successCount succeeded, $failureCount failed"
|
|
191
|
+
Write-AuditLog $summary
|
|
192
|
+
Write-Host "`n$summary" -ForegroundColor $(if ($failureCount -eq 0) { 'Green' } else { 'Yellow' })
|
|
193
|
+
|
|
194
|
+
if ($errors.Count -gt 0)
|
|
195
|
+
{
|
|
196
|
+
$errorReport = Join-Path $OutputPath "disable-errors-$(Get-Date -Format 'yyyy-MM-dd-HHmmss').csv"
|
|
197
|
+
$errors | Export-Csv -Path $errorReport -NoTypeInformation
|
|
198
|
+
Write-Host "Error report saved to: $errorReport" -ForegroundColor Yellow
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
#endregion
|
|
204
|
+
|
|
205
|
+
#region Main Execution
|
|
206
|
+
|
|
207
|
+
try
|
|
208
|
+
{
|
|
209
|
+
Write-Host "Starting administrative action: $Action" -ForegroundColor Cyan
|
|
210
|
+
Write-AuditLog "Starting action: $Action with parameters: DaysInactive=$DaysInactive"
|
|
211
|
+
|
|
212
|
+
switch ($Action)
|
|
213
|
+
{
|
|
214
|
+
'AuditInactiveUsers'
|
|
215
|
+
{
|
|
216
|
+
$inactiveUsers = Get-InactiveADUsers -DaysInactive $DaysInactive
|
|
217
|
+
|
|
218
|
+
if ($inactiveUsers.Count -gt 0)
|
|
219
|
+
{
|
|
220
|
+
$reportPath = Join-Path $OutputPath "inactive-users-$(Get-Date -Format 'yyyy-MM-dd-HHmmss').csv"
|
|
221
|
+
$inactiveUsers | Export-Csv -Path $reportPath -NoTypeInformation
|
|
222
|
+
|
|
223
|
+
Write-Host "`n✓ Found $($inactiveUsers.Count) inactive users" -ForegroundColor Green
|
|
224
|
+
Write-Host "Report saved to: $reportPath" -ForegroundColor Cyan
|
|
225
|
+
|
|
226
|
+
# Display summary
|
|
227
|
+
$inactiveUsers | Group-Object Department |
|
|
228
|
+
Select-Object Name, Count |
|
|
229
|
+
Sort-Object Count -Descending |
|
|
230
|
+
Format-Table -AutoSize
|
|
231
|
+
}
|
|
232
|
+
else
|
|
233
|
+
{
|
|
234
|
+
Write-Host "`n✓ No inactive users found" -ForegroundColor Green
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
'DisableInactiveUsers'
|
|
239
|
+
{
|
|
240
|
+
$inactiveUsers = Get-InactiveADUsers -DaysInactive $DaysInactive
|
|
241
|
+
|
|
242
|
+
if ($inactiveUsers.Count -gt 0)
|
|
243
|
+
{
|
|
244
|
+
Write-Host "`nFound $($inactiveUsers.Count) inactive users to disable" -ForegroundColor Yellow
|
|
245
|
+
$inactiveUsers | Disable-InactiveADUsersBulk -WhatIf:$WhatIfPreference
|
|
246
|
+
}
|
|
247
|
+
else
|
|
248
|
+
{
|
|
249
|
+
Write-Host "`n✓ No inactive users to disable" -ForegroundColor Green
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
'ExportMailboxSizes'
|
|
254
|
+
{
|
|
255
|
+
Write-Host "`nExporting mailbox sizes..." -ForegroundColor Cyan
|
|
256
|
+
Write-AuditLog "Mailbox size export not implemented in this example"
|
|
257
|
+
Write-Host "✓ This action would export mailbox sizes (not implemented)" -ForegroundColor Yellow
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
Write-AuditLog "Action completed successfully: $Action"
|
|
262
|
+
Write-Host "`n✓ Administrative action completed successfully" -ForegroundColor Green
|
|
263
|
+
}
|
|
264
|
+
catch
|
|
265
|
+
{
|
|
266
|
+
Write-AuditLog "Action failed: $_" -Level Error
|
|
267
|
+
Write-Host "`n✗ Administrative action failed: $_" -ForegroundColor Red
|
|
268
|
+
exit 1
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
#endregion
|
|
272
|
+
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
<#
|
|
2
|
+
.SYNOPSIS
|
|
3
|
+
Automated system maintenance script with comprehensive error handling and logging.
|
|
4
|
+
|
|
5
|
+
.DESCRIPTION
|
|
6
|
+
This script demonstrates PowerShell automation best practices including:
|
|
7
|
+
- Comment-based help
|
|
8
|
+
- Parameter validation
|
|
9
|
+
- Error handling with try/catch
|
|
10
|
+
- Logging and auditing
|
|
11
|
+
- Progress reporting
|
|
12
|
+
- Cleanup operations
|
|
13
|
+
|
|
14
|
+
.PARAMETER ComputerName
|
|
15
|
+
Target computer(s) for maintenance operations.
|
|
16
|
+
|
|
17
|
+
.PARAMETER LogPath
|
|
18
|
+
Path to log file. Defaults to script directory.
|
|
19
|
+
|
|
20
|
+
.PARAMETER SkipDiskCleanup
|
|
21
|
+
Skip disk cleanup operations.
|
|
22
|
+
|
|
23
|
+
.PARAMETER WhatIf
|
|
24
|
+
Show what would happen without making changes.
|
|
25
|
+
|
|
26
|
+
.EXAMPLE
|
|
27
|
+
.\automation-example.ps1 -ComputerName 'SERVER01'
|
|
28
|
+
Run maintenance on SERVER01 with default settings.
|
|
29
|
+
|
|
30
|
+
.EXAMPLE
|
|
31
|
+
.\automation-example.ps1 -ComputerName 'SERVER01','SERVER02' -SkipDiskCleanup -WhatIf
|
|
32
|
+
Preview maintenance on multiple servers without disk cleanup.
|
|
33
|
+
|
|
34
|
+
.NOTES
|
|
35
|
+
Author: PowerShell Standards Team
|
|
36
|
+
Version: 1.0.0
|
|
37
|
+
Requires: PowerShell 7.4+
|
|
38
|
+
#>
|
|
39
|
+
|
|
40
|
+
#Requires -Version 7.4
|
|
41
|
+
#Requires -RunAsAdministrator
|
|
42
|
+
|
|
43
|
+
[CmdletBinding(SupportsShouldProcess)]
|
|
44
|
+
param(
|
|
45
|
+
[Parameter(Mandatory, ValueFromPipeline)]
|
|
46
|
+
[ValidateNotNullOrEmpty()]
|
|
47
|
+
[string[]]$ComputerName,
|
|
48
|
+
|
|
49
|
+
[Parameter()]
|
|
50
|
+
[ValidateScript({ Test-Path (Split-Path $_) })]
|
|
51
|
+
[string]$LogPath = (Join-Path $PSScriptRoot 'maintenance.log'),
|
|
52
|
+
|
|
53
|
+
[Parameter()]
|
|
54
|
+
[switch]$SkipDiskCleanup
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
begin
|
|
58
|
+
{
|
|
59
|
+
# Initialize logging
|
|
60
|
+
function Write-Log
|
|
61
|
+
{
|
|
62
|
+
[CmdletBinding()]
|
|
63
|
+
param(
|
|
64
|
+
[Parameter(Mandatory)]
|
|
65
|
+
[ValidateSet('Info', 'Warning', 'Error', 'Success')]
|
|
66
|
+
[string]$Level,
|
|
67
|
+
|
|
68
|
+
[Parameter(Mandatory)]
|
|
69
|
+
[string]$Message
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
$timestamp = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
|
|
73
|
+
$logEntry = "[$timestamp] [$Level] $Message"
|
|
74
|
+
|
|
75
|
+
Add-Content -Path $LogPath -Value $logEntry
|
|
76
|
+
|
|
77
|
+
switch ($Level)
|
|
78
|
+
{
|
|
79
|
+
'Info' { Write-Verbose $Message }
|
|
80
|
+
'Warning' { Write-Warning $Message }
|
|
81
|
+
'Error' { Write-Error $Message }
|
|
82
|
+
'Success' { Write-Output $Message }
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
Write-Log -Level Info -Message "Starting maintenance script"
|
|
87
|
+
Write-Log -Level Info -Message "Target computers: $($ComputerName -join ', ')"
|
|
88
|
+
|
|
89
|
+
$totalComputers = $ComputerName.Count
|
|
90
|
+
$currentComputer = 0
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
process
|
|
94
|
+
{
|
|
95
|
+
foreach ($computer in $ComputerName)
|
|
96
|
+
{
|
|
97
|
+
$currentComputer++
|
|
98
|
+
$percentComplete = ($currentComputer / $totalComputers) * 100
|
|
99
|
+
|
|
100
|
+
Write-Progress -Activity "System Maintenance" `
|
|
101
|
+
-Status "Processing $computer" `
|
|
102
|
+
-PercentComplete $percentComplete `
|
|
103
|
+
-CurrentOperation "Computer $currentComputer of $totalComputers"
|
|
104
|
+
|
|
105
|
+
try
|
|
106
|
+
{
|
|
107
|
+
# Test connectivity
|
|
108
|
+
Write-Log -Level Info -Message "Testing connectivity to $computer"
|
|
109
|
+
|
|
110
|
+
if (-not (Test-Connection -ComputerName $computer -Count 1 -Quiet))
|
|
111
|
+
{
|
|
112
|
+
throw "Computer $computer is not reachable"
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
# Get system information
|
|
116
|
+
Write-Log -Level Info -Message "Gathering system information from $computer"
|
|
117
|
+
|
|
118
|
+
$session = New-CimSession -ComputerName $computer -ErrorAction Stop
|
|
119
|
+
|
|
120
|
+
try
|
|
121
|
+
{
|
|
122
|
+
$os = Get-CimInstance -CimSession $session -ClassName Win32_OperatingSystem
|
|
123
|
+
$disk = Get-CimInstance -CimSession $session -ClassName Win32_LogicalDisk -Filter "DeviceID='C:'"
|
|
124
|
+
|
|
125
|
+
Write-Log -Level Info -Message "$computer - OS: $($os.Caption), Free Space: $([math]::Round($disk.FreeSpace / 1GB, 2)) GB"
|
|
126
|
+
|
|
127
|
+
# Check disk space
|
|
128
|
+
$freeSpacePercent = ($disk.FreeSpace / $disk.Size) * 100
|
|
129
|
+
|
|
130
|
+
if ($freeSpacePercent -lt 10)
|
|
131
|
+
{
|
|
132
|
+
Write-Log -Level Warning -Message "$computer - Low disk space: $([math]::Round($freeSpacePercent, 2))%"
|
|
133
|
+
|
|
134
|
+
if (-not $SkipDiskCleanup)
|
|
135
|
+
{
|
|
136
|
+
if ($PSCmdlet.ShouldProcess($computer, "Clean temporary files"))
|
|
137
|
+
{
|
|
138
|
+
Write-Log -Level Info -Message "$computer - Starting disk cleanup"
|
|
139
|
+
# Disk cleanup logic here
|
|
140
|
+
Write-Log -Level Success -Message "$computer - Disk cleanup completed"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
# Check for pending updates
|
|
146
|
+
Write-Log -Level Info -Message "$computer - Checking for pending updates"
|
|
147
|
+
|
|
148
|
+
# Update check logic here
|
|
149
|
+
|
|
150
|
+
Write-Log -Level Success -Message "$computer - Maintenance completed successfully"
|
|
151
|
+
}
|
|
152
|
+
finally
|
|
153
|
+
{
|
|
154
|
+
Remove-CimSession -CimSession $session
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch
|
|
158
|
+
{
|
|
159
|
+
Write-Log -Level Error -Message "$computer - Maintenance failed: $($_.Exception.Message)"
|
|
160
|
+
|
|
161
|
+
# Continue processing other computers
|
|
162
|
+
continue
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
end
|
|
168
|
+
{
|
|
169
|
+
Write-Progress -Activity "System Maintenance" -Completed
|
|
170
|
+
Write-Log -Level Info -Message "Maintenance script completed"
|
|
171
|
+
Write-Output "Log file: $LogPath"
|
|
172
|
+
}
|
|
173
|
+
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
<#
|
|
2
|
+
.SYNOPSIS
|
|
3
|
+
Azure/AWS cloud orchestration example demonstrating authentication and resource management.
|
|
4
|
+
|
|
5
|
+
.DESCRIPTION
|
|
6
|
+
Complete example showing:
|
|
7
|
+
- Azure authentication (Managed Identity, Service Principal)
|
|
8
|
+
- AWS authentication (IAM roles, profiles)
|
|
9
|
+
- Resource provisioning and management
|
|
10
|
+
- Error handling and logging
|
|
11
|
+
- Idempotent operations
|
|
12
|
+
|
|
13
|
+
.PARAMETER Environment
|
|
14
|
+
Target environment (Dev, Test, Prod)
|
|
15
|
+
|
|
16
|
+
.PARAMETER CloudProvider
|
|
17
|
+
Cloud provider to use (Azure, AWS)
|
|
18
|
+
|
|
19
|
+
.EXAMPLE
|
|
20
|
+
.\cloud-example.ps1 -Environment Dev -CloudProvider Azure
|
|
21
|
+
#>
|
|
22
|
+
|
|
23
|
+
#Requires -Version 7.4
|
|
24
|
+
#Requires -Modules Az.Accounts, Az.Resources
|
|
25
|
+
|
|
26
|
+
[CmdletBinding(SupportsShouldProcess)]
|
|
27
|
+
param(
|
|
28
|
+
[Parameter(Mandatory)]
|
|
29
|
+
[ValidateSet('Dev', 'Test', 'Prod')]
|
|
30
|
+
[string]$Environment,
|
|
31
|
+
|
|
32
|
+
[Parameter(Mandatory)]
|
|
33
|
+
[ValidateSet('Azure', 'AWS')]
|
|
34
|
+
[string]$CloudProvider
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
Set-StrictMode -Version Latest
|
|
38
|
+
$ErrorActionPreference = 'Stop'
|
|
39
|
+
|
|
40
|
+
#region Azure Functions
|
|
41
|
+
|
|
42
|
+
function Connect-AzureEnvironment
|
|
43
|
+
{
|
|
44
|
+
[CmdletBinding()]
|
|
45
|
+
param(
|
|
46
|
+
[Parameter(Mandatory)]
|
|
47
|
+
[string]$TenantId,
|
|
48
|
+
|
|
49
|
+
[Parameter()]
|
|
50
|
+
[switch]$UseManagedIdentity
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
try
|
|
54
|
+
{
|
|
55
|
+
if ($UseManagedIdentity)
|
|
56
|
+
{
|
|
57
|
+
Write-Verbose "Connecting to Azure using Managed Identity"
|
|
58
|
+
Connect-AzAccount -Identity -ErrorAction Stop
|
|
59
|
+
}
|
|
60
|
+
else
|
|
61
|
+
{
|
|
62
|
+
Write-Verbose "Connecting to Azure using Service Principal"
|
|
63
|
+
# In production, retrieve from Key Vault or secure storage
|
|
64
|
+
$credential = Get-Credential -Message "Enter Service Principal credentials"
|
|
65
|
+
$appId = Read-Host "Enter Application ID"
|
|
66
|
+
|
|
67
|
+
Connect-AzAccount -ServicePrincipal -TenantId $TenantId `
|
|
68
|
+
-Credential $credential -ApplicationId $appId -ErrorAction Stop
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
Write-Host "✓ Connected to Azure" -ForegroundColor Green
|
|
72
|
+
}
|
|
73
|
+
catch
|
|
74
|
+
{
|
|
75
|
+
Write-Error "Failed to connect to Azure: $_"
|
|
76
|
+
throw
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function New-AzureResourceDeployment
|
|
81
|
+
{
|
|
82
|
+
[CmdletBinding(SupportsShouldProcess)]
|
|
83
|
+
param(
|
|
84
|
+
[Parameter(Mandatory)]
|
|
85
|
+
[string]$ResourceGroupName,
|
|
86
|
+
|
|
87
|
+
[Parameter(Mandatory)]
|
|
88
|
+
[string]$Location,
|
|
89
|
+
|
|
90
|
+
[Parameter()]
|
|
91
|
+
[hashtable]$Tags = @{}
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
if ($PSCmdlet.ShouldProcess($ResourceGroupName, 'Create/Update Resource Group'))
|
|
95
|
+
{
|
|
96
|
+
try
|
|
97
|
+
{
|
|
98
|
+
# Idempotent: Check if resource group exists
|
|
99
|
+
$rg = Get-AzResourceGroup -Name $ResourceGroupName -ErrorAction SilentlyContinue
|
|
100
|
+
|
|
101
|
+
if ($null -eq $rg)
|
|
102
|
+
{
|
|
103
|
+
Write-Verbose "Creating new resource group: $ResourceGroupName"
|
|
104
|
+
$rg = New-AzResourceGroup -Name $ResourceGroupName -Location $Location -Tag $Tags
|
|
105
|
+
Write-Host "✓ Created resource group: $ResourceGroupName" -ForegroundColor Green
|
|
106
|
+
}
|
|
107
|
+
else
|
|
108
|
+
{
|
|
109
|
+
Write-Verbose "Resource group already exists: $ResourceGroupName"
|
|
110
|
+
# Update tags if different
|
|
111
|
+
if ($Tags.Count -gt 0)
|
|
112
|
+
{
|
|
113
|
+
Set-AzResourceGroup -Name $ResourceGroupName -Tag $Tags | Out-Null
|
|
114
|
+
Write-Host "✓ Updated resource group tags" -ForegroundColor Green
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return $rg
|
|
119
|
+
}
|
|
120
|
+
catch
|
|
121
|
+
{
|
|
122
|
+
Write-Error "Failed to create/update resource group: $_"
|
|
123
|
+
throw
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
#endregion
|
|
129
|
+
|
|
130
|
+
#region AWS Functions
|
|
131
|
+
|
|
132
|
+
function Connect-AWSEnvironment
|
|
133
|
+
{
|
|
134
|
+
[CmdletBinding()]
|
|
135
|
+
param(
|
|
136
|
+
[Parameter(Mandatory)]
|
|
137
|
+
[string]$ProfileName,
|
|
138
|
+
|
|
139
|
+
[Parameter(Mandatory)]
|
|
140
|
+
[string]$Region
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
try
|
|
144
|
+
{
|
|
145
|
+
# Set AWS credentials from profile
|
|
146
|
+
Set-AWSCredential -ProfileName $ProfileName -ErrorAction Stop
|
|
147
|
+
Set-DefaultAWSRegion -Region $Region -ErrorAction Stop
|
|
148
|
+
|
|
149
|
+
Write-Host "✓ Connected to AWS (Profile: $ProfileName, Region: $Region)" -ForegroundColor Green
|
|
150
|
+
}
|
|
151
|
+
catch
|
|
152
|
+
{
|
|
153
|
+
Write-Error "Failed to connect to AWS: $_"
|
|
154
|
+
throw
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
#endregion
|
|
159
|
+
|
|
160
|
+
#region Main Execution
|
|
161
|
+
|
|
162
|
+
try
|
|
163
|
+
{
|
|
164
|
+
Write-Host "Starting cloud orchestration for $CloudProvider ($Environment environment)" -ForegroundColor Cyan
|
|
165
|
+
|
|
166
|
+
# Environment-specific configuration
|
|
167
|
+
$config = @{
|
|
168
|
+
Dev = @{
|
|
169
|
+
Azure = @{
|
|
170
|
+
TenantId = '00000000-0000-0000-0000-000000000000'
|
|
171
|
+
Location = 'eastus'
|
|
172
|
+
ResourceGroupName = 'rg-dev-example'
|
|
173
|
+
}
|
|
174
|
+
AWS = @{
|
|
175
|
+
ProfileName = 'dev-profile'
|
|
176
|
+
Region = 'us-east-1'
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
Test = @{
|
|
180
|
+
Azure = @{
|
|
181
|
+
TenantId = '11111111-1111-1111-1111-111111111111'
|
|
182
|
+
Location = 'centralus'
|
|
183
|
+
ResourceGroupName = 'rg-test-example'
|
|
184
|
+
}
|
|
185
|
+
AWS = @{
|
|
186
|
+
ProfileName = 'test-profile'
|
|
187
|
+
Region = 'us-west-2'
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
Prod = @{
|
|
191
|
+
Azure = @{
|
|
192
|
+
TenantId = '22222222-2222-2222-2222-222222222222'
|
|
193
|
+
Location = 'westus'
|
|
194
|
+
ResourceGroupName = 'rg-prod-example'
|
|
195
|
+
}
|
|
196
|
+
AWS = @{
|
|
197
|
+
ProfileName = 'prod-profile'
|
|
198
|
+
Region = 'us-east-1'
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
$envConfig = $config[$Environment][$CloudProvider]
|
|
204
|
+
|
|
205
|
+
# Common tags
|
|
206
|
+
$tags = @{
|
|
207
|
+
Environment = $Environment
|
|
208
|
+
ManagedBy = 'PowerShell'
|
|
209
|
+
CreatedDate = (Get-Date -Format 'yyyy-MM-dd')
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
switch ($CloudProvider)
|
|
213
|
+
{
|
|
214
|
+
'Azure'
|
|
215
|
+
{
|
|
216
|
+
Connect-AzureEnvironment -TenantId $envConfig.TenantId -UseManagedIdentity:$false
|
|
217
|
+
|
|
218
|
+
$deployment = New-AzureResourceDeployment `
|
|
219
|
+
-ResourceGroupName $envConfig.ResourceGroupName `
|
|
220
|
+
-Location $envConfig.Location `
|
|
221
|
+
-Tags $tags `
|
|
222
|
+
-WhatIf:$WhatIfPreference
|
|
223
|
+
|
|
224
|
+
Write-Host "`n✓ Azure deployment completed successfully" -ForegroundColor Green
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
'AWS'
|
|
228
|
+
{
|
|
229
|
+
Connect-AWSEnvironment -ProfileName $envConfig.ProfileName -Region $envConfig.Region
|
|
230
|
+
|
|
231
|
+
# AWS resource creation would go here
|
|
232
|
+
Write-Host "`n✓ AWS deployment completed successfully" -ForegroundColor Green
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
catch
|
|
237
|
+
{
|
|
238
|
+
Write-Error "Cloud orchestration failed: $_"
|
|
239
|
+
exit 1
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
#endregion
|
|
243
|
+
|