Table of contents : Table of Contents About This Book About the Authors Feedback A Note on Code Listings Code Samples Introduction What is DSC? Not Just for Provisioning How Does DSC Compare to Group Policy? Cattle, Not Pets Technology, not Tool A 2018 Update: What is DSC Good For? Part 1: Design Decisions Designing DSC The Players The Pieces The CIM Connection Uniqueness in MOFs Getting the MOF to the LCM Configuration Variations Understanding Dependencies Part 2: Configuring the Infrastructure Infrastructure Prerequisites Configuring the LCM Checking the Configuration Changing the Configuration Deploying the LCM Configuration Specifying Configuration Pull Servers Specifying DSC Resource Pull Servers Specifying Reporting Servers Partial Configurations Versions and Troubleshooting Setting Up a Pull Server Before You Begin Reprising the Roles A Word of Caution Step 1: Install the Module Step 2: Get an SSL Certificate Step 3: Make a GUID Step 4: Set Up DSC Step 5: Run and Deploy the Config Confirming the Setup Life Choices Opting Out of the Pull Server Approach Part 3: Testing the Infrastructure Testing Push Mode Creating the Configuration Running the Configuration to Produce a MOF Pushing the MOF Testing Pull Mode Creating the Configuration Running the Configuration to Produce a MOF Deploying the MOF and Module to a Pull Server Creating a Meta-Configuration Pushing the Meta-Configuration to a Node Pulling the Configuration from the Pull Server Verifying the Node's State Part 4: Authoring Configurations Basic Configuration Authoring Getting Started: The Configuration Block Adding Nodes Adding a Parameter Block Adding Settings Adding Basic Logic Adding Node-Side Logic Documenting Dependencies Running the Configuration Deploying the MOF Wrapping Up Going Further with Configurations Again: DSC isn't Tooling Understanding ConfigurationData Defining Configuration Data Referencing and Using Configuration Data All-Nodes Data Using the $AllNodes Variable Configuration Script Strategies Using NonNodeData Poor Man's Configuration Modularization Dot Sourcing Approach Analysis Composite Configurations Creating a Composite Resource Turning the Configuration into a Resource Module Using the Composite Resource Deploying the Composite Resource Approach Analysis Design Considerations Partial Configurations Summarizing Partial Configuration Pros and Cons Authoring a Partial Configuration MOF Configuring the LCM for Partial Configurations Partial Configuration Dependencies Partial Configuration Authoritative Resources Mix `n' Match File Naming Details Deploying MOFs to a Pull Server Part 5: Using and Authoring Resources Finding and Using Resources Finding What's Out There Installing What's Out There Finding What's Installed Figuring Out What a Resource Wants Custom Resources Before We Begin: Function-Based vs. Class-Based Writing the Functional Code Writing the Interface Module Preparing the Module for Use and Deployment Triggering a Reboot Class-Based Custom Resources Writing the Class-Based Interface Module Preparing the Module for Use Best Practices for Resource Design Principle One: Resources are an Interface Thinking About Design For Example Advantages of the Approach Disadvantage of the Approach The Script Resource The Basics Cool Tricks Part 6: Advanced Stuff Reporting Understanding the Default Report Server Querying Report Data The AgentId Security and DSC A Word on Certificates Securing the Pull Server Securing Credentials in Configurations PSDSCRunAsCredential Digital Signing DSC in Azure DSC on Linux Troubleshooting and Debugging Getting Eyes-On Resource Debugging Stopping a Hung LCM Self-Modifying Configurations Understanding the LCM's Processing The Basic Self-Modifying Workflow Options A Problem to Consider Crazy Ideas for What the Bootstrap Can Do The Scaling Question DSC Already Scales - But You Don't Let's Set the Stage Raise Cattle, Not Pets Enter Containers Rock-Solid Infrastructure Getting Back to DSC The Perfect Example LCM and Pull Server Communications The Database Known Problems Error configuring the LCM: ``Specified Property does not exist,'' ``MI RESULT 12'' Registration Key Problems maxEnvelopeSize Errors Reporting Server and Large Configurations Class-Based Resources Can't be ExclusiveResources in Partials