[{"content":"I write about the stuff that comes up building and running developer platforms: Git/webhook infrastructure at scale, open source governance, language servers and protocols, and lately, how AI agents actually hold up against that work.\n","date":null,"permalink":"https://pogran.dev/","section":"","summary":"\u003cp\u003eI write about the stuff that comes up building and running developer platforms: Git/webhook infrastructure at scale, open source governance, language servers and protocols, and lately, how AI agents actually hold up against that work.\u003c/p\u003e","title":""},{"content":" I\u0026rsquo;m a Senior Software Engineer at IBM working on Terraform Cloud\u0026rsquo;s VCS and Git Services platform — a distributed system that processes thousands of webhook events per second across GitHub, GitLab, Bitbucket, and Azure DevOps.\nSenior Software Engineer, Terraform Cloud VCS \u0026amp; Git Services — IBM (HashiCorp) Founder \u0026amp; lead, HashiCorp Terraform VS Code Extension — 975+ stars, hundreds of thousands of active users Co-founder \u0026amp; lead, Puppet VS Code Extension — 10,000+ monthly active users Author, Learning PowerShell DSC (1st \u0026amp; 2nd editions) and contributor to PowerShell Conference Book 2 What I do #I build and run developer platforms, and I\u0026rsquo;ve spent most of the last decade doing it twice over: once as an individual contributor on distributed systems, and once as the person responsible for turning a side project into a piece of infrastructure other people depend on.\nAt HashiCorp I led the Terraform VS Code Extension and its Go-based Language Server from a small team project into a flagship open source release — defining the release cadence, contribution standards, and code review process that let external contributors work alongside the core team without every change routing through me personally. Before that, at Puppet, I did the same thing from an earlier stage: I spotted the opportunity for a VS Code extension, built the first proof of concept, and grew it into a sponsored open source project used by thousands of engineers.\nThese days I\u0026rsquo;m back in distributed systems territory, working on the Git integration layer underneath Terraform Cloud. Recent work includes leading a zero-downtime, cross-team migration off an external Git library onto an internal implementation, and performance work that cut README ingestion latency by roughly 30x.\nBefore that #I\u0026rsquo;ve been working with computers in some form for over 15 years. I started in systems administration for a large military installation, then moved into building monitoring software and automating large-scale Windows environments for a managed services provider — which is also where the PowerShell DSC book came from.\nElsewhere #I write here about the parts of this work that don\u0026rsquo;t fit neatly into a changelog: what it actually takes to keep an open source project healthy once it outgrows you, how protocols like LSP and MCP solve the same shape of problem a decade apart, and what I do and don\u0026rsquo;t trust an AI agent to do on a production migration. You can find more at pogran.dev/talk (conference talks) and github.com/jpogran (code).\nI love finding out how things work, taking them apart, and making them work faster.\n","date":null,"permalink":"https://pogran.dev/about/","section":"","summary":"\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"../img/avatar-sm.jpg\" alt=\"James Pogran\" class=\"avatar-float-start\" /\u003e\n\u003c/figure\u003e\n I\u0026rsquo;m a Senior Software Engineer at IBM working on Terraform Cloud\u0026rsquo;s VCS and Git Services platform — a distributed system that processes thousands of webhook events per second across GitHub, GitLab, Bitbucket, and Azure DevOps.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSenior Software Engineer, Terraform Cloud VCS \u0026amp; Git Services — \u003ca href=\"https://www.hashicorp.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eIBM (HashiCorp)\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFounder \u0026amp; lead, \u003ca href=\"https://github.com/hashicorp/vscode-terraform\" target=\"_blank\" rel=\"noreferrer\"\u003eHashiCorp Terraform VS Code Extension\u003c/a\u003e — 975+ stars, hundreds of thousands of active users\u003c/li\u003e\n\u003cli\u003eCo-founder \u0026amp; lead, \u003ca href=\"https://pup.pt/vscode\" target=\"_blank\" rel=\"noreferrer\"\u003ePuppet VS Code Extension\u003c/a\u003e — 10,000+ monthly active users\u003c/li\u003e\n\u003cli\u003eAuthor, \u003ca href=\"https://www.amazon.com/Learning-PowerShell-DSC-deployment-configuration/dp/1787287246\" target=\"_blank\" rel=\"noreferrer\"\u003eLearning PowerShell DSC\u003c/a\u003e (1st \u0026amp; 2nd editions) and contributor to \u003ca href=\"https://leanpub.com/psconfbook2\" target=\"_blank\" rel=\"noreferrer\"\u003ePowerShell Conference Book 2\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"what-i-do\" class=\"relative group\"\u003eWhat I do \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#what-i-do\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eI build and run developer platforms, and I\u0026rsquo;ve spent most of the last decade doing it twice over: once as an individual contributor on distributed systems, and once as the person responsible for turning a side project into a piece of infrastructure other people depend on.\u003c/p\u003e","title":"About Me"},{"content":"","date":null,"permalink":"https://pogran.dev/media/","section":"Media","summary":"","title":"Media"},{"content":"","date":"8 April 2020","permalink":"https://pogran.dev/media/new-puppet-vscode-extension/","section":"Media","summary":"","title":"What’s new with the Puppet VS Code extension"},{"content":"","date":null,"permalink":"https://pogran.dev/book/","section":"","summary":"","title":""},{"content":"Forty subject matter experts have teamed up to bring you the ultimate collection of PowerShell topics that are designed to be like a conference in a book. This book not only delivers top-notch content that rivals any book on the market, but all royalties are donated to the OnRamp scholarship program which bootstraps others into the industry.\nAbout the Book #This book is designed to be like a conference in a book where each chapter is written by a different author who is a subject matter expert on the topic covered in their chapter. Each chapter is also independent of the others so you can read one chapter, ten chapters, or all of them. You can start with the first chapter, the last one, or somewhere in-between and not miss out on anything related to that particular topic. This book is written for the intermediate to advanced audience. Prior experience with PowerShell is highly recommended.\nAll (100%) of the royalties from this book are donated to the OnRamp scholarship program. More information about the OnRamp track at the PowerShell + DevOps Global Summit and their scholarship program can be found on the PowerShell.org website.\n","date":"31 January 2020","permalink":"https://pogran.dev/powershell-conference-book-2/","section":"","summary":"\u003cp\u003eForty subject matter experts have teamed up to bring you the ultimate collection of PowerShell topics that are designed to be like a conference in a book. This book not only delivers top-notch content that rivals any book on the market, but all royalties are donated to the OnRamp scholarship program which bootstraps others into the industry.\u003c/p\u003e\n\u003ch2 id=\"about-the-book\" class=\"relative group\"\u003eAbout the Book \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#about-the-book\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eThis book is designed to be like a conference in a book where each chapter is written by a different author who is a subject matter expert on the topic covered in their chapter. Each chapter is also independent of the others so you can read one chapter, ten chapters, or all of them. You can start with the first chapter, the last one, or somewhere in-between and not miss out on anything related to that particular topic. This book is written for the intermediate to advanced audience. Prior experience with PowerShell is highly recommended.\u003c/p\u003e","title":"Powershell Conference Book 2"},{"content":"","date":null,"permalink":"https://pogran.dev/tags/powershell/","section":"Tags","summary":"","title":"Powershell"},{"content":"","date":null,"permalink":"https://pogran.dev/tags/puppet/","section":"Tags","summary":"","title":"Puppet"},{"content":" ","date":"22 May 2019","permalink":"https://pogran.dev/puppet-pair-pogramming-with-vs-code/","section":"Talks","summary":"Puppet Pair Pogramming with VS Code Remote Extensions, Docker, WSL, Github Codespaces and Live Share","title":"Puppet Pair Pogramming with VS Code"},{"content":"","date":null,"permalink":"https://pogran.dev/tags/","section":"Tags","summary":"","title":"Tags"},{"content":"","date":null,"permalink":"https://pogran.dev/talk/","section":"Talks","summary":"","title":"Talks"},{"content":" ","date":"22 May 2019","permalink":"https://pogran.dev/using-powershell-in-a-cross-platform-world/","section":"Talks","summary":"PowerShell used to be just for Windows, but now it installs on Linux!","title":"Using Powershell in a Cross Platform World"},{"content":"","date":null,"permalink":"https://pogran.dev/tags/vscode/","section":"Tags","summary":"","title":"Vscode"},{"content":"","date":null,"permalink":"https://pogran.dev/tags/pdk/","section":"Tags","summary":"","title":"Pdk"},{"content":"","date":null,"permalink":"https://pogran.dev/tags/presentation/","section":"Tags","summary":"","title":"Presentation"},{"content":" ","date":"16 January 2019","permalink":"https://pogran.dev/puppet-pdk-and-visual-studio-code-remote-development/","section":"Talks","summary":"How to use VSCode to develop Puppet code on remote servers","title":"Puppet PDK and Visual Studio Code - Remote Development"},{"content":"","date":null,"permalink":"https://pogran.dev/tags/puppetconf/","section":"Tags","summary":"","title":"Puppetconf"},{"content":"","date":null,"permalink":"https://pogran.dev/tags/puppetizelive/","section":"Tags","summary":"","title":"Puppetizelive"},{"content":" ","date":"8 October 2018","permalink":"https://pogran.dev/puppet-pdk-and-visual-studio-code-debugging-puppet-manifests/","section":"Talks","summary":"How to debug Puppet manifests using VSCode","title":"Puppet PDK and Visual Studio Code - Debugging Puppet Manifests"},{"content":" ","date":"8 October 2018","permalink":"https://pogran.dev/puppet-pdk-and-visual-studio-code-installation-and-configuration/","section":"Talks","summary":"How to install VSCode and PDK","title":"Puppet PDK and Visual Studio Code - Installation and Configuration"},{"content":" ","date":"8 October 2018","permalink":"https://pogran.dev/puppet-pdk-and-visual-studio-code-pdk-integration/","section":"Talks","summary":"Overview of PDK integration into VSCode","title":"Puppet PDK and Visual Studio Code - PDK Integration"},{"content":" ","date":"8 October 2018","permalink":"https://pogran.dev/puppet-pdk-and-visual-studio-code-from-zero-to-productive-in-5-minutes/","section":"Talks","summary":"How to use VSCode and PDK to make Puppet code","title":"Puppet, PDK and Visual Studio Code - From Zero to Productive in 5 Minutes"},{"content":"","date":"23 January 2018","permalink":"https://pogran.dev/media/verify-spectre-meltdown-protections-remotely-puppet-bolt-windows/","section":"Media","summary":"","title":"Verify Spectre / Meltdown protections remotely with Puppet Bolt on Windows"},{"content":"About #The main goal of this book is to teach you to configure, deploy, and manage your system using the new features of PowerShell v5/v6 DSC.\nThis book begins with the basics of PowerShell Desired State Configuration, covering its architecture and components. It familiarizes you with the set of Windows PowerShell language extensions and new Windows PowerShell commands that make up DSC. Then it helps you create DSC custom resources and work with DSC configurations with the help of practical examples. Finally, it describes how to deploy configuration data using PowerShell DSC. Throughout this book, we will be focusing on concepts such as building configurations with parameters, the local configuration manager, and testing and restoring configurations using PowerShell DSC.\nBy the end of the book, you will be able to deploy a real-world application end-to-end and will be familiar enough with the powerful Desired State Configuration platform to achieve continuous delivery and efficiently and easily manage and deploy data for systems.\nFeatures #Create flexible and maintainable deployments using DSC configuration scripts that stand the test of time. Explore the core architecture, concepts, and practices in depth. Learning PowerShell DSC is a step-by-step guide that shows you how to start using and taking advantage of PowerShell DSC along with configuring and deploying applications.\n","date":"19 October 2017","permalink":"https://pogran.dev/learning-powershell-dsc-second-edition/","section":"","summary":"\u003ch2 id=\"about\" class=\"relative group\"\u003eAbout \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#about\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eThe main goal of this book is to teach you to configure, deploy, and manage your system using the new features of PowerShell v5/v6 DSC.\u003c/p\u003e\n\u003cp\u003eThis book begins with the basics of PowerShell Desired State Configuration, covering its architecture and components. It familiarizes you with the set of Windows PowerShell language extensions and new Windows PowerShell commands that make up DSC. Then it helps you create DSC custom resources and work with DSC configurations with the help of practical examples. Finally, it describes how to deploy configuration data using PowerShell DSC. Throughout this book, we will be focusing on concepts such as building configurations with parameters, the local configuration manager, and testing and restoring configurations using PowerShell DSC.\u003c/p\u003e","title":"Learning Powershell DSC Second Edition"},{"content":"While developing your Puppet manifests using the Puppet DSC module you might run into a problem with one of the DSC Resources.\nThe problem shows itself every execution, when Puppet says that the state has drifted and needs to be corrected. When you look at the state of the target node it appears to be correct, something must be wrong with Puppet, right? Well, as with most things, the answer is more complicated than it appears.\nThe Puppet dsc module works by invoking DSC directly using the Invoke-DscResource cmdlet using TEST, passing on the properties and values you entered into the Puppet manifest. DSC then interrogates the target node for compliance, and reports whether it is in the desired state or not. If it\u0026rsquo;s not in the desired state, then Puppet invokes Invoke-DscResource with a SET and DSC corrects the drift. It\u0026rsquo;s up to DSC to both determine state and correctly set the state.\nIn our case above, it\u0026rsquo;s DSC that is constantly reporting the target node is not in the desired state, fixing it, then reporting it\u0026rsquo;s drifted in the next run. Puppet is just passing along the message, so to speak.\nWhere to Start #So how do you figure out what is going wrong?\nThe first step is to run puppet with your same manifest, but in debug mode:\n1PS C:\\Users\\Administrator\\Desktop\u0026gt; puppet apply --debug wakka.pp This outputs all the normal Puppet debug information you\u0026rsquo;re used to, along with the debug information from the DSC execution. This extra information is largely the PowerShell code the Puppet dsc module generated in order to use Invoke-DscResource, which can be skipped at this moment, but will be helpful later on. Right now we\u0026rsquo;re interested in the last message from the \u0026lsquo;first pass\u0026rsquo;, the TEST method:\n1VERBOSE: Time taken for configuration job to complete is 2.478 seconds 2{\u0026#34;rebootrequired\u0026#34;:false,\u0026#34;indesiredstate\u0026#34;:false,\u0026#34;errormessage\u0026#34;:\u0026#34;\u0026#34;} This means DSC tested the state of the target node and found it non-compliant. But what was non-compliant?\nShowing Debug Information #Unfortunately DSC does not surface more information without some extra work. We have to do some digging, and rely on the DSC Resource author to have implemented some Verbose logging.\nWe go back to our output and copy the PowerShell code we saw earlier that invokes DSC:\n1PS C:\\Users\\Administrator\\Desktop\u0026gt; $invokeParams = @{ 2 Name = \u0026#39;xFirewall\u0026#39; 3 Method = \u0026#39;test\u0026#39; 4 Property = @{ 5 name = \u0026#39;my_firewall\u0026#39; 6 enabled = \u0026#39;True\u0026#39; 7 remoteaddress = @(\u0026#39;130.230.0.0/16\u0026#39;) 8 } 9 ModuleName = @{ 10 ModuleName = \u0026#34;C:/ProgramData/PuppetLabs/code/environments/production/modules/dsc/lib/puppet_x/dsc_resources/xNetworking/xNetworking.psd1\u0026#34; 11 RequiredVersion = \u0026#34;5.1.0.0\u0026#34; 12 } 13} In order to get more information, we add the Verbose switch:\n1PS C:\\Users\\Administrator\\Desktop\u0026gt; $invokeParams = @{ 2 Verbose = $true 3 Name = \u0026#39;xFirewall\u0026#39; 4 Method = \u0026#39;test\u0026#39; 5 Property = @{ 6 name = \u0026#39;my_firewall\u0026#39; 7 enabled = \u0026#39;True\u0026#39; 8 remoteaddress = @(\u0026#39;130.230.0.0/16\u0026#39;) 9 } 10 ModuleName = @{ 11 ModuleName = \u0026#34;C:/ProgramData/PuppetLabs/code/environments/production/modules/dsc/lib/puppet_x/dsc_resources/xNetworking/xNetworking.psd1\u0026#34; 12 RequiredVersion = \u0026#34;5.1.0.0\u0026#34; 13 } 14} Then we execute that inside our PowerShell console (without using Puppet):\n1PS C:\\Users\\Administrator\\Desktop\u0026gt; $result = Invoke-DscResource @invokeParams 2VERBOSE: Perform operation \u0026#39;Invoke CimMethod\u0026#39; with following parameters, \u0026#39;\u0026#39;methodName\u0026#39; = Resourcetest,\u0026#39;className\u0026#39; = MSFT_DSCLocalConfigurationManager,\u0026#39;namespaceName\u0026#39; = root/Microsoft/Windows/DesiredStateConfiguration\u0026#39;. 3VERBOSE: An LCM method call arrived from computer WINVAGR-MNSKSOE with user sid S-1-5-21-850066514-2495575711-3657759813-500. 4VERBOSE: [WINVAGR-MNSKSOE]: LCM: [ Start Test ] [[xFirewall]DirectResourceAccess] 5VERBOSE: [WINVAGR-MNSKSOE]: [[xFirewall]DirectResourceAccess] Test-TargetResource: Checking settings for firewall rule with Name \u0026#39;my_firewall\u0026#39;. 6VERBOSE: [WINVAGR-MNSKSOE]: [[xFirewall]DirectResourceAccess] Test-TargetResource: Find firewall rule with Name \u0026#39;my_firewall\u0026#39;. 7VERBOSE: [WINVAGR-MNSKSOE]: [[xFirewall]DirectResourceAccess] Test-TargetResource: Check each defined parameter against the existing firewall rule with Name \u0026#39;my_firewall\u0026#39;. 8VERBOSE: [WINVAGR-MNSKSOE]: [[xFirewall]DirectResourceAccess] Get-FirewallRuleProperty: Get all the properties and add filter info to rule map. 9VERBOSE: [WINVAGR-MNSKSOE]: [[xFirewall]DirectResourceAccess] Test-RuleProperties: RemoteAddress property value \u0026#39;130.230.0.0/255.255.0.0\u0026#39; does not match desired state \u0026#39;130.230.0.0/16\u0026#39;. 10VERBOSE: [WINVAGR-MNSKSOE]: [[xFirewall]DirectResourceAccess] Test-RuleProperties: Test Firewall rule with Name \u0026#39;my_firewall\u0026#39; returning False. 11VERBOSE: [WINVAGR-MNSKSOE]: [[xFirewall]DirectResourceAccess] Test-TargetResource: Check Firewall rule with Name \u0026#39;my_firewall\u0026#39; returning False. 12VERBOSE: [WINVAGR-MNSKSOE]: LCM: [ End Test ] [[xFirewall]DirectResourceAccess] False in 0.6260 seconds. 13VERBOSE: [WINVAGR-MNSKSOE]: LCM: [ End Set ] in 0.6420 seconds. 14VERBOSE: Operation \u0026#39;Invoke CimMethod\u0026#39; complete. 15VERBOSE: Time taken for configuration job to complete is 0.717 seconds This is a raw DSC run, doing the same exact stuff we had Puppet tell it to do before, with the addition of telling DSC to output VERBOSE information. Not all DSC Resources output VERBOSE information, it\u0026rsquo;s not required so it will be hit and miss looking for it on other DSC Resources.\nWe\u0026rsquo;re lucky, this particular DSC Resource outputs useful information to the VERBOSE PowerShell data stream, so we can see which property is not in the desired state.\n1VERBOSE: [WINVAGR-MNSKSOE]: [[xFirewall]DirectResourceAccess] Test-RuleProperties: RemoteAddress property value \u0026#39;130.230.0.0/255.255.0.0\u0026#39; does not match desired state \u0026#39;130.230.0.0/16\u0026#39;. And we\u0026rsquo;ve found our bug.\nNext Steps #There is something wrong in the way we\u0026rsquo;re setting the value of RemoteAddress. We\u0026rsquo;re saying it should be 130.230.0.0/16, but it\u0026rsquo;s being persisted as 130.230.0.0/255.255.0.0. Knowing why this is happening requires further knowledge of how New-NetFirewallRule works and the evalautaion logic of the Test-TargetResource inside the xFirewall DSC Resource, but we\u0026rsquo;ve shown the problem lies there and not in Puppet. The next step is to open a issue in the xNetworking Github repo and work with the team there to resolve the issue.\n","date":"19 October 2017","permalink":"https://pogran.dev/diagnosing-dsc-and-puppet-executions/","section":"Posts","summary":"\u003cp\u003eWhile developing your Puppet manifests using the Puppet DSC module you might run into a problem with one of the DSC Resources.\u003c/p\u003e\n\u003cp\u003eThe problem shows itself every execution, when Puppet says that the state has drifted and needs to be corrected. When you look at the state of the target node it appears to be correct, something must be wrong with Puppet, right? Well, as with most things, the answer is more complicated than it appears.\u003c/p\u003e","title":"Diagnosing DSC and Puppet Executions"},{"content":"","date":null,"permalink":"https://pogran.dev/tags/dsc/","section":"Tags","summary":"","title":"Dsc"},{"content":"","date":null,"permalink":"https://pogran.dev/series/featured/","section":"Series","summary":"","title":"Featured"},{"content":"","date":null,"permalink":"https://pogran.dev/tags/featured/","section":"Tags","summary":"","title":"Featured"},{"content":"","date":null,"permalink":"https://pogran.dev/post/","section":"Posts","summary":"","title":"Posts"},{"content":"","date":null,"permalink":"https://pogran.dev/series/","section":"Series","summary":"","title":"Series"},{"content":"Presentation # ","date":"11 October 2017","permalink":"https://pogran.dev/using-puppet-and-dsc-to-report-on-environment-change/","section":"Talks","summary":"Using Puppet and DSC to Report on Environment Change","title":"Using Puppet and DSC to Report on Environment Change"},{"content":"Presentation # ","date":"10 October 2017","permalink":"https://pogran.dev/official-puppet-vs-code-extension-demo/","section":"Talks","summary":"Puppet VSCode Extension PuppetConf 2017 Presentation","title":"Official Puppet VS Code Extension Demo"},{"content":"","date":"2 October 2017","permalink":"https://pogran.dev/media/announcing-puppet-visual-studio-code/","section":"Media","summary":"","title":"Announcing Puppet for Visual Studio Code!"},{"content":"","date":null,"permalink":"https://pogran.dev/tags/book/","section":"Tags","summary":"","title":"Book"},{"content":"The second edition of Learning PowerShell DSC is finally published! You can order it at these fine book sellers:\nPackt Publishing Amazon Barnes and Noble ","date":"11 September 2017","permalink":"https://pogran.dev/learning-powershell-dsc-second-edition-is-published/","section":"Posts","summary":"\u003cp\u003eThe second edition of \u003ca href=\"https://www.packtpub.com/networking-and-servers/learning-powershell-dsc-second-edition\" target=\"_blank\" rel=\"noreferrer\"\u003eLearning PowerShell DSC\u003c/a\u003e is finally published! You can order it at these fine book sellers:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.packtpub.com/networking-and-servers/learning-powershell-dsc-second-edition\" target=\"_blank\" rel=\"noreferrer\"\u003ePackt Publishing\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.amazon.com/Learning-PowerShell-DSC-deployment-configuration/dp/1787287246\" target=\"_blank\" rel=\"noreferrer\"\u003eAmazon\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.barnesandnoble.com/w/learning-powershell-dsc-second-edition-james-pogran/1126293393\" target=\"_blank\" rel=\"noreferrer\"\u003eBarnes and Noble\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"Learning PowerShell DSC Second Edition is published!"},{"content":"","date":"17 June 2017","permalink":"https://pogran.dev/media/puppet-iis-module-now-puppet-supported/","section":"Media","summary":"","title":"Puppet IIS module: now Puppet Supported"},{"content":"The PuppetConf 2017 agenda and speakers have been announced. You can register now for a 35% discount if you use my link.\nI\u0026rsquo;m going to PuppetConf (again) and I\u0026rsquo;m speaking this time (gulp!)\nSession - Using Puppet and DSC to Report on Environment Change #This year I\u0026rsquo;ll be presenting at PuppetConf instead of just attending as staff. My session is all about Puppet and DSC. You already have Puppet and PowerShell DSC working together on your systems at your company. Puppet made it easy to plug in DSC to handle special circumstances while Puppet handled the rest of the configuration management on your servers, no matter the platform.\nHowever, you want to get the most out of your investment in time and effort by tracking change in your environment. DSC by itself offers little historical information on what changes were done in your environment, but Puppet can show change across your entire environment.\nThis talk will setup an environment using Puppet and DSC and show how the Puppet console will track and report on change that has occured in your environment, both from your configuration management files and from outside users. Then it will show how Puppet ensures the proper state is kept on your servers.\nMeet the Authors #I\u0026rsquo;ll be participating in a Meet the Authors event where I will be handing out a few copies of the second edition of my book: Learning PowerShell DSC.\nMore information #There\u0026rsquo;s alot more happening at PuppetConf this year with windows, you can see more sessions here\n","date":"7 June 2017","permalink":"https://pogran.dev/puppetconf-2017-agenda/","section":"Posts","summary":"Agenda and Speakers announced","title":"PuppetConf 2017 Agenda"},{"content":"Packt has agreed to publish a second edition of my book Learning PowerShell DSC. You can pre-order it here and it\u0026rsquo;s tentatively scheduled to be published in Sept 2017.\n","date":"4 April 2017","permalink":"https://pogran.dev/starting-work-on-the-second-edition-of-learning-powershell-dsc/","section":"Posts","summary":"Starting work on the Second Edition of Learning PowerShell DSC!","title":"Starting work on the Second Edition of Learning PowerShell DSC!"},{"content":"Puppet has published a new blog post that I wrote about using Puppet and PowerShell DSC to install and configure IIS with an ASP.NET 4.5.2 webiste.\n","date":"16 March 2017","permalink":"https://pogran.dev/dsc-deep-dive-installing-and-configuring-iis-using-puppet-and-powershell-dsc/","section":"Posts","summary":"DSC deep dive: Installing and configuring IIS using Puppet and PowerShell DSC","title":"DSC deep dive: Installing and configuring IIS using Puppet and PowerShell DSC"},{"content":"","date":"3 October 2016","permalink":"https://pogran.dev/media/managing-powershell-dsc-puppet/","section":"Media","summary":"","title":"Managing PowerShell DSC with Puppet"},{"content":"","date":"16 April 2016","permalink":"https://pogran.dev/media/dsc-deep-dive-installing-and-configuring-iis-using-puppet-and-powershell-dsc/","section":"Media","summary":"","title":"DSC deep dive: Installing and configuring IIS using Puppet and PowerShell DSC"},{"content":"Puppet Labs is doing a great series of webinars on automating your Windows environment. I just finished doing the Managing PowerShell DSC with Puppet webinar. Recording is up here and the code is here.\nSpeaking to an audience like that is easily the hardest thing I have done in a long while, and there wasn\u0026rsquo;t even video! I am too used to being in the back room coding as opposed to up front and talking to people. But this is one of the reasons I joined Puppet, putting myself out there. I\u0026rsquo;ve been working on automating systems on the Windows platform for over 14 years, but all of it internally and stuff I couldn\u0026rsquo;t share.\nI tried to show how using DSC and Puppet together can cover all scenarios you encounter in your day to day job. I used PowerShell DSC at my last job to deploy a large client/server application in production. There was no documentation at the time, so I wrote my own book called Learning PowerShell DSC, to help others who were struggling with DSC. While you can use DSC on it\u0026rsquo;s own, it\u0026rsquo;s so much better with Puppet.\n","date":"24 March 2016","permalink":"https://pogran.dev/managing-powershell-dsc-with-puppet/","section":"Talks","summary":"Managing PowerShell DSC with Puppet","title":"Managing PowerShell DSC with Puppet"},{"content":"Puppet Labs is doing a series of webinars on automating your Windows environment. There are many interesting topics being covered:\nFebruary 10: Windows Configuration Management: Packages, Services, and PowerShell February 24: Deploying IIS and ASP.NET with Puppet March 9: Package Management on Windows with Chocolatey March 23: Managing PowerShell DSC with Puppet April 6: Patch Management on Windows with Puppet April 20: Setting up Windows for System and Application Monitoring May 4: Getting Up and Running with the Windows Module Pack May 18: Get Started on Azure with Puppet I\u0026rsquo;ll be doing the \u0026lsquo;Managing PowerShell DSC with Puppet\u0026rsquo; webinar on March 23rd! We\u0026rsquo;ll be covering how to start using DSC with Puppet, a few basic tasks, and then an advanced example of using DSC and Puppet together. Register today!\n","date":"10 February 2016","permalink":"https://pogran.dev/new-puppet-windows-webinar-series/","section":"Talks","summary":"New Puppet Windows Webinar Series","title":"New Puppet Windows Webinar Series"},{"content":"Alanna Brown at Puppet interviewed me about the book I wrote about PowerShell DSC. We talked about my background and how I came about to write this book. The most important thing to me was trying to impart all the experiences I had using DSC in production to deploy applications on many disparate systems.\n","date":"27 January 2016","permalink":"https://pogran.dev/author-interview-by-puppet/","section":"Posts","summary":"Author Interview by Puppet","title":"Author Interview by Puppet"},{"content":"","date":"20 January 2016","permalink":"https://pogran.dev/media/powershell-dsc-module-now-supported/","section":"Media","summary":"","title":"PowerShell DSC module is now supported"},{"content":"The new Puppet module I\u0026rsquo;ve been working so hard on is finally released as supported! It was alot of hard work to get to here and now. Working closely with my coworkers and Microsoft to make this happen was the best learning experience and the most interesting thing I\u0026rsquo;ve done in a long time.\nThere are a host of improvements to the module since the first unsupported release, but the one I\u0026rsquo;m most excited about is the speed improvements. Instead of starting a PowerShell process for each reasource being executed, we only start one PowerShell process instance and continue to use it for the duration of the Puppet run. This results in a huge speed improvement as well as a decrease in system utilization. you can read more about what was done here.\n","date":"20 January 2016","permalink":"https://pogran.dev/puppet-dsc-module-is-now-supported/","section":"Posts","summary":"Puppet DSC module is now supported!","title":"Puppet DSC module is now supported!"},{"content":"The PowerShell DSC Book I have been writing is finished! You can order it now at Packt or at Amazon or Barnes and Noble.\nIt has been an amazing experience writing this book and I can\u0026rsquo;t wait to see what people think of it!\n","date":"26 October 2015","permalink":"https://pogran.dev/learning-dsc-book-published/","section":"Posts","summary":"My new book on PowerShell DSC is published!","title":"Learning DSC Book Published!"},{"content":"About #Windows PowerShell is a task-based command-line shell and scripting language designed especially for system administration. PowerShell DSC is a new management platform that enables you to deploy and manage configuration data for software services and manage the environment in which these services run.\nThis book begins with an overview of the basics of PowerShell DSC by covering the architecture and components of the Desired Sate Configuration. It will then familiarize you with the set of PowerShell language extensions and new PowerShell commands. It will help you understand and create DSC configurations with the help of practical examples, and to create DSC custom resources for your custom applications. Finally, you will learn to deploy a real world application using PowerShell DSC. By the end of the book, you will have better knowledge about the powerful Desired State Configuration platform, which helps you to achieve continuous delivery, and efficient management and easy deployment of data for systems.\nFeatures #Create flexible and maintainable deployments using DSC configuration scripts that stand the test of time Explore the in depth details of the core architecture, concepts, and practices used by PowerShell DSC A step-by-step guide that shows you how to start using and taking advantage of PowerShell DSC\n","date":"19 October 2015","permalink":"https://pogran.dev/learning-powershell-dsc/","section":"","summary":"\u003ch2 id=\"about\" class=\"relative group\"\u003eAbout \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#about\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eWindows PowerShell is a task-based command-line shell and scripting language designed especially for system administration. PowerShell DSC is a new management platform that enables you to deploy and manage configuration data for software services and manage the environment in which these services run.\u003c/p\u003e\n\u003cp\u003eThis book begins with an overview of the basics of PowerShell DSC by covering the architecture and components of the Desired Sate Configuration. It will then familiarize you with the set of PowerShell language extensions and new PowerShell commands. It will help you understand and create DSC configurations with the help of practical examples, and to create DSC custom resources for your custom applications. Finally, you will learn to deploy a real world application using PowerShell DSC. By the end of the book, you will have better knowledge about the powerful Desired State Configuration platform, which helps you to achieve continuous delivery, and efficient management and easy deployment of data for systems.\u003c/p\u003e","title":"Learning Powershell DSC"},{"content":"Session\nVideo link of session\n","date":"9 October 2015","permalink":"https://pogran.dev/puppetconf-2015-powershell-and-dsc-session/","section":"Talks","summary":"PuppetConf 2015 PowerShell and DSC Session","title":"PuppetConf 2015 PowerShell and DSC Session"},{"content":"I\u0026rsquo;ll be going to PuppetConf this year. I won\u0026rsquo;t be presenting but I will be attending all the sessions I can. I will also be at the author\u0026rsquo;s meet and greet to showcase my new book!\n","date":"3 October 2015","permalink":"https://pogran.dev/im-going-to-puppetconf/","section":"Posts","summary":"I\u0026rsquo;m going to PuppetConf!","title":"I'm going to PuppetConf!"},{"content":"The PowerShell DSC Book I have been writing is finished! You can pre-order it at Packt or at Amazon or Barnes and Noble.\n","date":"19 August 2015","permalink":"https://pogran.dev/powershell-dsc-book-finished/","section":"Posts","summary":"PowerShell DSC Book Finished!","title":"PowerShell DSC Book Finished!"},{"content":"Today is my first day at Puppet Labs!\n","date":"8 June 2015","permalink":"https://pogran.dev/puppet-day-one/","section":"Posts","summary":"Puppet Day One","title":"Puppet Day One"},{"content":"I\u0026rsquo;ve just been contracted to author a book for Packt Publishing on PowerShell DSC! Contact paperwork just went through and I am starting on the first chapters now. This will be a long process, but it is an exiciting start.\n","date":"24 April 2015","permalink":"https://pogran.dev/powershell-dsc-book/","section":"Posts","summary":"PowerShell DSC Book","title":"PowerShell DSC Book"},{"content":"Obligatory new post. Hi!\n","date":"5 March 2015","permalink":"https://pogran.dev/hello-world/","section":"Posts","summary":"Hello World","title":"Hello World"},{"content":"I have been wanting to setup a blog again for awhile, but also still maintain some level of control over both the nuts and bolts as well as an easy method to author posts. I have been reading about GitHub\u0026rsquo;s jekyll for awhile now, and found a project that gives you a pretty nice basic site template called poole.\nFollowing a nice guide http://joshualande.com/jekyll-github-pages-poole, I was able to get a site up and running on GitHub pretty easily. In fact, the hardest part figuring out how to get Github resolving my domain name.\nCreate githhub repo username.github.io You can use the auto site generator feature, or follow the instructions to manually create one. If you chose the auto site generator then you have to delete the files in the next step If you chose the auto site generator, you now have a basic site already Check it out at http://username.github.io Pull down your repository using git git clone https://github.com/username/username.github.io Delete the existing content if you chose the auto site genertor Copy the poole site files into your repo Add a file called CNAME. Note case is important, no file extension Add your custom domain to the CNAME file Push your changes ","date":"5 March 2015","permalink":"https://pogran.dev/setting-up-things/","section":"Posts","summary":"Setting Up Things","title":"Setting Up Things"}]