&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Articles from 2017 on PowerShell.org - Welcome Automaters!</title><link>https://powershell.org/articles/2017/</link><description>Recent content in Articles from 2017 on PowerShell.org - Welcome Automaters!</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://powershell.org/articles/2017/index.xml" rel="self" type="application/rss+xml"/><item><title>Dealing with redundancy in an IT world</title><link>https://powershell.org/articles/2017-11-19-dealing-with-redundancy-in-a-it-world/</link><guid>https://powershell.org/articles/2017-11-19-dealing-with-redundancy-in-a-it-world/</guid><pubDate>Sun, 19 Nov 2017 21:22:39 +0000</pubDate><description>&lt;p&gt;So you’re working for a company that’s going well (or not) and you start to hear rumours of parts of the business being sold off, the project you’re working on is being pulled or worse the business is closing down. Before you know it your x amount of years at said company have come to an end and you’re now redundant. The following &lt;a href="http://dilbert.com/strip/1996-05-14"&gt;Dilbert comic&lt;/a&gt; is a possible scenario you may have to deal with.&lt;br&gt;
How you deal with this new found freedom is completely up to you? You can go on a big holiday, have some time off doing things around the house, buy that 2 seater car you’ve always dreamed of owning or go straight back into the workforce using the redundancy (if you got any) to pay off a chunk of your mortgage. Whatever you decide to do, at some point (unless you are retiring) you will need to go job hunting again.&lt;br&gt;
In my situation I was being made redundant and leaving a company I had worked for, for the last 7 ½ years as a senior system engineer. I have a wife and 2 children so I really just wanted to get back in the workforce as soon as I could. The mortgage was not going to pay itself off.&lt;br&gt;
As soon as I heard that I had a month left of work I took out my CV and had to try to remember each position I had occupied over the last 7 ½ years and what my achievements were. And you know what, that is not an easy task. When you’re working and you complete an achievement, you always think to yourself “If ever I have to update my CV ill add this to it”. Problem is 5 years down the line you won’t remember that “good piece of work” and you’ll struggle to put some of the great achievements down on paper for your future employer.&lt;br&gt;
After several attempts at updating my CV, it was ready. Now time to start looking for work. My main skills are in Citrix technologies, PowerShell, Windows Server Operating Systems and my company’s proprietary cloud offering. In my job, I spent nearly every day learning something new and applying it to my job but I didn’t bother with getting certified. When job hunting, the first hurdle I came across was my lack of skills that the market place wanted. For nearly every senior engineer role out there, every man and his dog wanted Azure with 0365 and/or AWS. So any roles that looked good to me were out of my reach because I didn’t have those skills/qualifications.&lt;br&gt;
I found a couple of roles I really liked the look of and naively sent off my CV to those 2 roles only. There were a few other jobs that looked good but I really wanted one of these 2 roles so didn’t apply for anymore. 2 weeks passed and nothing back so I chased them up and still nothing. Oh well guess they didn’t like my CV so I’ll start looking again. And again I repeated the same process. And again the same outcome. I then started do some reading on recruitment sites and how recruiters get so many CVs that on average they will look at yours for 6 second before choosing to read more or toss it.&lt;br&gt;
By now I had finished work and a new job was not in sight, slightly panicking now. I revamped my CV a little, moving my core technical skills to the top of the front page (they were originally at the bottom of the back page) and applied for every job under the sun I liked the look of. I hit every job advertising site I could find and also sent my CV to every tech job agency I could find. If I really liked the look of a job I would follow the online application 30 minutes later with a phone call to get that connection with the job poster and to sell myself (which I hate doing). I updated my LinkedIn page and applied via LinkedIn to jobs on there. I started to use LinkedIn to make contact and catch up with people I knew to see if they had any positions in their companies. I actually found this to be the most successful way to get in to see companies.&lt;br&gt;
Through my contacts I had some interviews and even had a job offer with one tech firm. Problem was they had come in with an offer that was 20% below my previous wage. Do I take it to tie me over the Christmas period and get the money coming in again or do I wait for a possible better job that might show up tomorrow? If I took the job and something better came along would I then rescind that offer and my name would then be mud at that company for anything in the future. I decided not to take the job as it would have meant a major financial shuffle for the family and big cutbacks.&lt;br&gt;
That same afternoon I contacted another friend, as his company had quite a few positions open due to expansion. He put me in contact with their Talent Manger. The following day I had an interview and that evening I had a job offer which I took.&lt;br&gt;
The main take away I hope you get from this is, if this ever happens is to ensure your CV is always up to date. Make sure if and when people leave your present company that you keep some sort of contact with them because you never know when you might need to call on them or you might be able to help them out one day. Keep an eye on the job market and what the market is looking for and get skilled up and/or certified in those areas. If you’re not on LinkedIn get a presence on there, those contacts can be invaluable too. When Job hunting don’t just apply for that one dream job (especially if you’re out of work) hit any one of them that takes your fancy, you are better off having 2 or 3 offers on the table than nothing at all. Last thing to only take the offer if you really want the job, listen to your gut instinct.&lt;br&gt;
As it happens the new company I now work at is going to be one of the 1st in Australia to roll out Azure Stack. So I will be learning and get certified in Azure which better place me for my future.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>So you’re working for a company that’s going well (or not) and you start to hear rumours of parts of the business being sold off, the project you’re working on is being pulled or worse the business is closing down. Before you know it your x amount of years at said company have come to an end and you’re now redundant. The following<a href="http://dilbert.com/strip/1996-05-14">Dilbert comic</a> is a possible scenario you may have to deal with.<br>
How you deal with this new found freedom is completely up to you? You can go on a big holiday, have some time off doing things around the house, buy that 2 seater car you’ve always dreamed of owning or go straight back into the workforce using the redundancy (if you got any) to pay off a chunk of your mortgage. Whatever you decide to do, at some point (unless you are retiring) you will need to go job hunting again.<br>
In my situation I was being made redundant and leaving a company I had worked for, for the last 7 ½ years as a senior system engineer. I have a wife and 2 children so I really just wanted to get back in the workforce as soon as I could. The mortgage was not going to pay itself off.<br>
As soon as I heard that I had a month left of work I took out my CV and had to try to remember each position I had occupied over the last 7 ½ years and what my achievements were. And you know what, that is not an easy task. When you’re working and you complete an achievement, you always think to yourself “If ever I have to update my CV ill add this to it”. Problem is 5 years down the line you won’t remember that “good piece of work” and you’ll struggle to put some of the great achievements down on paper for your future employer.<br>
After several attempts at updating my CV, it was ready. Now time to start looking for work. My main skills are in Citrix technologies, PowerShell, Windows Server Operating Systems and my company’s proprietary cloud offering. In my job, I spent nearly every day learning something new and applying it to my job but I didn’t bother with getting certified. When job hunting, the first hurdle I came across was my lack of skills that the market place wanted. For nearly every senior engineer role out there, every man and his dog wanted Azure with 0365 and/or AWS. So any roles that looked good to me were out of my reach because I didn’t have those skills/qualifications.<br>
I found a couple of roles I really liked the look of and naively sent off my CV to those 2 roles only. There were a few other jobs that looked good but I really wanted one of these 2 roles so didn’t apply for anymore. 2 weeks passed and nothing back so I chased them up and still nothing. Oh well guess they didn’t like my CV so I’ll start looking again. And again I repeated the same process. And again the same outcome. I then started do some reading on recruitment sites and how recruiters get so many CVs that on average they will look at yours for 6 second before choosing to read more or toss it.<br>
By now I had finished work and a new job was not in sight, slightly panicking now. I revamped my CV a little, moving my core technical skills to the top of the front page (they were originally at the bottom of the back page) and applied for every job under the sun I liked the look of. I hit every job advertising site I could find and also sent my CV to every tech job agency I could find. If I really liked the look of a job I would follow the online application 30 minutes later with a phone call to get that connection with the job poster and to sell myself (which I hate doing). I updated my LinkedIn page and applied via LinkedIn to jobs on there. I started to use LinkedIn to make contact and catch up with people I knew to see if they had any positions in their companies. I actually found this to be the most successful way to get in to see companies.<br>
Through my contacts I had some interviews and even had a job offer with one tech firm. Problem was they had come in with an offer that was 20% below my previous wage. Do I take it to tie me over the Christmas period and get the money coming in again or do I wait for a possible better job that might show up tomorrow? If I took the job and something better came along would I then rescind that offer and my name would then be mud at that company for anything in the future. I decided not to take the job as it would have meant a major financial shuffle for the family and big cutbacks.<br>
That same afternoon I contacted another friend, as his company had quite a few positions open due to expansion. He put me in contact with their Talent Manger. The following day I had an interview and that evening I had a job offer which I took.<br>
The main take away I hope you get from this is, if this ever happens is to ensure your CV is always up to date. Make sure if and when people leave your present company that you keep some sort of contact with them because you never know when you might need to call on them or you might be able to help them out one day. Keep an eye on the job market and what the market is looking for and get skilled up and/or certified in those areas. If you’re not on LinkedIn get a presence on there, those contacts can be invaluable too. When Job hunting don’t just apply for that one dream job (especially if you’re out of work) hit any one of them that takes your fancy, you are better off having 2 or 3 offers on the table than nothing at all. Last thing to only take the offer if you really want the job, listen to your gut instinct.<br>
As it happens the new company I now work at is going to be one of the 1st in Australia to roll out Azure Stack. So I will be learning and get certified in Azure which better place me for my future.</p>
]]></content:encoded></item><item><title>PowerShell + DevOps Global Summit 2018 Scholarship Recipient</title><link>https://powershell.org/articles/2017-11-10-powershell-devops-global-summit-2018-scholarship-recipient/</link><guid>https://powershell.org/articles/2017-11-10-powershell-devops-global-summit-2018-scholarship-recipient/</guid><pubDate>Fri, 10 Nov 2017 15:45:52 +0000</pubDate><description>&lt;p&gt;Congratulations to Andrew Pla, winner of our PowerShell + DevOps Global Summit 2018 scholarship. Andrew submitted a stellar application to our review panel, and perfectly fit our profile for someone who’s just peeking out of the “beginner” realm, and who’s demonstrably used PowerShell to help bootstrap their IT career. If you’re attending Summit, be sure to keep an eye out for Andrew and say hi!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Congratulations to Andrew Pla, winner of our PowerShell + DevOps Global Summit 2018 scholarship. Andrew submitted a stellar application to our review panel, and perfectly fit our profile for someone who’s just peeking out of the “beginner” realm, and who’s demonstrably used PowerShell to help bootstrap their IT career. If you’re attending Summit, be sure to keep an eye out for Andrew and say hi!</p>
]]></content:encoded></item><item><title>Registration is open</title><link>https://powershell.org/articles/2017-11-01-registration-is-open/</link><guid>https://powershell.org/articles/2017-11-01-registration-is-open/</guid><pubDate>Wed, 01 Nov 2017 08:54:39 +0000</pubDate><description>&lt;p&gt;Registration for the 2018 PowerShell + DevOps Global Summit is open.&lt;br&gt;
These are the important links you&amp;rsquo;ll need:&lt;br&gt;
&lt;a href="https://powershell.org/summit/"&gt;Summit information &lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.eventbrite.com/e/powershell-devops-global-summit-2018-registration-32452427083"&gt;Registration&lt;/a&gt;&lt;br&gt;
&lt;a href="https://powershelldevopsglobalsummit2018.sched.com/"&gt;Agenda&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Registration for the 2018 PowerShell + DevOps Global Summit is open.<br>
These are the important links you&rsquo;ll need:<br><a href="https://powershell.org/summit/">Summit information </a><br><a href="https://www.eventbrite.com/e/powershell-devops-global-summit-2018-registration-32452427083">Registration</a><br><a href="https://powershelldevopsglobalsummit2018.sched.com/">Agenda</a></p>
]]></content:encoded></item><item><title>Putting it all out there</title><link>https://powershell.org/articles/2017-10-26-putting-it-all-out-there/</link><guid>https://powershell.org/articles/2017-10-26-putting-it-all-out-there/</guid><pubDate>Thu, 26 Oct 2017 11:11:31 +0000</pubDate><description>&lt;p&gt;Yesterday I pushed my first real project to a public repository on GitHub. It&amp;rsquo;s small right now though I hope to flesh it out over time, and it is very niche, but I hope it helps others who come across it. Regardless I&amp;rsquo;m proud of it. If you like, you can check it out &lt;a href="https://github.com/liampkemp/Enabler"&gt;here,&lt;/a&gt; I&amp;rsquo;d love your feedback, but that&amp;rsquo;s not the reason I&amp;rsquo;m writing this.&lt;br&gt;
I&amp;rsquo;m here to tell you &lt;em&gt;&lt;strong&gt;why&lt;/strong&gt;&lt;/em&gt; I did it.&lt;br&gt;
You see, I&amp;rsquo;m a private kind of person. I don&amp;rsquo;t often put myself out there for fear of embarrassing myself. I have always been worried that I might end up looking silly. That someone who knows more than I do, or knows something differently than I do would catch me out -  and if that happened, I couldn&amp;rsquo;t put the genie back in the bottle. Back in school, I wouldn&amp;rsquo;t put my hand up even if I knew the right answer, just in case. I was ensnared by Impostor Syndrome, it was crippling, and it had to change.&lt;br&gt;
So, what did I do? I started a &lt;a href="https://itcloudpro.net"&gt;blog&lt;/a&gt;, and in almost a year I&amp;rsquo;ve managed to get around 10-12 posts up. It isn&amp;rsquo;t much nor is it pretty, and sometimes I worry too much about the time in between posts, and rush to put something up which is not always perfect. But I&amp;rsquo;m happy to be doing it all the same. Mostly, I try to post about topics and problems that I haven&amp;rsquo;t been able to find complete information around elsewhere.&lt;br&gt;
I&amp;rsquo;ve started spending more time sharing and interacting on Twitter and LinkedIn, rather than just reading and clicking links. I&amp;rsquo;ve  even been followed and liked a few times. Lastly, I&amp;rsquo;ve been spending more time on these forums and elsewhere, helping out where I can.&lt;br&gt;
Overall, I feel better in myself, and have a greater level of confidence in my skills, knowledge, and what I can bring to the table. In the end, that is what led me to feeling good enough to publish my project. I can&amp;rsquo;t say that I&amp;rsquo;m completely over Impostor Syndrome and I don&amp;rsquo;t think I ever will be. I can say that I don&amp;rsquo;t feel it as often as I used to, and I can use it to drive myself to be better.&lt;br&gt;
When we are presented with a problem, we often go looking for answers from others. Flip that around and it means that if you have solved a problem, there is probably someone else looking for the answer and would really appreciate your experience. So why not put it out there?&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Yesterday I pushed my first real project to a public repository on GitHub. It&rsquo;s small right now though I hope to flesh it out over time, and it is very niche, but I hope it helps others who come across it. Regardless I&rsquo;m proud of it. If you like, you can check it out<a href="https://github.com/liampkemp/Enabler">here,</a> I&rsquo;d love your feedback, but that&rsquo;s not the reason I&rsquo;m writing this.<br>
I&rsquo;m here to tell you <em><strong>why</strong></em> I did it.<br>
You see, I&rsquo;m a private kind of person. I don&rsquo;t often put myself out there for fear of embarrassing myself. I have always been worried that I might end up looking silly. That someone who knows more than I do, or knows something differently than I do would catch me out -  and if that happened, I couldn&rsquo;t put the genie back in the bottle. Back in school, I wouldn&rsquo;t put my hand up even if I knew the right answer, just in case. I was ensnared by Impostor Syndrome, it was crippling, and it had to change.<br>
So, what did I do? I started a<a href="https://itcloudpro.net">blog</a>, and in almost a year I&rsquo;ve managed to get around 10-12 posts up. It isn&rsquo;t much nor is it pretty, and sometimes I worry too much about the time in between posts, and rush to put something up which is not always perfect. But I&rsquo;m happy to be doing it all the same. Mostly, I try to post about topics and problems that I haven&rsquo;t been able to find complete information around elsewhere.<br>
I&rsquo;ve started spending more time sharing and interacting on Twitter and LinkedIn, rather than just reading and clicking links. I&rsquo;ve  even been followed and liked a few times. Lastly, I&rsquo;ve been spending more time on these forums and elsewhere, helping out where I can.<br>
Overall, I feel better in myself, and have a greater level of confidence in my skills, knowledge, and what I can bring to the table. In the end, that is what led me to feeling good enough to publish my project. I can&rsquo;t say that I&rsquo;m completely over Impostor Syndrome and I don&rsquo;t think I ever will be. I can say that I don&rsquo;t feel it as often as I used to, and I can use it to drive myself to be better.<br>
When we are presented with a problem, we often go looking for answers from others. Flip that around and it means that if you have solved a problem, there is probably someone else looking for the answer and would really appreciate your experience. So why not put it out there?</p>
]]></content:encoded></item><item><title>PowerShell + DevOps Summit 2018 schedule</title><link>https://powershell.org/articles/2017-10-24-powershell-devops-summit-2018-schedule/</link><guid>https://powershell.org/articles/2017-10-24-powershell-devops-summit-2018-schedule/</guid><pubDate>Tue, 24 Oct 2017 20:15:26 +0000</pubDate><description>&lt;p&gt;The schedule for the 2018 Summit still needs a little bit of polishing to finish it but it&amp;rsquo;s taking shape. I&amp;rsquo;ve started releasing information on sched.com that we&amp;rsquo;re using for all our scheduling needs for the Summit. The one and only truth regarding the sessions and their times can be found at &lt;a href="https://powershelldevopsglobalsummit2018.sched.com/"&gt;https://powershelldevopsglobalsummit2018.sched.com/ &lt;/a&gt;&lt;br&gt;
I&amp;rsquo;ll be adding sessions over the next few days so keep checking.&lt;br&gt;
I&amp;rsquo;m really excited about the schedule for the 2018 Summit. We&amp;rsquo;ll have 4 rooms for sessions with many of your favourite speakers returning and many new speakers which is really good to see. The Community Lightning Demos return by popular acclaim and we&amp;rsquo;ll be running an Iron Scripter competition as well. The PowerShell Team will be presenting all day Monday and at other sessions through out the Summit.&lt;br&gt;
Registration opens 1 November and once you&amp;rsquo;re registered through eventbrite your information will be sync&amp;rsquo;d to sched.com so that you can access the schedule and use the scheduling app.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The schedule for the 2018 Summit still needs a little bit of polishing to finish it but it&rsquo;s taking shape. I&rsquo;ve started releasing information on sched.com that we&rsquo;re using for all our scheduling needs for the Summit. The one and only truth regarding the sessions and their times can be found at <a href="https://powershelldevopsglobalsummit2018.sched.com/">https://powershelldevopsglobalsummit2018.sched.com/ </a><br>
I&rsquo;ll be adding sessions over the next few days so keep checking.<br>
I&rsquo;m really excited about the schedule for the 2018 Summit. We&rsquo;ll have 4 rooms for sessions with many of your favourite speakers returning and many new speakers which is really good to see. The Community Lightning Demos return by popular acclaim and we&rsquo;ll be running an Iron Scripter competition as well. The PowerShell Team will be presenting all day Monday and at other sessions through out the Summit.<br>
Registration opens 1 November and once you&rsquo;re registered through eventbrite your information will be sync&rsquo;d to sched.com so that you can access the schedule and use the scheduling app.</p>
]]></content:encoded></item><item><title>Using Azure Desired State Configuration – Part IV</title><link>https://powershell.org/articles/2017-10-10-using-azure-desired-state-configuration-part-iv/</link><guid>https://powershell.org/articles/2017-10-10-using-azure-desired-state-configuration-part-iv/</guid><pubDate>Tue, 10 Oct 2017 14:00:07 +0000</pubDate><description>&lt;p&gt;So we&amp;rsquo;ve talked about Azure Automation DSC and the extensive reporting we can get from it.  With the pricing as it is, it would be hard to argue as to why you would want to use anything else.  But I&amp;rsquo;m a completionist, and there may be some edge cases that might come up where you wouldn&amp;rsquo;t be able to use the pull method for configurations.  So let&amp;rsquo;s talk about how you can use Azure DSC to push a configuration to a virtual machine.&lt;br&gt;
So let&amp;rsquo;s get started!&lt;br&gt;
&lt;strong&gt;Publish the Configuration&lt;/strong&gt;&lt;br&gt;
In order to push a configuration, we need to publish it to a blob store.  When you use Publish-AzureRmVmDscConfiguration, the command bundles all of the required modules along with the configuration into a .zip file. It does this by pulling the modules from your local machine that you&amp;rsquo;re running the command from, so you&amp;rsquo;ll need to make sure that you have the appropriate modules installed on your system.&lt;br&gt;
First, we&amp;rsquo;ll go ahead and grab a storage account where these binaries can be published.  In the storage account, we have a blob store for our configurations.  This blob store is a private store.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>So we&rsquo;ve talked about Azure Automation DSC and the extensive reporting we can get from it.  With the pricing as it is, it would be hard to argue as to why you would want to use anything else.  But I&rsquo;m a completionist, and there may be some edge cases that might come up where you wouldn&rsquo;t be able to use the pull method for configurations.  So let&rsquo;s talk about how you can use Azure DSC to push a configuration to a virtual machine.<br>
So let&rsquo;s get started!<br><strong>Publish the Configuration</strong><br>
In order to push a configuration, we need to publish it to a blob store.  When you use Publish-AzureRmVmDscConfiguration, the command bundles all of the required modules along with the configuration into a .zip file. It does this by pulling the modules from your local machine that you&rsquo;re running the command from, so you&rsquo;ll need to make sure that you have the appropriate modules installed on your system.<br>
First, we&rsquo;ll go ahead and grab a storage account where these binaries can be published.  In the storage account, we have a blob store for our configurations.  This blob store is a private store.</p><p><code>$AutoResGrp = Get-AzureRmResourceGroup -Name 'mms-eus' $StorAcct = Get-AzureRmStorageAccount -ResourceGroupName $AutoResGrp.ResourceGroupName -Name 'modulestor'</code>Now that we have our private store, we&rsquo;re going to publish our configuration using the Publish-AzureRmVMDscConfiguration command.</p><p><code>$DSCBlob = Publish-AzureRmVMDscConfiguration -ConfigurationPath C:\Scripts\Configs\cmdpconfig.ps1 -ResourceGroupName $StorAcct.ResourceGroupName -ContainerName 'dscpushconfig' -StorageAccountName $StorAcct.StorageAccountName -Force $Archive = $DSCBlob.Split('/') | Select-Object -Last 1</code>As previously mentioned, the command reads your configuration, and then grabs the necessary modules from your local machine and adds them to the package when it publishes the configuration.  This way, the machine has all of the necessary bits to perform the configuration.  You can actually validate this by downloading the packaged .zip file from the blob store and seeing for yourself.<br>
Along with the modules and configuration, you&rsquo;ll also find a dscmetadata.json file that is essentially a manifest of the required modules.<br><img src="https://powershell.org/wp-content/uploads/2017/10/PushPackage-300x136.jpg" alt=""><br><strong>Install the VM Extension</strong><br>
Now that our binaries have been published, we can get our target machine and deploy the Azure DSC VM extension to it while assigning the configuration.  When you deploy the extension, it&rsquo;s best to use the latest version available.  If you want to check which version is the latest, you can check out the release history on the<a href="https://blogs.msdn.microsoft.com/powershell/2014/11/20/release-history-for-the-azure-dsc-extension/">PowerShell Team Blog</a>.</p><p><code>$ArmVmRsg = Get-AzureRmResourceGroup -Name 'nrdtste' $ArmVm = Get-Azurermvm -ResourceGroupName $ArmVmRsg.ResourceGroupName -Name 'ctrxeusdbnp01' Set-AzureRmVMDscExtension -ArchiveResourceGroupName $StorAcct.ResourceGroupName -ArchiveBlobName $Archive -ResourceGroupName $ArmVm.ResourceGroupName -ArchiveStorageAccountName $StorAcct.StorageAccountName -ArchiveContainerName 'dscpushconfig' -Version '2.26' -VMName $ArmVm.Name -ConfigurationName 'CMDPConfig' -Verbose</code>Like with Azure Automation DSC, when you register the VM extension, your PowerShell session will be held open until the extension returns a success or failure status.  Once it returns, you can check the status of the configuration using Get-AzureRmVmDscExtensionStatus.</p><p><code>PS C:\Users\willa&gt; Get-AzureRmVMDscExtensionStatus -ResourceGroupName $ArmVm.ResourceGroupName -VMName $ArmVm.Name ResourceGroupName : nrdtst3 VmName : ctrxeusdbnp01 Version : 2.26 Status : Provisioning succeeded StatusCode : ProvisioningState/succeeded Timestamp : 10/9/2017 1:12:22 PM StatusMessage : DSC configuration was applied successfully. DscConfigurationLog : {[2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] The operation 'Get-WindowsFeature' succeeded: Server-Gui-Shell, [2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Test ] [[WindowsFeature]RemoveUI] in 9.5980 seconds., [2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ Start Set ] [[WindowsFeature]RemoveUI], [2017-10-09 13:11:19Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Uninstallation started......}</code>If you want to dive a little deeper, we can of course grab the specific DscConfigurationLog information:</p><p><code>PS C:\Users\willa&gt; (Get-AzureRmVMDscExtensionStatus -ResourceGroupName $ArmVm.ResourceGroupName -VMName $Armvm.Name).DscConfigurationLog [2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] The operation 'Get-WindowsFeature' succeeded: Server-Gui-Shell [2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Test ] [[WindowsFeature]RemoveUI] in 9.5980 seconds. [2017-10-09 13:11:18Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ Start Set ] [[WindowsFeature]RemoveUI] [2017-10-09 13:11:19Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Uninstallation started... [2017-10-09 13:11:19Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Continue with removal? [2017-10-09 13:11:19Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Prerequisite processing started... [2017-10-09 13:11:24Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Prerequisite processing succeeded. [2017-10-09 13:12:21Z] [WARNING] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] You must restart this server to finish the removal process. [2017-10-09 13:12:21Z] Settings handler status to 'transitioning' (C:\Packages\Plugins\Microsoft.Powershell.DSC\2.26.1.0\Status\0.status) [2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Uninstallation succeeded. [2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] Successfully uninstalled the feature Server-Gui-Shell. [2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: [[WindowsFeature]RemoveUI] The Target machine needs to be restarted. [2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Set ] [[WindowsFeature]RemoveUI] in 62.7090 seconds. [2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Resource ] [[WindowsFeature]RemoveUI] [2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: [] A reboot is required to progress further. Please reboot the system. [2017-10-09 13:12:21Z] [WARNING] [ctrxeusdbnp01]: [] A reboot is required to progress further. Please reboot the system. [2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Set ] [2017-10-09 13:12:21Z] [VERBOSE] [ctrxeusdbnp01]: LCM: [ End Set ] in 74.8080 seconds. [2017-10-09 13:12:21Z] [VERBOSE] Operation 'Invoke CimMethod' complete. [2017-10-09 13:12:21Z] [VERBOSE] Time taken for configuration job to complete is 75.071 seconds</code>As you can see, the configuration is complete pending a reboot.  This brings us to a few of the caveats associated with the push method for Azure DSC.</p><ul><li>Unfortunately, unlike with the Register-AzurRmAutomationDscNodeConfiguration command available for Azure Automation, you cannot currently configure the LCM direct from the command.  Instead, you&rsquo;ll want to add a LocalConfigurationManager block to your top level config to set any attributes for the LCM.</li><li>As the system is downloading the packaged modules and configuration files, the mof file is configured locally on the machine.  While the current.mof file is encrypted, there is a copy of the mof that is generated in the C:\Packages\Plugins\Microsoft.Powershell.DSC<br>
\ directory.  You&rsquo;ll want to be careful as to what you&rsquo;re passing in plain text in that regard.</li><li>You can retrieve the DscConfigurationLog data for validation of your configs and the state of the machines, but this process requires automation and can take some time to compile.</li></ul><p>So now we&rsquo;ve explore Azure Desired State Configuration using the available push and pull methods.  And we&rsquo;ve explored the rich reporting capabilities that are available to you in Azure Automation DSC.  It&rsquo;s been a long journey, but I hope you&rsquo;ve found this content to be useful to you!<br>
Until next time!</p>
]]></content:encoded></item><item><title>Using Azure Desired State Configuration – Part III</title><link>https://powershell.org/articles/2017-10-03-using-azure-desired-state-configuration-part-iii/</link><guid>https://powershell.org/articles/2017-10-03-using-azure-desired-state-configuration-part-iii/</guid><pubDate>Tue, 03 Oct 2017 14:00:59 +0000</pubDate><description>&lt;p&gt;Last week we talked about modifying and uploading our configurations to Azure Automation DSC.  We were able to import credentials from Azure&amp;rsquo;s Automation Account Credential store, and then compile the .mof files in the automation account for deployment.  This week, we&amp;rsquo;ll be looking at how we apply those configurations to existing systems via PowerShell.  Then we&amp;rsquo;ll take a look at some of the reporting available via Azure Automation DSC and send those reports over to Operations Management Suite for dashboarding.&lt;br&gt;
So when we left off.  We successfully published our configurations in Automation DSC.  If we run Get-AzureRmAutomationDscNodeConfiguration against the configuration I published, we get the following:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Last week we talked about modifying and uploading our configurations to Azure Automation DSC.  We were able to import credentials from Azure&rsquo;s Automation Account Credential store, and then compile the .mof files in the automation account for deployment.  This week, we&rsquo;ll be looking at how we apply those configurations to existing systems via PowerShell.  Then we&rsquo;ll take a look at some of the reporting available via Azure Automation DSC and send those reports over to Operations Management Suite for dashboarding.<br>
So when we left off.  We successfully published our configurations in Automation DSC.  If we run Get-AzureRmAutomationDscNodeConfiguration against the configuration I published, we get the following:</p><p><code>Get-AzureRmAutomationDscNodeConfiguration -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -ConfigurationName TestConfig</code><img src="https://powershell.org/wp-content/uploads/2017/09/aadscmofs-300x198.jpg" alt=""><br>
As you can see, when we published the configuration, it generated two configuration .mofs based on our node names - domainController and webServer.  Now of course, we&rsquo;re not going to be calling our servers webServer and domainController, rather, these are generalized names for our configurations.  We get the root configuration (TestConfig), and then the node specific configuration based on the root document (webServer or domainController).  This gives us a lot of flexibility as we can now statefully name our configurations, and assign them to machines without dealing with guids or having all of the mofs defined by a computer name or any other nonsense!  We just assign what named configuration goes to what system, and away we go.<br>
We don&rsquo;t even really care what the computer name is, as long as the correct config gets assigned.  This is really helpful when working on Azure Resource Manager templates, because I don&rsquo;t even really know what the system name will be until runtime.  I just designate a set of systems as &lsquo;webServer&rsquo;, assign the config and deploy.<br><a href="https://twitter.com/jsnover/status/553249369852358657"><em>Moo.</em></a><br><strong>Register the Virtual Machine</strong><br>
So let&rsquo;s go ahead and get a system that we want to target.  I just so happen to have one in Azure right here:</p><p><code>$TargetResGroup = 'nrdtste' $VMName = 'ctrxeusdbnp01' $VM = Get-AzureRmVM -ResourceGroupName $TargetResGroup -Name $VMName</code>Now that we have our VM object, we&rsquo;re going to create a hash-table with some configuration items for the DSC Local Configuration Manager on the target system.</p><p><code>$DSCLCMConfig = @{ 'ConfigurationMode' = 'ApplyAndAutocorrect' 'RebootNodeIfNeeded' = $true 'ActionAfterReboot' = 'ContinueConfiguration' }</code>Once we have all of this, we can now go ahead and register our target node in Automation DSC using the Register-AzureRmAutomationDscNode command.</p><p><code>Register-AzureRmAutomationDscNode -AzureVMName $VM.Name -AzureVMResourceGroup $VM.ResourceGroupName -AzureVMLocation $VM.Location -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName @DSCLCMConfig</code>You might note with this command that you can also assign it a configuration as you register the node.  However, I&rsquo;ve had occasional issues with this method.  So we&rsquo;re going to go ahead and register the node first, then assign the configuration.  As another note, while the system is being registered, the command will hold your session until it returns a success or failure.  So grab another cup of coffee and enjoy it for a few minutes while we wait.<br><img src="https://powershell.org/wp-content/uploads/2017/09/VMregistered-300x123.jpg" alt=""><br><strong>Apply a Configuration</strong><br>
Now we can see our machine has registered successfully.  But if we run the Get-AzureRmAutomationDscNode command, we can see that the NodeConfigurationName property is empty.  So let&rsquo;s fix that.<br><img src="https://powershell.org/wp-content/uploads/2017/09/ConfigEmpty-300x76.jpg" alt=""><br>
What we need to do is capture the configuration we want to apply, so we do this by grabbing it with Get-AzureRmAutomationDscNodeConfiguration.  Then, we&rsquo;ll capture the target DSC endpoint with the Get command we previously used, and cast both objects to our Set-AzureRmAutomationDscNode command to apply the configuration to the appropriate node.</p><p><code>$Configuration = Get-AzureRmAutomationDscNodeConfiguration -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName -Name 'CompositeConfig.webServer' $TargetNode = Get-AzureRmAutomationDscNode -Name $VM.Name -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName Set-AzureRmAutomationDscNode -Id $TargetNode.Id -NodeConfigurationName $Configuration.Name -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName -Verbose -Force</code>After a couple of seconds, we can see that the configuration has been assigned to our node.  Once the LCM hits it&rsquo;s next review cycle, it&rsquo;ll pick up the configuration and start applying:<br><img src="https://powershell.org/wp-content/uploads/2017/09/NodeConfigd-300x96.jpg" alt=""><br>
We can check on the status of our target node by using the Get-AzureRmAutomationDscNodeReport command like so to get some useful information:</p><p><code>Get-AzureRmAutomationDscNodeReport -NodeId $TargetNode.Id -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Latest</code>And it will output some pretty useful information.<br><img src="https://powershell.org/wp-content/uploads/2017/09/PSReport-300x139.jpg" alt=""><br><strong>Azure Automation DSC Reports</strong><br>
This is where I have to admit that the UI really shines.  You can see all of your systems at a glance, with what configuration is assigned and it&rsquo;s current state.<br><img src="https://powershell.org/wp-content/uploads/2017/09/Report1-300x91.jpg" alt=""><br>
Furthermore, you can actually drill down through the nodes to see what resources are being applied, what their dependencies are, and what the state of the particular configuration item is.<br><img src="https://powershell.org/wp-content/uploads/2017/09/Report2-300x282.jpg" alt=""><br>
There is a wealth of data that you can find here in an easy to read dashboard.  Furthermore, you can connect this to a Log Analytics instance (or other products that support restful API), and ship it up for alerting and more dashboarding.<br><strong>Connecting to Log Analytics</strong><br>
So connecting your Azure Automation DSC is pretty straightforward.  To be able to use it, you need to have an OMS tier that includes the Automation and Control offering to start.  If you do, then all you have to do is follow a couple of simple commands.<br>
First, we have to get the resourceIds for the Automation Account and the Log Analytics workspace.</p><p><code>#Get the resourceId of the automation account. $AutoAcctResource = Find-AzureRmResource -ResourceType "Microsoft.Automation/automationAccounts" -ResourceNameContains 'testautoaccteastus2' #Get the resourceId of the Log Analytics Workspace $LogAnalyticsResource = Find-AzureRmResource -ResourceType "Microsoft.OperationalInsights/workspaces" -ResourceNameContains 'LWINerd'</code>Then we can use those resourceIds to pass to Set-AzureRmDiagnosticSetting and specify our DSCNodeStatus category.</p><p><code>Set-AzureRmDiagnosticSetting -ResourceId $AutoAcctResource.ResourceId -WorkspaceId $LogAnalyticsResource.ResourceId -Enabled $true -Categories "DscNodeStatus" -Verbose</code>Then you&rsquo;ll get a return similar to this:</p><p><code>PS C:\Scripts\Presentations\AzureAutomationDSC\ResourcesToUpload&gt; Set-AzureRmDiagnosticSetting -ResourceId $AutoAcctResource.ResourceId -WorkspaceId $LogAnalyticsResource.ResourceId -Enabled $true -Categories "D scNodeStatus" -Verbose StorageAccountId : ServiceBusRuleId : EventHubAuthorizationRuleId : Metrics TimeGrain : PT1M Enabled : False RetentionPolicy Enabled : False Days : 0 Logs Category : JobLogs Enabled : False RetentionPolicy Enabled : False Days : 0 Category : JobStreams Enabled : False RetentionPolicy Enabled : False Days : 0 Category : DscNodeStatus Enabled : True RetentionPolicy Enabled : False Days : 0 WorkspaceId : /subscriptions/f2007bbf-f802-4a47-9336-cf7c6b89b378/resourceGroups/mms-eus/providers/Microsoft.OperationalInsights/workspaces/LWINerd Id : /subscriptions/f2007bbf-f802-4a47-9336-cf7c6b89b378/resourcegroups/mms-eus/providers/microsoft.automation/automationaccounts/testautoaccteastus2/providers/microsoft.insights/diagnosticSettings/service Name : service Type : Location : Tags :</code>After a little while, we can check back to our log search and start performing queries and configuring alerts.<br><img src="https://powershell.org/wp-content/uploads/2017/09/DSCReporting-300x154.jpg" alt=""><br>
So that&rsquo;s Azure Automation DSC in a nutshell!  But don&rsquo;t worry, I haven&rsquo;t forgotten about Azure DSC&rsquo;s push method.  We&rsquo;ll be talking about that next blog!</p>
]]></content:encoded></item><item><title>Call for topics closing 1 October</title><link>https://powershell.org/articles/2017-09-30-call-for-topics-closing-1-october/</link><guid>https://powershell.org/articles/2017-09-30-call-for-topics-closing-1-october/</guid><pubDate>Sat, 30 Sep 2017 15:22:45 +0000</pubDate><description>&lt;p&gt;The call for topics is closing 1 October at 23:59 GMT. We’ve had a fantastic set of submissions. Creating an agenda for the 2018 Summit is going to be very difficult because we’ve had so many fantastic sessions submitted and I don’t have enough slots to take them all.&lt;/p&gt;
&lt;p&gt;The call for topics is hosted by papercall.io – highly recommended – and the cut off is automatic.&lt;/p&gt;
&lt;p&gt;I WILL NOT ACCEPT ANY SESSIONS SUBMITTED AFTER THE CUT OFF DATE.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The call for topics is closing 1 October at 23:59 GMT. We’ve had a fantastic set of submissions. Creating an agenda for the 2018 Summit is going to be very difficult because we’ve had so many fantastic sessions submitted and I don’t have enough slots to take them all.</p><p>The call for topics is hosted by papercall.io – highly recommended – and the cut off is automatic.</p><p>I WILL NOT ACCEPT ANY SESSIONS SUBMITTED AFTER THE CUT OFF DATE.</p>
]]></content:encoded></item><item><title>Using Azure Desired State Configuration – Part II</title><link>https://powershell.org/articles/2017-09-26-using-azure-desired-state-configuration-part-ii/</link><guid>https://powershell.org/articles/2017-09-26-using-azure-desired-state-configuration-part-ii/</guid><pubDate>Tue, 26 Sep 2017 14:00:21 +0000</pubDate><description>&lt;p&gt;Today we&amp;rsquo;re going to be talking about adding configurations to your Azure Automation Account.  In this article, we&amp;rsquo;ll be discussing special considerations that we need to take into account when uploading our configurations.  Then we&amp;rsquo;ll talk about compiling the configurations into Managed Object Format (.mof) files, which we&amp;rsquo;ll be able to use to assign to our systems.&lt;br&gt;
&lt;strong&gt;Things to Consider&lt;/strong&gt;&lt;br&gt;
When building configurations for Azure DSC (or anything where we are pulling pre-created .mof files from), there are some things that we need to keep in mind.&lt;br&gt;
&lt;em&gt;Don&amp;rsquo;t embed PowerShell scripts in your configurations.&lt;/em&gt; - I spent a lot of time cleaning up my own configurations when learning Azure Automation DSC.  When configurations are compiled, they&amp;rsquo;re done so on a virtual machine hidden under the covers and can cause some unexpected behaviours.  Some of the issues that I ran into were:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Today we&rsquo;re going to be talking about adding configurations to your Azure Automation Account.  In this article, we&rsquo;ll be discussing special considerations that we need to take into account when uploading our configurations.  Then we&rsquo;ll talk about compiling the configurations into Managed Object Format (.mof) files, which we&rsquo;ll be able to use to assign to our systems.<br><strong>Things to Consider</strong><br>
When building configurations for Azure DSC (or anything where we are pulling pre-created .mof files from), there are some things that we need to keep in mind.<br><em>Don&rsquo;t embed PowerShell scripts in your configurations.</em> - I spent a lot of time cleaning up my own configurations when learning Azure Automation DSC.  When configurations are compiled, they&rsquo;re done so on a virtual machine hidden under the covers and can cause some unexpected behaviours.  Some of the issues that I ran into were:</p><ul><li>Using environment variables like $env:COMPUTERNAME - This actually caused me a lot of headaches when I started building systems that were being joined to a domain.  The name of the instance that<em>compiles</em> the .mof will be used for $env:COMPUTERNAME instead of the target computer name and you&rsquo;ll be banging your head on the table wondering what happened.  Some of the resources that have been published in the gallery have been updated to use a &rsquo;localhost&rsquo; option as a computer name input, such as xActiveDirectory.  This takes care of a lot of those headaches.</li><li>Using Parenthetical Commands to establish values - Using something like Get-NetAdapter in a parenthetical argument to get a network adapter of your target system and pass the needed values on to your DSC Resource Providers won&rsquo;t work for the same reasons as above.  In this instance, I received a vague error indicating that I was passing an invalid property, and took a little bit of time before I understood what was going on.</li><li>I also ran into an issue with compiling a configuration because I had been using Set-Item to configure the WSMan maxEnvelopeSize in my configs because they can get really big.  The error that I received was that WSMan wasn&rsquo;t installed on the machine.  It took me a bit to realize that this was because the machine compiling the .mof didn&rsquo;t have WSMan running on the box and it was blowing up on the config.</li></ul><p>Instead, if you need to run PowerShell scripts ahead of your deployment, you can use the custom script extension to perform those tasks in Azure, or just put the script into your image on-prem.  There is one exception to this, and that&rsquo;s what we&rsquo;ll be talking about next.<br><em>Leverage Azure Automation Credential storage where possible</em> - Passing credentials in as a parameter can cause all kinds of issues.</p><ul><li>First and foremost, anyone that is building or deploying those configurations will know those credentials.</li><li>Second of all, it brings the possibility of someone tripping over the keyboard and entering a credential in improperly.</li></ul><p>Allowing Azure Automation to tap the credential store during .mof compilation allows to credentials to stay in a secured bubble through the entire process.  To pass a credential from Azure Automation to your config, you need to modify the configuration.  Simply call Get-AutomationPSCredential to a variable inside your configuration, and then set that variable wherever those credentials are required.  Like so:</p><p><code>$AdminCreds = Get-AutomationPSCredential -Name $AdminName Node ($AllNodes.Where{$_.Role -eq "WebServer"}).NodeName { JoinDomain DomainJoin { DependsOn = "[WindowsFeature]RemoveUI" DomainName = $DomainName Admincreds = $Admincreds RetryCount = 20 RetryIntervalSec = 60 } }</code>Azure Automation under the covers will authenticate to the Credentials store with the RunAs account, and then pass those credentials as PSCredential to your DSC resource provider.<br><em>Stop Using localhost (or a specific computer name) as the Node Name</em> - Azure Automation DSC allows you to use genericized, but meaningful names to configurations instead of just assigning things to localhost.  So now you can use webServer, or domainController, or something that describes the role instead of a machine name.  This makes it much easier to decide which configuration should go to what machine.<br><img src="https://powershell.org/wp-content/uploads/2017/09/roles-267x300.jpg" alt=""><br><strong>Upload The Configuration</strong><br>
So much like in my previous series on Azure Automation and OMS, we&rsquo;re going to upload our DSC resources to our Automation Account&rsquo;s modules directory.  This requires getting the automation account, zipping up our local module files, sending them to a blob store, and importing those modules from the blob store.  I&rsquo;ve sectioned out the code into different regions to better break it down for your own purposes.</p><p><code>#region GetAutomationAccount $AutoResGrp = Get-AzureRmResourceGroup -Name 'mms-eus' $AutoAcct = Get-AzureRmAutomationAccount -ResourceGroupName $AutoResGrp.ResourceGroupName #endregion #region compress configurations Set-Location C:\Scripts\Presentations\AzureAutomationDSC\ResourcesToUpload $Modules = Get-ChildItem -Directory ForEach ($Mod in $Modules){ Compress-Archive -Path $Mod.PSPath -DestinationPath ((Get-Location).Path + '\' + $Mod.Name + '.zip') -Force } #endregion #region Access blob container $StorAcct = Get-AzureRmStorageAccount -ResourceGroupName $AutoAcct.ResourceGroupName Add-AzureAccount $AzureSubscription = ((Get-AzureSubscription).where({$PSItem.SubscriptionName -eq $Sub.Name})) Select-AzureSubscription -SubscriptionName $AzureSubscription.SubscriptionName -Current $StorKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $StorAcct.ResourceGroupName -Name $StorAcct.StorageAccountName).where({$PSItem.KeyName -eq 'key1'}) $StorContext = New-AzureStorageContext -StorageAccountName $StorAcct.StorageAccountName -StorageAccountKey $StorKey.Value $Container = Get-AzureStorageContainer -Name ('modules') -Context $StorContext #endregion #region upload zip files $ModulesToUpload = Get-ChildItem -Filter "*.zip" ForEach ($Mod in $ModulesToUpload){ $Blob = Set-AzureStorageBlobContent -Context $StorContext -Container $Container.Name -File $Mod.FullName -Force New-AzureRmAutomationModule -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Name ($Mod.Name).Replace('.zip','') -ContentLink $Blob.ICloudBlob.Uri.AbsoluteUri } #endregion</code>Once we&rsquo;ve uploaded our files, we can monitor them to ensure that they&rsquo;ve imported successfully via the UI, or by using the Get-AzureRmAutomationModule command.<br><img src="https://powershell.org/wp-content/uploads/2017/09/ModuleImport-300x109.jpg" alt=""/><p><code>PS C:\Scripts\Presentations\AzureAutomationDSC\ResourcesToUpload&gt; Get-AzureRmAutomationModule -Name LWINConfigs -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountNa me ResourceGroupName : mms-eus AutomationAccountName : testautoaccteastus2 Name : LWINConfigs IsGlobal : False Version : 1.0.0.0 SizeInBytes : 5035 ActivityCount : 1 CreationTime : 9/13/2017 9:56:10 AM -04:00 LastModifiedTime : 9/13/2017 9:57:26 AM -04:00 ProvisioningState : Succeeded</code><strong>Compile the Configuration</strong><br>
Once we&rsquo;ve uploaded our modules, we can then upload and compile our configuration.  For this, we&rsquo;ll use the Import-AzureRmAutomationDscConfiguration command.  But before we do, there&rsquo;s two things to note when formatting a configuration for deployment to Azure Automation DSC.</p><ul><li>The configuration name has to match the name of the configuration file.  So if your configuration is called SqlServerConfig, your config file has to be called SqlServerConfig.ps1.</li><li>The sourcepath parameter errors out with an &lsquo;invalid argument specified&rsquo; error if you use a string path.  Instead, it works if you use (Get-Item).FullName</li></ul><p>We&rsquo;ll be casting this command to a variable, as we&rsquo;ll be using it later on when we compile the configuration.  You&rsquo;ll also want to use the publish parameter to publish the configuration after importation, and if you&rsquo;re overwriting a configuration you&rsquo;ll want to leverage the force parameter.</p><p><code>$Config = Import-AzureRmAutomationDscConfiguration -SourcePath (Get-Item C:\Scripts\Presentations\AzureAutomationDSC\TestConfig.ps1).FullName -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName -Description DemoConfiguration -Published -Force</code><img src="https://powershell.org/wp-content/uploads/2017/09/ConfigPublished-300x97.jpg" alt=""><br>
Now that our configuration is published, we can compile it.  So let&rsquo;s add our parameters and configuration data:</p><p><code>$Parameters = @{ 'DomainName' = 'lwinerd.local' 'ResourceGroupName' = $AutoAcct.ResourceGroupName 'AutomationAccountName' = $AutoAcct.AutomationAccountName 'AdminName' = 'lwinadmin' } $ConfigData = @{ AllNodes = @( @{ NodeName = "*" PSDscAllowPlainTextPassword = $true }, @{ NodeName = "webServer" Role = "WebServer" } @{ NodeName = "domainController" Role = "domaincontroller" } ) }</code>You&rsquo;ll notice that I have PSDscAllowPlainTextPassword set to true for all of my nodes.  This is to allow the PowerShell instance on the compilation node to compile the configuration with credentials being passed into it.  This PowerShell instance isn&rsquo;t aware that once the .mof is compiled, it is encrypted by Azure Automation before it&rsquo;s stored in the Automation Account.<br>
Now that we have our parameters and configuration data set, we can pass this to our Start-AzureRmAutomationDscCompilationJob command to kick off the .mof compilation.</p><p><code>$DSCComp = Start-AzureRmAutomationDscCompilationJob -AutomationAccountName $AutoAcct.AutomationAccountName -ConfigurationName $Config.Name -ConfigurationData $ConfigData -Parameters $Parameters -ResourceGroupName $AutoAcct.ResourceGroupName</code>And now we can use the Get-AzureRmAutomationDscCompilationJob command to check the status of the compilation, or check through the UI.</p><p><code>Get-AzureRmAutomationDscCompilationJob -Id $DSCComp.Id -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName</code>The compilation itself can take up to around five minutes, so grab yourself a cup of coffee.  Once it returns as complete, we can get to registering our endpoints and delivering our configurations to them.  Join us next week as we do just that!<br><img src="https://powershell.org/wp-content/uploads/2017/09/CompComplete-300x161.jpg" alt=""/>
]]></content:encoded></item><item><title>Using Azure Desired State Configuration – Part I</title><link>https://powershell.org/articles/2017-09-25-using-azure-desired-state-configuration-part-i/</link><guid>https://powershell.org/articles/2017-09-25-using-azure-desired-state-configuration-part-i/</guid><pubDate>Mon, 25 Sep 2017 14:00:45 +0000</pubDate><description>&lt;p&gt;I&amp;rsquo;ve been wanting to do this series for a while, and with some of the recent changes in Azure Automation DSC, I feel like we can now do a truly complete series.  So let&amp;rsquo;s get started!&lt;br&gt;
Compliance is hard as it is.  And as companies start moving more workloads into the cloud, they struggle with compliance even more so.  Many organizations are moving to Infrastructure-as-a-Service for a multitude of reasons (both good and bad).  As these workloads become more numerous, IT departments are struggling with keeping up with auditing and management needs.  Desired State Configuration, as we all know, can provide a path to not only configuring your environments as they deploy as new workloads, but can maintain compliancy, and give you rich reporting.&lt;br&gt;
Yes.  Rich reporting from Desired State Configuration, out of the box.  You read it right.  You can get rich graphical reporting out of Azure Automation Desired State Configuration out of the box.  And you can even use it on-prem!&lt;br&gt;
&lt;img src="https://powershell.org/wp-content/uploads/2017/08/Compliance-300x200.jpg" alt=""&gt;&lt;br&gt;
In this series, we&amp;rsquo;re going to be discussing the push and pull methods for Desired State Configuration in Azure.  We&amp;rsquo;ll be going over some of the &amp;lsquo;gotchas&amp;rsquo; that you have to keep in mind while deploying your configurations in the Azure environment.  And we&amp;rsquo;ll be talking about how we can use hybrid workers to manage systems on-prem using the same tools.&lt;br&gt;
&lt;strong&gt;Push vs. Pull&lt;/strong&gt;&lt;br&gt;
Desired State Configuration, like a datacenter implementation, can be handled via push or pull method.  Push method in Azure does not give you reporting, but allows you to deploy your configurations to a new or existing environment.  These configurations, and the modules necessary to perform the configuration, are stored in a private blob that you create, and then the Azure Desired State Configuration extension can be assigned that package.  It is then downloaded to the target machine, decompressed, modules installed, and the configuration .mof file generated locally on the system.&lt;br&gt;
Pull method fully uses the capabilities of the Azure Automation Account for storing modules, configurations, and .mof compilations to deploy to systems.  The target DSC nodes are registered and monitored through the Azure Automation Account and reporting is generated and made available through the UI.  This reporting can also be forwarded to &lt;a href="https://docs.microsoft.com/en-us/azure/automation/automation-dsc-diagnostics"&gt;OMS Log Analytics&lt;/a&gt; for dashboarding and alerting purposes (which, as we discussed in &lt;a href="https://powershell.org/2017/07/25/using-powershell-azure-automation-and-oms-part-i/"&gt;my previous series&lt;/a&gt;, can be used with Azure Automation Runbooks for auto-remediation).&lt;br&gt;
&lt;strong&gt;Pros and Cons to Each&lt;/strong&gt;&lt;br&gt;
So let&amp;rsquo;s talk about some of the upsides and downsides to each method.  These may affect your decisions as you architect your DSC solution.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I&rsquo;ve been wanting to do this series for a while, and with some of the recent changes in Azure Automation DSC, I feel like we can now do a truly complete series.  So let&rsquo;s get started!<br>
Compliance is hard as it is.  And as companies start moving more workloads into the cloud, they struggle with compliance even more so.  Many organizations are moving to Infrastructure-as-a-Service for a multitude of reasons (both good and bad).  As these workloads become more numerous, IT departments are struggling with keeping up with auditing and management needs.  Desired State Configuration, as we all know, can provide a path to not only configuring your environments as they deploy as new workloads, but can maintain compliancy, and give you rich reporting.<br>
Yes.  Rich reporting from Desired State Configuration, out of the box.  You read it right.  You can get rich graphical reporting out of Azure Automation Desired State Configuration out of the box.  And you can even use it on-prem!<br><img src="https://powershell.org/wp-content/uploads/2017/08/Compliance-300x200.jpg" alt=""><br>
In this series, we&rsquo;re going to be discussing the push and pull methods for Desired State Configuration in Azure.  We&rsquo;ll be going over some of the &lsquo;gotchas&rsquo; that you have to keep in mind while deploying your configurations in the Azure environment.  And we&rsquo;ll be talking about how we can use hybrid workers to manage systems on-prem using the same tools.<br><strong>Push vs. Pull</strong><br>
Desired State Configuration, like a datacenter implementation, can be handled via push or pull method.  Push method in Azure does not give you reporting, but allows you to deploy your configurations to a new or existing environment.  These configurations, and the modules necessary to perform the configuration, are stored in a private blob that you create, and then the Azure Desired State Configuration extension can be assigned that package.  It is then downloaded to the target machine, decompressed, modules installed, and the configuration .mof file generated locally on the system.<br>
Pull method fully uses the capabilities of the Azure Automation Account for storing modules, configurations, and .mof compilations to deploy to systems.  The target DSC nodes are registered and monitored through the Azure Automation Account and reporting is generated and made available through the UI.  This reporting can also be forwarded to<a href="https://docs.microsoft.com/en-us/azure/automation/automation-dsc-diagnostics">OMS Log Analytics</a> for dashboarding and alerting purposes (which, as we discussed in<a href="https://powershell.org/2017/07/25/using-powershell-azure-automation-and-oms-part-i/">my previous series</a>, can be used with Azure Automation Runbooks for auto-remediation).<br><strong>Pros and Cons to Each</strong><br>
So let&rsquo;s talk about some of the upsides and downsides to each method.  These may affect your decisions as you architect your DSC solution.</p><ul><li><em>Pricing</em> - Azure DSC is essentially free.  Azure Automation DSC is free for Azure nodes, while there is a cost associated with managed on-prem nodes.  This charged per month and is dependent on how often the machines are checking in.  You can get more information on the particulars<a href="https://azure.microsoft.com/en-us/pricing/details/automation/">here</a>.</li><li><em>Reporting</em> - If you&rsquo;re looking for rich reporting, Azure Automation DSC is definitely the way to go.  You can still get statuses from your Azure DSC nodes via PowerShell, but this leaves the onus on you to format that data and make it look pretty.  We&rsquo;ll be taking a look at how we can do this a bit later.</li><li><em>Flexibility</em> - Azure Automation DSC allows you to use modules stored in your Azure Automation Account.  If you wish to use a new module, you simply add that module, update your configuration file, and recompile.  With Azure DSC, you need to repackage your configuration with all of the modules, re-publish them, and re-push them to your target machines.</li><li><em>Side-by-Side Module Versioning Tolerance</em> - Currently, Azure DSC actually has an advantage over Azure Automation DSC in this respect.  You cannot currently have multiple module versions in your module repository.  So if you&rsquo;re using Automation DSC and calling the same DSC resources in multiple configs, they need to all be on that same module version.</li><li><em>On-Prem Management Capabilities</em> - Azure Automation DSC has the ability to manage on-prem virtual machines, either directly or via Hybrid Workers.  This gives you the ability to manage all of your virtual machines and monitor their configuration status from a single pane of glass.  Azure DSC does not have this capability.</li><li><em>Managing Systems in AWS</em> - Yes.  You can also manage your virtual machines in AWS using the AWS DSC Toolkit via Azure Automation DSC!</li></ul><p>So that&rsquo;s the overview of what we&rsquo;re going to be talking about through this series.  Tomorrow, we&rsquo;ll be getting into how to add configurations into Azure Automation DSC and compiling your configs.</p>
]]></content:encoded></item><item><title>The Future of PowerShell's Desired State Configuration</title><link>https://powershell.org/articles/2017-09-13-the-future-of-powershells-desired-state-configuration/</link><guid>https://powershell.org/articles/2017-09-13-the-future-of-powershells-desired-state-configuration/</guid><pubDate>Wed, 13 Sep 2017 15:28:06 +0000</pubDate><description>&lt;p&gt;Microsoft &lt;a href="https://blogs.msdn.microsoft.com/powershell/2017/09/12/dsc-future-direction-update/"&gt;recently published a &amp;ldquo;Future of DSC&amp;rdquo; post&lt;/a&gt; that I thought deserved some independent commentary.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Microsoft<a href="https://blogs.msdn.microsoft.com/powershell/2017/09/12/dsc-future-direction-update/">recently published a &ldquo;Future of DSC&rdquo; post</a> that I thought deserved some independent commentary.</p><p>Something to bear in mind is that the existing, open-source &ldquo;DSC for Linux&rdquo; was not authored by the PowerShell team. It was written by Microsoft&rsquo;s Unix Services team, and it doesn&rsquo;t currently offer the exact functionality of the Windows implementation. So some of this announcement is the PowerShell team actually &ldquo;taking on&rdquo; DSC for other platforms.<br>
This includes a new Local Configuration Manager (LCM) for PowerShell Core, which implies it&rsquo;ll run anywhere PowerShell core does - Linux, macOS, and so on - as well as Windows, since PowerShell Core can run on Windows, too. It no longer requires the complex-to-install OMI stack, and it supports DSC resources written in PowerShell, Python scripts, and C/C++.<br>
Now, it&rsquo;s important to note that this is a pre-release announcement, and the plans may not survive engagement. That&rsquo;s means the situation is still fluid, and it&rsquo;s probably a bit early to start making plans. This is a situation to<em>monitor,</em> not<em>act upon,</em> at this date.<br>
This does mean that, if plans play out as they are now,<em>everything about DSC today will probably change a lot.</em> There will be new commands to replace things like Start-DscConfiguration. But some things won&rsquo;t change: the Pull Server protocol, for example, will be supported by DSC Core (this is easy to do as the protocol isn&rsquo;t complex and is all REST-based), so the existing Pull Server and Azure Automation DSC will still work.<br>
The upside to all of this - and Microsoft&rsquo;s intent, from what I can tell - is to converge on a single code base for DSC, and make all platforms &ldquo;first class citizens.&rdquo; Today&rsquo;s DSC - what the team calls &ldquo;DSC for Windows PowerShell&rdquo; or &ldquo;Windows Management Framework (WMF) version of DSC&rdquo; - is at a dead-end. They&rsquo;re not going to delete it, but they&rsquo;re going to focus development on DSC Core.<em>That</em> has implications. It means that, in order to move forward, any custom resources you write and use need to use native C/C++, PowerShell 6 scripts, or commands that are supported under .NET Standard 2.0. WMI is right out, although it&rsquo;ll be interesting to see if the team maintains that stance, or chooses to make WMI available on Windows but not on Linux (which would break the &ldquo;same code running everywhere&rdquo; philosophy they&rsquo;re currently aimed at).<br>
The native Pull server&rsquo;s future appears to be unknown. I&rsquo;m not sure that&rsquo;s a bad thing; it&rsquo;s presented nowadays as &ldquo;sample code,&rdquo; and it&rsquo;s always been a problematic and minimally-useful chunk of code. I wish more people were looking at<a href="https://github.com/PowerShellOrg/tug">Tug</a>, which is an open-source Pull Server framework that you can code up (in PowerShell or .NET) to act however you want. It comes with a simple implementation that more or less mimics the native Pull Server, without the Jet database engine dependency (fun story: Jet/EBD was chosen because the team could get it working on Nano, and now Nano isn&rsquo;t ever going to be used for that purpose as it&rsquo;s been repositioned as a &ldquo;container OS&rdquo;). If more people invested in Tug, DSC would be a lot better off overall.<br>
My thoughts?<br>
Overall, &ldquo;yay&rdquo; for &ldquo;same functionality on all platforms.&rdquo; The potential need to rewrite a crapload of DSC resources, and possibly losing WMI (if I&rsquo;m reading this right), is a big &ldquo;boo,&rdquo; and might push people away from an already-fragile relationship with DSC. &ldquo;Boo&rdquo; also to another re-do of DSC (v4 to v5 was not immaterial), making it feel like Microsoft didn&rsquo;t really have a good long-term vision for the technology to begin with (and indeed, some of the architectural problems in v5, like how partial configurations work, further suggest a lack of vision). DSC Core may be a chance for Microsoft to re-think past approaches and fix mistakes, so &ldquo;yay&rdquo; if they do that along the way.<br>
Predominantly, though, a big &ldquo;boo&rdquo; to a continued lack of tooling. I get that DSC is an &ldquo;under the hood&rdquo; technology latter, but like zero other teams at Microsoft have, at this point, helped pile any kind of tooling on top of it. It&rsquo;s like we have the Chef engine or Puppet engine, but not of the tooling that makes those things true<em>solutions.</em><br>
Taking off my Microsoft fanboy hat, I can see it being difficult for a CIO to take a strong dependency on DSC at this point. We&rsquo;re aiming for its third iteration, which<em>will</em> break backward compatibility and, in some ways, reduce functionality. Microsoft still can&rsquo;t produce a production-viable on-prem pull server, and doesn&rsquo;t seem interested in doing so. We still don&rsquo;t have any kind of management tooling (in part, I think, to the continued shitshow that is the System Center &ldquo;strategy&rdquo; these days), so DSC remains a highly do-it-yourself endeavor. Not every organization is going to be comfortable with that. I do think Tug - again, with some do-it-yourself investment - can make DSC vastly more intelligent and powerful (you can, for example, code it to assemble MOFs on-the-fly, extract configuration fragments from a database, or literally anything else you might want), but people in the Microsoft space are used to prepackaged solutions that just install and go.<br>
I like the &ldquo;write once, run anywhere&rdquo; promise; that&rsquo;s what .NET was supposed to be all about when Microsoft stepped away from Java back in the day. I get how DSC Core,<em>for VMs running in Azure,</em> may be a first-class citizen for dynamic, declarative configurations, and how that all leads nicely to a DevOps style footing. For on-prem, DSC is going to continue to be challenging for people who aren&rsquo;t accustomed to a lot of DIY, and who are trying to take hard and long-lasting dependencies on a configuration technology.</p>]]></content:encoded></item><item><title>PowerShell and DevOps Summit 2018 – session acceptance</title><link>https://powershell.org/articles/2017-09-02-powershell-and-devops-summit-2018-session-acceptance/</link><guid>https://powershell.org/articles/2017-09-02-powershell-and-devops-summit-2018-session-acceptance/</guid><pubDate>Sat, 02 Sep 2017 11:21:32 +0000</pubDate><description>&lt;p&gt;We have started the acceptance process for the sessions to be presented at the 2018 Summit. Those currently accepted sessions are listed in the &lt;a href="https://cdn-powershell.pressidium.com/wp-content/uploads/2017/09/2018-Brochure.pdf"&gt;brochure&lt;/a&gt;&lt;br&gt;
The deadline for submissions still remains as 2 October 2017&lt;br&gt;
We&amp;rsquo;ll probably be formally accepting a number of other sessions during September BUT the bulk of the agenda won&amp;rsquo;t be finalised until after the deadline closes.&lt;br&gt;
You still have plenty of time to get your submissions into the system. The earlier you do so the more time we have to help you refine the submission.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We have started the acceptance process for the sessions to be presented at the 2018 Summit. Those currently accepted sessions are listed in the<a href="https://cdn-powershell.pressidium.com/wp-content/uploads/2017/09/2018-Brochure.pdf">brochure</a><br>
The deadline for submissions still remains as 2 October 2017<br>
We&rsquo;ll probably be formally accepting a number of other sessions during September BUT the bulk of the agenda won&rsquo;t be finalised until after the deadline closes.<br>
You still have plenty of time to get your submissions into the system. The earlier you do so the more time we have to help you refine the submission.</p>
]]></content:encoded></item><item><title>PowerShell 2.0 deprecation</title><link>https://powershell.org/articles/2017-08-25-powershell-2-0-deprecation/</link><guid>https://powershell.org/articles/2017-08-25-powershell-2-0-deprecation/</guid><pubDate>Fri, 25 Aug 2017 10:29:17 +0000</pubDate><description>&lt;p&gt;PowerShell 2.0 is being deprecated - see the PowerShell Team &lt;a href="https://blogs.msdn.microsoft.com/powershell/2017/08/24/windows-powershell-2-0-deprecation/"&gt;blog&lt;/a&gt; for full details&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>PowerShell 2.0 is being deprecated - see the PowerShell Team<a href="https://blogs.msdn.microsoft.com/powershell/2017/08/24/windows-powershell-2-0-deprecation/">blog</a> for full details</p>
]]></content:encoded></item><item><title>#PSBlogWeek is Back!</title><link>https://powershell.org/articles/2017-08-23-psblogweek-is-back/</link><guid>https://powershell.org/articles/2017-08-23-psblogweek-is-back/</guid><pubDate>Wed, 23 Aug 2017 17:49:39 +0000</pubDate><description>&lt;p&gt;I&amp;rsquo;ve decided to bring #PSBlogWeek back! Brush off those PowerShell blogs and grease up those typing fingers&amp;hellip;.wait..don&amp;rsquo;t do that but at least stretch a little bit. If you&amp;rsquo;d like to write a great article on PowerShell on your blog to help contribute great content and get yourself some notoriety, #PSBlogWeek is how it&amp;rsquo;s done.&lt;br&gt;
For full details, head over to &lt;a href="http://www.adamtheautomator.com/psblogweek-powershell-blogging-entire-week/"&gt;my blog&lt;/a&gt; where I&amp;rsquo;ve outlined everything or head directly over to &lt;a href="http://www.psblogweek.com"&gt;psblogweek.com&lt;/a&gt; for full details!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I&rsquo;ve decided to bring #PSBlogWeek back! Brush off those PowerShell blogs and grease up those typing fingers&hellip;.wait..don&rsquo;t do that but at least stretch a little bit. If you&rsquo;d like to write a great article on PowerShell on your blog to help contribute great content and get yourself some notoriety, #PSBlogWeek is how it&rsquo;s done.<br>
For full details, head over to<a href="http://www.adamtheautomator.com/psblogweek-powershell-blogging-entire-week/">my blog</a> where I&rsquo;ve outlined everything or head directly over to<a href="http://www.psblogweek.com">psblogweek.com</a> for full details!</p>
]]></content:encoded></item><item><title>Using PowerShell, Azure Automation, and OMS – Part III</title><link>https://powershell.org/articles/2017-08-08-using-powershell-azure-automation-and-oms-part-iii/</link><guid>https://powershell.org/articles/2017-08-08-using-powershell-azure-automation-and-oms-part-iii/</guid><pubDate>Tue, 08 Aug 2017 14:00:43 +0000</pubDate><description>&lt;p&gt;It&amp;rsquo;s been a long road, but we&amp;rsquo;re almost there!  A couple of weeks ago we looked at how we can create an Azure Automation Account and add our own custom modules to the solution to be used in Azure Automation.  Last week, we took a deeper dive into configuring a runbook to take in webhook data from an alert using Microsoft&amp;rsquo;s Operations Management Suite.  Then we looked into the data itself to see how we can leverage it against our runbook to fix problems for us on the fly.&lt;br&gt;
This week, we&amp;rsquo;re going to modify an existing function to use that webhook data directly.&lt;br&gt;
&lt;strong&gt;Building on Webhook Data&lt;/strong&gt;&lt;br&gt;
We could actually build our logic directly into the runbook to parse the webhook data and then pass the formatted information to our function that we&amp;rsquo;ve made available in Azure.  But I prefer to keep my runbooks as simple as possible and do the heavy lifting in my function.  This makes the runbook look a little bit cleaner, and allows me to minimize my code management a little more.  Also, Azure Automation Runbooks, as of this writing, don&amp;rsquo;t play nicely with parameter sets in them, so I might as well pass my data along to a command that does.&lt;br&gt;
Originally, I had built a one-liner that allowed me to create an NSG rule on the fly to block and incoming traffic from a specific IPAddress.  It was a fairly simple command.  But today, we&amp;rsquo;re going to make it a little more robust, and give it the ability to use webhook data.  Here&amp;rsquo;s my original code:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>It&rsquo;s been a long road, but we&rsquo;re almost there!  A couple of weeks ago we looked at how we can create an Azure Automation Account and add our own custom modules to the solution to be used in Azure Automation.  Last week, we took a deeper dive into configuring a runbook to take in webhook data from an alert using Microsoft&rsquo;s Operations Management Suite.  Then we looked into the data itself to see how we can leverage it against our runbook to fix problems for us on the fly.<br>
This week, we&rsquo;re going to modify an existing function to use that webhook data directly.<br><strong>Building on Webhook Data</strong><br>
We could actually build our logic directly into the runbook to parse the webhook data and then pass the formatted information to our function that we&rsquo;ve made available in Azure.  But I prefer to keep my runbooks as simple as possible and do the heavy lifting in my function.  This makes the runbook look a little bit cleaner, and allows me to minimize my code management a little more.  Also, Azure Automation Runbooks, as of this writing, don&rsquo;t play nicely with parameter sets in them, so I might as well pass my data along to a command that does.<br>
Originally, I had built a one-liner that allowed me to create an NSG rule on the fly to block and incoming traffic from a specific IPAddress.  It was a fairly simple command.  But today, we&rsquo;re going to make it a little more robust, and give it the ability to use webhook data.  Here&rsquo;s my original code:</p><p><code>Function Set-AzureRmNSGMaliciousRule { [cmdletbinding()] Param( [Parameter(Mandatory=$true)][string]$ComputerName, [Parameter(Mandatory=$true)][string]$IPAddress ) $ResGroup = (Get-AzureRmResource).where({$PSItem.Name -eq $Sys}) $VM = Get-AzureRmVM -ResourceGroupName $ResGroup.ResourceGroupName -Name $Sys $VmNsg = (Get-AzureRmNetworkSecurityGroup -ResourceGroupName $VM.ResourceGroupName).where({$PSItem.NetworkInterfaces.Id -eq $VM.NetworkProfile.NetworkInterfaces.Id}) $Priority = ($VmNsg.SecurityRules) | Where-Object -Property Priority -LT 200 | Select-Object -Last 1 If ($Priority -eq $null){ $Pri = 100 } Else { $Pri = ($Priority + 1) } $Name = ('BlockedIP_' + $IPAddress) $NSGArgs = @{ Name = $Name Description = ('Malicious traffic from ' + $IPAddress) Protocol = '*' SourcePortRange = '*' DestinationPortRange = '*' SourceAddressPrefix = $IPAddress DestinationAddressPrefix = '*' Access = 'Deny' Direction = 'Inbound' Priority = $Pri } $VmNsg | Add-AzureRmNetworkSecurityRuleConfig @NSGArgs | Set-AzureRmNetworkSecurityGroup }</code>I want to keep my mandatory parameters for my original one-liner solution in-case I need to do something tactically.  So we&rsquo;ll go ahead and split the parameters for on-prem vs. webhook into different parameter sets.  As webhook data is formatted as a JSON object, we&rsquo;ll need to specify the data type for the WebhookData parameter as object.</p><p><code>Param( [Parameter(ParameterSetName='ConsoleInput')][string]$ComputerName, [Parameter(ParameterSetName='ConsoleInput')][string]$MaliciousIP, [Parameter(ParameterSetName='WebhookInput")][object]$WebhookData )</code>Now, we&rsquo;re going to add some logic to parse out the data that we&rsquo;re looking to use:</p><p><code>If($PSCmdlet.ParameterSetName -eq 'WebhookInput'){ $SearchResults = (ConvertFrom-Json $WebhookData.RequestBody).SearchResults.value Write-Output ("Target computer is " + $SearchResults.Computer) Write-Output ("Malicious IP is " + $SearchResults.RemoteIP) $ComputerName = (($SearchResults.Computer).split(' ') | Select-Object -First 1) $MaliciousIP = (($SearchResults.RemoteIP).split(' ') | Select-Object -First 1) } If ($ComputerName -like "*.*"){ $Sys = $ComputerName.Split('.') | Select-Object -First 1 } Else { $Sys = $ComputerName }</code>You&rsquo;ll notice that I&rsquo;m doing some string formatting with our data here.  Webhook data can concatenate multiple alerts together and separate the array by using spaces, so we&rsquo;re splitting that up and grabbing the first entry for each input we need.  The additional splitting on the ComputerName is to accomodate for systems that are domain joined, as Azure isn&rsquo;t necessarily aware of a system&rsquo;s FQDN.  Mind you, this is a rough example, and continuously growing; So as my use cases evolve, so will my code.<br>
Now that we have our data formatted, we can update our module and upload it to our Azure Automation Account using the same process outlined in Part I, but with the -Force parameter added so we can overwrite the existing instance.</p><p><code>Param( [Parameter(Mandatory=$true)] [object]$WebhookData ) $connectionName = "AzureRunAsConnection" try { # Get the connection "AzureRunAsConnection " $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName "Logging in to Azure..." Add-AzureRmAccount</code>
-ServicePrincipal<code>-TenantId $servicePrincipalConnection.TenantId</code>
-ApplicationId $servicePrincipalConnection.ApplicationId<code>-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint } catch { if (!$servicePrincipalConnection) { $ErrorMessage = "Connection $connectionName not found." throw $ErrorMessage } else{ Write-Error -Message $_.Exception throw $_.Exception } } Set-AzureRmNSGMaliciousRule -WebHookData $WebhookData</code>Now, in a few minutes, our runbook should trigger and we can monitor the result.</p><p><code>$Job = (Get-AzureRmAutomationJob -RunbookName WebhookNSGRule -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName) $Job[0] | Select-Object -Property * ResourceGroupName : mms-eus AutomationAccountName : testautoaccteastus2 JobId : 339601cd-14e9-4002-8fcd-7d2008726445 CreationTime : 7/24/2017 10:11:43 AM -04:00 Status : Completed StatusDetails : StartTime : 7/24/2017 10:12:21 AM -04:00 EndTime : 7/24/2017 10:13:31 AM -04:00 Exception : LastModifiedTime : 7/24/2017 10:13:31 AM -04:00 LastStatusModifiedTime : 1/1/0001 12:00:00 AM +00:00 JobParameters : {} RunbookName : WebhookNSGRule HybridWorker : StartedBy :</code>We can start digging into the outputs of the runbook after completion to gather a little more data.</p><p><code>$Job = (Get-AzureRmAutomationJob -RunbookName WebhookNSGRule -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName) $JobOut = Get-AzureRmAutomationJobOutput -Id $Job[0].JobId -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName ForEach ($JobCheck in $JobOut){ $JobCheck.Summary } PS C:\WINDOWS\system32&gt; ForEach ($JobCheck in $JobOut){ $JobCheck.Summary } Logging in to Azure... Target computer is server1 server1 server1 Malicious IP is 183.129.160.229 183.129.160.229 Target system is server1 Incoming MaliciousIP is 183.129.160.229 Creating rule...</code>And now if I check against my system, we will see that OMS is auto-generating rules for us!</p><p><code>$VM = (Get-AzureRmResource).where({$PSItem.Name -like 'server1'}) $Machine = Get-AzureRmVM -ResourceGroupName $VM[0].ResourceGroupName -Name $VM[0].Name $NSG = (Get-AzureRmNetworkSecurityGroup -ResourceGroupName $Machine.ResourceGroupName).where({$PSItem.NetworkInterfaces.Id -eq $Machine.NetworkProfile.NetworkInterfaces.Id}) (Get-AzureRmNetworkSecurityRuleConfig -NetworkSecurityGroup $NSG[0]).where({$PSItem.Name -like "BlockedIP_*"}) Name : BlockedIP_206.190.36.45 Id : /subscriptions/f2007bbf-f802-4a47-9336-cf7c6b89b378/resourceGroups/test/providers/Microsoft.Network/networkSecurityGroups/server1nsgeus2domain Controller/securityRules/BlockedIP_206.190.36.45 Etag : W/"279e0fee-05c6-43ef-b897-19f927dd9a40" ProvisioningState : Succeeded Description : Auto-Generated rule - OMS detected malicious traffic from 206.190.36.45 Protocol : * SourcePortRange : * DestinationPortRange : * SourceAddressPrefix : 206.190.36.45 DestinationAddressPrefix : * Access : Deny Priority : 100 Direction : Inbound Name : BlockedIP_183.129.160.229 Id : /subscriptions/f2007bbf-f802-4a47-9336-cf7c6b89b378/resourceGroups/test/providers/Microsoft.Network/networkSecurityGroups/server1nsgeus2domain Controller/securityRules/BlockedIP_183.129.160.229 Etag : W/"279e0fee-05c6-43ef-b897-19f927dd9a40" ProvisioningState : Succeeded Description : Auto-Generated rule - OMS detected malicious traffic from 183.129.160.229 Protocol : * SourcePortRange : * DestinationPortRange : * SourceAddressPrefix : 183.129.160.229 DestinationAddressPrefix : * Access : Deny Priority : 101 Direction : Inbound</code>After letting my system go for about 24 hours, my OMS Alert triggered the runbook an additional five times.  Each time generating an additional network security group rule in response to traffic that OMS had recognized as potentially malicious, and thus remediating my problem while I slept.<br><img src="https://powershell.org/wp-content/uploads/2017/07/12-NSG-300x48.jpg" alt=""><br>
Using a monitoring tool that can tightly integrate with your automation tools is a necessity in the age of the Cloud.  I hope you enjoyed this series and find it to be useful!<br><a href="https://powershell.org/2017/07/25/using-powershell-azure-automation-and-oms-part-i/">Part I - Azure Automation Account Creation and Adding Modules</a><br>
Part II - Configuring Azure Automation Runbooks And Understanding Webhook Data<br><strong>Part III - Utilizing Webhook Data in Functions and Validate Results</strong></p>
]]></content:encoded></item><item><title>Summit agenda process</title><link>https://powershell.org/articles/2017-08-08-summit-agenda-process/</link><guid>https://powershell.org/articles/2017-08-08-summit-agenda-process/</guid><pubDate>Tue, 08 Aug 2017 11:31:35 +0000</pubDate><description>&lt;p&gt;There’s been a lot of discussion on the Summit Slack channel around people proposing sessions for the 2018 Summit. I thought an explanation of how we put the agenda together would be useful for anyone thinking about submitting sessions.&lt;/p&gt;
&lt;p&gt;First off though – if you’re thinking about submitting a session for the 2018 Summit then JUST DO IT! We are reserving a number of sessions for new speakers, as we always do. One of our goals for the Summit is to nurture the next generation of speakers. What better way to learn to speak about PowerShell than in front of the world’s greatest PowerShell audience. There is a balancing act between nurturing new speakers and having “big name” established speakers that we know will help draw an audience to the Summit.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>There’s been a lot of discussion on the Summit Slack channel around people proposing sessions for the 2018 Summit. I thought an explanation of how we put the agenda together would be useful for anyone thinking about submitting sessions.</p><p>First off though – if you’re thinking about submitting a session for the 2018 Summit then JUST DO IT! We are reserving a number of sessions for new speakers, as we always do. One of our goals for the Summit is to nurture the next generation of speakers. What better way to learn to speak about PowerShell than in front of the world’s greatest PowerShell audience. There is a balancing act between nurturing new speakers and having “big name” established speakers that we know will help draw an audience to the Summit.</p><p>The call for topics -<a href="https://powershell.org/2017/08/01/76318/">https://powershell.org/2017/08/01/76318/</a></p><ul><li>explains what we’re looking for and the mechanics of submitting a session. This year it’s easier than ever and the site we are using facilitates two-way communication with the potential speaker so that we can help them fine tune their proposal.</li></ul><p>Once you’ve submitted the proposal we get an email containing the title and the text. Within a few days (at most) you’ll start to get feedback even if it’s just a thank you for submitting if there’s nothing we think should be changed. We may start an extended dialog depending on the submission and what we actually need.</p><p>Well before we open the call for topics we’ll have decided the structure of the Summit – the 2018 structure was done immediately after the 2017 Summit! I’m not giving full details at this stage but we’ll have a mixture of standard 45-minute sessions and double length sessions. The exact mix will depend on the sessions that are submitted. That structure tells me how many sessions I need. From that number, I’ll subtract those that the PowerShell team will use and the time we need for the Community Lightning Demos (yes, they are returning in 2018) and any other activities. That gives me the number of sessions I need.</p><p> A second consideration is budget. We’d love to have each session done by a separate speaker but that costs the Summit in terms of free admission, food etc. So, we have a budget which constrains the number of speakers we can sensibly accommodate without making the Summit too expensive for attendees. Again, this is a balancing act between diversity of speakers and the cost to attendees.</p><p>Having determined the number of speakers and the number of sessions required I’ll start thinking about which topics will be of most interest in April 2018. We set the agenda in October 2017 so we’re guessing to a certain degree.  We look for sessions that meet one or more of these criteria:</p><p>·</p><p>A currently hot topic</p><p>·</p><p>A new feature in PowerShell that attendees may not have had the time to investigate</p><p>·</p><p>A topic that is causing a lot of questions on the forums</p><p>·</p><p>A topic that we’ve not seen before</p><p>·</p><p>A new module – as long as the code is explained -  that solves a problem or makes life easier</p><p>·</p><p>A deep dive into an aspect of the PowerShell language or engine</p><p>·</p><p>New techniques for using PowerShell</p><p>·</p><p>Best practices</p><p>·</p><p>DevOps – usually practical based “how I did X”</p><p>·</p><p>What I learned doing “Y” and how that helps you</p><p>·</p><p>How the session fits with other sessions we’re thinking of using</p><p>·</p><p>It’s a positive session. Session proposals that dwell on, and just enumerate, the shot-comings of a particular aspect of PowerShell are extremely unlike to be accepted. If you turn that round and show how to overcome those issues – that’s a positive session.</p><p>·</p><p>Do we think the speaker understands the topic well enough to present an authorative session? This is often base on the abstract of the proposal which is why we say it’s got to get our attention.</p><p>·</p><p>Is it a session that can be presented as the same time as the PowerShell team or other “big name” is speaking so we can balance attendees across the rooms.</p><p>Other criteria may apply depending on circumstances.</p><p>Once, we’ve got a number of sessions available we’ll start to circulate the details amongst the people helping put the agenda together asking for feedback on the session proposals. In some cases, this will become feedback to the proposer and we’ll work with the potential speaker to refine the proposal. This process has started.</p><p>When the call for topics has closed I’ll go through the proposed sessions and create a first pass of the agenda. This first pass is circulated to a small number of people who can comment, suggest alternative sessions, move sessions around and generally rework the agenda as required. When we’re happy we’ll notify the speakers and publish the agenda. If your sessions weren’t accepted we&rsquo;ll let you know.</p><p>Then we keep our fingers crossed that we’ve got it right and people will want to attend the Summit based on the agenda.</p><p>2018 will be our biggest Summit ever so we need more speakers. The information in this – especially the criteria used when thinking about sessions – should help you put together a proposal that will catch our eye.</p><p>If you’re in the slightest doubt about whether to submit sessions – JUST DO IT. If you want to discuss ideas then leave a comment, email me or join the Summit Slack channel #speaking-ideas where you can get feedback from people in a similar situation.</p><p>You are the future of Summit and we need you to submit those proposals.</p><p>Hope to see you (speaking) at the 2018 Summit.</p>
]]></content:encoded></item><item><title>Using PowerShell, Azure Automation, and OMS – Part II</title><link>https://powershell.org/articles/2017-08-01-using-powershell-azure-automation-and-oms-part-ii/</link><guid>https://powershell.org/articles/2017-08-01-using-powershell-azure-automation-and-oms-part-ii/</guid><pubDate>Tue, 01 Aug 2017 14:00:46 +0000</pubDate><description>&lt;p&gt;So last time we learned how to upload our custom modules into Azure Automation so we can start using them in Azure Automation Runbooks.  This week we&amp;rsquo;re going to take a look at configuring a runbook to see what kind of data we can ingest from OMS Webhook data, and how we can leverage that data to pass into our functions.&lt;br&gt;
&lt;strong&gt;Creating the Runbook Script&lt;/strong&gt;&lt;br&gt;
So first off, let&amp;rsquo;s talk about basic runbooks and running them against objects in Azure.  As previously discussed, when your automation account is created, it creates with it an AzureRunAsAccount.  This account is configured to act on behalf of the user that has access to the automation account and the runbooks in order to perform the runbook task.  In order to leverage this account, you need to invoke it in the runbook itself.  You can actually find an example of this snippet in the AzureAutomationTutorialScript runbook in your automation account.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>So last time we learned how to upload our custom modules into Azure Automation so we can start using them in Azure Automation Runbooks.  This week we&rsquo;re going to take a look at configuring a runbook to see what kind of data we can ingest from OMS Webhook data, and how we can leverage that data to pass into our functions.<br><strong>Creating the Runbook Script</strong><br>
So first off, let&rsquo;s talk about basic runbooks and running them against objects in Azure.  As previously discussed, when your automation account is created, it creates with it an AzureRunAsAccount.  This account is configured to act on behalf of the user that has access to the automation account and the runbooks in order to perform the runbook task.  In order to leverage this account, you need to invoke it in the runbook itself.  You can actually find an example of this snippet in the AzureAutomationTutorialScript runbook in your automation account.</p><p><code>$connectionName = "AzureRunAsConnection" try { # Get the connection "AzureRunAsConnection " $servicePrincipalConnection=Get-AutomationConnection -Name $connectionName "Logging in to Azure..." Add-AzureRmAccount</code>
-ServicePrincipal<code>-TenantId $servicePrincipalConnection.TenantId</code>
-ApplicationId $servicePrincipalConnection.ApplicationId<code>-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint } catch { if (!$servicePrincipalConnection) { $ErrorMessage = "Connection $connectionName not found." throw $ErrorMessage } else{ Write-Error -Message $_.Exception throw $_.Exception } }</code>So now that we&rsquo;ve got our opening snippet, we&rsquo;ll add that into a new .ps1 script file in our preferred integrated scripting environment tool and get to work.<br>
Now, in order to be able to ingest data from an OMS Alert, we need to be able to pass the data to our Azure Automation runbook.  In order to do so, we only need to add a $WebHookData parameter to the runbook and specify the data type as object.</p><p><code>Param ( [Parameters()][object]$WebHookData )</code>Now, we need to convert that data from a JSON object into something readable in our output.  Webhook data is presented with three primary datasets - WebhookName, RequestHeader, and RequestBody.  WebhookName, obviously is the name of the incoming webhook.  RequestHeader is a hash table containing all of the header data for the incoming requestion.  And finally, RequestBody is the body of the incoming request.  This is where the data we want to parse will reside.  Specifically, it will reside under the SearchResults property of the RequestHeader dataset.</p><p><code>$WebhookData.WebhookName $WebhookData.RequestHeader $WebhookData.RequestBody</code>So let&rsquo;s configure our runbook to display the incoming data to examine what we have to play with.</p><p><code>$SearchResults = (ConvertFrom-Json $WebhookData.RequestBody).SearchResults.value $SearchResults</code><strong>Publish the Runbook</strong><br>
Now, we&rsquo;ll go ahead and save our script as a .ps1 file and upload it to our automation account with the Import-AzureRmAutomationRunbook cmdlet.</p><p><code>Import-AzureRmAutomationRunbook -Path 'C:\Scripts\Presentations\OMSAutomation\ExampleRunbookScript.ps1' -Name WebhookNSGRule -Type PowerShell -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Published</code>And now we can see our return.<br><img src="https://powershell.org/wp-content/uploads/2017/07/7-ImportRunbook-300x150.png" alt=""><br>
And if we check through the UI, we can see a brand-new, shiny runbook sitting in our automation account!  Now, we can configure a basic alert to monitor in OMS.<br><strong>Create an Alert</strong><br>
For the purposes of this example, I&rsquo;ve create a couple of virtual machines with network security group rules for HTTP:80 and RDP:3389 accepting connections from anywhere.  I do not recommend doing this for a production virtual machine.  /endDisclaimer<br>
As you can well expect, these machines are throwing MaliciousIP traffic alerts in Operations Management Suite&rsquo;s console:<br><img src="https://powershell.org/wp-content/uploads/2017/07/8.5-AlertUI-3-300x298.png" alt=""><br>
So if we click on the MaliciousIP flag, it&rsquo;ll take us to the Log Search screen.  This includes the query data that we can use for the alert.  However, you&rsquo;ll want to clean up the query data a bit to generalize it.  In this example, the query is specific to the country that is displayed in the given flag.  But if we remove the country specific portion of the query, it&rsquo;ll allow us to cast a wider net and get data on potentially malicious traffic from any given country.</p><p><code>Canned Query: MaliciousIP=* AND (RemoteIPCountry=* OR MaliciousIPCountry=*) AND (((Type=WireData AND Direction=Outbound) OR (Type=WindowsFirewall AND CommunicationDirection=SEND) OR (Type=CommonSecurityLog AND CommunicationDirection=Outbound)) OR (Type=W3CIISLog OR Type=DnsEvents OR (Type = WireData AND Direction!= Outbound) OR (Type=WindowsFirewall AND CommunicationDirection!=SEND) OR (Type = CommonSecurityLog AND CommunicationDirection!= Outbound))) (RemoteIPCountry="People's Republic of China" OR MaliciousIPCountry="People's Republic of China") Modified Query: MaliciousIP=* AND (RemoteIPCountry=* OR MaliciousIPCountry=*) AND (((Type=WireData AND Direction=Outbound) OR (Type=WindowsFirewall AND CommunicationDirection=SEND) OR (Type=CommonSecurityLog AND CommunicationDirection=Outbound)) OR (Type=W3CIISLog OR Type=DnsEvents OR (Type = WireData AND Direction!= Outbound) OR (Type=WindowsFirewall AND CommunicationDirection!=SEND) OR (Type = CommonSecurityLog AND CommunicationDirection!= Outbound)))</code><img src="https://powershell.org/wp-content/uploads/2017/07/9-ConfigureQuery-1-300x136.jpg" alt=""><br>
After testing our query to make sure it&rsquo;s valid, we can now hit the alert button and configure the alert.  Here you&rsquo;ll need to give it an alert name, a schedule, and number of results before it triggers the alert.  You&rsquo;ll also want to select the Runbook option under actions and select the test runbook we created.  Then we hit save, and wait for our alert to trigger and the runbook to fire.<br><img src="https://powershell.org/wp-content/uploads/2017/07/10-ConfigureAlert-300x193.jpg" alt=""><br>
And as you can see, I didn&rsquo;t have to wait long:<br><img src="https://powershell.org/wp-content/uploads/2017/07/11-RunbookFired-300x240.jpg" alt=""><br><strong>Validate our Data</strong><br>
If we click on one of the completed instances, and navigate to the output blade, we can now see the data we&rsquo;re receiving from our triggered alert.  This particular data shows that inbound traffic from Colombia is attempting an RDP connection to my virtual machine.  With the inbound IP Address and target system name, we now have enough data to be able to create a full-blown auto-remediation solution.</p><p>`Logging in to Azure&hellip;
Environments Context</p><hr><p>{[AzureCloud, AzureCloud], [AzureChinaCloud, AzureChinaCloud], [AzureUSGovernment, AzureUSGovernment]} Microsoft.Azur&hellip;
Computer : server1
MG : 00000000-0000-0000-0000-000000000001
ManagementGroupName : AOI-cb0eefe8-b88f-47ce-ae91-dbc46df99751
SourceSystem : OpsManager
TimeGenerated : 2017-07-21T12:17:37.45Z
SessionStartTime : 2017-07-21T12:16:52Z
SessionEndTime : 2017-07-21T12:16:52Z
LocalIP : 10.119.192.10
LocalSubnet : 10.119.192.0/21
LocalMAC : 00-0d-3a-03-ea-a6
LocalPortNumber : 3389
RemoteIP : 200.35.53.121
RemoteMAC : 12-34-56-78-9a-bc
RemotePortNumber : 4935
SessionID : 10.119.192.10_3389_200.35.53.121_4935_2184_2017-07-21T12:16:52.000Z
SequenceNumber : 0
SessionState : Listen
SentBytes : 20
ReceivedBytes : 40
TotalBytes : 60
ProtocolName : TCP
IPVersion : IPv4
SentPackets : 1
ReceivedPackets : 2
Direction : Inbound
ApplicationProtocol : RDP
ProcessID : 888
ProcessName : C:\Windows\System32\svchost.exe
ApplicationServiceName : ms-wbt-server
LatencyMilliseconds : 116
LatencySamplingTimeStamp : 2017-07-21T12:16:52Z
LatencySamplingFailureRate : 0.0%
MaliciousIP : 200.35.53.121
IndicatorThreatType : Botnet
Confidence : 75
Severity : 2
FirstReportedDateTime : 2017-07-20T20:10:32Z
LastReportedDateTime : 2017-07-21T11:25:11.0661909Z
IsActive : true
ReportReferenceLink :<a href="https://interflowinternal.azure-api.net/api/reports/download/generic/webbot.json">https://interflowinternal.azure-api.net/api/reports/download/generic/webbot.json</a>
RemoteIPLongitude : -75.88
RemoteIPLatitude : 8.77
RemoteIPCountry : Colombia
id : 149270bc-74fc-13d0-34a9-3fd665a457b2
Type : WireData
__metadata : @{Type=WireData; TimeGenerated=2017-07-21T12:17:37.45Z}
`It&rsquo;s a long road, and we&rsquo;re almost there!  Next week, I&rsquo;ll take you through my process of modifying my module to directly ingest webhook data, and how we can take our OMS queries and deploy them to other Operations Management Suite solutions using PowerShell.  See you then!<br><a href="https://powershell.org/2017/07/25/using-powershell-azure-automation-and-oms-part-i/">Part I - Azure Automation Account Creation and Adding Modules</a><br><strong>Part II - Configuring Azure Automation Runbooks And Understanding Webhook Data</strong><br>
Part III - Utilizing Webhook Data in Functions and Validate Results - Coming Soon!</p>
]]></content:encoded></item><item><title>PowerShell and DevOps Global Summit 2018 – Call for Topics</title><link>https://powershell.org/articles/2017-08-01-76318-2/</link><guid>https://powershell.org/articles/2017-08-01-76318-2/</guid><pubDate>Tue, 01 Aug 2017 09:49:30 +0000</pubDate><description>&lt;p&gt;The PowerShell and DevOps Global Summit 2018 will be returning to the Meydenbauer center, Bellevue WA on 9-12 April 2018. PowerShell, and DevOps, experts from all over the world, including PowerShell team members, will once again join together to discuss and learn about maximizing PowerShell in the workplace in fast-paced, knowledge packed presentations. The Summit&amp;rsquo;s also the place to explore and further your knowledge of DevOps principles and practices in a Windows environment, make new connections, learn new techniques, and offer something to your peers and colleagues. If you want to share your PowerShell or DevOps expertise, then this is your official call to submit presentations for selection!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The PowerShell and DevOps Global Summit 2018 will be returning to the Meydenbauer center, Bellevue WA on 9-12 April 2018. PowerShell, and DevOps, experts from all over the world, including PowerShell team members, will once again join together to discuss and learn about maximizing PowerShell in the workplace in fast-paced, knowledge packed presentations. The Summit&rsquo;s also the place to explore and further your knowledge of DevOps principles and practices in a Windows environment, make new connections, learn new techniques, and offer something to your peers and colleagues. If you want to share your PowerShell or DevOps expertise, then this is your official call to submit presentations for selection!</p><h1 id="topic-areas-what-we-are-looking-for" class="ps-heading">Topic Areas:  What we are looking for<a class="ps-heading-anchor" href="#topic-areas-what-we-are-looking-for" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>The bulk of our sessions follow our now traditional 45-minute format. These sessions cover a wide aspect of PowerShell and DevOps expertise. Your proposed session should fit into one of the following areas:</p><ul><li>PowerShell Internals - A deep look into the inside workings of PowerShell and practical solutions that are built from them.</li><li>PowerShell Features Deep Dive - These presentations are a deep look into configuring and working with PowerShell features and capabilities.</li><li>DevOps in Practice - A deep dive into putting the DevOps principles into practice. Presentations should focus on what you&rsquo;re doing and how you&rsquo;re doing it.</li></ul><p>We are open to presentations across the entire ecosystem that has been built around PowerShell or the various DevOps tools. This includes Microsoft platforms and products that have PowerShell-based management tools as well as third party products.  New topics will be preferred over the recycling of older topics. However, we are still open to sessions on &lsquo;older&rsquo; topics that address areas of great confusion or uncertainty.<br>
We have a number agenda slots available for double length sessions. These sessions delve into the depths of a topic covering areas that need more than 45 minutes.</p><h1 id="what-kind-of-sessions-get-selected" class="ps-heading"> What kind of sessions get selected?<a class="ps-heading-anchor" href="#what-kind-of-sessions-get-selected" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>AIM HIGH, VERY HIGH - We&rsquo;re looking for technical sessions that go beyond - way beyond - &lsquo;beginner&rsquo;. This is an &rsquo;experts&rsquo; level conference and we expect the session to reflect that. We want attendees to finish each day with information leaking &hellip; just a little bit &hellip; out their eyeballs. We may accept some intermediate level sessions but please talk to us before spending a lot of time developing such a session.<br>
We look for an abstract that&rsquo;s compelling and makes us want to see your session - so spend time writing a great abstract! We want sessions that offer real-world usability combined with &ldquo;WOW, nobody talks about THAT&rdquo; awesomeness. We want to see the code. Don&rsquo;t just talk about it - this is a PowerShell summit not a PowerPoint Summit. If your session isn&rsquo;t predominately demonstrations its probably not right for the Summit.<br>
Summit presentations are intense and intimate often with plenty of audience interaction. You must expect questions and discussions. This is not a &ldquo;lecture to the audience" event.<br><em>If you have any doubts about the suitability of a particular session, please contact us -</em><a href="mailto:summit@powershell.org"><em>summit@powershell.org</em></a><em>- we&rsquo;re always happy to discuss proposed sessions.</em><br>
Please note all sessions are to be delivered in English. Presenter will provide all equipment needed to deliver session(s), including a laptop or other computer. Presenter must be able to provide video by means of HDMI, DVI-D, or DisplayPort connectors - VGA is NOT supported. Presenter must be able to manually select an appropriate screen resolution for video output. Typically, 1024x768 or 1280x720 are preferred.<br>
Internet connectivity is available in the conference center but bandwidth is limited. If you rely on connecting to the cloud for your sessions then consider recording any demonstrations as a contingency.</p><h1 id="how-to-submit-abstracts-of-presentations" class="ps-heading">How to submit abstracts of presentations<a class="ps-heading-anchor" href="#how-to-submit-abstracts-of-presentations" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>Go to -<a href="https://www.papercall.io/summit2018">https://www.papercall.io/summit2018</a><br>
Click Speak at PowerShell and DevOps Global Summit 2018 (scroll down to find the big green button at bottom right)<br>
Login using Twitter, Facebook or one of the other options.<br>
Complete the form. The name field will show your email address. If you could ensure your full name is in the Bio field this will make communication easier.<br>
Click submit<br>
Please contact summit At PowerShell dot org if you have any issues or problems.</p><h1 id="presentation-submission-deadline-when-you-should-send-it-by" class="ps-heading">Presentation submission deadline: When you should send it by<a class="ps-heading-anchor" href="#presentation-submission-deadline-when-you-should-send-it-by" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>Start submitting your presentation submissions immediately! The selection committee will start selecting presentations as soon as they arrive so you don&rsquo;t want to miss out. The last day we will accept presentation submissions will be<strong>Sunday 1 October 2017</strong>. This is a hard deadline -<strong>NO</strong> sessions will be accepted after this date.</p><h1 id="when-you-will-know-youve-been-selected" class="ps-heading">When you will know you&rsquo;ve been selected<a class="ps-heading-anchor" href="#when-you-will-know-youve-been-selected" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>You will be informed if one or more of your presentations have been selected and notified by Wednesday 11 October 2017. Your notification email will include any further actions you need to take. We will notify all potential speakers by 23 October 2017 if their sessions haven&rsquo;t been accepted.<br>
Speakers, with accepted sessions, will be given free admission to the event, including attendance at all official Summit activities. Speakers may not bring guests to the day sessions or evening events. We have a limited budget, and the number of speakers selected will be governed by that budget.<br>
All speakers will receive a stipend, $400 for a 45-minute session and $800 for a double session, to assist with travelling and accommodation expenses.<br>
The final agenda will be announced and posted on PowerShell.Org on, or about, Wednesday 1 November 2017.<br>
We look forward to your submissions and your help in making PowerShell and DevOps Global Summit 2018 the most valuable IT/Dev conference of the year building on and surpassing the previous Summits!</p>
]]></content:encoded></item><item><title>PowerShell + DevOps Global Summit Scholarship Program</title><link>https://powershell.org/articles/2017-08-01-powershell-devops-global-summit-scholarship-program/</link><guid>https://powershell.org/articles/2017-08-01-powershell-devops-global-summit-scholarship-program/</guid><pubDate>Tue, 01 Aug 2017 00:00:43 +0000</pubDate><description>&lt;p&gt;Automation and scripting has become a major part of IT in recent years.  And PowerShell has played a giant role in the progression of that.  Every year, the wonderful people at PowerShell.org put on the PowerShell + DevOps Global Summit, that always produces outstanding results from amazing speakers and attendees.&lt;/p&gt;
&lt;p&gt;As many of you in IT know, convincing your manager to attend conferences usually depends on a few key factors: Cost and budget, content, and sometimes, experience or seniority in the company.  And unfortunately, that last one may be a deciding factor far too often.  This year, PowerShell.org is making it a priority to help extend, not only the content and knowledge that comes with attending the PowerShell + DevOps Global Summit, but also the experience that comes along with it.  &lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Automation and scripting has become a major part of IT in recent years.  And PowerShell has played a giant role in the progression of that.  Every year, the wonderful people at PowerShell.org put on the PowerShell + DevOps Global Summit, that always produces outstanding results from amazing speakers and attendees.</p><p>As many of you in IT know, convincing your manager to attend conferences usually depends on a few key factors: Cost and budget, content, and sometimes, experience or seniority in the company.  And unfortunately, that last one may be a deciding factor far too often.  This year, PowerShell.org is making it a priority to help extend, not only the content and knowledge that comes with attending the PowerShell + DevOps Global Summit, but also the experience that comes along with it.  </p><p>PowerShell.org is looking for a few driven, over achieving PowerShell-ers, that may still yet be all too 
_
green
_
in their company or role in IT to convince their superiors to send them to the<a href="http://powershellsummit.org">PowerShell + DevOps Global Summit</a>.  To be considered for this scholarship,<strong>we are particularly looking for individuals that would be considered part of a group which is &ldquo;under represented&rdquo; in the IT industry as a whole</strong>, including women, underrepresented minorities, and so on.  So, if you&rsquo;re the IT Director, or the Senior Systems Architect, this opportunity is not for you; however, if you are in those roles, and you know a real go-getter that has shown you some cool stuff they have done with PowerShell, please point them to this opportunity.</p><p>It&rsquo;s also worth noting that this specifically isn&rsquo;t for people in the situation of, &ldquo;yeah, I do this stuff all the time and my employer should totally send me and they totally aren&rsquo;t.&rdquo; We&rsquo;re looking more for, &ldquo;I&rsquo;m working way above my pay grade and this might help give me the jump I need to get to a better place in life.&rdquo; That&rsquo;s the kind of thing you&rsquo;ll have to help us understand about you in your application. This scholarship isn&rsquo;t just to take a burden off your employer or net you a free trip to Redmond; it&rsquo;s to help someone raise themselves in life.</p><h2 id="applying" class="ps-heading">Applying<a class="ps-heading-anchor" href="#applying" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>If you feel you fit the bill for this scholarship, you need to convince us!  We want to hear why you are the Chosen One.  So, if you’d like to be considered for the opportunity you will need to write an essay that demonstrates your passion for PowerShell and automation.  When constructing your essay, please use the following guidelines:</p><ul><li/></ul><p>Demonstrate an intermediate or better understanding of PowerShell,  Scripting, and ToolMaking (If you’ve read Don Jones’ <em>Learn PowerShell in a Month of Lunches</em>, you should be fine).</p><ul><li/></ul><p>Include specifics.  Site specific example on how you have used PowerShell to save your company a bunch of money, or how you’ve done something amazing.</p><ul><li/></ul><p>Include examples.  We DO NOT want a submission that is just a script, but please include some clever snippets that you are proud of.</p><ul><li/></ul><p>Have you shared your work, or made it reusable?  Please include information on how we can find it if you have.  The PowerShell Community is one of the best ones around, and we all love sharing code.</p><ul><li/></ul><p>Be thorough.  We don’t have a hard word count,  but remember, the best essay wins!</p><ul><li>Assure us that, should you be awarded this opportunity, you&rsquo;ve spoken with your employer and getting the time off won&rsquo;t be a problem.</li></ul><h2 id="how-well-decide" class="ps-heading">How We&rsquo;ll Decide<a class="ps-heading-anchor" href="#how-well-decide" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><ul><li/></ul><p>Applications can be submitted<a href="https://docs.google.com/forms/d/e/1FAIpQLScyiEszj9GzVwkNBUOMatlL2kbFwgoRXelWHiaTwlCb8Pkqtg/viewform">HERE</a> (Google account required to apply).</p><ul><li/></ul><p>We will be accepting applications from Friday, September 1st 2017 until Sunday, October 1st 2017.</p><ul><li/></ul><p>The winner(s) will be selected based on the quality of their essay and the enthusiasm it conveys (make us want to keep reading).  Again, we are not looking for the seasoned PowerShell veteran that has been to the Summit the past four years, but the help desk analyst that has been using a collection of tools and scripts they created that is allowing them to be four times as productive.</p><ul><li/></ul><p>The winner(s) will be chosen by a panel of four judges who are all very active members in the PowerShell community.</p><ul><li/></ul><p>The winner(s) will be announced Wednesday, November 1st 2017 on PowerShell.org</p><h2 id="what-awardeesreceive" class="ps-heading">What Awardees Receive<a class="ps-heading-anchor" href="#what-awardeesreceive" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><ul><li/></ul><p>Up to $500 in airfare.</p><ul><li/></ul><p>Four hotel room nights.</p><ul><li/></ul><p>Full admission to the PowerShell + DevOps Global Summit.</p>
]]></content:encoded></item><item><title>Using PowerShell, Azure Automation, and OMS – Part I</title><link>https://powershell.org/articles/2017-07-25-using-powershell-azure-automation-and-oms-part-i/</link><guid>https://powershell.org/articles/2017-07-25-using-powershell-azure-automation-and-oms-part-i/</guid><pubDate>Tue, 25 Jul 2017 14:00:01 +0000</pubDate><description>&lt;p&gt;Microsoft&amp;rsquo;s Operations Management Suite provides some exceptional tools for monitoring and maintaining your environments in both the cloud and in your datacenter.  One of it&amp;rsquo;s best features, however, is its ability to leverage the tools that you&amp;rsquo;ve already developed to perform tasks and remediate issues using PowerShell, Azure Automation Runbooks, and OMS Alert triggers.  In this series, we&amp;rsquo;ll be discussing how you can configure these tools to take care of problems in your own environment.  Today, we&amp;rsquo;ll be talking about how you can take your own PowerShell Modules and upload them to Azure Automation.&lt;br&gt;
&lt;strong&gt;Creating The Azure Automation Account&lt;/strong&gt;&lt;br&gt;
In order to create the Azure Automation Account, you&amp;rsquo;ll need to have create the automation account object in the target resource group, and the ability to create an AzureRunAs account in AzureAD.  It&amp;rsquo;s also important to be mindful that not every Azure region has the Microsoft.Automation resource provider registered to it, so you&amp;rsquo;ll want the resource group to exist in the appropriate locale.  You can check this with the Get-AzureRmResourceProvider cmdlet:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Microsoft&rsquo;s Operations Management Suite provides some exceptional tools for monitoring and maintaining your environments in both the cloud and in your datacenter.  One of it&rsquo;s best features, however, is its ability to leverage the tools that you&rsquo;ve already developed to perform tasks and remediate issues using PowerShell, Azure Automation Runbooks, and OMS Alert triggers.  In this series, we&rsquo;ll be discussing how you can configure these tools to take care of problems in your own environment.  Today, we&rsquo;ll be talking about how you can take your own PowerShell Modules and upload them to Azure Automation.<br><strong>Creating The Azure Automation Account</strong><br>
In order to create the Azure Automation Account, you&rsquo;ll need to have create the automation account object in the target resource group, and the ability to create an AzureRunAs account in AzureAD.  It&rsquo;s also important to be mindful that not every Azure region has the Microsoft.Automation resource provider registered to it, so you&rsquo;ll want the resource group to exist in the appropriate locale.  You can check this with the Get-AzureRmResourceProvider cmdlet:</p><p><code>Get-AzureRmResourceProvider -ProviderNamespace 'Microsoft.Automation'</code><img src="https://powershell.org/wp-content/uploads/2017/07/1-AutomationLocation-300x158.png" alt=""><br>
For our purposes, we&rsquo;ll be deploying a resource group to East US 2.  Once the resource group has been created, we&rsquo;ll use New-AzureRmAutomationAccount</p><p><code>$BaseName = 'testautoacct' $Location = 'eastus2' $ResGrp = New-AzureRmResourceGroup -Name $BaseName -Location $Location -Verbose $AutoAcct = New-AzureRmAutomationAccount -ResourceGroupName $ResGrp.ResourceGroupName -Name ($BaseName + $Location) -Location $ResGrp.Location</code>It&rsquo;s good to note that while -Verbose is available for New-AzureRmAutomationAccount, it will not return any verbose output.<br><img src="https://powershell.org/wp-content/uploads/2017/07/2-CreateAccount-300x63.png" alt=""><br><strong>Creating A Blob Container in AzureRM</strong><br>
Now that we have our automation account created, we can begin uploading our modules to be available for Azure Automation to use.  In order to do so, we&rsquo;ll need to create a blob store that we can upload our modules to so that the Azure Automation Account can import them; unlike in the Azure UI, you cannot currently upload your modules directly from your local machine, so you&rsquo;ll need to supply a URI for Azure Automation to access.<br>
Another &lsquo;gotcha&rsquo; is that there is no AzureRm cmdlet for creating a blob container, or for uploading content to that container, so you&rsquo;ll need to do so using the Azure storage commands and passing the Storage Context Key from AzureRM to Azure.  Here is how you can create the storage account, get the storage account key, create a context, and pass it to Azure:</p><p><code>$Stor = New-AzureRmStorageAccount -ResourceGroupName $ResGrp.ResourceGroupName -Name modulestor -SkuName Standard_LRS -Location $ResGrp.Location -Kind BlobStorage -AccessTier Hot Add-AzureAccount $Subscription = ((Get-AzureSubscription).where({$PSItem.SubscriptionName -eq 'LastWordInNerd'})) Select-AzureSubscription -SubscriptionName $Subscription.SubscriptionName -Current $StorKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $Stor.ResourceGroupName -Name $Stor.StorageAccountName).where({$PSItem.KeyName -eq 'key1'}) $StorContext = New-AzureStorageContext -StorageAccountName $Stor.StorageAccountName -StorageAccountKey $StorKey.Value</code>Once we&rsquo;ve run our storage commands, you&rsquo;ll have captured the storage context object like so:<br><img src="https://powershell.org/wp-content/uploads/2017/07/3-StorageContext-300x105.png" alt=""><br>
Now that we&rsquo;ve got access to our AzureRm storage account in Azure, we can now create our blob container:</p><p><code>$Container = New-AzureStorageContainer -Name 'modules' -Permission Blob -Context $StorContext -Permission Blob</code><img src="https://powershell.org/wp-content/uploads/2017/07/4-BlobContainer-300x86.png" alt=""><br>
*NOTE* - I have my container permission set to Blob, which makes this directory publicly available.  At some time in the near future, I&rsquo;ll walk you through how you can use SAS Tokens to access secure blobs at runtime.  Just be mindful of this if you use this code in production.<br><strong>Upload to a Blob Container</strong><br>
Now we can finally upload our modules to the blob store, and register them in Azure Automation!  What we&rsquo;re going to do here is take our custom module, compress it into a .zip file, and then use the Set-AzureStorageBlobContent cmdlet to ship it up to our blob store.  Once the content is shipped, we use the $Blob.ICloudBlob.Uri.AbsoluteUri to feed the New-AzureRmAutomationModule the URI required for the ContentLink parameter.</p><p><code>$ModuleLoc = 'C:\Scripts\Presentations\OMSAutomation\Modules\' $Modules = Get-ChildItem -Directory -Path $ModuleLoc ForEach ($Mod in $Modules){ Compress-Archive -Path $Mod.PSPath -DestinationPath ($ModuleLoc + '\' + $Mod.Name + '.zip') -Force } $ModuleArchive = Get-ChildItem -Path $ModuleLoc -Filter "*.zip" ForEach ($Mod in $ModuleArchive){ $Blob = Set-AzureStorageBlobContent -Context $StorContext -Container $Container.Name -File $Mod.FullName -Force -Verbose New-AzureRmAutomationModule -ResourceGroupName $ResGrp.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Name ($Mod.Name).Replace('.zip','') -ContentLink $Blob.ICloudBlob.Uri.AbsoluteUri }</code><img src="https://powershell.org/wp-content/uploads/2017/07/5-UploadModule-300x65.png" alt=""><br>
Now that we&rsquo;ve done all that, we can validate that we have our module in Azure Automation through the UI:<br><img src="https://powershell.org/wp-content/uploads/2017/07/6-Validate-300x282.png" alt=""><br>
Now that we&rsquo;ve uploaded our modules into Azure Automation, we can start using them to perform tasks in Azure.  Next week, we&rsquo;ll look at how we&rsquo;ll be getting more familiar with configuring runbooks and take a closer look at the input data that OMS can pass along to them.<br><strong>Part I - Azure Automation Account Creation and Adding Modules</strong><br><a href="https://powershell.org/2017/08/01/using-powershell-azure-automation-and-oms-part-ii/">Part II - Configuring Azure Automation Runbooks And Understanding Webhook Data</a><br>
Part III - Utilizing Webhook Data in Functions and Validate Results - Coming Soon!</p>
]]></content:encoded></item><item><title>Topics for PowerShell Summit 2018</title><link>https://powershell.org/articles/2017-07-03-topics-for-powershell-summit-2018/</link><guid>https://powershell.org/articles/2017-07-03-topics-for-powershell-summit-2018/</guid><pubDate>Mon, 03 Jul 2017 18:54:52 +0000</pubDate><description>&lt;p&gt;The planning for Summit 2018 has started – to be honest it started before Summit 2017 opened. We’ve reached the stage where we need to start thinking about the broad topics for PowerShell Summit 2018.&lt;br&gt;
What do you want to hear about? Not the session titles, content and speakers but the broad areas of content you want us to include. We can’t actually promise to cover everything requested because we’re dependent on whats submitted when we open our call for topics towards the end of the month.&lt;br&gt;
Looking at the agenda for Summit 2017 we had these very broad groups&lt;br&gt;
PowerShell tool making&lt;br&gt;
DSC and DSC resources&lt;br&gt;
PowerShell Github repository&lt;br&gt;
PowerShell v6&lt;br&gt;
Remoting&lt;br&gt;
Testing - Pester&lt;br&gt;
Azure&lt;br&gt;
PowerShell Functions&lt;br&gt;
JEA&lt;br&gt;
PowerShell v6&lt;br&gt;
PowerShell on Linux&lt;br&gt;
PowerShell modules&lt;br&gt;
Regular Expessions&lt;br&gt;
MSDeploy&lt;br&gt;
PKI&lt;br&gt;
Powershell Jobs, Workflows and runspaces&lt;br&gt;
Nano server&lt;br&gt;
PowerShell cmdlets - compiled and script&lt;br&gt;
Are there any we should drop? Is there a topic we should include – this far out we can commission a specific expert speaker to cover a topic if required. This is your opportunity to help shape Summit 2018. Let us know what you think&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The planning for Summit 2018 has started – to be honest it started before Summit 2017 opened. We’ve reached the stage where we need to start thinking about the broad topics for PowerShell Summit 2018.<br>
What do you want to hear about? Not the session titles, content and speakers but the broad areas of content you want us to include. We can’t actually promise to cover everything requested because we’re dependent on whats submitted when we open our call for topics towards the end of the month.<br>
Looking at the agenda for Summit 2017 we had these very broad groups<br>
PowerShell tool making<br>
DSC and DSC resources<br>
PowerShell Github repository<br>
PowerShell v6<br>
Remoting<br>
Testing - Pester<br>
Azure<br>
PowerShell Functions<br>
JEA<br>
PowerShell v6<br>
PowerShell on Linux<br>
PowerShell modules<br>
Regular Expessions<br>
MSDeploy<br>
PKI<br>
Powershell Jobs, Workflows and runspaces<br>
Nano server<br>
PowerShell cmdlets - compiled and script<br>
Are there any we should drop? Is there a topic we should include – this far out we can commission a specific expert speaker to cover a topic if required. This is your opportunity to help shape Summit 2018. Let us know what you think</p>
]]></content:encoded></item><item><title>Taking Powershell to the next level</title><link>https://powershell.org/articles/2017-06-22-taking-powershell-to-the-next-level/</link><guid>https://powershell.org/articles/2017-06-22-taking-powershell-to-the-next-level/</guid><pubDate>Thu, 22 Jun 2017 13:30:58 +0000</pubDate><description>&lt;p&gt;I recently decided to &amp;lsquo;up my game&amp;rsquo; with powershell and go beyond the simple scripts I&amp;rsquo;ve rolled out in the past.&lt;br&gt;
So I simply want to share with you, the path I took to enhance my skills (inc. alot of practice)&lt;br&gt;
&lt;strong&gt;Books:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://www.manning.com/books/learn-windows-powershell-in-a-month-of-lunches-second-edition"&gt;Learn Powershell In A Month of Lunches&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.manning.com/books/learn-powershell-toolmaking-in-a-month-of-lunches"&gt;Learn Powershell Toolmaking in a month of Lunches&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.manning.com/books/windows-powershell-in-action-third-edition"&gt;Windows Powershell In Action 3rd Edition&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Online:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://mva.microsoft.com/en-US/training-courses/advanced-tools-scripting-with-powershell-30-jump-start-8277?l=WOWaGUWy_8604984382"&gt;Advanced Tools And Scripting with Powershell 3.0 Jump Start&lt;/a&gt;&lt;br&gt;
&lt;a href="http://channel9.msdn.com/events/Ignite/2015/BRK4452"&gt;Writing Powershell Powershell DSC Resources And Configuration&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.powershellgallery.com/packages/nDemos_BRK4452/1.0"&gt;Demo Code&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I recently decided to &lsquo;up my game&rsquo; with powershell and go beyond the simple scripts I&rsquo;ve rolled out in the past.<br>
So I simply want to share with you, the path I took to enhance my skills (inc. alot of practice)<br><strong>Books:</strong><br><a href="https://www.manning.com/books/learn-windows-powershell-in-a-month-of-lunches-second-edition">Learn Powershell In A Month of Lunches</a><br><a href="https://www.manning.com/books/learn-powershell-toolmaking-in-a-month-of-lunches">Learn Powershell Toolmaking in a month of Lunches</a><br><a href="https://www.manning.com/books/windows-powershell-in-action-third-edition">Windows Powershell In Action 3rd Edition</a><br><strong>Online:</strong><br><a href="https://mva.microsoft.com/en-US/training-courses/advanced-tools-scripting-with-powershell-30-jump-start-8277?l=WOWaGUWy_8604984382">Advanced Tools And Scripting with Powershell 3.0 Jump Start</a><br><a href="http://channel9.msdn.com/events/Ignite/2015/BRK4452">Writing Powershell Powershell DSC Resources And Configuration</a><br><a href="https://www.powershellgallery.com/packages/nDemos_BRK4452/1.0">Demo Code</a></p>
]]></content:encoded></item><item><title>PowerShell Team Day at IT Transformation Event</title><link>https://powershell.org/articles/2017-05-09-powershell-team-day-at-it-transformation-event/</link><guid>https://powershell.org/articles/2017-05-09-powershell-team-day-at-it-transformation-event/</guid><pubDate>Tue, 09 May 2017 15:39:29 +0000</pubDate><description>&lt;p&gt;At the upcoming &lt;a href="https://www.devintersection.com/#!/Sharepoint-Office365-Conference"&gt;&amp;ldquo;IT Transformation&amp;rdquo; event in Orlando&lt;/a&gt; this month (still time left to register!), members of the PowerShell team will be leading a full-day workshop that&amp;rsquo;s pretty much a don&amp;rsquo;t-miss (and no, it isn&amp;rsquo;t being recorded). Here&amp;rsquo;s the schedule:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; Time
Speaker
Title
09:00am-10:00am
Jeffrey Snover
Observations on Modern IT Practices and Organization Culture
10:00am-10:15am
break
10:15am-12:00pm
Michael Greene
The Release Pipeline Model
12:00pm-01:00pm
lunch
01:00pm-02:45pm
Michael Greene
Instructor Led Hands-On Lab: Constructing a pipeline for PowerShell Modules using Visual Studio Team Services.
03:00pm-04:00pm
Timothy Warner
Introduction to Azure Automation DSC
04:00pm-05:00pm
Jeffrey Snover
Closing thoughts and AMA
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Personally, I&amp;rsquo;m super-excited. I&amp;rsquo;ll be presenting a full-day workshop myself (the day before), along with a couple of breakout sessions and a keynote with Jeffrey Snover.&lt;br&gt;
Hope to see you there!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>At the upcoming<a href="https://www.devintersection.com/#!/Sharepoint-Office365-Conference">&ldquo;IT Transformation&rdquo; event in Orlando</a> this month (still time left to register!), members of the PowerShell team will be leading a full-day workshop that&rsquo;s pretty much a don&rsquo;t-miss (and no, it isn&rsquo;t being recorded). Here&rsquo;s the schedule:</p><pre><code> Time
Speaker
Title
09:00am-10:00am
Jeffrey Snover
Observations on Modern IT Practices and Organization Culture
10:00am-10:15am
break
10:15am-12:00pm
Michael Greene
The Release Pipeline Model
12:00pm-01:00pm
lunch
01:00pm-02:45pm
Michael Greene
Instructor Led Hands-On Lab: Constructing a pipeline for PowerShell Modules using Visual Studio Team Services.
03:00pm-04:00pm
Timothy Warner
Introduction to Azure Automation DSC
04:00pm-05:00pm
Jeffrey Snover
Closing thoughts and AMA</code></pre><p>Personally, I&rsquo;m super-excited. I&rsquo;ll be presenting a full-day workshop myself (the day before), along with a couple of breakout sessions and a keynote with Jeffrey Snover.<br>
Hope to see you there!</p>
]]></content:encoded></item><item><title>Announcing the PowerShell Saturday Booster Program</title><link>https://powershell.org/articles/2017-05-04-announcing-the-powershell-saturday-booster-program/</link><guid>https://powershell.org/articles/2017-05-04-announcing-the-powershell-saturday-booster-program/</guid><pubDate>Thu, 04 May 2017 15:53:48 +0000</pubDate><description>&lt;p&gt;We&amp;rsquo;re pleased to announce general availability of our PowerShell Saturday Booster Program, as announced at PowerShell + DevOps Global Summit 2017. The goal of this program is to help enthusiasts build sustainable one-day, small-format technical events worldwide. We can provide organizing advice and assistance, help managing finances, and so on.&lt;br&gt;
Full details at &lt;a href="https://github.com/devops-collective-inc/powershell-saturday/wiki"&gt;https://github.com/devops-collective-inc/powershell-saturday/wiki&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We&rsquo;re pleased to announce general availability of our PowerShell Saturday Booster Program, as announced at PowerShell + DevOps Global Summit 2017. The goal of this program is to help enthusiasts build sustainable one-day, small-format technical events worldwide. We can provide organizing advice and assistance, help managing finances, and so on.<br>
Full details at <a href="https://github.com/devops-collective-inc/powershell-saturday/wiki">https://github.com/devops-collective-inc/powershell-saturday/wiki</a>.</p>
]]></content:encoded></item><item><title>PowerShell and DevOps Global Summit Recap</title><link>https://powershell.org/articles/2017-04-21-powershell-and-devops-global-summit-recap/</link><guid>https://powershell.org/articles/2017-04-21-powershell-and-devops-global-summit-recap/</guid><pubDate>Fri, 21 Apr 2017 19:57:12 +0000</pubDate><description>&lt;p&gt;Now that I’m recovered from the 2017 PowerShell and DevOps Global Summit, I just wanted to take a moment and talk about my experiences at the conference. It was my first time attending this conference and it was also my first time speaking. Both “firsts” contributed to a range of emotions throughout the long and exhausting week.&lt;/p&gt;
&lt;p&gt;I came in to Seattle late Friday night and expected to go straight to the hotel and to bed. Being from Eastern Daylight Time makes for a long day and late night when your expected hotel arrival time is 10pm local time (or 1AM your time). However, PowerShell friends and community members, some of whom I knew from previous conferences and some of whom I was just meeting for the first time, greeted me. Some stayed up and waited for me to arrive – even with an already-closed hotel bar and many respective time zone differences. They greeted me with an overwhelming sense of community and friendship, and that was a defining moment that I’ll never forget. Even though I was exhausted, I found myself staying up for a couple more hours chatting with folks who were already there.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Now that I’m recovered from the 2017 PowerShell and DevOps Global Summit, I just wanted to take a moment and talk about my experiences at the conference. It was my first time attending this conference and it was also my first time speaking. Both “firsts” contributed to a range of emotions throughout the long and exhausting week.</p><p>I came in to Seattle late Friday night and expected to go straight to the hotel and to bed. Being from Eastern Daylight Time makes for a long day and late night when your expected hotel arrival time is 10pm local time (or 1AM your time). However, PowerShell friends and community members, some of whom I knew from previous conferences and some of whom I was just meeting for the first time, greeted me. Some stayed up and waited for me to arrive – even with an already-closed hotel bar and many respective time zone differences. They greeted me with an overwhelming sense of community and friendship, and that was a defining moment that I’ll never forget. Even though I was exhausted, I found myself staying up for a couple more hours chatting with folks who were already there.</p><p>Saturday was a do-my-own-thing kind of day. My intent of being there a day early was to try to relax and not fret about the upcoming presentation the next day, but also try to review the presentation a bit with my co-presenter Jason Helmick. I tried to stay stress-free by working out – I am an avid Crossfitter and there is a Crossfit box within walking distance of the hotel, so I got a workout in and a lot of coffee via the Starbucks in the hotel. Had a quiet dinner with a fellow DevOps Camper and also met another attendee who was sitting next to us at the sushi place. A couple glasses of wine later, I was ready to retire to get ready for the next day.</p><p>Sunday, of course, began very early with heart palpitations and equipment checks. I have a brand new laptop, and while I may be good at PowerShell, I’m technologically challenged when it comes to hooking up my new laptop to the projection equipment.</p><p>Plus there’s some recording equipment in there too, so I hand my laptop and a bunch of cables to other really smart people and they get it all hooked up.</p><p>All I can think of is “in an hour you will be standing up here talking for 3 hours”, and I should mention here that Jeffrey Snover himself is not only in the building, but has taken up shop in a seat in our session. I’m cool, calm and collected, of course!</p><p>After breakfast, Jason opens the show by talking first about teaching DSC, then about our Autolab project, which is a source of pride for me. He then segues into my portion of the presentation, which includes configuration data tricks, and developing your own resources using script, function-based, and class-based resources. After a short break, we talk about Pull, Tug, and reporting with DSCEA. Many of my demos don’t work – even though I had just run through them less than a week ago – and I realize why. If you’ve ever seen a talk by Sami Laiho, you know the rule - you need to sacrifice a Nano server to the demo gods to have a successful demo, and I’ve forgotten this simple rule.</p><p>After the morning session I get to revert back to being an attendee somewhat.</p><p>Don Jones is presenting the afternoon session on Pester, and while I think my name and a couple of others were on the agenda for this session along with Don, Don is Don, and presents an enlightening session on the use of Pester. I end the day with my friends taking me out to dinner to celebrate completion of my first speaking session and more wine and socialization with the PowerShell community members hanging out at the hotel bar.</p><p>On Monday, the day started off with Don’s keynote presentation and Ask Me Anything with Jeffrey Snover. I got to sit next to the Scripting Wife, who, along with the Scripting Guy, were both called up to the stage and honored for their many contributions to the PowerShell Community. There are so many fun people to meet and converse with at this conference. The one thing I did have a hard time with was names – and later did I realize that I “knew” a lot of people from their twitter or slack handles and never really actually knew their real names.</p><p>(Yes, you, @bladefirelight.)</p><p>The “Ask Me Anything” session was interesting and entertaining, and it’s always fun to hear about Jeffrey’s favorite open-source project (VSCode and Pester), anticipated uses of classes and PowerShell on Linux. Nothing shocked me more than having my upcoming PKI session mentioned by Jeffrey during the AMA though!!</p><p>And then the time change and lack of sleep started to hit me. I took a quick nap in the afternoon and returned in time for the PowerShell Team’s lightning demos to give me a glimpse into what was coming next in PowerShell. After that I mingled and got to talk to members of the PowerShell team during the welcome reception.</p><p>Fast-forward to Tuesday, it’s the day I’ve been looking forward to the most, but also the most nerve-wracking, because it’s the day of my PKI presentation. In the morning I attended the session of the three fairies/furries/furies, which was a more impromptu session discussing less-than-optimal practices in PowerShell usage.</p><p>After a session on using PowerShell on Linux, my nerves were getting the best of me and I took a break and had some informal conversation with people outside the sessions. I did attend part of the Chocolatey session in the afternoon and I wish I had been able to pay attention enough to that session, but at that point, I stopped trying to absorb new information and just mentally rehearsed from that point until I went on. I am disappointed that I didn’t get to see “The Path to a DSC Resource Module” and the PowerShell Team session on security so here’s hoping there may be recordings of those sessions!</p><p>The show went great. I may have forgotten half my intro (you’d never know!) but other than that I was pleased with the presentation and even more entertained by the follow-up discussions I had afterwards. And many of them were “hey, we’re really glad to see that everyone struggles from time to time on how to solve something with DSC.”</p><p>I also received some interesting feedback on how to make my session better and I’m always open to constructive criticism. After that I think I was mentally shot, but still managed to go out and enjoy Tuesday night’s social event and more wine-drinking at the hotel.</p><p>Then Wednesday came and with it, the sheer exhaustion of the previous days caught up with me. I wanted to sleep in, but I also really wanted to see Ashley’s session on the Kerberos Double Hop problem since that bit me a lot during development of the PKI code. After that early morning session, I just hung out and talked to people rather than attending formal sessions, and I enjoyed answering people’s questions – everything from my career story to questions about PKI to questions about how to solve particular problems they have with DSC.</p><p>For my last session, I participated in a panel discussion on Introducing DevOps to your Organization with Steve Murawski and Jason Helmick.</p><p>And while I know the challenges my former organization faced, it was refreshing to hear questions from others about different challenges and discuss potential solutions.</p><p>So now the big question:</p><p>Would I return to the PowerShell and DevOps Global Summit again next year? The answer is a big “hell yes”. Will I speak again? Absolutely. I’d like to thank every one of the attendees for giving me a warm welcome into the PowerShell community as a member and a speaker. It was the non-judgmental atmosphere that is perfect for a first-time speaker. How about you? Are YOU interested in speaking but are afraid to try? Do it. Submit a session. Sign up for the Community Lightning Demos and show something you’re working on. Don’t be afraid and give it a try, since this conference open and welcoming to everyone in the community.</p>
]]></content:encoded></item><item><title>Colecting Certificates form an Enterprise CA for use with DSC</title><link>https://powershell.org/articles/2017-04-21-colecting-certificates-form-an-enterprise-ca-for-use-with-dsc/</link><guid>https://powershell.org/articles/2017-04-21-colecting-certificates-form-an-enterprise-ca-for-use-with-dsc/</guid><pubDate>Fri, 21 Apr 2017 16:29:24 +0000</pubDate><description>&lt;p&gt;In a domain environment auto enrollment can be used to get create unique certificates for each node that can be used with DSC.  The problem is getting the public cert to the machine that creates the DSC MOF files. I wrote a module last year to collect them directly form the Enterprise CA. If it interests you take a look &lt;a href="https://blog.bladefirelight.com/nuggets/collecting-ca-certificates-for-dsc-configuration/"&gt;https://blog.bladefirelight.com/nuggets/collecting-ca-certificates-for-dsc-configuration/&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>In a domain environment auto enrollment can be used to get create unique certificates for each node that can be used with DSC.  The problem is getting the public cert to the machine that creates the DSC MOF files. I wrote a module last year to collect them directly form the Enterprise CA. If it interests you take a look <a href="https://blog.bladefirelight.com/nuggets/collecting-ca-certificates-for-dsc-configuration/">https://blog.bladefirelight.com/nuggets/collecting-ca-certificates-for-dsc-configuration/</a></p>
]]></content:encoded></item><item><title>Serve on the Board of PowerShell.org!</title><link>https://powershell.org/articles/2017-04-17-serve-on-the-board-of-powershell-org/</link><guid>https://powershell.org/articles/2017-04-17-serve-on-the-board-of-powershell-org/</guid><pubDate>Mon, 17 Apr 2017 13:59:56 +0000</pubDate><description>&lt;p&gt;The DevOps Collective (the nonprofit that owns PowerShell.org) is organized into two main governing bodies. Our Directors - myself, Christopher Gannon, Jason Helmick, Jeffery Hicks, Richard Siddaway, and Will Anderson - run the organization on a day-to-day. On Board, which we&amp;rsquo;re now forming, consists of stakeholders who help advise us on directions, priorities, and so on. We want our Board to be diverse, and include representation from industry as well as community. This is a fairly convention nonprofit governance setup; you&amp;rsquo;ll find, for example, many Chambers of Commerce organized this way.&lt;br&gt;
&amp;ldquo;Community&amp;rdquo; has been the bit we&amp;rsquo;ve struggled with, and so we&amp;rsquo;ve decided to simply put it &lt;em&gt;to&lt;/em&gt; the community to help come up with an answer. We&amp;rsquo;d like two &amp;ldquo;at-large&amp;rdquo; seats, filled by community members on a rotating (annual) basis. The responsibilities are not huge: mainly, we&amp;rsquo;ll have a virtual meeting once or twice a year to cover our current activities and discuss priorities. On an ongoing basis, the Board is also a way for outside concerns to have a voice within the organization.&lt;br&gt;
For our community seats, we want people who are actively &lt;em&gt;engaged&lt;/em&gt; with the community on a daily basis. We want to know what&amp;rsquo;s happening out there with the people who actually use PowerShell, and who are participating in DevOps. We want to be aware of what&amp;rsquo;s going on in the OSS world, and where we, as an organization, might be able to assist.&lt;br&gt;
So if that&amp;rsquo;s you, reach out to me. Drop an email to DonJ (and the domain is listed right in the address bar of your browser right now). If you know of someone, please reach out to &lt;em&gt;them&lt;/em&gt; and have them send me an email. I&amp;rsquo;d like to know a bit about you, how you&amp;rsquo;re present in the community on an ongoing basis, and some ideas you have for what The DevOps Collective should be focusing its time and funding on (especially educationally, as that&amp;rsquo;s our main mission).&lt;br&gt;
I look forward to hearing from you!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The DevOps Collective (the nonprofit that owns PowerShell.org) is organized into two main governing bodies. Our Directors - myself, Christopher Gannon, Jason Helmick, Jeffery Hicks, Richard Siddaway, and Will Anderson - run the organization on a day-to-day. On Board, which we&rsquo;re now forming, consists of stakeholders who help advise us on directions, priorities, and so on. We want our Board to be diverse, and include representation from industry as well as community. This is a fairly convention nonprofit governance setup; you&rsquo;ll find, for example, many Chambers of Commerce organized this way.<br>
&ldquo;Community&rdquo; has been the bit we&rsquo;ve struggled with, and so we&rsquo;ve decided to simply put it <em>to</em> the community to help come up with an answer. We&rsquo;d like two &ldquo;at-large&rdquo; seats, filled by community members on a rotating (annual) basis. The responsibilities are not huge: mainly, we&rsquo;ll have a virtual meeting once or twice a year to cover our current activities and discuss priorities. On an ongoing basis, the Board is also a way for outside concerns to have a voice within the organization.<br>
For our community seats, we want people who are actively <em>engaged</em> with the community on a daily basis. We want to know what&rsquo;s happening out there with the people who actually use PowerShell, and who are participating in DevOps. We want to be aware of what&rsquo;s going on in the OSS world, and where we, as an organization, might be able to assist.<br>
So if that&rsquo;s you, reach out to me. Drop an email to DonJ (and the domain is listed right in the address bar of your browser right now). If you know of someone, please reach out to <em>them</em> and have them send me an email. I&rsquo;d like to know a bit about you, how you&rsquo;re present in the community on an ongoing basis, and some ideas you have for what The DevOps Collective should be focusing its time and funding on (especially educationally, as that&rsquo;s our main mission).<br>
I look forward to hearing from you!</p>
]]></content:encoded></item><item><title>PowerShell Saturday Booster Program</title><link>https://powershell.org/articles/2017-04-14-powershell-saturday-booster-program/</link><guid>https://powershell.org/articles/2017-04-14-powershell-saturday-booster-program/</guid><pubDate>Fri, 14 Apr 2017 16:23:29 +0000</pubDate><description>&lt;p&gt;As announced at PowerShell + DevOps Global Summit 2017, we&amp;rsquo;re preparing a &amp;ldquo;PowerShell Saturday Booster Program&amp;rdquo; to help launch and support local one-day events. Please visit &lt;a href="https://github.com/devops-collective-inc/powershell-saturday/wiki"&gt;https://github.com/devops-collective-inc/powershell-saturday/wiki&lt;/a&gt; to take a look at our draft materials, and use GitHub&amp;rsquo;s &amp;ldquo;Issues&amp;rdquo; feature to submit questions, suggestions for additional content, requests for clarification, and so on. We&amp;rsquo;ll continue to build this out, but want to make sure we&amp;rsquo;re doing so in a way that makes sense to the community. Thanks for your input! Our goal is to have this up and running by the end of June, 2017.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>As announced at PowerShell + DevOps Global Summit 2017, we&rsquo;re preparing a &ldquo;PowerShell Saturday Booster Program&rdquo; to help launch and support local one-day events. Please visit <a href="https://github.com/devops-collective-inc/powershell-saturday/wiki">https://github.com/devops-collective-inc/powershell-saturday/wiki</a> to take a look at our draft materials, and use GitHub&rsquo;s &ldquo;Issues&rdquo; feature to submit questions, suggestions for additional content, requests for clarification, and so on. We&rsquo;ll continue to build this out, but want to make sure we&rsquo;re doing so in a way that makes sense to the community. Thanks for your input! Our goal is to have this up and running by the end of June, 2017.</p>
]]></content:encoded></item><item><title>Post-Summit Note</title><link>https://powershell.org/articles/2017-04-13-post-summit-note/</link><guid>https://powershell.org/articles/2017-04-13-post-summit-note/</guid><pubDate>Thu, 13 Apr 2017 21:30:54 +0000</pubDate><description>&lt;p&gt;A quick note: We experienced some massive equipment failures this year, almost to the point where we were starting to seriously question our life choices. The end result is that we don&amp;rsquo;t have as many session recordings as we&amp;rsquo;d hoped. Jason will be going through what we &lt;em&gt;do&lt;/em&gt; have over the next week, splicing together what we can, and posting it to the YouTube channel. We appreciate everyone&amp;rsquo;s patience and understanding.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>A quick note: We experienced some massive equipment failures this year, almost to the point where we were starting to seriously question our life choices. The end result is that we don&rsquo;t have as many session recordings as we&rsquo;d hoped. Jason will be going through what we <em>do</em> have over the next week, splicing together what we can, and posting it to the YouTube channel. We appreciate everyone&rsquo;s patience and understanding.</p>
]]></content:encoded></item><item><title>Do Anything in One Line of PowerShell</title><link>https://powershell.org/articles/2017-04-06-do-anything-in-one-line-of-powershell/</link><guid>https://powershell.org/articles/2017-04-06-do-anything-in-one-line-of-powershell/</guid><pubDate>Thu, 06 Apr 2017 21:30:23 +0000</pubDate><description>&lt;p&gt;PowerShell provides a tremendous boon to productivity for computer professionals of all types. But, you have to admit: it can be a bit daunting to get up to speed! Indeed, as someone who has a fair amount of experience using it, I still find myself having to look up how to do things&amp;ndash;frequently. So I started keeping track of the recipes I was using the most. And came up with a list of 400 or so, published in 4 parts.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>PowerShell provides a tremendous boon to productivity for computer professionals of all types. But, you have to admit: it can be a bit daunting to get up to speed! Indeed, as someone who has a fair amount of experience using it, I still find myself having to look up how to do things&ndash;frequently. So I started keeping track of the recipes I was using the most. And came up with a list of 400 or so, published in 4 parts.</p><ul><li><a href="http://www.simple-talk.com/sysadmin/powershell/powershell-one-liners-help,-syntax,-display-and--files/">Part 1: Help, Syntax, Display and Files</a></li><li><a href="http://www.simple-talk.com/sysadmin/powershell/powershell-one-liners-variables,-parameters,-properties,-and-objects/">Part 2: Variables, Parameters, Properties, and Objects</a></li><li><a href="http://www.simple-talk.com/sysadmin/powershell/powershell-one-liners--collections,-hashtables,-arrays-and-strings/">Part 3: Collections, Hashtables, Arrays and Strings</a></li><li><a href="http://www.simple-talk.com/sysadmin/powershell/powershell-one-liners--accessing,-handling-and-writing-data-/">Part 4: Accessing, Handling and Writing Data</a></li></ul><p>Though I actually wrote these a couple years back they are certainly still relevant today, just covering a bit less of the ever-expanding PowerShell universe of discourse!<br>
(Note that at the end of each web article listed above is a link to download it as a PDF that is more tidily formatted.)</p>
]]></content:encoded></item><item><title>Final agenda</title><link>https://powershell.org/articles/2017-04-05-final-agenda/</link><guid>https://powershell.org/articles/2017-04-05-final-agenda/</guid><pubDate>Wed, 05 Apr 2017 10:14:34 +0000</pubDate><description>&lt;p&gt;We&amp;rsquo;ve had to move a few sessions around for various reasons.&lt;br&gt;
The online agenda at &lt;a href="https://eventloom.com/event/home/summit2017"&gt;https://eventloom.com/event/home/summit2017&lt;/a&gt; shows the current final agenda.&lt;br&gt;
Please check the agenda carefully to ensure you don&amp;rsquo;t miss any sessions&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We&rsquo;ve had to move a few sessions around for various reasons.<br>
The online agenda at<a href="https://eventloom.com/event/home/summit2017">https://eventloom.com/event/home/summit2017</a> shows the current final agenda.<br>
Please check the agenda carefully to ensure you don&rsquo;t miss any sessions</p>
]]></content:encoded></item><item><title>Submit Questions for "Ask Me Anything" with Jeffrey Snover</title><link>https://powershell.org/articles/2017-04-01-submit-questions-for-ask-me-anything-with-jeffrey-snover/</link><guid>https://powershell.org/articles/2017-04-01-submit-questions-for-ask-me-anything-with-jeffrey-snover/</guid><pubDate>Sat, 01 Apr 2017 11:47:45 +0000</pubDate><description>&lt;p&gt;In just a week, we&amp;rsquo;ll be holding a live &amp;ldquo;Ask Me Anything&amp;rdquo; with Jeffrey Snover at PowerShell + DevOps Global Summit 2017. Now&amp;rsquo;s a great time to Help us queue up questions - drop yours in the comments below!&lt;br&gt;
We&amp;rsquo;ll be doing our level best to record the session, although it will not be live-streamed. We&amp;rsquo;ll post the recording and let everyone know where it is a week or so after the event.&lt;br&gt;
**UPDATE: **We&amp;rsquo;re no longer taking new questions. Thanks to everyone who submitted, and we&amp;rsquo;ll see you at Summit (where we&amp;rsquo;ll be taking more questions live).&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>In just a week, we&rsquo;ll be holding a live &ldquo;Ask Me Anything&rdquo; with Jeffrey Snover at PowerShell + DevOps Global Summit 2017. Now&rsquo;s a great time to Help us queue up questions - drop yours in the comments below!<br>
We&rsquo;ll be doing our level best to record the session, although it will not be live-streamed. We&rsquo;ll post the recording and let everyone know where it is a week or so after the event.<br>
**UPDATE: **We&rsquo;re no longer taking new questions. Thanks to everyone who submitted, and we&rsquo;ll see you at Summit (where we&rsquo;ll be taking more questions live).</p>
]]></content:encoded></item><item><title>PowerShell Summit 2017 – Last-Minute Updates</title><link>https://powershell.org/articles/2017-03-27-powershell-summit-2017-last-minute-updates/</link><guid>https://powershell.org/articles/2017-03-27-powershell-summit-2017-last-minute-updates/</guid><pubDate>Mon, 27 Mar 2017 15:50:16 +0000</pubDate><description>&lt;p&gt;Some quick updates as we prepare for Summit in a couple of weeks&amp;hellip;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Some quick updates as we prepare for Summit in a couple of weeks&hellip;</p><ul><li>Be sure to keep an eye on the<a href="https://powershell.org/forums/forum/powershell-summit/">Summit Forums</a>, where you&rsquo;re welcome to ask questions and offer advice. Folks who find themselves unable to attend last-minute often post registration transfer offers there as well.<ul><li>Watch the<a href="http://bit.ly/PSHSummitNews">Summit News Feed</a> for announcements and late-breaking news. We will also have morning announcements at 8:30am in the breakfast rooms on Sunday, Tuesday, and Wednesday - don&rsquo;t miss those, as we have few other ways to communicate late-breaking changes to you.</li><li>When you arrive on-site,<a href="https://eventloom.com/event/home/summit2017">grab the latest Agenda PDF</a> for your mobile device. We&rsquo;ve had some last-minute schedule changes that will be reflected therein, and we&rsquo;ll add what we know about scheduled Side Sessions and so forth. We will have printed agendas on site, but due to printing lead times, they&rsquo;ll have one or two out-of-date pieces of info. We are endeavoring to keep that site&rsquo;s electronic schedule updated, as well, so it&rsquo;s also a good place to check.</li><li>Make sure you get on the Alumni mailing list - look for information on-site.</li></ul></li></ul><p>Because folks keep asking,<strong>yes</strong>, we do record all<strong>breakout sessions,</strong> barring any technical difficulties, and post the recordings on our YouTube channel. We do not live-stream, nor do we record general sessions, side sessions, or other non-breakout content. That&rsquo;s why you wanna be there on-site - and<a href="http://PowerShellSummit.org">http://PowerShellSummit.org</a> has already been updated with preliminary information for our 2018 event.</p>]]></content:encoded></item><item><title>Community Lightning Demos – Call for Proposals</title><link>https://powershell.org/articles/2017-03-22-community-lightning-demos-call-for-proposals/</link><guid>https://powershell.org/articles/2017-03-22-community-lightning-demos-call-for-proposals/</guid><pubDate>Wed, 22 Mar 2017 15:06:45 +0000</pubDate><description>&lt;p&gt;If you&amp;rsquo;ve been to a PowerShell Summit, chances are you&amp;rsquo;ve seen the awesome lightning demos put on by the PowerShell team members. It&amp;rsquo;s a fun format - each team member gives a quick 5-10 minute demo of something they&amp;rsquo;re working on, one after the other.&lt;br&gt;
In a few weeks, the PowerShell + Devops Global Summit will kick off, with a Community Lightning Demo session scheduled for Wednesday afternoon. We&amp;rsquo;re looking for community members like you to sign up and present! Demo something cool that you&amp;rsquo;ve written or used - a module, function, tip, trick, etc. - just keep it under 10 minutes.&lt;br&gt;
If it helps, &lt;a href="http://ramblingcookiemonster.github.io/Summit-Lightning-Demos/"&gt;here&amp;rsquo;s a longer bit&lt;/a&gt; on the community lightning demos, including an &lt;a href="https://youtu.be/50Z6vEHVgDg"&gt;example demo recording&lt;/a&gt;.&lt;br&gt;
Sound interesting? Want to jump on stage for a few minutes and show us something fun? &lt;a href="https://goo.gl/forms/Q8C3hBXTANL9oR433"&gt;Sign up now&lt;/a&gt;! Not attending the summit? We&amp;rsquo;ll have recordings for presenters who want to be recorded, and ideally, demo content from everyone.&lt;br&gt;
We&amp;rsquo;ll be looking forward to some awesome demos; hope to see you there!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>If you&rsquo;ve been to a PowerShell Summit, chances are you&rsquo;ve seen the awesome lightning demos put on by the PowerShell team members. It&rsquo;s a fun format - each team member gives a quick 5-10 minute demo of something they&rsquo;re working on, one after the other.<br>
In a few weeks, the PowerShell + Devops Global Summit will kick off, with a Community Lightning Demo session scheduled for Wednesday afternoon. We&rsquo;re looking for community members like you to sign up and present! Demo something cool that you&rsquo;ve written or used - a module, function, tip, trick, etc. - just keep it under 10 minutes.<br>
If it helps,<a href="http://ramblingcookiemonster.github.io/Summit-Lightning-Demos/">here&rsquo;s a longer bit</a> on the community lightning demos, including an<a href="https://youtu.be/50Z6vEHVgDg">example demo recording</a>.<br>
Sound interesting? Want to jump on stage for a few minutes and show us something fun?<a href="https://goo.gl/forms/Q8C3hBXTANL9oR433">Sign up now</a>! Not attending the summit? We&rsquo;ll have recordings for presenters who want to be recorded, and ideally, demo content from everyone.<br>
We&rsquo;ll be looking forward to some awesome demos; hope to see you there!</p>
]]></content:encoded></item><item><title>Three seats left</title><link>https://powershell.org/articles/2017-02-23-three-seats-left/</link><guid>https://powershell.org/articles/2017-02-23-three-seats-left/</guid><pubDate>Thu, 23 Feb 2017 10:28:44 +0000</pubDate><description>&lt;p&gt;There are currently three (3) seats left for the 2017 PowerShell and DevOps Summit. First come first served - when they gone that&amp;rsquo;s definitely it as we&amp;rsquo;re at capacity. Registration at - &lt;a href="https://eventloom.com/event/home/summit2017"&gt;https://eventloom.com/event/home/summit2017&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>There are currently three (3) seats left for the 2017 PowerShell and DevOps Summit. First come first served - when they gone that&rsquo;s definitely it as we&rsquo;re at capacity. Registration at -<a href="https://eventloom.com/event/home/summit2017">https://eventloom.com/event/home/summit2017</a></p>
]]></content:encoded></item><item><title>Join Us in Thanking Ed &amp; Teresa Wilson at Summit 2017</title><link>https://powershell.org/articles/2017-02-16-join-us-in-thanking-ed-teresa-wilson-at-summit-2017/</link><guid>https://powershell.org/articles/2017-02-16-join-us-in-thanking-ed-teresa-wilson-at-summit-2017/</guid><pubDate>Thu, 16 Feb 2017 18:35:52 +0000</pubDate><description>&lt;p&gt;We&amp;rsquo;re pleased and proud to announce that Microsoft&amp;rsquo;s &amp;ldquo;The Scripting Guy,&amp;rdquo; Ed Wilson, and the wonderful Scripting Wife, Teresa Wilson, have agreed to join us at PowerShell + DevOps Global Summit 2017 (which as of this writing is almost sold out). They recently announced their retirement, so we wanted to bring them out for one last Summit so we could all wish them a comfortable and relaxed time! This&amp;rsquo;ll likely be one of our last chances to grab a photo and a hug, so be sure to do so!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We&rsquo;re pleased and proud to announce that Microsoft&rsquo;s &ldquo;The Scripting Guy,&rdquo; Ed Wilson, and the wonderful Scripting Wife, Teresa Wilson, have agreed to join us at PowerShell + DevOps Global Summit 2017 (which as of this writing is almost sold out). They recently announced their retirement, so we wanted to bring them out for one last Summit so we could all wish them a comfortable and relaxed time! This&rsquo;ll likely be one of our last chances to grab a photo and a hug, so be sure to do so!</p>
]]></content:encoded></item><item><title>You an still get into PowerShell + DevOps Global Summit 2017!</title><link>https://powershell.org/articles/2017-02-09-you-an-still-get-into-powershell-devops-global-summit-2017/</link><guid>https://powershell.org/articles/2017-02-09-you-an-still-get-into-powershell-devops-global-summit-2017/</guid><pubDate>Thu, 09 Feb 2017 16:04:56 +0000</pubDate><description>&lt;p&gt;After selling out in record time, we&amp;rsquo;ve worked with our event venue to rearrange how we&amp;rsquo;re using the space - and, as a result, we&amp;rsquo;ve been able to open additional seats for attendees! YAY! Hop on over to the &lt;a href="https://eventloom.com/event/home/summit2017"&gt;registration website&lt;/a&gt; soon, because these puppies won&amp;rsquo;t last.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>After selling out in record time, we&rsquo;ve worked with our event venue to rearrange how we&rsquo;re using the space - and, as a result, we&rsquo;ve been able to open additional seats for attendees! YAY! Hop on over to the<a href="https://eventloom.com/event/home/summit2017">registration website</a> soon, because these puppies won&rsquo;t last.</p>
]]></content:encoded></item><item><title>PowerShell Summit 2017 – sold out</title><link>https://powershell.org/articles/2017-02-09-powershell-summit-2017-sold-out/</link><guid>https://powershell.org/articles/2017-02-09-powershell-summit-2017-sold-out/</guid><pubDate>Thu, 09 Feb 2017 11:41:03 +0000</pubDate><description>&lt;p&gt;We sold the last seat for the 2017 Summit - &lt;a href="https://eventloom.com/event/home/summit2017"&gt;https://eventloom.com/event/home/summit2017&lt;/a&gt; yesterday.&lt;br&gt;
If, and its a very big if, more seats become available we&amp;rsquo;ll notify you though the event web site and here on powershell.org&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We sold the last seat for the 2017 Summit -<a href="https://eventloom.com/event/home/summit2017">https://eventloom.com/event/home/summit2017</a> yesterday.<br>
If, and its a very big if, more seats become available we&rsquo;ll notify you though the event web site and here on powershell.org</p>
]]></content:encoded></item><item><title>Summit 2017 Agenda &amp; Program Guide Online</title><link>https://powershell.org/articles/2017-02-08-summit-2017-agenda-program-guide-online/</link><guid>https://powershell.org/articles/2017-02-08-summit-2017-agenda-program-guide-online/</guid><pubDate>Wed, 08 Feb 2017 19:09:20 +0000</pubDate><description>&lt;p&gt;We&amp;rsquo;ve posted the first draft of the Program Guide, including the Agenda, for PowerShell + DevOps Global Summit 2017. You&amp;rsquo;ll find it linked near the top of the &lt;a href="https://eventloom.com/event/home/summit2017"&gt;Registration Page&lt;/a&gt;. If you&amp;rsquo;re attending Summit, please check back a few days before the event to download the final version. We&amp;rsquo;ll have some hardcopies on site, but you&amp;rsquo;ll want to have the PDF downloaded to your pocket computer for easy reference.&lt;br&gt;
The Guide includes a bunch of tips and information beyond the Agenda, so we heartily recommend that everyone take the time to peruse its 12 pages of goodness.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We&rsquo;ve posted the first draft of the Program Guide, including the Agenda, for PowerShell + DevOps Global Summit 2017. You&rsquo;ll find it linked near the top of the<a href="https://eventloom.com/event/home/summit2017">Registration Page</a>. If you&rsquo;re attending Summit, please check back a few days before the event to download the final version. We&rsquo;ll have some hardcopies on site, but you&rsquo;ll want to have the PDF downloaded to your pocket computer for easy reference.<br>
The Guide includes a bunch of tips and information beyond the Agenda, so we heartily recommend that everyone take the time to peruse its 12 pages of goodness.</p>
]]></content:encoded></item><item><title>Summit 2017 – Badge Question</title><link>https://powershell.org/articles/2017-02-01-summit-2017-badge-question/</link><guid>https://powershell.org/articles/2017-02-01-summit-2017-badge-question/</guid><pubDate>Wed, 01 Feb 2017 15:16:52 +0000</pubDate><description>&lt;p&gt;We&amp;rsquo;re brainstorming ideas to have more professional, collectible attendee badges for Summit, while also reducing time at check-in on-site. If you&amp;rsquo;re attending or have thought about it, please take a moment to answer &lt;a href="http://674004.polldaddy.com/s/powershell-summit-badges"&gt;this one-question survey&lt;/a&gt;. Thanks!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We&rsquo;re brainstorming ideas to have more professional, collectible attendee badges for Summit, while also reducing time at check-in on-site. If you&rsquo;re attending or have thought about it, please take a moment to answer<a href="http://674004.polldaddy.com/s/powershell-summit-badges">this one-question survey</a>. Thanks!</p>
]]></content:encoded></item><item><title>Summit 2017–seats going fast</title><link>https://powershell.org/articles/2017-01-28-summit-2017-seats-going-fast/</link><guid>https://powershell.org/articles/2017-01-28-summit-2017-seats-going-fast/</guid><pubDate>Sat, 28 Jan 2017 20:19:21 +0000</pubDate><description>&lt;p&gt;Seats a the PowerShell Summit -  &lt;a href="https://eventloom.com/event/home/summit2017" title="https://eventloom.com/event/home/summit2017"&gt;https://eventloom.com/event/home/summit2017&lt;/a&gt; – are going fast.&lt;br&gt;
We’ve sold over 70% of the seats – they’re current 55 seats left split between 4-day and 3-day passes. The 3-day passes don’t go on sale until 12 February and we’ll be moving 3-day to 4-day as sales happen between now and then. We have a number of sales in the pipeline that will reduce the number of available seats as well.&lt;br&gt;
We are at maximum capacity for the venue – and probably for the event in its present format.&lt;br&gt;
We are expecting a rapid sell off of the remaining seats when open registration of 3-day passes. We don’t maintain any sort of waiting list and when the seats are gone – they’re gone.&lt;br&gt;
If you are thinking of attending the 2017 Summit I’d advise you to get your seat booked quickly – I wouldn’t be at all surprised if we’d sold out by the end of February.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Seats a the PowerShell Summit - <a href="https://eventloom.com/event/home/summit2017" title="https://eventloom.com/event/home/summit2017">https://eventloom.com/event/home/summit2017</a> – are going fast.<br>
We’ve sold over 70% of the seats – they’re current 55 seats left split between 4-day and 3-day passes. The 3-day passes don’t go on sale until 12 February and we’ll be moving 3-day to 4-day as sales happen between now and then. We have a number of sales in the pipeline that will reduce the number of available seats as well.<br>
We are at maximum capacity for the venue – and probably for the event in its present format.<br>
We are expecting a rapid sell off of the remaining seats when open registration of 3-day passes. We don’t maintain any sort of waiting list and when the seats are gone – they’re gone.<br>
If you are thinking of attending the 2017 Summit I’d advise you to get your seat booked quickly – I wouldn’t be at all surprised if we’d sold out by the end of February.</p>
]]></content:encoded></item><item><title>Community Lightning Demos</title><link>https://powershell.org/articles/2017-01-24-community-lightning-demos/</link><guid>https://powershell.org/articles/2017-01-24-community-lightning-demos/</guid><pubDate>Tue, 24 Jan 2017 21:07:51 +0000</pubDate><description>&lt;p&gt;We are continually evolving the content we present at the PowerShell Summit. This year we&amp;rsquo;re bringing back something that was a feature of the early PowerShell Deep Dives and Summits - the Community Lightning Demos. We have a session set aside on Wednesday afternoon for this. Timescales will depend on the number of people wanting to show something.&lt;br&gt;
In the words of PowerShell MVP Warren Frame who&amp;rsquo;s organising this for us:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We are continually evolving the content we present at the PowerShell Summit. This year we&rsquo;re bringing back something that was a feature of the early PowerShell Deep Dives and Summits - the Community Lightning Demos. We have a session set aside on Wednesday afternoon for this. Timescales will depend on the number of people wanting to show something.<br>
In the words of PowerShell MVP Warren Frame who&rsquo;s organising this for us:</p><blockquote><p>Ever wanted to present at Summit but were unsure if you could? This is your opportunity to present something you&rsquo;ve discovered to your peers in the PowerShell community. A code trick, or tip, a new module you&rsquo;ve created, an open source module or a feature of a cmdlet that&rsquo;s relatively unknown.. The list goes on and on. Anything PowerShell, or DevOps related that you think is cool and that will interest other people is a suitable topic. We&rsquo;re looking for 5-10 minute demos. Something you&rsquo;ve done, discovered, solved or run up against. This is your opportunity to &ldquo;give back&rdquo; to our community by sharing your knowledge. Make sure its something you can present from your laptop and that you don&rsquo;t need extensive Internet access. A sign up sheet will be available Sunday, Monday and Tuesday. We just need your name and topic. Who knows you may be asked to present a full session at the following Summit. Some of our best speakers started in the Lightning Demos sessions of past events.</p></blockquote><p>This is your opportunity to start presenting to a knowledgeable and appreciative audience. In past events we&rsquo;ve had some amazing things come to light - things the PowerShell team didn&rsquo;t realise about PowerShell. If you have something to share please consider signing up for this.</p>
]]></content:encoded></item><item><title>DevOps: A Career Changer</title><link>https://powershell.org/articles/2017-01-13-devops-a-career-changer/</link><guid>https://powershell.org/articles/2017-01-13-devops-a-career-changer/</guid><pubDate>Fri, 13 Jan 2017 16:02:18 +0000</pubDate><description>&lt;p&gt;Once upon a time, there was this woman at a TechMentor conference a few years ago, sitting in the front of the room during the “Don and Jason&amp;quot; show, a not-quite-scripted discussion on various “lightning” topics.&lt;/p&gt;
&lt;p&gt;The topic at that moment was DevOps, and this woman was asking for advice on being an advocate for DevOps in her company.&lt;/p&gt;
&lt;p&gt;Her company had just been acquired, she explained, which meant that the atmosphere was ripe for change, but the culture of the company they had been acquired from was very change-resistant.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Once upon a time, there was this woman at a TechMentor conference a few years ago, sitting in the front of the room during the “Don and Jason" show, a not-quite-scripted discussion on various “lightning” topics.</p><p>The topic at that moment was DevOps, and this woman was asking for advice on being an advocate for DevOps in her company.</p><p>Her company had just been acquired, she explained, which meant that the atmosphere was ripe for change, but the culture of the company they had been acquired from was very change-resistant.</p><p>Among other questions, she wanted to know the secrets of getting Dev and Ops to not only work together, but get along.</p><p>And after a short discussion it was pointed out that “if you feel you can’t affect change on your company, perhaps you should &lsquo;change your company&rsquo;”.</p><p>To which she responded, “That will never happen.”</p><p>After all, she had been at the same company for nearly 20 years.</p><p>The company had been acquired twice, but really, she had been in the same place for nearly half her life.</p><p>Yes, that woman is me, and this is the story of how “that will never happen” changed into “happened”.</p><p>I returned to TechMentor in 2016.</p><p>I had spent some time in the Desired State Configuration (DSC) classes the previous year, and was astounded by DSC and its capabilities, but I hadn’t done anything with it since taking the classes at the previous conference.</p><p>So, once again I sat in the DSC classes and tried to absorb as much material as possible.</p><p>The content was different – WMF 5.0 had recently been released, the pull server demo was brand-new, and I began to wonder what I could really do with DSC if I really put some effort into it.</p><p>After all, I had some servers that were in need of a technical refresh that year and wondered if it would be possible to use DSC to configure them – both from a technical and a political point of view.</p><p>After returning from TechMentor, within a month, I saw a posting for DevOps Camp.</p><p>“Experts Only”, the brochure read.</p><p>I wondered if I could “ramp up” my skills in 4 months enough to attend and not be a lost camper.</p><p>I discussed it with a friend who is also a former colleague and fellow PowerShell enthusiast.</p><p>“But we’re not experts,” he reminded me.</p><p>And I put out the ultimate challenge – “Every year we talk about going to PowerShell Summit, and every year we say the same thing.</p><p>‘But we’re not experts!’</p><p>Well, if not now, when?</p><p>And how do we get there?”</p><p>The gauntlet was thrown, and we went about the daunting task of learning DSC in 4 months.</p><p>I had a full-time job, so I started working on DSC at night.</p><p>I watched the MVA videos on the weekends, 1-2 chapters a weekend, and spent the week making up my own labs to go along with whatever chapter of the MVA I was on.</p><p>I tried my best to come up with experiments that would not only prove to myself that I understood the material, but that would be useful in my day job.</p><p>My friend and I met once a week at a local Starbucks to discuss what we had learned that week, and what stumbling blocks we had come across.</p><p>Shortly after, I made the case to research DSC not just for my own learning, but for work use.</p><p>I was permitted to work on it during work hours.</p><p>I learned, and I stumbled.</p><p>I made mistakes and I shed blood.</p><p>I picked experiments that were supposed to be code snippets that I could use in “real server configurations” and quickly learned many lessons.</p><p>Like how installing WMF 5.0 via DSC is probably the worst first attempt at creating a config.</p><p>Or how turning off TLS 1.0 is the worst second attempt, thanks to the fact that the pull server at the time required it to be on.</p><p>I went a few rounds with the certificate authority trying to set up a certificate template for encrypting and decrypting credentials in MOF files.</p><p>For a long time, the certificate authority won, until finally, at last, I figured out the missing element in the template with the help of newly-updated MSDN documentation.</p><p>I did battle with an environmental issue that made my LCM “uncooperative”, and for the record, I lost that battle and the root cause still remains a mystery, though it was likely a combination of certificate revocation policies and ever-changing proxy configurations.</p><p>But despite my struggles, I learned valuable lessons from each and every one of them.</p><p>I spent two months working on mastering the concepts from the two MVA videos, and due to the environmental issues in the development environment, the second two months building out an “automated” lab that could be built on my laptop – a Dell XPS 13 with 8GB of RAM and 80GB or less of free hard drive space.</p><p>I borrowed a USB drive for the server images, and built out a lab with an authoring box, a single DC/Certificate authority, and a pull server, the intent of which was to give me a pristine place to develop configs without getting bogged down in whatever issues I was encountering in the dev environment.</p><p>Then I went to DevOps Camp.</p><p>And from my perspective, it was a big success.</p><p>I wasn’t lost.</p><p>I could follow along with the sessions, and I had a great time learning about the release pipeline and other tools and concepts that would take my DevOps skills and automation to the next level.</p><p>Some of my code even got shown during the camp, specifically, in the session on building an automated lab, the config for the DC that I built for my laptop lab was used in the demo.</p><p>I returned from DevOps camp full of information and also maybe a little overwhelmed with the things I wanted to try and play with when I returned.</p><p>I almost didn’t quite know what to do next.</p><p>I changed focus a little bit after that.</p><p>I wanted to start socializing PowerShell and DSC more.</p><p>I wanted to converse with people who were using it in production environments.</p><p>I started getting involved in the PowerShell community – writing an occasional blog, meeting members of the PowerShell community and PowerShell team at Ignite, joining some Slack channel discussions, and submitting a few topics for the PowerShell Summit.</p><p>And as I was doing these things, I started wondering if I was in the wrong place.</p><p>My primary responsibility was infrastructure, specifically Active Directory, and while my newfound passion for DevOps was well-received at work, it felt out of place with my “day job”.</p><p>And then, one day in mid-October, an opportunity presented itself.</p><p>It was one that would require me to think, to reflect, and most of all, move out of that comfort zone that 18 months ago I was so adamant that I would never leave.</p><p>If I were to act on this opportunity, it would require me to leave my company of 20+ years.</p><p>But was I ready?</p><p>Would what kept me there all those years continue to keep me there?</p><p>I began to seek out advice.</p><p>I spoke to family, friends, colleagues, mentors, and my financial planner.</p><p>Most were encouraging, some thought I was nuts.</p><p>Sometimes even I thought I was nuts.</p><p>Leave my comfort zone?</p><p>Leave the people that I had cultivated friendships with inside and outside work?</p><p>My former and present co-workers always said that the thing that keeps them there is the people that they work with, and that’s no lie.</p><p>The financial planner didn’t think I was nuts, and helped come up with a plan.</p><p>I listened intently to any and all advice given by all, but ultimately the decision was mine, and I had to figure out if I had the guts to move on.</p><p>Only 18 months ago, I was stating with authority to Don Jones that “That will never happen.”</p><p>But yet, now this thing that started out as just wanting to learn more about DSC and DevOps had grown from a spark into a fire.</p><p>And the opportunity to change myself and my career was presenting itself on a silver platter.</p><p>I made the decision to accept the opportunity – and that’s exactly what it was – an opportunity that I couldn’t pass up.</p><p>I doubt that I would have made the same decision had I not spent the last year working on improving my skill set.</p><p>My life is about to change in ways I never would have dreamed possible a year ago.</p><p>I’m scared shitless of the future, but I’m also eagerly anticipating the next chapter.</p><p>I’m excited about all the things that I could possibly do.</p><p>I’m jumping off the ledge into the abyss, and hoping for a soft landing.</p><p>My last day is looming as I write this, and I’m filled with constantly-changing emotions.</p><p>Saying good-bye to people I have known nearly half my life is HARD.</p><p>On those days, I’m sad, after all, they are what has kept me here and sane all these years.</p><p>The good part is that I’m not technically going anywhere, so I can see my friends any time I want, just not within the confines of the corporate walls.</p><p>The opportunity to keep in touch and socialize is still there.</p><p>But the remainder of the time I’m excited – excited to try something new.</p><p>I’ve finally decided to say out loud that I am going to go independent.</p><p>It’s risky – I’m relatively unknown, but I have some exciting things to work on, like working on the DSC book and speaking at PowerShell Summit.</p><p>I have a backlog of articles to read and videos to watch and will be grateful for the flexibility in my time to do all these things.</p><p>I’m nervous about the future but my confidence in my abilities has grown so much over the last year.</p><p>I’m worried about the financial aspects of my decision.</p><p>This is probably first and foremost in my mind, but luckily, I have a cushion that makes the risk of making the decision to go independent somewhat less.</p><p>It still concerns me, though.</p><p>It’s odd not to have to count working hours, or justify or categorize what I spent my time on that day.</p><p>If I want to spend two hours writing this article – I can.</p><p>I will probably spend the next year just figuring out how to get into a daily routine and making sure that the things on my to-do list get done.</p><p>Writing down how I got here has been an interesting trip down memory lane.</p><p>I wish I had started writing down my journey when it started, but I recall that it started out with a desire to learn and a challenge to learn for my own personal knowledge.</p><p>As I went along, I realized that to be happy and challenged and really expand my knowledge, capabilities, and skills, that it was time to move on.</p><p>I leave you with a quote, one that I saw while out Christmas shopping, that rang true for me.</p><p>“Do not be afraid of change.</p><p>Be afraid of not changing.”</p>
]]></content:encoded></item><item><title>Pester – Parameters and Hashtable Fun!</title><link>https://powershell.org/articles/2017-01-06-pester-parameters-and-hashtable-fun/</link><guid>https://powershell.org/articles/2017-01-06-pester-parameters-and-hashtable-fun/</guid><pubDate>Fri, 06 Jan 2017 07:45:36 +0000</pubDate><description>&lt;p&gt;I have written a short excerpt on how to pass parameters from an object to a Pester test. I have turned this into a function: Invoke-POVTest.&lt;br&gt;
The function is primarily for operational validation tests, where you might have a single operational test but you need to test multiple cases. (Sorry, I am not quite sure if I described it properly).&lt;br&gt;
I&amp;rsquo;ll be interested in any feedback.&lt;/p&gt;
&lt;p&gt;Link to blog post &lt;a href="https://weiyentanitjournal.com/index.php/2017/01/04/pester-parameters-and-hashtable-fun/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I have written a short excerpt on how to pass parameters from an object to a Pester test. I have turned this into a function: Invoke-POVTest.<br>
The function is primarily for operational validation tests, where you might have a single operational test but you need to test multiple cases. (Sorry, I am not quite sure if I described it properly).<br>
I&rsquo;ll be interested in any feedback.</p><p>Link to blog post<a href="https://weiyentanitjournal.com/index.php/2017/01/04/pester-parameters-and-hashtable-fun/">here</a>.</p>
]]></content:encoded></item></channel></rss>