&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 2015 on PowerShell.org - Welcome Automaters!</title><link>https://powershell.org/articles/2015/</link><description>Recent content in Articles from 2015 on PowerShell.org - Welcome Automaters!</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://powershell.org/articles/2015/index.xml" rel="self" type="application/rss+xml"/><item><title>PowerShell.org's Nonprofit Status</title><link>https://powershell.org/articles/2015-12-29-powershell-orgs-nonprofit-status/</link><guid>https://powershell.org/articles/2015-12-29-powershell-orgs-nonprofit-status/</guid><pubDate>Tue, 29 Dec 2015 15:11:16 +0000</pubDate><description>&lt;p&gt;We learned today that The DevOps Collective, Inc., (the company that officially owns and runs PowerShell.org, the PowerShell + DevOps Global Summit, etc.) was accepted by the US Treasury as a 501(c)(3) public charity.&lt;br&gt;
That means that the company is quite literally owned by the American public now, and run by its Board of Directors. No human or business entity owns the company and its assets, which is exactly our intent. Further, no human or business entity can profit from the company, which is also our exact intent. Regardless of who&amp;rsquo;s running it, it&amp;rsquo;s now big-time illegal for any Director (for example) to just partake of the organization&amp;rsquo;s money. Previously, it was merely unethical, but completely legal, as the company was technically for-profit. So we&amp;rsquo;re right where we want to be.&lt;br&gt;
Donations to the corporation are now tax-deductible, charitable contributions. However, a &lt;em&gt;donation&lt;/em&gt; is when you get nothing of value in return; unfortunately, Summit registration fees - since Summit itself is of considerable material value - are &lt;em&gt;not&lt;/em&gt; charitable contributions. Your registration is likely still deductible as a business expense (namely, education, along with your travel expenses), something you or your organization&amp;rsquo;s accountants should determine. Sponsorships - given that sponsors don&amp;rsquo;t receive anything of material value from us - are considered deductible contributions in most cases.&lt;br&gt;
I&amp;rsquo;m very proud to have brought the organization to this point, and I want to point out that it&amp;rsquo;s due in part to Microsoft&amp;rsquo;s own recent activities, such as bringing Core CLR, the WS-MAN stack, DSC client, and other bits to non-Windows operating systems, as well as their progress in open sourcing so many critical pieces. Those activities - and our expanding focus on DevOps in general - have taken us away from being an organization that supports a commercial product (MS Windows) to a much broader organization that was qualified for this beneficial status. I also want to offer a big shout-out to my fellow Directors, and especially Jason Helmick, who put in a lot of work with our own accountants to get this all in order for the IRS.&lt;br&gt;
For the organization itself, it means our main revenue activity - Summit - is now nontaxable for us. That means we get to keep all of our money to spend on organizational operating expenses, instead of losing some of it to taxes. That gives us a 15-25% boost in being able to operate our TeamCity public build server, this very website, our TechSession webinars, and other activities. This new status also, I believe, places us firmly on a path toward long-term existence. PowerShell.org is now, in a very binding legal way, something _we all own, _and something it&amp;rsquo;s on all of us to continue growing and supporting.&lt;br&gt;
Thank you for that support, and Happy New Year!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We learned today that The DevOps Collective, Inc., (the company that officially owns and runs PowerShell.org, the PowerShell + DevOps Global Summit, etc.) was accepted by the US Treasury as a 501(c)(3) public charity.<br>
That means that the company is quite literally owned by the American public now, and run by its Board of Directors. No human or business entity owns the company and its assets, which is exactly our intent. Further, no human or business entity can profit from the company, which is also our exact intent. Regardless of who&rsquo;s running it, it&rsquo;s now big-time illegal for any Director (for example) to just partake of the organization&rsquo;s money. Previously, it was merely unethical, but completely legal, as the company was technically for-profit. So we&rsquo;re right where we want to be.<br>
Donations to the corporation are now tax-deductible, charitable contributions. However, a <em>donation</em> is when you get nothing of value in return; unfortunately, Summit registration fees - since Summit itself is of considerable material value - are <em>not</em> charitable contributions. Your registration is likely still deductible as a business expense (namely, education, along with your travel expenses), something you or your organization&rsquo;s accountants should determine. Sponsorships - given that sponsors don&rsquo;t receive anything of material value from us - are considered deductible contributions in most cases.<br>
I&rsquo;m very proud to have brought the organization to this point, and I want to point out that it&rsquo;s due in part to Microsoft&rsquo;s own recent activities, such as bringing Core CLR, the WS-MAN stack, DSC client, and other bits to non-Windows operating systems, as well as their progress in open sourcing so many critical pieces. Those activities - and our expanding focus on DevOps in general - have taken us away from being an organization that supports a commercial product (MS Windows) to a much broader organization that was qualified for this beneficial status. I also want to offer a big shout-out to my fellow Directors, and especially Jason Helmick, who put in a lot of work with our own accountants to get this all in order for the IRS.<br>
For the organization itself, it means our main revenue activity - Summit - is now nontaxable for us. That means we get to keep all of our money to spend on organizational operating expenses, instead of losing some of it to taxes. That gives us a 15-25% boost in being able to operate our TeamCity public build server, this very website, our TechSession webinars, and other activities. This new status also, I believe, places us firmly on a path toward long-term existence. PowerShell.org is now, in a very binding legal way, something _we all own, _and something it&rsquo;s on all of us to continue growing and supporting.<br>
Thank you for that support, and Happy New Year!</p>
]]></content:encoded></item><item><title>My Favorite DSC Feature Suggestions on UserVoice (upvote!)</title><link>https://powershell.org/articles/2015-12-28-my-favorite-dsc-feature-suggestions-on-uservoice-upvote/</link><guid>https://powershell.org/articles/2015-12-28-my-favorite-dsc-feature-suggestions-on-uservoice-upvote/</guid><pubDate>Mon, 28 Dec 2015 19:35:27 +0000</pubDate><description>&lt;p&gt;Hopefully, you&amp;rsquo;re aware that Microsoft is moving to UserVoice for accepting feature requests and bugs. &lt;a href="https://windowsserver.uservoice.com/forums/301869-powershell/category/148047-desired-state-configuration-dsc"&gt;DSC in particular has 30-odd suggestions at present&lt;/a&gt;, and I thought I&amp;rsquo;d run through some of my fav&amp;rsquo;s. Log in and up-vote the ones you like, or add comments to expand the discussion!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088780-add-maintenance-window-awareness-to-dsc-lcm"&gt;Add Maintenance Windows Awareness to DSC/LCM&lt;/a&gt;. This is one of mine, but it came from several customer suggestions.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088516-change-from-edb-file-to-sql-server-database-for-de"&gt;Change the Pull Server database to SQL Server&lt;/a&gt;. Broadly, this is a great idea. In theory, you should be able to modify the web.config file and direct it to a SQL Server already, but nobody knows the database schema that the pull server expects.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088813-enable-proactive-validation-of-partial-configurati"&gt;Refactor the LCM&amp;rsquo;s validation logic&lt;/a&gt;. This is another of mine, and it&amp;rsquo;s crucial. Right now, only the LCM can validate multiple partial configs and tell you if there&amp;rsquo;s a validation problem like a duplicate key. This means our only possible point of failure is the target node, which is the worst possible place for that to be. Factoring the logic out would let us built a pull server that could combine multiple configurations _server-side, _and spit out a combined, pre-validated MOF for the target to consume. We could also use the configuration logic to manually combine and validate MOFs in a test or RSoP mode, perhaps with a cmdlet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There&amp;rsquo;s plenty more - have a look, vote for ones you like, and add your own suggestions! And there&amp;rsquo;s a lot more besides DSC in there - see anything that you think is important?&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Hopefully, you&rsquo;re aware that Microsoft is moving to UserVoice for accepting feature requests and bugs.<a href="https://windowsserver.uservoice.com/forums/301869-powershell/category/148047-desired-state-configuration-dsc">DSC in particular has 30-odd suggestions at present</a>, and I thought I&rsquo;d run through some of my fav&rsquo;s. Log in and up-vote the ones you like, or add comments to expand the discussion!</p><ul><li><a href="https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088780-add-maintenance-window-awareness-to-dsc-lcm">Add Maintenance Windows Awareness to DSC/LCM</a>. This is one of mine, but it came from several customer suggestions.</li><li><a href="https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088516-change-from-edb-file-to-sql-server-database-for-de">Change the Pull Server database to SQL Server</a>. Broadly, this is a great idea. In theory, you should be able to modify the web.config file and direct it to a SQL Server already, but nobody knows the database schema that the pull server expects.</li><li><a href="https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11088813-enable-proactive-validation-of-partial-configurati">Refactor the LCM&rsquo;s validation logic</a>. This is another of mine, and it&rsquo;s crucial. Right now, only the LCM can validate multiple partial configs and tell you if there&rsquo;s a validation problem like a duplicate key. This means our only possible point of failure is the target node, which is the worst possible place for that to be. Factoring the logic out would let us built a pull server that could combine multiple configurations _server-side, _and spit out a combined, pre-validated MOF for the target to consume. We could also use the configuration logic to manually combine and validate MOFs in a test or RSoP mode, perhaps with a cmdlet.</li></ul><p>There&rsquo;s plenty more - have a look, vote for ones you like, and add your own suggestions! And there&rsquo;s a lot more besides DSC in there - see anything that you think is important?</p>
]]></content:encoded></item><item><title>Microsoft's Brave New World Needs Version Numbers</title><link>https://powershell.org/articles/2015-12-28-microsofts-brave-new-world-needs-version-numbers/</link><guid>https://powershell.org/articles/2015-12-28-microsofts-brave-new-world-needs-version-numbers/</guid><pubDate>Mon, 28 Dec 2015 19:21:23 +0000</pubDate><description>&lt;p&gt;In Microsoft&amp;rsquo;s brave new world of agile, more-frequent software releases, including numerous pre-release cycles&amp;hellip; Microsoft needs to rethink the way it communicates versioning.&lt;br&gt;
Windows Management Framework (WMF) v5 has, for me, been pretty much the perfect example of what &lt;em&gt;not&lt;/em&gt; to do, and the perfect example of Microsoft still shoehorning itself into old nomenclature that no longer fills the bill. I know a bunch of folks on the PowerShell team are probably still trying to figure out what works, too, so this isn&amp;rsquo;t meant to be a hammer-on-&amp;rsquo;em post, but WMF5&amp;rsquo;s lifecycle was, from a versioning perspective, pretty hellish.&lt;br&gt;
We had several &amp;ldquo;technology preview&amp;rdquo; releases, which were simply named after their month of release. April 2015. November. Whatever. It was really difficult from within the product - e.g., via $PSVersionTable - to tell which one you were running, which made helping people difficult. None of these were supported in production until the &amp;ldquo;WMF5 Production Preview&amp;rdquo; released in late 2015, and in December we got &amp;ldquo;RTM&amp;rdquo; code. RTM means &amp;ldquo;Released to Manufacturing,&amp;rdquo; which is kind of absurd as a milestone, because there&amp;rsquo;s literally zero actual manufacturing going on. It&amp;rsquo;s just a word Microsoft is used to using. Windows 10 shipped with a production-supported version of WMF5, but it still wasn&amp;rsquo;t &amp;ldquo;final,&amp;rdquo; meaning RTM WMF is better than what shipped with the RTM OS. God willing, what ships in Windows Server 2016 will be v5.1 or something, because if we get yet another 5.0 release folks are going to start throwing up their hands and quitting.&lt;br&gt;
Now that Microsoft&amp;rsquo;s all lovey-huggy with open source and Linux and stuff, can we just copy what those guys do?&lt;br&gt;
Every time you release code, increment the version number. It&amp;rsquo;s that simple. There&amp;rsquo;s no &amp;ldquo;production preview,&amp;rdquo; there&amp;rsquo;s just &amp;ldquo;5.3.&amp;rdquo; And you maintain a list of what&amp;rsquo;s supported in production. If 5.3 isn&amp;rsquo;t a production milestone, fine - say so. But it&amp;rsquo;s still a real version, because it was released unto the world. The next release is 5.4. Then 5.5. And maybe 5.6 is supported in production, but once 5.7 is out, 5.6 remains supported for only 90 days. Or whatever. Just have a list of what&amp;rsquo;s supported, and increment the version number every time you release it. 5.8 might only last a week before someone finds some heinous bug and releases 5.9 - that&amp;rsquo;s fine. After that comes 5.10, and then 5.11, and so on.&lt;br&gt;
6.0 is the first release of a major new evolution in the product, and it&amp;rsquo;s probably a &amp;ldquo;preview&amp;rdquo; release. 6.1 will be a bit better, with fewer bugs and more features nailed down, but it won&amp;rsquo;t be until maybe 6.5 that we get a &amp;ldquo;supported in production&amp;rdquo; release.&lt;br&gt;
All of this is a &lt;strong&gt;lot easier to keep track of&lt;/strong&gt; than vague &amp;ldquo;version&amp;rdquo; numbers like &amp;ldquo;April 2016 Production Preview.&amp;rdquo;&lt;br&gt;
And while we&amp;rsquo;re at it, let&amp;rsquo;s have a Get-PSVersionInfo cmdlet. It can wrap around the existing $PSVersionTable variable, of course, but it can also ping a web service on Microsoft.com to tell you what the &lt;em&gt;latest&lt;/em&gt; version is, what the &lt;em&gt;latest supported&lt;/em&gt; version is, and whether or not your current version is supported in production. OMG, that would be _wonderful. _&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>In Microsoft&rsquo;s brave new world of agile, more-frequent software releases, including numerous pre-release cycles&hellip; Microsoft needs to rethink the way it communicates versioning.<br>
Windows Management Framework (WMF) v5 has, for me, been pretty much the perfect example of what <em>not</em> to do, and the perfect example of Microsoft still shoehorning itself into old nomenclature that no longer fills the bill. I know a bunch of folks on the PowerShell team are probably still trying to figure out what works, too, so this isn&rsquo;t meant to be a hammer-on-&rsquo;em post, but WMF5&rsquo;s lifecycle was, from a versioning perspective, pretty hellish.<br>
We had several &ldquo;technology preview&rdquo; releases, which were simply named after their month of release. April 2015. November. Whatever. It was really difficult from within the product - e.g., via $PSVersionTable - to tell which one you were running, which made helping people difficult. None of these were supported in production until the &ldquo;WMF5 Production Preview&rdquo; released in late 2015, and in December we got &ldquo;RTM&rdquo; code. RTM means &ldquo;Released to Manufacturing,&rdquo; which is kind of absurd as a milestone, because there&rsquo;s literally zero actual manufacturing going on. It&rsquo;s just a word Microsoft is used to using. Windows 10 shipped with a production-supported version of WMF5, but it still wasn&rsquo;t &ldquo;final,&rdquo; meaning RTM WMF is better than what shipped with the RTM OS. God willing, what ships in Windows Server 2016 will be v5.1 or something, because if we get yet another 5.0 release folks are going to start throwing up their hands and quitting.<br>
Now that Microsoft&rsquo;s all lovey-huggy with open source and Linux and stuff, can we just copy what those guys do?<br>
Every time you release code, increment the version number. It&rsquo;s that simple. There&rsquo;s no &ldquo;production preview,&rdquo; there&rsquo;s just &ldquo;5.3.&rdquo; And you maintain a list of what&rsquo;s supported in production. If 5.3 isn&rsquo;t a production milestone, fine - say so. But it&rsquo;s still a real version, because it was released unto the world. The next release is 5.4. Then 5.5. And maybe 5.6 is supported in production, but once 5.7 is out, 5.6 remains supported for only 90 days. Or whatever. Just have a list of what&rsquo;s supported, and increment the version number every time you release it. 5.8 might only last a week before someone finds some heinous bug and releases 5.9 - that&rsquo;s fine. After that comes 5.10, and then 5.11, and so on.<br>
6.0 is the first release of a major new evolution in the product, and it&rsquo;s probably a &ldquo;preview&rdquo; release. 6.1 will be a bit better, with fewer bugs and more features nailed down, but it won&rsquo;t be until maybe 6.5 that we get a &ldquo;supported in production&rdquo; release.<br>
All of this is a <strong>lot easier to keep track of</strong> than vague &ldquo;version&rdquo; numbers like &ldquo;April 2016 Production Preview.&rdquo;<br>
And while we&rsquo;re at it, let&rsquo;s have a Get-PSVersionInfo cmdlet. It can wrap around the existing $PSVersionTable variable, of course, but it can also ping a web service on Microsoft.com to tell you what the <em>latest</em> version is, what the<em>latest supported</em> version is, and whether or not your current version is supported in production. OMG, that would be _wonderful. _</p><p>`PS C:&gt; Get-PSVersionInfo
Name Value</p><hr><p>PSVersion 5.8
ProductionOK False
LatestPSVersion 6.0
LatestProductionPSVer 5.9
`This tells me that I have 5.8, and it isn&rsquo;t supported in production at this time. I can get 5.9, which is supported in production, although there&rsquo;s a newer 6.0 which obviously isn&rsquo;t supported in production.<br>
So please.<a href="https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11226561-version-numbering-for-all-releases">Vote for this on UserVoice</a>.</p>
]]></content:encoded></item><item><title>PowerShell News Roundup (There's Been a Lot of it)</title><link>https://powershell.org/articles/2015-12-21-powershell-news-roundup-theres-been-a-lot-of-it/</link><guid>https://powershell.org/articles/2015-12-21-powershell-news-roundup-theres-been-a-lot-of-it/</guid><pubDate>Mon, 21 Dec 2015 18:37:50 +0000</pubDate><description>&lt;p&gt;There&amp;rsquo;ve been so many under-the-radar announcements and news bits about PowerShell, that I thought it&amp;rsquo;d be worth a quick start-of-the-week, pre-holiday roundup.&lt;br&gt;
First off, the big news is that **&lt;a href="http://blogs.msdn.com/b/powershell/archive/2015/12/16/windows-management-framework-wmf-5-0-rtm-is-now-available.aspx"&gt;Windows Management Framework v5 has been released to manufacturing (RTM)&lt;/a&gt;. **Not that there&amp;rsquo;s any real &amp;ldquo;manufacturing&amp;rdquo; anymore, but this means we&amp;rsquo;ve hit the milestone where it&amp;rsquo;s &amp;ldquo;done.&amp;rdquo; Now, if Microsoft is smart, whatever WMF ships with Win2016 will be &amp;ldquo;5.1&amp;rdquo; or something, so we can all keep track of what&amp;rsquo;s what. Fingers crossed on that.&lt;br&gt;
Next, and you may have missed this, &lt;strong&gt;Microsoft is moving away from Connect and over to UserVoice&lt;/strong&gt; for many products, and &lt;a href="http://blogs.msdn.com/b/powershell/archive/2015/12/14/improving-the-powershell-feedback-experience-with-uservoice.aspx"&gt;PowerShell is now amongst them&lt;/a&gt;. Spread the word on this, because feedback is super-important, the team _actually does listen, _and UserVoice is now where it&amp;rsquo;ll happen.&lt;br&gt;
In the continuing move to open source, the PowerShell team **&lt;a href="http://blogs.msdn.com/b/powershell/archive/2015/12/07/powershell-tests-released-on-github.aspx"&gt;released a bunch of their tests on GitHub&lt;/a&gt;. **These are some of the tests they use to test PowerShell itself, and the ability for everyone to now contribute to those means the team can produce more error free code for us. This is a big deal, and proves this isn&amp;rsquo;t your grandfather&amp;rsquo;s Microsoft anymore.&lt;br&gt;
The **&lt;a href="http://blogs.msdn.com/b/powershell/archive/2015/11/03/the-new-home-of-dsc-documentation.aspx"&gt;DSC Documentation has also been open sourced&lt;/a&gt;, **meaning we can all finally contribute to that. Yeah, we all know Microsoft should be producing their own docs - and they are - but this lets us correct errors, add examples and expansions, and fill in the gaps Microsoft may have to leave. They&amp;rsquo;re not a bundle of infinite resources, after all, and this finally lets us help each other in a more effective way.&lt;br&gt;
The &lt;strong&gt;&lt;a href="http://powershellsummit.org"&gt;PowerShell + DevOps Global Summit 2016&lt;/a&gt;&lt;/strong&gt; is about 1/3 sold-out. Currently, only 4-day registration is available. In February, we&amp;rsquo;ll begin offering any remaining seats for 3-day attendance as well as 4-day. We don&amp;rsquo;t recommend waiting much longer, because when we hit most people&amp;rsquo;s new fiscal year next month, it&amp;rsquo;ll be downhill to &amp;ldquo;sold out&amp;rdquo; again. Remember that registration cuts off at the beginning of March 2016, too.&lt;br&gt;
Finally, &lt;strong&gt;the Scripting Games puzzles&lt;/strong&gt; continue to be posted at the start of each month (usually the first Saturday). We&amp;rsquo;re actively looking for a moderator to take over the process of collecting puzzle submissions from the community, coordinating puzzle and solution posting, and reviewing community submissions for noteworthy ones to call out. If you&amp;rsquo;re interested, drop an e-mail to admin here at PowerShell.org. We already have content for January and February 2016, and are also looking for puzzle submissions. Drop an e-mail if you&amp;rsquo;d like to contribute a puzzle and a solution.&lt;br&gt;
Happy Holidays from everyone here at PowerShell.org, and we wish you all the best in the coming new year!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>There&rsquo;ve been so many under-the-radar announcements and news bits about PowerShell, that I thought it&rsquo;d be worth a quick start-of-the-week, pre-holiday roundup.<br>
First off, the big news is that **<a href="http://blogs.msdn.com/b/powershell/archive/2015/12/16/windows-management-framework-wmf-5-0-rtm-is-now-available.aspx">Windows Management Framework v5 has been released to manufacturing (RTM)</a>. **Not that there&rsquo;s any real &ldquo;manufacturing&rdquo; anymore, but this means we&rsquo;ve hit the milestone where it&rsquo;s &ldquo;done.&rdquo; Now, if Microsoft is smart, whatever WMF ships with Win2016 will be &ldquo;5.1&rdquo; or something, so we can all keep track of what&rsquo;s what. Fingers crossed on that.<br>
Next, and you may have missed this, <strong>Microsoft is moving away from Connect and over to UserVoice</strong> for many products, and<a href="http://blogs.msdn.com/b/powershell/archive/2015/12/14/improving-the-powershell-feedback-experience-with-uservoice.aspx">PowerShell is now amongst them</a>. Spread the word on this, because feedback is super-important, the team _actually does listen, _and UserVoice is now where it&rsquo;ll happen.<br>
In the continuing move to open source, the PowerShell team **<a href="http://blogs.msdn.com/b/powershell/archive/2015/12/07/powershell-tests-released-on-github.aspx">released a bunch of their tests on GitHub</a>. **These are some of the tests they use to test PowerShell itself, and the ability for everyone to now contribute to those means the team can produce more error free code for us. This is a big deal, and proves this isn&rsquo;t your grandfather&rsquo;s Microsoft anymore.<br>
The **<a href="http://blogs.msdn.com/b/powershell/archive/2015/11/03/the-new-home-of-dsc-documentation.aspx">DSC Documentation has also been open sourced</a>, **meaning we can all finally contribute to that. Yeah, we all know Microsoft should be producing their own docs - and they are - but this lets us correct errors, add examples and expansions, and fill in the gaps Microsoft may have to leave. They&rsquo;re not a bundle of infinite resources, after all, and this finally lets us help each other in a more effective way.<br>
The <strong><a href="http://powershellsummit.org">PowerShell + DevOps Global Summit 2016</a></strong> is about 1/3 sold-out. Currently, only 4-day registration is available. In February, we&rsquo;ll begin offering any remaining seats for 3-day attendance as well as 4-day. We don&rsquo;t recommend waiting much longer, because when we hit most people&rsquo;s new fiscal year next month, it&rsquo;ll be downhill to &ldquo;sold out&rdquo; again. Remember that registration cuts off at the beginning of March 2016, too.<br>
Finally, <strong>the Scripting Games puzzles</strong> continue to be posted at the start of each month (usually the first Saturday). We&rsquo;re actively looking for a moderator to take over the process of collecting puzzle submissions from the community, coordinating puzzle and solution posting, and reviewing community submissions for noteworthy ones to call out. If you&rsquo;re interested, drop an e-mail to admin here at PowerShell.org. We already have content for January and February 2016, and are also looking for puzzle submissions. Drop an e-mail if you&rsquo;d like to contribute a puzzle and a solution.<br>
Happy Holidays from everyone here at PowerShell.org, and we wish you all the best in the coming new year!</p>
]]></content:encoded></item><item><title>Recap of the Dec 2015 PowerShell Editor Services Hack Week</title><link>https://powershell.org/articles/2015-12-15-recap-of-the-dec-2015-powershell-editor-services-hack-week/</link><guid>https://powershell.org/articles/2015-12-15-recap-of-the-dec-2015-powershell-editor-services-hack-week/</guid><pubDate>Wed, 16 Dec 2015 01:30:17 +0000</pubDate><description>&lt;p&gt;Thanks to all those who participated in the PowerShell Editor Services Hack Week last week!  Much progress was made on fixing bugs and adding new features to both &lt;a href="https://github.com/PowerShell/PowerShellEditorServices"&gt;PowerShell Editor Services&lt;/a&gt; and the &lt;a href="https://github.com/PowerShell/vscode-powershell"&gt;PowerShell extension for Visual Studio Code&lt;/a&gt;.  Here&amp;rsquo;s a quick summary of the contributions that were made during the week:&lt;br&gt;
&lt;strong&gt;Variable Display Improvements in the Debugger&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://twitter.com/r_keith_hill"&gt;Keith Hill&lt;/a&gt; made many great improvements to how we display variable contents in the Visual Studio Code debugger.  First of all, he added support for variable scopes other than just &amp;ldquo;Local&amp;rdquo; as we had before.  You can now inspect variables from both the Global and Script scopes.  You will also see a special &amp;ldquo;Auto&amp;rdquo; section which filters the set of variables down to those that were defined in the current scope.  This is really helpful for quickly checking the state of the variables in your functions!&lt;br&gt;
&lt;a href="https://powershell.org/wp-content/uploads/2015/12/keith_auto.png"&gt;&lt;img src="https://powershell.org/wp-content/uploads/2015/12/keith_auto.png" alt="keith_auto"&gt;&lt;/a&gt;&lt;br&gt;
He also added greatly improved the variable value display for collections such as arrays and dictionaries and also objects which implement the ToString() method in .NET.  You will now see much greater detail for these variables in the debugger:&lt;br&gt;
&lt;a href="https://powershell.org/wp-content/uploads/2015/12/keith_vars.png"&gt;&lt;img src="https://powershell.org/wp-content/uploads/2015/12/keith_vars.png" alt="keith_vars"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;New Expand Aliases Command&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://twitter.com/dfinke"&gt;Doug Finke&lt;/a&gt; contributed a new &amp;ldquo;Expand Aliases&amp;rdquo; command which searches your script file or selection for the use of cmdlet aliases.  For any alias it finds, it replaces the text with the full command name.  This is helpful for developers who want to quickly write out scripts using aliases but resolve them to their command names before committing to source control.&lt;br&gt;
Here&amp;rsquo;s a GIF of the feature in action (click to play!):&lt;br&gt;
&lt;a href="https://powershell.org/wp-content/uploads/2015/12/vscodeExpandAlias2.gif"&gt;&lt;img src="https://powershell.org/wp-content/uploads/2015/12/vscodeExpandAlias2-628x360.gif" alt="Demo of Expand Alias in VS Code"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Sublime Text Editor Integration&lt;/strong&gt;&lt;br&gt;
Work on the integration of PowerShell Editor Services in Sublime Text has progressed quite well this week.  The basic protocol implementation is now working, enabling language features to be integrated over time.  I&amp;rsquo;ve also implemented basic file management support so that opened files are sent to Editor Services for syntax checking and semantic analysis.  From this point it&amp;rsquo;s just a matter of integrating the language features of PowerShell Editor Services into Sublime&amp;rsquo;s UI using its &lt;a href="http://www.sublimetext.com/docs/3/api_reference.html"&gt;plugin API&lt;/a&gt;.&lt;br&gt;
Check out the current code in the &lt;a href="https://github.com/daviwil/SublimePowerShell/tree/editor-services"&gt;editor-services branch of my fork&lt;/a&gt; of the PowerShell Sublime Text package.  Once this effort is stable enough for an initial release, I&amp;rsquo;ll be submitting a PR back to the &lt;a href="https://github.com/SublimeText/PowerShell"&gt;original PowerShell Sublime Text package repo&lt;/a&gt; and future work will continue there.&lt;br&gt;
&lt;strong&gt;Atom Editor Integration&lt;/strong&gt;&lt;br&gt;
Some work was started on an integration with the Atom editor but it was quickly determine that Atom&amp;rsquo;s APIs for language features were to sparse to make quick progress.  However, with the experience gained from the Sublime Text integration, future work on the Atom integration should be much easier.  Expect to see more effort in this area in the first half of 2016.&lt;br&gt;
&lt;strong&gt;Miscellaneous Improvements&lt;/strong&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Thanks to all those who participated in the PowerShell Editor Services Hack Week last week!  Much progress was made on fixing bugs and adding new features to both<a href="https://github.com/PowerShell/PowerShellEditorServices">PowerShell Editor Services</a> and the<a href="https://github.com/PowerShell/vscode-powershell">PowerShell extension for Visual Studio Code</a>.  Here&rsquo;s a quick summary of the contributions that were made during the week:<br><strong>Variable Display Improvements in the Debugger</strong><br><a href="https://twitter.com/r_keith_hill">Keith Hill</a> made many great improvements to how we display variable contents in the Visual Studio Code debugger.  First of all, he added support for variable scopes other than just &ldquo;Local&rdquo; as we had before.  You can now inspect variables from both the Global and Script scopes.  You will also see a special &ldquo;Auto&rdquo; section which filters the set of variables down to those that were defined in the current scope.  This is really helpful for quickly checking the state of the variables in your functions!<br><a href="https://powershell.org/wp-content/uploads/2015/12/keith_auto.png"><img src="https://powershell.org/wp-content/uploads/2015/12/keith_auto.png" alt="keith_auto"/><br>
He also added greatly improved the variable value display for collections such as arrays and dictionaries and also objects which implement the ToString() method in .NET.  You will now see much greater detail for these variables in the debugger:<br><a href="https://powershell.org/wp-content/uploads/2015/12/keith_vars.png"><img src="https://powershell.org/wp-content/uploads/2015/12/keith_vars.png" alt="keith_vars"/><br><strong>New Expand Aliases Command</strong><br><a href="https://twitter.com/dfinke">Doug Finke</a> contributed a new &ldquo;Expand Aliases&rdquo; command which searches your script file or selection for the use of cmdlet aliases.  For any alias it finds, it replaces the text with the full command name.  This is helpful for developers who want to quickly write out scripts using aliases but resolve them to their command names before committing to source control.<br>
Here&rsquo;s a GIF of the feature in action (click to play!):<br><a href="https://powershell.org/wp-content/uploads/2015/12/vscodeExpandAlias2.gif"><img src="https://powershell.org/wp-content/uploads/2015/12/vscodeExpandAlias2-628x360.gif" alt="Demo of Expand Alias in VS Code"/><br><strong>Sublime Text Editor Integration</strong><br>
Work on the integration of PowerShell Editor Services in Sublime Text has progressed quite well this week.  The basic protocol implementation is now working, enabling language features to be integrated over time.  I&rsquo;ve also implemented basic file management support so that opened files are sent to Editor Services for syntax checking and semantic analysis.  From this point it&rsquo;s just a matter of integrating the language features of PowerShell Editor Services into Sublime&rsquo;s UI using its<a href="http://www.sublimetext.com/docs/3/api_reference.html">plugin API</a>.<br>
Check out the current code in the<a href="https://github.com/daviwil/SublimePowerShell/tree/editor-services">editor-services branch of my fork</a> of the PowerShell Sublime Text package.  Once this effort is stable enough for an initial release, I&rsquo;ll be submitting a PR back to the<a href="https://github.com/SublimeText/PowerShell">original PowerShell Sublime Text package repo</a> and future work will continue there.<br><strong>Atom Editor Integration</strong><br>
Some work was started on an integration with the Atom editor but it was quickly determine that Atom&rsquo;s APIs for language features were to sparse to make quick progress.  However, with the experience gained from the Sublime Text integration, future work on the Atom integration should be much easier.  Expect to see more effort in this area in the first half of 2016.<br><strong>Miscellaneous Improvements</strong></p><ul><li><a href="https://github.com/mswietlicki">Mateusz Świetlicki</a> improved the &ldquo;Run Selection&rdquo; command so that it will run the line that the user&rsquo;s cursor is sitting on if there is no text selection</li><li>The default set of Script Analyzer rules used for semantic analysis has been reduced to provide helpful hints without giving too much feedback.  (In the future the rule set will be completely configurable.)</li><li>A set of bugs around code completion text replacements were fixed so that using IntelliSense no longer eats your code 🙂</li></ul><p><strong>New Releases</strong><br>
As promised, I&rsquo;ve prepared new releases of both PowerShell Editor Services and the PowerShell extension for Visual Studio Code which contain all of the contributions made during these week.  The new NuGet packages for PowerShell Editor Services have been released on NuGet today (see the following changelog link).  The Visual Studio Code extension will be released once a publishing issue has been resolved.<br>
Here are the changelog entries for both releases:</p><ul><li><a href="https://github.com/PowerShell/PowerShellEditorServices/blob/master/CHANGELOG.md#030">PowerShell Editor Services 0.3.0</a></li><li><a href="https://github.com/PowerShell/vscode-powershell/blob/master/CHANGELOG.md#030">PowerShell for Visual Studio Code 0.3.0</a></li></ul><p><strong>Looking Ahead</strong><br>
Overall I am very impressed with the work that we accomplished this week even though there wasn&rsquo;t a large amount of contributors.  My guess is that PowerShell fans would feel more comfortable contributing by writing PowerShell rather than C#.  I&rsquo;ve got some ideas on how to make this possible in the future so keep an eye out for another Hack Week next year!<br>
Thanks again to all the contributors and to all the users of these projects!</p>
]]></content:encoded></item><item><title>2015-December Scripting Games Puzzle</title><link>https://powershell.org/articles/2015-12-05-december-2015-scripting-games-puzzle/</link><guid>https://powershell.org/articles/2015-12-05-december-2015-scripting-games-puzzle/</guid><pubDate>Sat, 05 Dec 2015 16:33:35 +0000</pubDate><description>&lt;p&gt;Our December 2015 puzzle comes from PowerShell.org board member Jeff Hicks, who wanted to share a little holiday fun for the season.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Our December 2015 puzzle comes from PowerShell.org board member Jeff Hicks, who wanted to share a little holiday fun for the season.</p><h2 id="instructions" class="ps-heading"><strong>Instructions</strong><a class="ps-heading-anchor" href="#instructions" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month&rsquo;s puzzle. You can find them all at<a href="https://powershell.org/category/announcements/scripting-games/">https://powershell.org/category/announcements/scripting-games/</a>. Many puzzles will include optional challenges, that you can use to really push your skills.<br><strong>To participate</strong>, add your solution to a public Gist (<a href="http://gist.github.com">http://gist.github.com</a>; you&rsquo;ll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post. 
**Only post one entry per person. **However, remember that you can always go back and edit your Gist. We&rsquo;ll always pull the most recent one when we display it, so there&rsquo;s no need to post multiple entries if you want to make an edit.</p><p>Don&rsquo;t forget the <a href="https://powershell.org/?p=2574">main rules and purpose of these monthly puzzles</a>, including the fact that you won&rsquo;t receive individual scoring or commentary on your entry.<br><strong>User groups are encouraged to work together</strong> on the monthly puzzles. User group leaders should submit their group&rsquo;s best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most &ldquo;favorite&rdquo; entries of the year will win a grand prize from PowerShell.org.</p><h2 id="our-puzzle" class="ps-heading"><strong>Our Puzzle</strong><a class="ps-heading-anchor" href="#our-puzzle" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The 12 Days of PowerShell! It is that time of year again. Time to think about sugar plums, nutcrackers and PowerShell. Well, maybe we think about that last one all year long. Because I am a giving kind of guy, I thought I‘d give you a PowerShell present. I like to think my present is one that continues to give as it involves learning. I have a small set of challenges that shouldn’t be too difficult, should be fun and in the end educational.<br>
In PowerShell, and I think the ISE might work best for this, create this here-string.</p><p><code>$list = @" 1 Partridge in a pear tree 2 Turtle Doves 3 French Hens 4 Calling Birds 5 Golden Rings 6 Geese a laying 7 Swans a swimming 8 Maids a milking 9 Ladies dancing 10 Lords a leaping 11 Pipers piping 12 Drummers drumming "@</code>The variable $list is technically a single string with a length of 226. Using $list, see if you can solve these questions or challenges. I have written these in such a way that the solutions build on earlier answers.</p><ol><li>Split $list into a collection of entries, as you typed them, and sort the results by length. As a bonus, see if you can sort the length without the number.</li><li>Turn each line into a custom object with a properties for Count and Item.</li><li>Using your custom objects, what is the total number of all bird-related items?</li><li>What is the total count of all items?</li></ol><p>For those of you who have been extra good this year, I have a bonus challenge (or maybe you’ll think it is a lump of coal). Some people interpret The 12 Days of Christmas cumulatively. That is, on day 1 your true love got 1 item. On the second day, your true love got 2 turtle doves AND a partridge in a pair tree. This is in addition to the previous day’s presents. If you were to manually plot this in PowerShell you might do:</p><p><code>$t = 0 $t += 1 $t += 1+2 $t += 1+2+3</code>…<br>
But you should be more elegant. Using PowerShell what is the total number of cumulative gifts?</p>]]></content:encoded></item><item><title>A Real-World DevOps Implementation – and Food for Thought</title><link>https://powershell.org/articles/2015-12-03-a-real-world-devops-implementation-and-food-for-thought/</link><guid>https://powershell.org/articles/2015-12-03-a-real-world-devops-implementation-and-food-for-thought/</guid><pubDate>Thu, 03 Dec 2015 21:02:23 +0000</pubDate><description>&lt;p&gt;Want to see what a real-world, functional, production-grade DevOps environment looks like?&lt;br&gt;
Look no further than Amazon Web Services&amp;rsquo; Elastic Beanstalk (EBS). EBS is a neat combination of their EC2 IaaS product, S3 storage, and some DevOps magic. From a working perspective, it goes something like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Developer checks code into Git. A portion of this code is actually a set of EBS directives, outlining changes that need to be made to the base operating environment. This can include things like setting environment variables, installing packages, and so on.&lt;/li&gt;
&lt;li&gt;Someone indicates that what&amp;rsquo;s in GitHub is ready for release. You can do this by pushing a button in your AWS console, or by making a call to AWS&amp;rsquo; REST APIs. It&amp;rsquo;s pretty easy to automat this step.&lt;/li&gt;
&lt;li&gt;AWS spins up virtual machines, and reads the EBS directives to get that environment configured the way it&amp;rsquo;s supposed to be. The code is loaded from Git into the VMs. The VMs are registered with AWS&amp;rsquo; load balancer, and whatever old VMs were running are de-registered and destroyed. Poof, your app is up and running.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This model accomplishes the basic goal of DevOps, which is to shorten the path between developers and users. So where&amp;rsquo;s the &amp;ldquo;Ops&amp;rdquo; role in all this? Amazon did it. Their contribution to ops was to create all the automation necessary to make these steps happen. And the beauty of this model is that it supports tiered environments. For example, the above three steps might serve to spin up a testing environment, where you then run automated tests to validate the code. If the code validates, it&amp;rsquo;s pushed into a production tier - all automatically - running on a separate EBS application. So from check-in to in-production is entirely automated, and the process can be performed consistently every single time.&lt;br&gt;
Now&amp;hellip; what would this look like in a Windows world?&lt;br&gt;
In Step 1, imagine that instead of a set of EBS configuration directives - which are just text files - your developers create DSC configurations. Yes, the developers. After all, they&amp;rsquo;re the ones who are coding for the environment, so that DSC configuration documents what they need the environment to look like. You might have a second DSC configuration that documents corporate standards for security, manageability, and so on. Whatever.&lt;br&gt;
Step 3 might be Microsoft Azure Pack or System Center Virtual Machine Manager, told - perhaps via an SMA automation script - to spin up the new VMs from a base OS image. The DSC configurations are run to produce a MOF, which is injected into the new VM. The developer&amp;rsquo;s code is deployed to the VM. The VM is registered with DNS and perhaps a load balancer, which provide access to it.&lt;br&gt;
There are a couple of important details that I&amp;rsquo;ve glossed over a bit. Jeffrey Snover is fond saying, &amp;ldquo;treat servers like cattle, not pets.&amp;rdquo; But servers by their nature have to have a few unique pieces of information, right? Well&amp;hellip; yes and no. For all I know, cows make up names for themselves. I just don&amp;rsquo;t care. Take IP addresses, for example. You shouldn&amp;rsquo;t be assigning static IP addresses to servers; your DHCP system should be highly available, fault tolerant, and set up to handle servers. As you spin up a new VM, you can obviously have it register itself with DNS, so the IP address is mapped to a hostname. And speaking of that hostname - you as a human never need to know it. Or you shouldn&amp;rsquo;t. Windows will make up a host name for itself as the VM spins up, and you can - through your automation scripts - capture that host name. That lets you set up DNS CNAME records, a load balancer, or whatever else. The point is that while the server may have made up a name for itself, you don&amp;rsquo;t care. Nobody will ever address that server by its host name - they&amp;rsquo;ll use an abstraction, like a load-balanced name, or a CNAME, or something else. Your automation scripts handle the mapping for you. When a VM is spun down, automation de-registers the dying host&amp;rsquo;s name from whatever, closing the lifecycle loop.&lt;br&gt;
Interestingly, you could probably do this exact model, today, with a huge number of applications in your environment. Why bother? I mean, this model makes sense in web apps where you&amp;rsquo;re constantly spinning up and destroying VMs, but what about the majority of your apps that just run all the time without change? Well, this same model could spin them up in a disaster recovery scenario. Or in testing environments, which are constantly re-created to provide &amp;ldquo;clean&amp;rdquo; tests. Yes, it&amp;rsquo;s a lot of &lt;em&gt;investment&lt;/em&gt; up front to make it all work, but once it&amp;rsquo;s set up it just runs itself.&lt;br&gt;
And that&amp;rsquo;s what DevOps looks like.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Want to see what a real-world, functional, production-grade DevOps environment looks like?<br>
Look no further than Amazon Web Services&rsquo; Elastic Beanstalk (EBS). EBS is a neat combination of their EC2 IaaS product, S3 storage, and some DevOps magic. From a working perspective, it goes something like this:</p><ol><li>Developer checks code into Git. A portion of this code is actually a set of EBS directives, outlining changes that need to be made to the base operating environment. This can include things like setting environment variables, installing packages, and so on.</li><li>Someone indicates that what&rsquo;s in GitHub is ready for release. You can do this by pushing a button in your AWS console, or by making a call to AWS&rsquo; REST APIs. It&rsquo;s pretty easy to automat this step.</li><li>AWS spins up virtual machines, and reads the EBS directives to get that environment configured the way it&rsquo;s supposed to be. The code is loaded from Git into the VMs. The VMs are registered with AWS&rsquo; load balancer, and whatever old VMs were running are de-registered and destroyed. Poof, your app is up and running.</li></ol><p>This model accomplishes the basic goal of DevOps, which is to shorten the path between developers and users. So where&rsquo;s the &ldquo;Ops&rdquo; role in all this? Amazon did it. Their contribution to ops was to create all the automation necessary to make these steps happen. And the beauty of this model is that it supports tiered environments. For example, the above three steps might serve to spin up a testing environment, where you then run automated tests to validate the code. If the code validates, it&rsquo;s pushed into a production tier - all automatically - running on a separate EBS application. So from check-in to in-production is entirely automated, and the process can be performed consistently every single time.<br>
Now&hellip; what would this look like in a Windows world?<br>
In Step 1, imagine that instead of a set of EBS configuration directives - which are just text files - your developers create DSC configurations. Yes, the developers. After all, they&rsquo;re the ones who are coding for the environment, so that DSC configuration documents what they need the environment to look like. You might have a second DSC configuration that documents corporate standards for security, manageability, and so on. Whatever.<br>
Step 3 might be Microsoft Azure Pack or System Center Virtual Machine Manager, told - perhaps via an SMA automation script - to spin up the new VMs from a base OS image. The DSC configurations are run to produce a MOF, which is injected into the new VM. The developer&rsquo;s code is deployed to the VM. The VM is registered with DNS and perhaps a load balancer, which provide access to it.<br>
There are a couple of important details that I&rsquo;ve glossed over a bit. Jeffrey Snover is fond saying, &ldquo;treat servers like cattle, not pets.&rdquo; But servers by their nature have to have a few unique pieces of information, right? Well&hellip; yes and no. For all I know, cows make up names for themselves. I just don&rsquo;t care. Take IP addresses, for example. You shouldn&rsquo;t be assigning static IP addresses to servers; your DHCP system should be highly available, fault tolerant, and set up to handle servers. As you spin up a new VM, you can obviously have it register itself with DNS, so the IP address is mapped to a hostname. And speaking of that hostname - you as a human never need to know it. Or you shouldn&rsquo;t. Windows will make up a host name for itself as the VM spins up, and you can - through your automation scripts - capture that host name. That lets you set up DNS CNAME records, a load balancer, or whatever else. The point is that while the server may have made up a name for itself, you don&rsquo;t care. Nobody will ever address that server by its host name - they&rsquo;ll use an abstraction, like a load-balanced name, or a CNAME, or something else. Your automation scripts handle the mapping for you. When a VM is spun down, automation de-registers the dying host&rsquo;s name from whatever, closing the lifecycle loop.<br>
Interestingly, you could probably do this exact model, today, with a huge number of applications in your environment. Why bother? I mean, this model makes sense in web apps where you&rsquo;re constantly spinning up and destroying VMs, but what about the majority of your apps that just run all the time without change? Well, this same model could spin them up in a disaster recovery scenario. Or in testing environments, which are constantly re-created to provide &ldquo;clean&rdquo; tests. Yes, it&rsquo;s a lot of <em>investment</em> up front to make it all work, but once it&rsquo;s set up it just runs itself.<br>
And that&rsquo;s what DevOps looks like.</p>
]]></content:encoded></item><item><title>Join us for the PowerShell Editor Services Hack Week, Dec 6-13!</title><link>https://powershell.org/articles/2015-12-03-powershell-editor-services-hack-week-dec-6-13/</link><guid>https://powershell.org/articles/2015-12-03-powershell-editor-services-hack-week-dec-6-13/</guid><pubDate>Thu, 03 Dec 2015 15:59:08 +0000</pubDate><description>&lt;p&gt;Do you wish your favorite editor had better PowerShell editing support?  Do you have a great idea for a new feature for the PowerShell extension in Visual Studio Code?  We’re dedicating next week, &lt;strong&gt;December 6th through 13th&lt;/strong&gt; (Sunday through next Sunday), to hacking together on new features to enable better PowerShell support in any editor!&lt;br&gt;
Here’s the plan:&lt;br&gt;
&lt;strong&gt;On Sunday, December 6th at 11AM-12PM PST (7-8PM GMT)&lt;/strong&gt; I’ll host a &lt;a href="https://www.crowdcast.io/e/pseditorhackweek1215"&gt;Crowdcast event&lt;/a&gt; to give an overview of PowerShell Editor Services, the PowerShell extension for VS Code, and other general ideas for contributions that people can make.  Participants can join to ask questions and discuss potential ideas so that we can get the ball rolling.&lt;br&gt;
Once hacking has started, we’ll hang out together in the #editors channel of the &lt;a href="http://slack.poshcode.org/"&gt;PowerShell Slack Community&lt;/a&gt; so that everyone can get help on their contributions.  We’ll be using these discussions to help flesh out documentation about these projects using the &lt;a href="https://github.com/PowerShell/PowerShellEditorServices/wiki"&gt;GitHub Wiki&lt;/a&gt;.  Every question asked will be helpful so don’t be shy!&lt;br&gt;
On the week following our hacktivities, I’ll release new builds of PowerShell Editor Services and the Visual Studio Code extension containing our collective efforts.  I’ll also post a follow-up report here on PowerShell.org with details about all the contributions that were made in this time.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Do you wish your favorite editor had better PowerShell editing support?  Do you have a great idea for a new feature for the PowerShell extension in Visual Studio Code?  We’re dedicating next week,<strong>December 6th through 13th</strong> (Sunday through next Sunday), to hacking together on new features to enable better PowerShell support in any editor!<br>
Here’s the plan:<br><strong>On Sunday, December 6th at 11AM-12PM PST (7-8PM GMT)</strong> I’ll host a<a href="https://www.crowdcast.io/e/pseditorhackweek1215">Crowdcast event</a> to give an overview of PowerShell Editor Services, the PowerShell extension for VS Code, and other general ideas for contributions that people can make.  Participants can join to ask questions and discuss potential ideas so that we can get the ball rolling.<br>
Once hacking has started, we’ll hang out together in the #editors channel of the<a href="http://slack.poshcode.org/">PowerShell Slack Community</a> so that everyone can get help on their contributions.  We’ll be using these discussions to help flesh out documentation about these projects using the<a href="https://github.com/PowerShell/PowerShellEditorServices/wiki">GitHub Wiki</a>.  Every question asked will be helpful so don’t be shy!<br>
On the week following our hacktivities, I’ll release new builds of PowerShell Editor Services and the Visual Studio Code extension containing our collective efforts.  I’ll also post a follow-up report here on PowerShell.org with details about all the contributions that were made in this time.</p><h3 id="ways-to-contribute" class="ps-heading">Ways to Contribute<a class="ps-heading-anchor" href="#ways-to-contribute" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>There are many places where you can contribute even if you don’t have time to write code.  Here are some ideas:<br><strong>Improve PowerShell Editor Services</strong></p><ul><li>Write and review documentation for the .NET and JSON APIs</li><li>Help provide good PowerShell script examples for validating language intelligence features</li><li>Add language features support for files in a PowerShell module project (<a href="https://github.com/PowerShell/PowerShellEditorServices/issues/11">issue #11</a>)</li><li>Add language feature support for PowerShell classes (<a href="https://github.com/PowerShell/PowerShellEditorServices/issues/14">issue #14</a>)</li><li>Check out the<a href="https://github.com/PowerShell/PowerShellEditorServices/labels/help-wanted">help wanted issue label</a> for more ideas!</li></ul><p><strong>Improve the PowerShell extension for Visual Studio Code</strong></p><ul><li>Create new VS Code “command” features which provide helpful functionality for PowerShell</li><li>File bugs for cool features you’d like to see or examples of things that don’t work well yet</li><li>Help improve syntax highlighting for PowerShell code (issues<a href="https://github.com/PowerShell/vscode-powershell/issues/26">#26</a> and<a href="https://github.com/PowerShell/PowerShellEditorServices/issues/52">#52</a>)</li><li>Add features or fix bugs with the<a href="https://github.com/PowerShell/vscode-powershell/labels/help-wanted">help wanted issue label</a></li></ul><p><strong>Add new editor integrations for PowerShell Editor Services</strong></p><ul><li><p><a href="https://github.com/SublimeText/PowerShell">Sublime Text</a></p></li><li><p><a href="https://github.com/jugglingnutcase/language-powershell">Atom</a></p></li><li><p><a href="https://github.com/jschaf/powershell.el">Emacs</a></p></li><li><p><a href="https://github.com/PProvost/vim-ps1">Vim</a></p></li><li><p>… any other editor you’re interested in!</p></li><li><p>Use any of these projects during the hack week and provide feedback!</p></li></ul><h3 id="want-to-participate" class="ps-heading">Want to participate?<a class="ps-heading-anchor" href="#want-to-participate" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>If you&rsquo;re interested in participating, check out the <a href="https://github.com/PowerShell/PowerShellEditorServices/wiki/PowerShell-Editor-Services-Hack-Week---Dec-2015">PowerShell Editor Services Hack Week wiki page</a> and add your name to the participants list. I’ll be tracking the latest details about the event there next week.  Don’t forget to RSVP for the<a href="https://www.crowdcast.io/e/pseditorhackweek1215">Crowdcast event</a> to be reminded when it begins.<br>
Looking forward to hacking with you all next week!<br>
David Wilson<a href="https://twitter.com/daviwil">@daviwil<br/> Software Engineer at Microsoft</p>
]]></content:encoded></item><item><title>The Popular Week of PowerShell Blogging is back! #PSBlogWeek</title><link>https://powershell.org/articles/2015-11-30-the-popular-week-of-powershell-blogging-is-back-psblogweek/</link><guid>https://powershell.org/articles/2015-11-30-the-popular-week-of-powershell-blogging-is-back-psblogweek/</guid><pubDate>Mon, 30 Nov 2015 14:00:28 +0000</pubDate><description>&lt;p&gt;Back by popular demand is the week-long coordination of blog posts on a single PowerShell topic known as &lt;a href="https://twitter.com/hashtag/PSBlogWeek?src=hash"&gt;#PSBlogWeek&lt;/a&gt;! This week, 5 hand-picked bloggers will be writing informative content around the topic of logging.&lt;br&gt;
The daily schedule for this week is as follows:&lt;br&gt;
Monday (Jason Wasser &lt;a href="https://twitter.com/wasserja"&gt;@wasserja&lt;/a&gt;) - &lt;a href="http://mrautomaton.com/2015/11/30/psblogweek-building-readable-text-log-files/"&gt;Building Readable Text Log Files&lt;/a&gt;&lt;br&gt;
Tuesay (Thom Schumacher &lt;a href="https://twitter.com/driberif"&gt;@driberif&lt;/a&gt;) - &lt;a href="https://crshnbrn66.wordpress.com/2015/11/30/slicing-and-dicing-log-files/"&gt;Slicing and Dicing Text Log Files&lt;/a&gt;&lt;br&gt;
Wednesday (Jaap Brasser &lt;a href="https://twitter.com/jaap_brasser"&gt;@jaap_brasser&lt;/a&gt;) - &lt;a href="http://www.jaapbrasser.com/psblogweek-powershell-logging-in-the-windows-event-log"&gt;PowerShell Logging in the Windows Event Log&lt;/a&gt;&lt;br&gt;
Thursday (Adam Platt &lt;a href="https://twitter.com/platta"&gt;@platta&lt;/a&gt;) - &lt;a href="http://www.plattsoft.net/2015/12/03/reading-the-event-log-with-windows-powershell"&gt;Reading Events from Event Logs&lt;/a&gt;&lt;br&gt;
Friday - (Adam Bertram &lt;a href="https://www.twitter.com/adbertram"&gt;@adbertram&lt;/a&gt;) - &lt;a href="http://www.adamtheautomator.com/building-logs-for-cmtrace-powershell/"&gt;Building Logs for CMTrace&lt;/a&gt;&lt;br&gt;
A big thanks to June Blender (&lt;a href="https://twitter.com/juneb_get_help"&gt;@juneb_get_help&lt;/a&gt;) for her help in editing these posts.&lt;br&gt;
If you&amp;rsquo;d like to download an eBook containing a nicely laid out compilation of all the content provided this week, head over to &lt;a href="http://www.adamtheautomator.com/psblogweek-ebook"&gt;adamtheautomator.com&lt;/a&gt; to snag a copy. Feel free to share it wherever you&amp;rsquo;d like. Consider it public domain.&lt;br&gt;
If you missed our last #PSBlogWeek, download the eBook to bone up on &lt;a href="https://powershell.org/wp-content/uploads/2015/11/PowerShell-Blog-Week-Advanced-Functions-Bertram-Blender-Cat-Hicks-Prox1.pdf"&gt;everything you need to know about PowerShell advanced functions&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Back by popular demand is the week-long coordination of blog posts on a single PowerShell topic known as<a href="https://twitter.com/hashtag/PSBlogWeek?src=hash">#PSBlogWeek</a>! This week, 5 hand-picked bloggers will be writing informative content around the topic of logging.<br>
The daily schedule for this week is as follows:<br>
Monday (Jason Wasser<a href="https://twitter.com/wasserja">@wasserja</a>) -<a href="http://mrautomaton.com/2015/11/30/psblogweek-building-readable-text-log-files/">Building Readable Text Log Files</a><br>
Tuesay (Thom Schumacher<a href="https://twitter.com/driberif">@driberif</a>) -<a href="https://crshnbrn66.wordpress.com/2015/11/30/slicing-and-dicing-log-files/">Slicing and Dicing Text Log Files</a><br>
Wednesday (Jaap Brasser<a href="https://twitter.com/jaap_brasser">@jaap_brasser</a>) -<a href="http://www.jaapbrasser.com/psblogweek-powershell-logging-in-the-windows-event-log">PowerShell Logging in the Windows Event Log</a><br>
Thursday (Adam Platt<a href="https://twitter.com/platta">@platta</a>) -<a href="http://www.plattsoft.net/2015/12/03/reading-the-event-log-with-windows-powershell">Reading Events from Event Logs</a><br>
Friday - (Adam Bertram<a href="https://www.twitter.com/adbertram">@adbertram</a>) -<a href="http://www.adamtheautomator.com/building-logs-for-cmtrace-powershell/">Building Logs for CMTrace</a><br>
A big thanks to June Blender (<a href="https://twitter.com/juneb_get_help">@juneb_get_help</a>) for her help in editing these posts.<br>
If you&rsquo;d like to download an eBook containing a nicely laid out compilation of all the content provided this week, head over to <a href="http://www.adamtheautomator.com/psblogweek-ebook">adamtheautomator.com</a> to snag a copy. Feel free to share it wherever you&rsquo;d like. Consider it public domain.<br>
If you missed our last #PSBlogWeek, download the eBook to bone up on<a href="https://powershell.org/wp-content/uploads/2015/11/PowerShell-Blog-Week-Advanced-Functions-Bertram-Blender-Cat-Hicks-Prox1.pdf">everything you need to know about PowerShell advanced functions</a>.</p>
]]></content:encoded></item><item><title>Keeping Windows PowerShell Help Up To Date</title><link>https://powershell.org/articles/2015-11-24-keeping-windows-powershell-help-up-to-date/</link><guid>https://powershell.org/articles/2015-11-24-keeping-windows-powershell-help-up-to-date/</guid><pubDate>Tue, 24 Nov 2015 19:21:37 +0000</pubDate><description>&lt;p&gt;After a two week hiatus I am back this week with a quick write up on how to automate the updating of PowerShell help. Update-Help should be one of the first things typed in PowerShell on a new workstation build. I jump into the topic and demonstrate how to automate the updating of the help files from the Internet or from a local network share. You can view the full article over at &lt;a href="http://powershellblogger.com/?p=237"&gt;PowerShellBlogger.com&lt;/a&gt;.&lt;br&gt;
I look forward to getting another article out to everyone next week and I hope everyone in the US enjoys their long weekend!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>After a two week hiatus I am back this week with a quick write up on how to automate the updating of PowerShell help. Update-Help should be one of the first things typed in PowerShell on a new workstation build. I jump into the topic and demonstrate how to automate the updating of the help files from the Internet or from a local network share. You can view the full article over at<a href="http://powershellblogger.com/?p=237">PowerShellBlogger.com</a>.<br>
I look forward to getting another article out to everyone next week and I hope everyone in the US enjoys their long weekend!</p>
]]></content:encoded></item><item><title>Atlanta PowerShell User's Group Meeting – December 8th with June Blender</title><link>https://powershell.org/articles/2015-11-19-atlanta-powershell-users-group-meeting-december-8th-with-june-blender/</link><guid>https://powershell.org/articles/2015-11-19-atlanta-powershell-users-group-meeting-december-8th-with-june-blender/</guid><pubDate>Thu, 19 Nov 2015 15:03:47 +0000</pubDate><description>&lt;p&gt;&lt;a href="http://www.meetup.com/Atlanta-PowerShell-Users-Group/"&gt;&lt;img src="https://powershell.org/wp-content/uploads/2015/11/PUG-wide-text-968x142.png" alt="PUG wide text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;UPDATE: The new venue will not be ready until next months&amp;rsquo; meeting, so please meet us instead at the Microsoft office in Alpharetta, Microsoft Corporation&lt;br&gt;
1125 Sanctuary Pkwy Ste 300, Alpharetta&lt;/strong&gt;&lt;br&gt;
Join us on Tuesday, December 8th when &lt;a href="http://www.sapien.com/blog/"&gt;June Blender&lt;/a&gt; will be giving a talk on PowerShell Events!  This will be in our brand-new venue and meeting place, Microsoft&amp;rsquo;s new Innovation Center, in the famous Atlanta Flat Iron building.  Wear your Santa hats for a special door prize!&lt;br&gt;
&lt;strong&gt;About June Blender&lt;/strong&gt;&lt;br&gt;
June Blender is a technology evangelist for SAPIEN Technologies, Inc. Formerly a Senior Programming Writer at Microsoft Corporation, she is best known for her work with the Windows PowerShell product team from 2006-2012, developing the help system and writing the Get-Help help topics for PowerShell 1.0 – 3.0. In other roles, June wrote content for the Azure Active Directory SDK and Azure PowerShell Help, Windows Driver Kits, Windows Support Tools, and Windows Resource Kits. She lives in magnificent Escalante, Utah, where she works remotely when she&amp;rsquo;s not out hiking, canyoneering, or convincing lost tourists to try Windows PowerShell. She is a Windows PowerShell MVP, a PowerShell Hero, an Honorary Scripting Guy, and a frequent contributor to PowerShell.org. Contact her at  &lt;a href="http://www.eventbrite.com/e/phillyposh-december-3rd-2015-adam-bertram-tickets-19612925789?ref=ebtnebregn"&gt; and follow her on the &lt;/a&gt;&lt;a href="http://www.sapien.com/blog/"&gt;SAPIEN Blog&lt;/a&gt; and on Twitter at &lt;a href="https://twitter.com/juneb_get_help"&gt;@juneb_get_help&lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.meetup.com/Atlanta-PowerShell-Users-Group/events/226320634/?a=socialmedia"&gt;Register now on Meetup!&lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.meetup.com/Atlanta-PowerShell-Users-Group/events/226320634/?a=socialmedia"&gt;&lt;img src="https://powershell.org/wp-content/uploads/2015/11/MeetUp.png" alt="MeetUp"&gt;&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><a href="http://www.meetup.com/Atlanta-PowerShell-Users-Group/"><img src="https://powershell.org/wp-content/uploads/2015/11/PUG-wide-text-968x142.png" alt="PUG wide text"/><br><strong>UPDATE: The new venue will not be ready until next months&rsquo; meeting, so please meet us instead at the Microsoft office in Alpharetta, Microsoft Corporation<br>
1125 Sanctuary Pkwy Ste 300, Alpharetta</strong><br>
Join us on Tuesday, December 8th when<a href="http://www.sapien.com/blog/">June Blender</a> will be giving a talk on PowerShell Events!  This will be in our brand-new venue and meeting place, Microsoft&rsquo;s new Innovation Center, in the famous Atlanta Flat Iron building.  Wear your Santa hats for a special door prize!<br><strong>About June Blender</strong><br>
June Blender is a technology evangelist for SAPIEN Technologies, Inc. Formerly a Senior Programming Writer at Microsoft Corporation, she is best known for her work with the Windows PowerShell product team from 2006-2012, developing the help system and writing the Get-Help help topics for PowerShell 1.0 – 3.0. In other roles, June wrote content for the Azure Active Directory SDK and Azure PowerShell Help, Windows Driver Kits, Windows Support Tools, and Windows Resource Kits. She lives in magnificent Escalante, Utah, where she works remotely when she&rsquo;s not out hiking, canyoneering, or convincing lost tourists to try Windows PowerShell. She is a Windows PowerShell MVP, a PowerShell Hero, an Honorary Scripting Guy, and a frequent contributor to PowerShell.org. Contact her at <a href="http://www.eventbrite.com/e/phillyposh-december-3rd-2015-adam-bertram-tickets-19612925789?ref=ebtnebregn"> and follow her on the </a><a href="http://www.sapien.com/blog/">SAPIEN Blog</a> and on Twitter at<a href="https://twitter.com/juneb_get_help">@juneb_get_help</a><br><a href="http://www.meetup.com/Atlanta-PowerShell-Users-Group/events/226320634/?a=socialmedia">Register now on Meetup!</a><br><a href="http://www.meetup.com/Atlanta-PowerShell-Users-Group/events/226320634/?a=socialmedia"><img src="https://powershell.org/wp-content/uploads/2015/11/MeetUp.png" alt="MeetUp"/></p>
]]></content:encoded></item><item><title>Philadelphia PowerShell User Group Meeting – December 3rd 2015 with Adam Bertram</title><link>https://powershell.org/articles/2015-11-17-philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram/</link><guid>https://powershell.org/articles/2015-11-17-philadelphia-powershell-user-group-meeting-december-3rd-2015-with-adam-bertram/</guid><pubDate>Wed, 18 Nov 2015 01:24:39 +0000</pubDate><description>&lt;p&gt;Join us on Thursday, December 3rd when &lt;a href="http://adamtheautomator.com"&gt;Adam Bertram&lt;/a&gt; will be giving a talk called a &amp;ldquo;&lt;strong&gt;Top 10 PowerShell mistakes&lt;/strong&gt; &amp;quot;&lt;br&gt;
&lt;strong&gt;About Adam Bertram&lt;/strong&gt;&lt;br&gt;
Adam Bertram is an independent consultant, technical writer, trainer and presenter. Adam specializes in consulting and evangelizing all things IT automation mainly focused around Windows PowerShell. Adam is a Microsoft Windows PowerShell MVP, 2015 &lt;a href="https://powershell.org"&gt;powershell.org&lt;/a&gt; PowerShell hero and has numerous Microsoft IT pro certifications. He authors IT pro course content for Pluralsight, is a regular contributor to numerous print and online publications and presents at various user groups and conferences.  You can find Adam at &lt;a href="http://adamtheautomator.com"&gt;adamtheautomator.com&lt;/a&gt; or on Twitter at &lt;a href="https://twitter.com/adbertram"&gt;@adbertram&lt;/a&gt;.&lt;br&gt;
&lt;a href="http://www.eventbrite.com/e/phillyposh-december-3rd-2015-adam-bertram-tickets-19612925789?ref=ebtnebregn"&gt;&lt;img src="https://www.eventbrite.com/custombutton?eid=19612925789" alt="Eventbrite - PhillyPosh December 3rd 2015 - Adam Bertram"&gt;&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join us on Thursday, December 3rd when<a href="http://adamtheautomator.com">Adam Bertram</a> will be giving a talk called a &ldquo;<strong>Top 10 PowerShell mistakes</strong> "<br><strong>About Adam Bertram</strong><br>
Adam Bertram is an independent consultant, technical writer, trainer and presenter. Adam specializes in consulting and evangelizing all things IT automation mainly focused around Windows PowerShell. Adam is a Microsoft Windows PowerShell MVP, 2015<a href="https://powershell.org">powershell.org</a> PowerShell hero and has numerous Microsoft IT pro certifications. He authors IT pro course content for Pluralsight, is a regular contributor to numerous print and online publications and presents at various user groups and conferences.  You can find Adam at<a href="http://adamtheautomator.com">adamtheautomator.com</a> or on Twitter at<a href="https://twitter.com/adbertram">@adbertram</a>.<br><a href="http://www.eventbrite.com/e/phillyposh-december-3rd-2015-adam-bertram-tickets-19612925789?ref=ebtnebregn"><img src="https://www.eventbrite.com/custombutton?eid=19612925789" alt="Eventbrite - PhillyPosh December 3rd 2015 - Adam Bertram"/></p>
]]></content:encoded></item><item><title>PowerShell + DevOps Global Summit 2016 – the agenda</title><link>https://powershell.org/articles/2015-11-14-powershell-devops-global-summit-2016-the-agenda/</link><guid>https://powershell.org/articles/2015-11-14-powershell-devops-global-summit-2016-the-agenda/</guid><pubDate>Sat, 14 Nov 2015 18:50:03 +0000</pubDate><description>&lt;p&gt;We&amp;rsquo;ve finalised the agenda and we&amp;rsquo;re starting to publish session information on the web site at&lt;/p&gt;
&lt;p&gt;&lt;a href="https://eventloom.com/event/login/PSNA16"&gt;https://eventloom.com/event/login/PSNA16&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There are a handful of sessions on the site at present. The rest will be added over the next week or so.&lt;/p&gt;
&lt;p&gt;Keep checking back to see who&amp;rsquo;s been added.&lt;/p&gt;
&lt;p&gt;Registration opens 1 December 2015&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We&rsquo;ve finalised the agenda and we&rsquo;re starting to publish session information on the web site at</p><p><a href="https://eventloom.com/event/login/PSNA16">https://eventloom.com/event/login/PSNA16</a></p><p>There are a handful of sessions on the site at present. The rest will be added over the next week or so.</p><p>Keep checking back to see who&rsquo;s been added.</p><p>Registration opens 1 December 2015</p>
]]></content:encoded></item><item><title>PowerShell + DevOps Global Summit 2016 Info</title><link>https://powershell.org/articles/2015-11-13-powershell-devops-global-summit-2016-info/</link><guid>https://powershell.org/articles/2015-11-13-powershell-devops-global-summit-2016-info/</guid><pubDate>Fri, 13 Nov 2015 14:48:49 +0000</pubDate><description>&lt;p&gt;Here&amp;rsquo;s everything that&amp;rsquo;s fit to print regarding Summit 2016, running April 3-4-5-6 in Bellevue, WA! You can also download: &lt;a href="https://powershell.org/wp-content/uploads/2015/11/Brochure-PowerShell-and-DevOps-Summit-2016-copy.pdf"&gt;Brochure-PowerShell and DevOps Summit 2016&lt;/a&gt; to share with your boss and team.&lt;/p&gt;
&lt;h2 id="registration" class="ps-heading"&gt;Registration&lt;a class="ps-heading-anchor" href="#registration" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Registration for Summit will open December 1, 2015, and run through March 1, 2016. &lt;a href="https://eventloom.com/event/home/PSNA16"&gt;Visit the registration website for more details&lt;/a&gt;. Registration will be limited to about 200 attendees. Initially, we will only offer registration for a 4-day event, which includes full-day pre-conference sessions on April 3rd, 2016. On February 1st, 2016, we will open any remaining space for 3-day registration.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Here&rsquo;s everything that&rsquo;s fit to print regarding Summit 2016, running April 3-4-5-6 in Bellevue, WA! You can also download: <a href="https://powershell.org/wp-content/uploads/2015/11/Brochure-PowerShell-and-DevOps-Summit-2016-copy.pdf">Brochure-PowerShell and DevOps Summit 2016</a> to share with your boss and team.</p><h2 id="registration" class="ps-heading">Registration<a class="ps-heading-anchor" href="#registration" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Registration for Summit will open December 1, 2015, and run through March 1, 2016.<a href="https://eventloom.com/event/home/PSNA16">Visit the registration website for more details</a>. Registration will be limited to about 200 attendees. Initially, we will only offer registration for a 4-day event, which includes full-day pre-conference sessions on April 3rd, 2016. On February 1st, 2016, we will open any remaining space for 3-day registration.</p><h2 id="agenda" class="ps-heading">Agenda<a class="ps-heading-anchor" href="#agenda" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The registration website will list the complete agenda, which is subject to change, so be sure to check the website often. The agenda will be online prior to December 1, 2015. </p><h2 id="session-streamingrecording" class="ps-heading">Session Streaming/Recording<a class="ps-heading-anchor" href="#session-streamingrecording" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>We will <strong>not</strong> be live-streaming sessions - the cost for sufficient bandwidth is prohibitive. We <strong>will</strong> be recording the two main session rooms on April 4-5-6. We <strong>will not</strong> be recording the full-day sessions on April 3rd, nor will we be recording the &ldquo;extra&rdquo; sessions in the third session room throughout the week (we only have enough equipment to record two rooms, and the third room will not be in use all the time).</p><p><a href="http://pluralsight.com">Pluralsight</a> has agreed to sponsor the event, and will be recording HD video and high-quality audio of our speakers in the two main session rooms. They&rsquo;ll be using that, along with our traditional screen captures, to produce an enhanced set of session recordings. Those recordings will be made available to all of their subscribers, and all Summit attendees will received free access to the enhanced recordings. For non-attendees, our basic screen-capture recordings will be made available free of charge on our<a href="http://youtube.com/powershellorg">YouTube channel</a>, just as in the past.</p><h2 id="special-events" class="ps-heading">Special Events<a class="ps-heading-anchor" href="#special-events" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>We&rsquo;ll have several special evening events throughout the conference. Most importantly, Tuesday afternoon will feature an all-hands-on-deck address by Microsoft Technical Fellow Jeffrey Snover, followed by &ldquo;lightning demos&rdquo; from members of the WMF product team. After that, we&rsquo;ll move directly into a meet-and-greet reception (kindly sponsored by<a href="http://sapien.com">SAPIEN</a>) where we&rsquo;ve invited the entire product team to come talk to you. Stay tuned for further announcements on special events.</p><h2 id="hotel" class="ps-heading">Hotel<a class="ps-heading-anchor" href="#hotel" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>We do not have an official arrangement with any hotel. You&rsquo;ll find several hotels near the Meydenbauer Center in downtown Bellevue, including the Red Lion Inn, Hilton, Courtyard by Marriott, and others. You&rsquo;re welcome to stay where you like. Please note that parking <strong>is not free</strong> at the Center, so we do not recommend a rental car. Lyft/Uber are generally available, as are taxis, and several hotels are within a reasonable walking distance (~15min). </p>
]]></content:encoded></item><item><title>2015-November Scripting Games Puzzle</title><link>https://powershell.org/articles/2015-11-07-november-2015-scripting-games-puzzle/</link><guid>https://powershell.org/articles/2015-11-07-november-2015-scripting-games-puzzle/</guid><pubDate>Sat, 07 Nov 2015 14:06:18 +0000</pubDate><description>&lt;p&gt;Our November 2015 puzzle comes from PowerShell.org user [Tim Curwick][1], who created the puzzle based on a challenge he ran across at work. There&amp;rsquo;s nothing more real-world than this!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Our November 2015 puzzle comes from PowerShell.org user [Tim Curwick][1], who created the puzzle based on a challenge he ran across at work. There&rsquo;s nothing more real-world than this!</p><h2 id="instructions" class="ps-heading"><strong>Instructions</strong><a class="ps-heading-anchor" href="#instructions" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month&rsquo;s puzzle. You can find them all at<a href="https://powershell.org/category/announcements/scripting-games/">https://powershell.org/category/announcements/scripting-games/</a>. Many puzzles will include optional challenges, that you can use to really push your skills.</p><p><strong>To participate</strong>, add your solution to a public Gist (<a href="http://gist.github.com">http://gist.github.com</a>; you&rsquo;ll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post. 
**Only post one entry per person. **However, remember that you can always go back and edit your Gist. We&rsquo;ll always pull the most recent one when we display it, so there&rsquo;s no need to post multiple entries if you want to make an edit.</p><p>Don&rsquo;t forget the [main rules and purpose of these monthly puzzles][2], including the fact that you won&rsquo;t receive individual scoring or commentary on your entry.</p><p><strong>User groups are encouraged to work together</strong> on the monthly puzzles. User group leaders should submit their group&rsquo;s best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most &ldquo;favorite&rdquo; entries of the year will win a grand prize from PowerShell.org.</p><h2 id="heading" class="ps-heading"> <a class="ps-heading-anchor" href="#heading" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><h2 id="our-puzzle" class="ps-heading"><strong>Our Puzzle</strong><a class="ps-heading-anchor" href="#our-puzzle" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Scripting challenge: Understanding and cleaning up someone else&rsquo;s code</p><p>Below is an actual script that was in production use at a large enterprise client. The script worked as desired, but as you can see, it could benefit from some clean up. There is some old code in there that may have served a function at one time, but no longer does. The original author and several editors donít seem to have understood PowerShell very well, and it is far more complex than it needs to be.</p><p>Your challenge is to replace everything after the Param statement with a single line of code (no semicolons), while retaining all functionality.</p><p>We are not looking for the<em>shortest</em> line. The whole point is to make the code<em>more readable</em>. Don&rsquo;t replace unnecessarily complex with unnecessarily cryptic.</p><p>As in real life, you should also add internal documentation in the form of any concise comments about the script or your new code which may be of value to the next person troubleshooting or updating the script.</p><p><code>param([string]$VMNameStr) $VMs=@() $VMNames=@() if($VMNameStr.indexof(",") -gt 0) { $Trace="Found Comma..." $VMs=$VMNameStr -split "," | %{$_.trim()} $trace+="Length = $($VMs.length)" $trace+=$VMs -is [array] for($i=0;$i -lt $VMs.length;$i++){ if($VMs[$i] -gt ""){ set-variable -Name ("vmname" + $i) -value $VMs[$i] $VMNames+=$VMs[$i] } } } else{$VMName0=$VMNameStr;$VMNames=$VMName0} $VMNames</code>[1]:<a href="http://madwithpowershell.com">http://madwithpowershell.com</a>
[2]:<a href="https://powershell.org/?p=2574">https://powershell.org/?p=2574</a></p>]]></content:encoded></item><item><title>Summit 2016 – Call for topics is closed</title><link>https://powershell.org/articles/2015-11-01-summit-2016-call-for-topics-is-closed/</link><guid>https://powershell.org/articles/2015-11-01-summit-2016-call-for-topics-is-closed/</guid><pubDate>Sun, 01 Nov 2015 12:27:11 +0000</pubDate><description>&lt;p&gt;The Call for Topics for the 2016 Summit is now closed. We&amp;rsquo;ve had an amazing number of top quality submissions. We&amp;rsquo;d like to thank everyone who took the time to submit a proposal for a session at the Summit. We&amp;rsquo;ll be working through the submissions over the next few days as we put the agenda together for what looks to be a superb Summit.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll publish the schedule as soon as we can. &lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The Call for Topics for the 2016 Summit is now closed. We&rsquo;ve had an amazing number of top quality submissions. We&rsquo;d like to thank everyone who took the time to submit a proposal for a session at the Summit. We&rsquo;ll be working through the submissions over the next few days as we put the agenda together for what looks to be a superb Summit.</p><p>We&rsquo;ll publish the schedule as soon as we can. </p><p>Once we have the agenda finalised we&rsquo;ll let you know.</p>
]]></content:encoded></item><item><title>Join Computer to Domain with Specified Computer Name and OU</title><link>https://powershell.org/articles/2015-10-30-join-computer-to-domain-with-specified-computer-name-and-ou/</link><guid>https://powershell.org/articles/2015-10-30-join-computer-to-domain-with-specified-computer-name-and-ou/</guid><pubDate>Fri, 30 Oct 2015 18:10:55 +0000</pubDate><description>&lt;p&gt;I addressed a reader requested script for my article this week. PowerShell gives you the ability to add computers to Active Directory right from the command line with the built in PowerShell commandlets. This was introduced with PowerShell version 3 and can be used to automate imaging processes or to prompt an agent for the desired computer name and organizational unit. This is useful since a lot of organizations will use specific OUs for computers according to location or department. This allows them to set group policies that apply to those computer accounts accordingly. By default these computer accounts are created in the root Computers OU, but creating an account can be targeted. The highlighted examples should provide you everything you need to tackle that use case. I provide the basics of adding a computer to the domain as well as prompting the user to enter the computer name and location. Head on over to &lt;a href="http://powershellblogger.com/?p=220"&gt;PowershellBlogger.com&lt;/a&gt; for the full write up and thanks for everyone&amp;rsquo;s continued support!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I addressed a reader requested script for my article this week. PowerShell gives you the ability to add computers to Active Directory right from the command line with the built in PowerShell commandlets. This was introduced with PowerShell version 3 and can be used to automate imaging processes or to prompt an agent for the desired computer name and organizational unit. This is useful since a lot of organizations will use specific OUs for computers according to location or department. This allows them to set group policies that apply to those computer accounts accordingly. By default these computer accounts are created in the root Computers OU, but creating an account can be targeted. The highlighted examples should provide you everything you need to tackle that use case. I provide the basics of adding a computer to the domain as well as prompting the user to enter the computer name and location. Head on over to<a href="http://powershellblogger.com/?p=220">PowershellBlogger.com</a> for the full write up and thanks for everyone&rsquo;s continued support!</p>
]]></content:encoded></item><item><title>Win a Free 4-Day Pass to PowerShell and DevOps Summit 2016!</title><link>https://powershell.org/articles/2015-10-28-win-a-free-4-day-pass-to-powershell-and-devops-summit-2016/</link><guid>https://powershell.org/articles/2015-10-28-win-a-free-4-day-pass-to-powershell-and-devops-summit-2016/</guid><pubDate>Wed, 28 Oct 2015 13:56:18 +0000</pubDate><description>&lt;p&gt;Want to attend the newly expanded, 4-day &lt;a href="http://powershellsummit.org"&gt;PowerShell and DevOps Summit&lt;/a&gt; coming to Bellevue, WA in April 2016? Well you can - if you make your own community contribution!&lt;/p&gt;
&lt;p&gt;Our &lt;a href="https://powershell.org/newsletter/"&gt;TechLetter newsletter&lt;/a&gt; is looking for articles. And, November is of course &lt;a href="http://nanowrimo.org"&gt;NaNoWriMo&lt;/a&gt;, the National Novel Writing Month. But we aren&amp;rsquo;t looking for a novel - just newsletter articles! So we&amp;rsquo;ll call it National PowerShell and DevOps Article Writing Month (NaPoshDoArWriMo). Er. Or something.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Want to attend the newly expanded, 4-day<a href="http://powershellsummit.org">PowerShell and DevOps Summit</a> coming to Bellevue, WA in April 2016? Well you can - if you make your own community contribution!</p><p>Our<a href="https://powershell.org/newsletter/">TechLetter newsletter</a> is looking for articles. And, November is of course<a href="http://nanowrimo.org">NaNoWriMo</a>, the National Novel Writing Month. But we aren&rsquo;t looking for a novel - just newsletter articles! So we&rsquo;ll call it National PowerShell and DevOps Article Writing Month (NaPoshDoArWriMo). Er. Or something.</p><p>Anyway, here&rsquo;s the rules:</p><ol><li>Submit your articles in Word or RTF format, in a ZIP file via email, to &ldquo;editors&rdquo; here at PowerShell.org. Please include a plain-text file with copies of any code in your article, as this makes formatting easier. Also include PNG files of any screen shots your article uses.</li><li>Your article can be on any PowerShell or DevOps topic. Talk about techniques, challenges you&rsquo;ve solved, best practices, or whatever you like. Minimum article length, excluding code, is 1,500 words. Maximum article length, excluding code, is 5,000 words.</li><li>The best articles usually tell a story - a problem you ran into, what you tried, what errors you encountered, and what eventually worked. This is true of &ldquo;best practices&rdquo; as well - talk about how the practice helped you solve a problem, or will help prevent problems. Provide lots of examples!</li><li>You may submit more than one article. Please do so in a separate email for each. In each email, include your name and e-mail address. <strong>Entries are due by the end of November, 2015.</strong></li><li>Our Editors will choose the winning entry and announce it in the January 2016 TechLetter. Editors reserve the right to decline any article they feel is unsuitable, and Editors&rsquo; decision on the winning article is final. Winners are responsible for any taxes or duties imposed by their local government. Prize does not include travel expenses, lodging, or anything else. Anyone, anywhere, is eligible to win unless prevented or limited by local law. Prize is nontransferable and has no cash value.</li></ol><p>All right. Go to it!!!</p>
]]></content:encoded></item><item><title>Find any E-Mail Address or Proxy Address In Active Directory</title><link>https://powershell.org/articles/2015-10-23-find-any-e-mail-address-or-proxy-address-in-active-directory/</link><guid>https://powershell.org/articles/2015-10-23-find-any-e-mail-address-or-proxy-address-in-active-directory/</guid><pubDate>Fri, 23 Oct 2015 16:58:00 +0000</pubDate><description>&lt;p&gt;I am back this week with some more Exchange and Unified Communications goodness. This is another request I see a lot, someone want&amp;rsquo;s to know where an e-mail address is assigned. This opens up the possibilities of user mailboxes, shared mailboxes, distribution lists, public folders, conference rooms, contacts or resources. I have also seen duplicate e-mail addresses being assigned outside of Exchange causing delivery failures. I take a look at how you can quickly find any e-mail address in your environment along with partial searches of e-mail addresses. The two attributes for e-mail addresses being mail and proxyAddresses.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I am back this week with some more Exchange and Unified Communications goodness. This is another request I see a lot, someone want&rsquo;s to know where an e-mail address is assigned. This opens up the possibilities of user mailboxes, shared mailboxes, distribution lists, public folders, conference rooms, contacts or resources. I have also seen duplicate e-mail addresses being assigned outside of Exchange causing delivery failures. I take a look at how you can quickly find any e-mail address in your environment along with partial searches of e-mail addresses. The two attributes for e-mail addresses being mail and proxyAddresses.</p><p>I cover finding specific types of proxy addresses such as sip: x500: eum: etc. I also touch briefly on creating a simple function that will accept e-mail addresses as an input to return all of the AD objects that contain it. I cover the search through Active Directory commandlets, including LDAP query syntax, as well as the Exchange commandlets. Head on over to<a href="http://powershellblogger.com/?p=200">PowerShellBlogger.com</a> for the full article.</p>
]]></content:encoded></item><item><title>The JAPE challenge</title><link>https://powershell.org/articles/2015-10-19-the-jape-challenge/</link><guid>https://powershell.org/articles/2015-10-19-the-jape-challenge/</guid><pubDate>Mon, 19 Oct 2015 08:58:34 +0000</pubDate><description>&lt;p&gt;I have wanted to write my very own obfuscated e-mail signature for a long time but kept myself from doing it. At the time I thought of all these lines of obfuscated code that people wrote during competitions such as the &lt;em&gt;International Obfuscated C Code Contest (IOCCC)&lt;/em&gt; or the &lt;em&gt;Obfuscated Perl Contest&lt;/em&gt; as beyond interest.&lt;/p&gt;
&lt;p&gt;Then I started competing in the Scripting Games, and some tasks involved writing Powershell oneliners that required &lt;strong&gt;mastering the use of the pipeline&lt;/strong&gt; as a tool to refine what each cmdlet passed to another. Once I added a few aliases to these oneliners - which sometimes happened to involve pretty arcane regular expressions - I often came back with hard-to-read and impossible-to-maintain pieces of Powershell code. But, hey, this was fun!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I have wanted to write my very own obfuscated e-mail signature for a long time but kept myself from doing it. At the time I thought of all these lines of obfuscated code that people wrote during competitions such as the<em>International Obfuscated C Code Contest (IOCCC)</em> or the<em>Obfuscated Perl Contest</em> as beyond interest.</p><p>Then I started competing in the Scripting Games, and some tasks involved writing Powershell oneliners that required<strong>mastering the use of the pipeline</strong> as a tool to refine what each cmdlet passed to another. Once I added a few aliases to these oneliners - which sometimes happened to involve pretty arcane regular expressions - I often came back with hard-to-read and impossible-to-maintain pieces of Powershell code. But, hey, this was fun!</p><p>So, today I have reviewed my point of view. I have understood that reading and understanding obfuscated code can be an interesting<strong>mental challenge.</strong> And being able to write it is a game I like to play.</p><p>Last week I was writing an<a href="http://www.happysysadm.com/2015/10/powershell-gymnastics-prime-numbers.html">article exploring different ways to implement primality tests in Powershell</a>. In the last part of that article I show how to port to Powershell a powerful Perl onliner that can find prime numbers only by matching strings whose length is not prime.</p><p>This Perl oneliner, originally written by Abigail, is part of a collection of famous<strong>JAPHs</strong> - Usenet posting signatures in the 90s - that will output the text &lsquo;<em>Just another Perl Hacker,</em>&rsquo; to screen.</p><p>When you have a look at some of these JAPHs (there is a canonical list on CPAN.org), you can see how it can actually be surprisingly difficult to write truly breathtaking obfuscated code.</p><p>Having said all that, I have come up with the idea of starting some kind of similar challenge around Powershell.</p><h2 id="write-your-jape" class="ps-heading">Write your JAPE<a class="ps-heading-anchor" href="#write-your-jape" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The challenge consists of writing the most intricate, illegible, awe-inspiring piece of code you can think of, which prints the text &lsquo;<em>JUST ANOTHER POWERSHELL ENTHUSIAST,</em>&rsquo;.</p><p>Feel free to post your contribution in the comments. The rules are:</p><ol><li>the code has to be carefully formatted to fit into max four lines of max 77 characters each, in the style of a Usenet signature</li><li>the comma at the end of the string is mandatory (hey, we are just adding ourselves to the basket!)</li><li>letter case in the output is not important, so you can go for pOwErShElL if you feel like it</li><li>every JAPE has to be presented in the canonical list format, with a date and author attribution</li></ol><p>Rule 1 can be thrown out of the window in case you want to go artistic, as in this notable Perl JAPH by Kickstart:</p><p><code>#Kickstart from http://www.perlmonks.com/ #note: a slight valentine variation :) $LOVE= AMOUR. true.cards. ecstacy.crush .hon.promise.de .votion.partners. tender.truelovers. treasure.affection. devotion.care.woo.baby.ardor.romancing. enthusiasm.fealty.fondness.turtledoves. lovers.sentiment.worship.sweetling.pure attachment.flowers.roses.promise.poem; $LOVE=~ s/AMOUR/adore/g; @a=split(//, $LOVE); $o.= chr (ord($a[1])+6). chr (ord($a[3])+3). $a[16]. $a[5]. chr (32). $a[0]. $a[(26+2)]. $a[27]. $a[5].$a[25]. $a[8].$a[3].chr (32).$a[29]. $a[8].$a[3]. $a[62].chr(32).$a[62]. $a[2].$a[38].$a[4]. $a[3].'.'; print $o;</code>Now, the most notable contributions will be added to the<strong>JAPE Hall of Fame</strong> below.</p><p><strong>Do come up with some interesting piece of &rsquo;educational&rsquo; code, and let&rsquo;s see what creative minds we have here. And remember to have fun!</strong></p><p>To start with, I have decided, with the consent of the author, that the first JAPE be one by Lee Holmes. Even if it breaks the rule of outputting &lsquo;JUST ANOTHER POWERSHELL ENTHUSIAST,&rsquo;, it&rsquo;s probably the first Powershell obfuscated code I have ever seen. Hence the index 0.</p><h2 id="jape-hall-of-fame" class="ps-heading">JAPE Hall of Fame<a class="ps-heading-anchor" href="#jape-hall-of-fame" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Index: $jape[0] - Author: Lee Holmes - Date: June 6th, 2007</p><p><code>$ofs=""; '"$(0'+ '..(0'+ 'xa*['+ 'Math'+ ']::R'+ 'ound'+ '([Ma'+ 'th]:'+ ':Pi/'+ '2,1)'+ ')|%{'+ '[cha'+ 'r][i'+ 'nt]"'+ '"$($'+ '("""'+ '"0$('+ '1838'+ '1589'+ '*726'+ '371*'+ '60)$'+ '(877'+ '7365'+ '981*'+ '263*'+ '360)'+ '$(22'+ '2330'+ '793*'+ '1442'+ '99)$'+ '(310'+ '9*37'+ ') ""'+ '"")[' + '($_*' + '3)..' + '($_*'+ '3+2)' + '])""' + ' })"'|iex</code>Here&rsquo;s my first JAPE as a very basic example to start with. It&rsquo;s a signature block composed of 4 lines of 59 chars.</p><p>Index: $jape[1]  - Author: Carlo - Date: October 9th, 2015</p><p><code>([regex]::Matches(",{0}S{1}I{2}U{3}T{4}E{5}L{6}E{7}S{8}E{9} O{10} {11}E{12}T{13}N{14} {15}S{16}J" -f 'T!A$S!H$N! $L!H$R !W$P!R$H!O$A!T$U'.split('!|$',[System.StringSplitOptions]:: RemoveEmptyEntries),'.','RightToLeft')|%{$_.value}) -join''</code>References:</p><ul><li><a href="http://www.leeholmes.com/blog/2007/06/06/obfuscated-powershell/">http://www.leeholmes.com/blog/2007/06/06/obfuscated-powershell/</a></li><li><a href="http://www.happysysadm.com/2015/10/powershell-gymnastics-prime-numbers.html">http://www.happysysadm.com/2015/10/powershell-gymnastics-prime-numbers.html</a></li><li><a href="http://www.cpan.org/misc/japh">http://www.cpan.org/misc/japh</a></li><li><a href="http://www.happysysadm.com/p/jape.html">http://www.happysysadm.com/p/jape.html</a></li></ul><p>Contact me:</p><ul><li>Twitter<a href="https://twitter.com/sysadm2010">@sysadm2010</a></li></ul>
]]></content:encoded></item><item><title>Command and query separation in Pester tests</title><link>https://powershell.org/articles/2015-10-18-command-and-query-separation-in-pester-tests/</link><guid>https://powershell.org/articles/2015-10-18-command-and-query-separation-in-pester-tests/</guid><pubDate>Sun, 18 Oct 2015 19:15:14 +0000</pubDate><description>&lt;p&gt;Do you feel that writing tests is confusing, and you often end up with complicated test code? I did too, before I learned about Command-query separation principle (or CQS). This principle lead me to start thinking about data flow directions in tests and in the end I realized there are few basic patterns that I use in my test code over and over.&lt;/p&gt;
&lt;h2 id="command-query-separation-principle" class="ps-heading"&gt;Command-query separation principle&lt;a class="ps-heading-anchor" href="#command-query-separation-principle" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;The command and query separation principle tells us that we should separate commands from queries (duh!). To do that, we first need to learn the difference between a command and query: A command is a function that has an observable side-effect and returns no result. A query is the opposite. A function that has no observable-side effect, and returns a result.&lt;br&gt;
&lt;a href="https://gist.github.com/nohwnd/fb5616fb92995555480c"&gt;https://gist.github.com/nohwnd/fb5616fb92995555480c&lt;/a&gt;&lt;br&gt;
The call to &lt;em&gt;Set-Variable&lt;/em&gt; has a side effect of creating a variable named &amp;ldquo;a&amp;rdquo; and setting it to value &amp;ldquo;1&amp;rdquo;. This side effect is clearly observable, because we had no variable &lt;em&gt;$a&lt;/em&gt; before the call and now we have one, so &lt;em&gt;Set-Variable&lt;/em&gt; must be a command. Also the &lt;em&gt;Set-Variable&lt;/em&gt; does not return any output which should be another clue (unless you provide the &lt;em&gt;-PassThru&lt;/em&gt; parameter, more on that later).&lt;br&gt;
The other call, the call to &lt;em&gt;Get-Variable&lt;/em&gt;, has no observable side effect. You could call it once or 100 times and that would have no effect on the value of the &lt;em&gt;$a&lt;/em&gt; variable. Plus the Get-Variable returns a result so it must be a query.&lt;br&gt;
PowerShell also gives us another clue whether a function is a command or query with the Verb used for that function. Anything with Set, Add and New verb is supposed to be a command. Anything with Get verb should be a query.&lt;br&gt;
Understanding the difference between commands and queries is important, because data flows through them in opposite directions, and so you need to test them differently.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Do you feel that writing tests is confusing, and you often end up with complicated test code? I did too, before I learned about Command-query separation principle (or CQS). This principle lead me to start thinking about data flow directions in tests and in the end I realized there are few basic patterns that I use in my test code over and over.</p><h2 id="command-query-separation-principle" class="ps-heading">Command-query separation principle<a class="ps-heading-anchor" href="#command-query-separation-principle" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The command and query separation principle tells us that we should separate commands from queries (duh!). To do that, we first need to learn the difference between a command and query: A command is a function that has an observable side-effect and returns no result. A query is the opposite. A function that has no observable-side effect, and returns a result.<br><a href="https://gist.github.com/nohwnd/fb5616fb92995555480c">https://gist.github.com/nohwnd/fb5616fb92995555480c</a><br>
The call to<em>Set-Variable</em> has a side effect of creating a variable named &ldquo;a&rdquo; and setting it to value &ldquo;1&rdquo;. This side effect is clearly observable, because we had no variable<em>$a</em> before the call and now we have one, so<em>Set-Variable</em> must be a command. Also the<em>Set-Variable</em> does not return any output which should be another clue (unless you provide the<em>-PassThru</em> parameter, more on that later).<br>
The other call, the call to<em>Get-Variable</em>, has no observable side effect. You could call it once or 100 times and that would have no effect on the value of the<em>$a</em> variable. Plus the Get-Variable returns a result so it must be a query.<br>
PowerShell also gives us another clue whether a function is a command or query with the Verb used for that function. Anything with Set, Add and New verb is supposed to be a command. Anything with Get verb should be a query.<br>
Understanding the difference between commands and queries is important, because data flows through them in opposite directions, and so you need to test them differently.</p><h3 id="data-flow-in-commands-and-queries" class="ps-heading">Data flow in commands and queries<a class="ps-heading-anchor" href="#data-flow-in-commands-and-queries" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>Let&rsquo;s see some (almost) real-life examples of tests that deal with commands and queries, identify the data flow in them, and try to discover some patterns.<br><a href="https://gist.github.com/nohwnd/f6be402363baa4fb15e7">https://gist.github.com/nohwnd/f6be402363baa4fb15e7</a><br>
In this code the first two functions only act as place-holders for the actual Active Directory cmdlets, feel free to ignore them. The next two functions are more interesting, they are the actual production code that we test - the SUT (System Under Test). Notice that the first function,<em>New-SalesUser</em> is a command, and the second,<em>Get-SalesUser</em> is a query. The most important part are the actual tests, let&rsquo;s have a closer look on each one of them separately.</p><h3 id="testing-new-salesuser" class="ps-heading">Testing New-SalesUser<a class="ps-heading-anchor" href="#testing-new-salesuser" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>The<em>New-SalesUser</em> is a command, it won&rsquo;t return any value, but it should have an observable side-effect. The side-effect is that a new user is created in the Sales department. The<em>New-SalesUser</em> is not able to do that by itself, instead it delegates the work to the<em>New-ADUser</em> cmdlet. Because we believe that the<em>New-ADUser</em> will do it&rsquo;s work, all we need to test is if it was invoked with the correct parameters, and that&rsquo;s exactly what&rsquo;s happening.<br>
As you can hopefully see the data (input parameters) flow from the input of the<em>New-SalesUser</em> (SUT) towards the internal function<em>New-ADUser</em>, we then use the<em>Assert-MockCalled</em> to verify that the internal command was called correctly. I call this the command direction.</p><h3 id="testing-get-salesuser" class="ps-heading">Testing Get-SalesUser<a class="ps-heading-anchor" href="#testing-get-salesuser" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>The<em>Get-SalesUser</em> is a query. It will return a value and will have no side-effect. We know that the<em>Get-ADUser</em> is a query as well, so the only part that needs testing is whether or not the<em>FullName</em> property was added. To do that we create a mock of the<em>Get-ADUser</em> function that returns an object and set it&rsquo;s<em>GivenName</em> and<em>Surname</em> properties. We run the<em>Get-SalesUser</em> function and check the values of<em>FullName</em> property.<br>
In this case the data go from the internal function Get-ADUser to the output of the<em>Get-SalesUser</em> (SUT), and we use the Should assertion to check if data was processed correctly. I call this the query direction.</p><h2 id="command-query-hybrids" class="ps-heading">Command-Query hybrids<a class="ps-heading-anchor" href="#command-query-hybrids" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Unfortunately the world of PowerShell is not so black and white as we might like. There are numerous commands that support<em>-PassThru</em> parameter. The<em>-PassThru</em> parameter breaks the clean separation between commands and queries, and so our example function would become a<em>New-Get-SalesUser</em> hybrid.<br>
Such hybrids are a source of confusion and lot of people end up with code like this:<br><a href="https://gist.github.com/nohwnd/86dc22cede6736c2647c">https://gist.github.com/nohwnd/86dc22cede6736c2647c</a><br>
As you can see both the production code and the tests are simply a merge of the<em>Get-SalesUser</em> and<em>New-SalesUser</em> seen in the previous example. The test no longer tests a single thing. If you take your time and track the flow of the data you should see the both the command and query directions are used, and asserted.<br>
The test still works, but is unnecessarily complex and can fail for at least two different reasons. It would be way better to have two separate simpler tests. One testing the query path of the command and another testing the command path. Such conversion is easily done, all we need to do is take the<em>Get-SalesUser</em> test and change the command to<em>New-SalesUser</em>:<br><a href="https://gist.github.com/nohwnd/31df2ef5686f77f1b910">https://gist.github.com/nohwnd/31df2ef5686f77f1b910</a><br>
The tests were split into two and the<em>-PassThru</em> switch was implemented in the<em>New-SalesUser</em> function.<br>
The first<em>It</em> tests the command part of the function, it does not specify the<em>-PassThru</em> switch and so the<em>New-SalesUser</em> acts as a pure command and is tested like that.<br>
The second<em>It</em> tests the query part of the function, specifying the<em>-PassThru</em> switch, and hitting the mock, which produces no side-effects, in result it acts as a pure query function, and is also tested like one.</p><h2 id="are-query-command-hybrids-really-that-bad" class="ps-heading">Are query-command hybrids really that bad?<a class="ps-heading-anchor" href="#are-query-command-hybrids-really-that-bad" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>No not really. Such hybrids have some useful properties that make PowerShell better. Probably the most useful is that they enable you to combine both queries and commands in a single pipeline. The also enable you to immediately retreive result of your changes and for example print them to screen.<br>
All in all such hybrids are quite useful beasts. The downside unfortunately is that a lot of people unconiously end up with such hybrid, and without seeing the way to split it they start to produce overly-complicated tests. Often copy pasting the code to set up the whole environment, just to assert the result of the &ldquo;query&rdquo;. Setting up twenty properties on the resulting object just to ignore it while testing the &ldquo;command&rdquo;. Or worst all of this together.</p><h2 id="summary" class="ps-heading">Summary<a class="ps-heading-anchor" href="#summary" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Hopefully this article gave you the minimum to tell commands from queries and outlined possible approaches to testing them. You should now be aware of the command query hybrids and be able to identify them even if they don&rsquo;t specify a<em>-PassThru</em> parameter.<br>
Happy coding!</p>
]]></content:encoded></item><item><title>Desired State Configuration – Beware Of Circular Configurations</title><link>https://powershell.org/articles/2015-10-14-desired-state-configuration-beware-of-circular-configurations/</link><guid>https://powershell.org/articles/2015-10-14-desired-state-configuration-beware-of-circular-configurations/</guid><pubDate>Wed, 14 Oct 2015 13:00:37 +0000</pubDate><description>&lt;p&gt;Lately, I&amp;rsquo;ve been working at converting a lot of my server configuration scripts into DSC configurations.  After all, what better way to learn than by updating your existing methods?  I recently ran into an issue, however, while converting my SCCM Distribution Point deployment script into a config, where the test systems inexplicably began rebooting every thirty minutes or so.  The Local Configuration Manager was configured to reboot if necessary, and these were fresh installs, so I knew that my culprit was most likely in my configuration.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Lately, I&rsquo;ve been working at converting a lot of my server configuration scripts into DSC configurations.  After all, what better way to learn than by updating your existing methods?  I recently ran into an issue, however, while converting my SCCM Distribution Point deployment script into a config, where the test systems inexplicably began rebooting every thirty minutes or so.  The Local Configuration Manager was configured to reboot if necessary, and these were fresh installs, so I knew that my culprit was most likely in my configuration.</p><p>The config was pretty basic: Put the server into a Core state and uninstall the UI management tools, ensure RDC is installed, install the distribution point prerequisites (IIS, IIS 6 WMI Compatibility, .NET 4.5, etc), and configure some firewall rules.  My original script had always served me well, so I was dumbfounded as to what the problem could be.  I decided to<a href="http://blogs.msdn.com/b/powershell/archive/2014/01/03/using-event-logs-to-diagnose-errors-in-desired-state-configuration.aspx">enable the debug logging</a> for DSC and see what came up.</p><p><code>Get-WinEvent -LogName "Microsoft-Windows-Dsc/Debug" -ComputerName LWINCM02 -Oldest | Out-Gridview</code>When I get the output, I&rsquo;m seeing a lot of looping around my Remote Differential Compression resource, which ensures that the RDC component is installed.  A further look in the logs showed that the UI Management Tools were also being uninstalled repeatedly.  Hmm&hellip;</p><p><a href="https://powershell.org/wp-content/uploads/2015/10/RDCOGV.jpg"><img src="https://powershell.org/wp-content/uploads/2015/10/RDCOGV-628x331.jpg" alt=""/></p><p>So on another system that isn&rsquo;t receiving the configuration, I decide to run the Install-WindowsFeature command with the WhatIf switch against the RDC component.  Upon the result, I immediately see what my problem is:</p><p><a href="https://powershell.org/wp-content/uploads/2015/10/RDCInst-e1444781815463.jpg"><img src="https://powershell.org/wp-content/uploads/2015/10/RDCInst-e1444781798166-628x413.jpg" alt="RDCInst"/></p><p>The Remote Differential Component requires the installation of the GUI Management Tools.  Likewise, the uninstallation of these tools results in the removal of the RDC component.  So what was happening was this:</p><ul><li>GUI Tools are removed by DSC, also removing the RDC component.</li><li>Server reboots.</li><li>GUI tools are verified uninstalled.  RDC component is reinstalled, which reinstalls the GUI Tools.</li><li>Server Reboots.</li><li>Wash.  Rinse.  Repeat.</li></ul><p>I&rsquo;ve since removed the GUI tools removal from my configuration, as RDC is a required component for my distribution points, and my configuration is now working flawlessly.  In tracing the root of my problem, I came to realize two very important lessons.</p><p>First, as admins, engineers, and solution providers, we often don&rsquo;t take a very close look at our scripts and what it&rsquo;s really doing behind the scenes if it gives us the result we&rsquo;re looking for.  In the case of my configuration script, I added a line to install the RDC component after removing the UI and tools and didn&rsquo;t look any further into why I had to do this in the first place.  DSC kept me honest in this respect - and gave me a gentle reminder to look a little deeper if something unexpected occurs, rather than slapping a band-aid on it and calling it good.</p><p>Second, it can be very easy to find yourself dealing with a configuration loop if you&rsquo;re altering the state of components that other components in your config rely on.  Be sure to test your configurations, check your logs, and most importantly, make sure you know what you&rsquo;re really configuring when you configure it.</p>
]]></content:encoded></item><item><title>Using Package Management in Windows PowerShell v3</title><link>https://powershell.org/articles/2015-10-12-using-package-management-in-windows-powershell-v3/</link><guid>https://powershell.org/articles/2015-10-12-using-package-management-in-windows-powershell-v3/</guid><pubDate>Mon, 12 Oct 2015 20:48:32 +0000</pubDate><description>&lt;p&gt;Hey now! The &lt;a href="http://blogs.msdn.com/b/powershell/archive/2015/10/09/package-management-preview-for-powershell-4-amp-3-is-now-available.aspx"&gt;PowerShell team&lt;/a&gt; published a preview version of &lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=49186"&gt;PackageManagement&lt;/a&gt; for Windows PowerShell v3 and v4. As it happens, I have a Windows 7 SP1 box running PowerShell v3&amp;ndash;why not run a little experiment?&lt;/p&gt;
&lt;p&gt;`$PSVersionTable.PSVersion
Major Minor Build Revision&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;3 0 -1 -1
`## Preparing the Environment&lt;/p&gt;
&lt;p&gt;You need &lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=40779"&gt;.NET Framework 4.5&lt;/a&gt; or later, so take care of that prerequisite before you install the following two assets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=34595"&gt;Windows Management Framework (WMF) v3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/en-us/download/details.aspx?id=49186"&gt;PackageManagement PowerShell Modules Preview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I restarted the computer after each installation just to be safe.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Hey now! The<a href="http://blogs.msdn.com/b/powershell/archive/2015/10/09/package-management-preview-for-powershell-4-amp-3-is-now-available.aspx">PowerShell team</a> published a preview version of<a href="https://www.microsoft.com/en-us/download/details.aspx?id=49186">PackageManagement</a> for Windows PowerShell v3 and v4. As it happens, I have a Windows 7 SP1 box running PowerShell v3&ndash;why not run a little experiment?</p><p>`$PSVersionTable.PSVersion
Major Minor Build Revision</p><hr><p>3 0 -1 -1
`## Preparing the Environment</p><p>You need<a href="https://www.microsoft.com/en-us/download/details.aspx?id=40779">.NET Framework 4.5</a> or later, so take care of that prerequisite before you install the following two assets:</p><ul><li><a href="https://www.microsoft.com/en-us/download/details.aspx?id=34595">Windows Management Framework (WMF) v3</a></li><li><a href="https://www.microsoft.com/en-us/download/details.aspx?id=49186">PackageManagement PowerShell Modules Preview</a></li></ul><p>I restarted the computer after each installation just to be safe.</p><p>Before we proceed we also need to relax our Windows 7 client&rsquo;s script execution policy or we won&rsquo;t see the PSModule package provider or the PowerShellGet module:</p><p><code>Set-ExecutionPolicy -ExecutionPolicy Bypass -Force</code>As you can see in the following screenshot, installing the PackageManagement Preview also gives us PowerShellGet. By the way, in case you didn&rsquo;t know, we use PowerShellGet to discover, install, and manage PowerShell modules, and we use PackageManagement to discover, install, and manage software packages.</p><p><a href="https://powershell.org/wp-content/uploads/2015/10/Modules-folder-on-our-Windows-7-workstation.png"><img src="https://powershell.org/wp-content/uploads/2015/10/Modules-folder-on-our-Windows-7-workstation-628x313.png" alt="Modules folder on our Windows 7 workstation"/></p><pre><code>Modules folder on our Windows 7 workstation</code></pre><h2 id="poking-around-with-the-commands" class="ps-heading">Poking Around with the Commands<a class="ps-heading-anchor" href="#poking-around-with-the-commands" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Let&rsquo;s do this! Open an administrative PowerShell console examine the PackageManagement commands:</p><p><code>Get-Command -Module PackageManagement | Select-Object -Property Name | Format-Wide -Column 2 Find-Package Get-Package Get-PackageProvider Get-PackageSource Install-Package Register-PackageSource Save-Package Set-PackageSource Uninstall-Package Unregister-PackageSource</code>In PackageManagement nomenclature, a package provider represents the &ldquo;conduit&rdquo; between the local computer and the PackageManagement engine. As a matter of fact, PackageManagement is most often called a package manager manager (no, that&rsquo;s not a typo).</p><p>Next, take a look at the default package providers:</p><h2 id="name" class="ps-heading">`Get-PackageProvider | Select-Object -Property Name | Sort-Object -Property Name
Name<a class="ps-heading-anchor" href="#name" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>msi
msu
Programs
PSModule
`Your intuition is correct if you think that you can manage locally installed software by working with the<strong>msi, msu,</strong> and<strong>Programs</strong> providers. A single package provider can be associated with one or more package sources (repositories).</p><p>`Get-PackageSource | Select-Object -Property Name, ProviderName, IsTrusted
Name ProviderName IsTrusted</p><hr><p>PSGallery PSModule False
`The<a href="https://www.powershellgallery.com/">PowerShell Gallery</a> (PSGallery for short) is a Microsoft-run PowerShell module repository. That&rsquo;s fine, but where are the software packages? That&rsquo;s what PackageManagement package sources are for!</p><p>Microsoft promotes the<a href="https://chocolatey.org/">Chocolatey package repository</a> as a starting point for PowerShell package management. Please note that Chocolatey is not owned by Microsoft and using Chocolatey packages is at your own risk.</p><p>Moreover, be aware also that setting the<strong>-Trusted</strong> flag on a repository performs no source code validation. Instead, it simply suppresses an &ldquo;Are you sure?&rdquo; confirmation sanity check before you install a package.</p><p>All that having been said, let&rsquo;s register Chocolatey as a trusted repo on our Windows 7 workstation, and then verify its installation:</p><p>`Register-PackageSource -Name Chocolatey -Location<a href="http://chocolatey.org/api/v2">http://chocolatey.org/api/v2</a> -ProviderName PSModule -Trusted -Verbose
Get-PackageSource | Select-Object -Property Name, ProviderName, IsTrusted
Name ProviderName IsTrusted</p><hr><p>PSGallery PSModule False
Chocolatey PSModule True
`I didn&rsquo;t show it in the previous code example, but on first run you&rsquo;ll be prompted to let PowerShell download and install the NuGet provider.<a href="https://www.nuget.org/">NuGet</a> is a package manager intended for .NET developers and makes it easier to find and install code libraries in Visual Studio. Chocolatey has a dependency on NuGet, so that&rsquo;s why it&rsquo;s required.</p><p>The open-source world seems to love word puns; perhaps you derived a few &lsquo;yuk yuks&rsquo; over the idea of &ldquo;chocolatey nuget,&rdquo; right? Er, maybe not. 🙂</p><h2 id="installing-some-software" class="ps-heading">Installing Some Software<a class="ps-heading-anchor" href="#installing-some-software" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Well, the great moment has arrived: Let&rsquo;s install some software. How about 7-Zip, the freeware file archiver? Does the Chocolatey repo host a copy of the tool?</p><p><code>Find-Package -Name *7zip*</code>I&rsquo;ll spare you the output, but the answer is &ldquo;Yes, of course.&rdquo; Now that we know the name of the package, we can pipeline the object to<strong><a href="https://docs.nuget.org/consume/package-manager-console-powershell-reference#install-package">Install-Package</a>.</strong> We&rsquo;ll specify** **the<strong>-Verbose</strong> switch parameter so we see as many &ldquo;behind the scenes&rdquo; details as possible:</p><p><code>Find-Package -Name 7zip | Install-Package -Verbose -Force</code>Sadly, I learned through bitter experience (as well as by inspecting the<strong>-Verbose</strong> package installation output) that different packages put the executables in different folders. For instance, the Chocolatey<a href="http://www.7-zip.org/">7-Zip</a> package uses the traditional<strong>C:\Program Files</strong>. On the other hand, the Chocolatey<a href="https://technet.microsoft.com/en-us/sysinternals/bb545021.aspx">Windows Sysinternals</a> package places its executables in the path<strong>C:\Chocolatey\bin</strong>. Thus, I needed to add this path permanently to my<a href="https://www.wikiwand.com/en/PATH_(variable)">PATH</a> environment variable to make the Sysinternals utilities easier to use from within PowerShell. </p><p>Now for the bad news. What I said in the previous paragraph is perfectly valid for PackageManagement under Windows PowerShell v5. However, I was unable to install any packages on my Windows 7 SP1 machine. Strangely, the package installations failed not with a traditional red error message but with the yellow (or green? I&rsquo;m colorblind) warning message:</p><p><code>WARNING: The module '7zip' cannot be installed or updated because it is not a properly-formed module.</code>This is obviously a bug. Either that or I did something stupid on my own on this computer .:)</p><h2 id="testing-powershellget" class="ps-heading">Testing PowerShellGet<a class="ps-heading-anchor" href="#testing-powershellget" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Just for grins, let&rsquo;s use PowerShellGet to install<a href="http://www.powertheshell.com/isesteroids/">ISE Steroids</a>, my favorite script editor. We&rsquo;ll begin by enumerating the PowerShellGet functions as usual:</p><p><code>Get-Command -Module PowerShellGet | Select-Object -Property Name | Format-Wide -Column 2 Find-Module Get-InstalledModule Get-PSRepository Install-Module Publish-Module Register-PSRepository Save-Module Set-PSRepository Uninstall-Module Unregister-PSRepository Update-Module</code>Fun fact: The PowerShellGet functions are simply wrappers for PackageManagement commands. PowerShellGet runs through the PSModule package provider by default.</p><p>Next we&rsquo;ll install the module. Yes, we could use<strong>Find-Module</strong>, but I already know that<a href="https://mvp.microsoft.com/en-us/PublicProfile/9199?fullName=Tobias%20Weltner">Dr. Weltner</a> posted his module to the Gallery:</p><p><code>Install-Module -Name ISESteroids -Verbose -Force</code>This time a smile crept across my face when I issued<strong>Start-Steroids</strong> from within my PowerShell v3 ISE and ISE Steroids loaded. </p><h2 id="final-thoughts" class="ps-heading">Final Thoughts<a class="ps-heading-anchor" href="#final-thoughts" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>I have two parting thoughts for you. First, the PackageManagement Modules Preview for PowerShell v3 and v4 (wow, say that three times quickly) is indeed a preview release. Therefore, we can always file bug reports on<a href="https://connect.microsoft.com/PowerShell">Microsoft Connect</a> and I&rsquo;m sure the PowerShell team will validate and correct them.</p><p>Second, any self-respecting business should deploy their own private, internal package and module repositories rather than use public ones like Chocolatey. The best instructions I&rsquo;ve found online for building your own package management repository come from PowerShell MVP<a href="https://mvp.microsoft.com/en-us/PublicProfile/5000355?fullName=Boe%20Prox">Boe Prox</a> in his blog post &ldquo;<a href="http://learn-powershell.net/2014/04/11/setting-up-a-nuget-feed-for-use-with-oneget/">Setting Up a NuGet Feed for Use with OneGet</a>.&rdquo; By the way, OneGet was the original name for what&rsquo;s now called PackageManagement.</p><p>I hope you found this article useful. Let&rsquo;s chat about it in the comments! Thanks for reading and take good care.</p>
]]></content:encoded></item><item><title>Automate Sip Address and UPN name changes in Lync / Skype for Business</title><link>https://powershell.org/articles/2015-10-12-automate-sip-address-and-upn-name-changes-in-lync-skype-for-business/</link><guid>https://powershell.org/articles/2015-10-12-automate-sip-address-and-upn-name-changes-in-lync-skype-for-business/</guid><pubDate>Mon, 12 Oct 2015 18:37:56 +0000</pubDate><description>&lt;p&gt;Name changes are a common occurrence in the world of IT and usually the primary concern is the e-mail address. Exchange e-mail address policies will handle this for us but often times the Sip Address and User Principal Name are left behind. I tackle these changes with an automated way of changing the Lync / Skype for Business sip address (also known as sign-in address) and User Principal Name to match the e-mail address. I also include the link to download the Lync / Skype for Business meeting update tool that is required when a Sip Address is changed. Head on over to &lt;a href="http://powershellblogger.com/?p=164"&gt;PowerShellBlogger.com&lt;/a&gt; for the full article.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Name changes are a common occurrence in the world of IT and usually the primary concern is the e-mail address. Exchange e-mail address policies will handle this for us but often times the Sip Address and User Principal Name are left behind. I tackle these changes with an automated way of changing the Lync / Skype for Business sip address (also known as sign-in address) and User Principal Name to match the e-mail address. I also include the link to download the Lync / Skype for Business meeting update tool that is required when a Sip Address is changed. Head on over to<a href="http://powershellblogger.com/?p=164">PowerShellBlogger.com</a> for the full article.</p>
]]></content:encoded></item><item><title>Export Subnets from Active Directory Sites and Services</title><link>https://powershell.org/articles/2015-10-09-export-subnets-from-active-directory-sites-and-services/</link><guid>https://powershell.org/articles/2015-10-09-export-subnets-from-active-directory-sites-and-services/</guid><pubDate>Sat, 10 Oct 2015 02:39:20 +0000</pubDate><description>&lt;p&gt;I am back this week with a quick write up on how to export your network subnets from Active Directory Sites and Services. Active Directory Sites and Services subnet assignments are important for healthy replication and for location based services to function properly. The need for this information has come across my desk on several occasions. Even a quick print out would be extremely helpful to keep at your desk.  I have included both Windows 7/2008 and Windows 8/2012 methods to ensure everyone is covered. Head on over to &lt;a href="http://powershellblogger.com/?p=121"&gt;PowerShellBlogger.com&lt;/a&gt; for the full article. As always, leave a comment and I will be sure to respond.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I am back this week with a quick write up on how to export your network subnets from Active Directory Sites and Services. Active Directory Sites and Services subnet assignments are important for healthy replication and for location based services to function properly. The need for this information has come across my desk on several occasions. Even a quick print out would be extremely helpful to keep at your desk.  I have included both Windows 7/2008 and Windows 8/2012 methods to ensure everyone is covered. Head on over to<a href="http://powershellblogger.com/?p=121">PowerShellBlogger.com</a> for the full article. As always, leave a comment and I will be sure to respond.</p>
]]></content:encoded></item><item><title>Testing PowerShell Direct with Windows Server 2016 TP3 Hyper-V</title><link>https://powershell.org/articles/2015-10-08-testing-powershell-direct-with-windows-server-2016-tp3-hyper-v/</link><guid>https://powershell.org/articles/2015-10-08-testing-powershell-direct-with-windows-server-2016-tp3-hyper-v/</guid><pubDate>Thu, 08 Oct 2015 14:03:48 +0000</pubDate><description>&lt;p&gt;Hey there! I  thought we could test &lt;a href="http://blogs.technet.com/b/virtualization/archive/2015/05/14/powershell-direct-running-powershell-inside-a-virtual-machine-from-the-hyper-v-host.aspx"&gt;PowerShell Direct&lt;/a&gt; together today. Here&amp;rsquo;s the elevator pitch: In Windows Server 2016 and Windows 10, we can send PowerShell commands from the Hyper-V host directly to its corresponding virtual machines (VMs), &lt;em&gt;&lt;strong&gt;even in the absence of guest VM networking&lt;/strong&gt;&lt;/em&gt;. Yeah, that&amp;rsquo;s cool, isn&amp;rsquo;t it?&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s just as impressive is that PowerShell Direct works _&lt;strong&gt;even if PowerShell remoting is disabled on the guest VM!&lt;/strong&gt; _PowerShell Direct also circumvents Windows Firewall. Note that PowerShell Direct requires that commands are sent only from a Hyper-V host to its local VMs.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Hey there! I  thought we could test<a href="http://blogs.technet.com/b/virtualization/archive/2015/05/14/powershell-direct-running-powershell-inside-a-virtual-machine-from-the-hyper-v-host.aspx">PowerShell Direct</a> together today. Here&rsquo;s the elevator pitch: In Windows Server 2016 and Windows 10, we can send PowerShell commands from the Hyper-V host directly to its corresponding virtual machines (VMs),<em><strong>even in the absence of guest VM networking</strong></em>. Yeah, that&rsquo;s cool, isn&rsquo;t it?</p><p>What&rsquo;s just as impressive is that PowerShell Direct works _<strong>even if PowerShell remoting is disabled on the guest VM!</strong> _PowerShell Direct also circumvents Windows Firewall. Note that PowerShell Direct requires that commands are sent only from a Hyper-V host to its local VMs.</p><p>Also, PowerShell Direct is supported at this point only by Windows Server 2016 TP3 and Windows 10. That means a Windows Server 2016 TP3 Hyper-V host cannot leverage PowerShell Direct against, say, Windows Server 2012 R2 virtual machines (give the Hyper-V, PowerShell, and Windows Server teams time; I&rsquo;m sure this will be supported in the future).</p><p>The secret sauce behind PowerShell Direct is<a href="https://msdn.microsoft.com/en-us/library/dd357801.aspx">PowerShell Remoting Protocol</a> (MS-PSRP), which used to be called just plain ol&rsquo; garden variety &ldquo;PowerShell remoting.&rdquo;</p><h2 id="the-lab-setup" class="ps-heading">The Lab Setup<a class="ps-heading-anchor" href="#the-lab-setup" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>In my test lab, I started with a domain controller and Hyper-V host (yeah, I&rsquo;m combining server roles&ndash;what of it?) named<strong>hyperv1.company.pri</strong>. That server&rsquo;s running<a href="https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-technical-preview">Windows Server 2016 Technical Preview 3</a>.</p><p>In Hyper-V I created a single virtual switch named<strong>Internal</strong> that is connected to the host/guest network. Of course, we don&rsquo;t care about the switch fabric because we&rsquo;re going to use PowerShell Direct.</p><p>Next, I built a Windows Server 2016 TP3-based guest VM named<strong>server1</strong> and disabled the network adapter as you can see in the following screenshot. No smoke and mirrors here!</p><p><a href="https://powershell.org/wp-content/uploads/2015/10/Our-lab-set-up-and-ready-to-test-PowerShell-direct.png"><img src="https://powershell.org/wp-content/uploads/2015/10/Our-lab-set-up-and-ready-to-test-PowerShell-direct.png" alt="Our lab is set up and ready to test PowerShell Direct."/></p><pre><code>Our lab is set up and ready to test PowerShell Direct.</code></pre><p>As a final &ldquo;sanity check&rdquo; to ensure the guest VM is as theoretically inaccessible as possible, I blocked access to all remote access session configurations and disabled the Windows Remote Management (WinRM) service by running the following command from within the guest (thanks to PowerShell MVP <a href="https://twitter.com/alexandair">Aleksandar Nikolić</a> for clarification on this point):</p><p><code>Disable-PSRemoting -Force Get-Service -Name WinRM | Stop-Service -Force | Set-Service -StartupType Disabled</code>Okay. Let&rsquo;s move onto the next phase of our experiment.</p><h2 id="sending-commands-to-the-guest-vm" class="ps-heading">Sending Commands to the Guest VM<a class="ps-heading-anchor" href="#sending-commands-to-the-guest-vm" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Let&rsquo;s obtain the name and globally unique identifier (GUID) of our Windows Server 2016 VM (you&rsquo;ll see why in just a moment):</p><p>`Get-VM | Select-Object -Property Name, VMid
Name VMId</p><hr><p>server1 31d787fe-02cd-4363-b50b-16bc8243fc77
`PowerShell Direct makes itself manifest by means of two new parameters:</p><ul><li>VMname</li><li>VMGuid</li></ul><p>Handy, eh? The following two cmdlets support the<strong>-VMname</strong> and<strong>-VMGuid</strong> parameters as of this writing in October 2016:</p><ul><li><a href="https://technet.microsoft.com/en-us/library/hh849707.aspx">Enter-PSSession</a></li><li><a href="https://technet.microsoft.com/en-us/library/hh849719.aspx">Invoke-Command</a></li></ul><p>Time to test! Let&rsquo;s start a remote session with the<strong>server1</strong> guest VM by specifying its GUID. Note that you will need:</p><ul><li>Hyper-V administrative privileges on the host</li><li>Local administrative privileges on the guest</li></ul><p><code>$cred = Get-Credential Enter-PSSession -VMGuid 31d787fe-02cd-4363-b50b-16bc8243fc77 -Credential $cred [server1]: PS C:\Users\Administrator\Documents&gt;</code>We&rsquo;ll finish by using Invoke-Command to send ad-hoc PowerShell pipelines and entire scripts from host to guest:</p><p><code>Invoke-Command -VMName 'server1' -Credential $cred -ScriptBlock { Get-Service | Where-Object {$_.Status -eq 'Stopped'} } Invoke-Command -VMName 'server1' -FilePath 'D:\scripts\setup-ip.ps1' -Credential $cred</code>## Conclusions</p><p>Convenience is the primary advantage that PowerShell Direct brings to us Hyper-V administrators. We can connect to and fully administer our guest virtual machines regardless of their networking, firewall, or WS-Man state. Thanks for reading, and more power to the shell!</p>
]]></content:encoded></item><item><title>#MSPSUG Virtual Meeting: Using Regular Expressions with #PowerShell – October 13th 2015</title><link>https://powershell.org/articles/2015-10-06-mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015/</link><guid>https://powershell.org/articles/2015-10-06-mspsug-virtual-meeting-using-regular-expressions-with-powershell-october-13th-2015/</guid><pubDate>Tue, 06 Oct 2015 14:13:57 +0000</pubDate><description>&lt;p&gt;Join the Mississippi PowerShell User Group virtually on Tuesday, October 13th at 8:30pm Central Time when &lt;a href="http://twitter.com/TechTrainerTim"&gt;Timothy Warner&lt;/a&gt; will present “&lt;em&gt;&lt;strong&gt;Pattern Match Like a Pro: Using Regular Expressions with Windows PowerShell&lt;/strong&gt;&lt;/em&gt;”.&lt;/p&gt;
&lt;p&gt;Many Windows systems administrators are intimidated with regular expressions due to its seemingly strange, &amp;ldquo;Unixy&amp;rdquo; syntax. Take heart! By the end of this session, you&amp;rsquo;ll finally understand how to perform simple and advanced text filtering with RegEx, specifically by leveragine PowerShell&amp;rsquo;s -match operator and Select-String cmdlet.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join the Mississippi PowerShell User Group virtually on Tuesday, October 13th at 8:30pm Central Time when<a href="http://twitter.com/TechTrainerTim">Timothy Warner</a> will present “<em><strong>Pattern Match Like a Pro: Using Regular Expressions with Windows PowerShell</strong></em>”.</p><p>Many Windows systems administrators are intimidated with regular expressions due to its seemingly strange, &ldquo;Unixy&rdquo; syntax. Take heart! By the end of this session, you&rsquo;ll finally understand how to perform simple and advanced text filtering with RegEx, specifically by leveragine PowerShell&rsquo;s -match operator and Select-String cmdlet.</p><p>Visit the<a href="http://mspsug.com/2015/09/22/mspsug-1013-meeting-pattern-match-like-a-pro-using-regular-expressions-with-windows-powershell/">Mississippi PowerShell User Group</a> website to learn more about Timothy and to find out more details about this month’s meeting.</p><p>The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “<a href="http://mspsug.com/attendee-info/">Attendee Info</a>” section.</p><p>Register via<a href="http://mspsug.eventbrite.com/">EventBrite</a> to receive the URL for this meeting.</p><p>Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group.</p><p>µ</p>
]]></content:encoded></item><item><title>Finding Evil LDAP Queries</title><link>https://powershell.org/articles/2015-10-05-finding-evil-ldap-queries/</link><guid>https://powershell.org/articles/2015-10-05-finding-evil-ldap-queries/</guid><pubDate>Mon, 05 Oct 2015 14:17:34 +0000</pubDate><description>&lt;p&gt;Have you ever wondered what LDAP queries were hitting your domain controllers? Even outside of fun investigations, it can be insightful to get a sampling of queries hitting your domain controller. The more services you have integrated with Active Directory, the more likely a vendor or sysadmin unwittingly configured their service to produce evil queries.&lt;/p&gt;
&lt;p&gt;Mark Morowczynski from Microsoft wrote a great post on &lt;a href="http://blogs.technet.com/b/askpfeplat/archive/2015/05/11/how-to-find-expensive-inefficient-and-long-running-ldap-queries-in-active-directory.aspx"&gt;finding these expensive, inefficient, or long running queries&lt;/a&gt; - But something was missing. Screen shots of regedit? If you have more than a handful of domain controllers, enabling and disabling this logging is going to be quite a chore.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Have you ever wondered what LDAP queries were hitting your domain controllers? Even outside of fun investigations, it can be insightful to get a sampling of queries hitting your domain controller. The more services you have integrated with Active Directory, the more likely a vendor or sysadmin unwittingly configured their service to produce evil queries.</p><p>Mark Morowczynski from Microsoft wrote a great post on <a href="http://blogs.technet.com/b/askpfeplat/archive/2015/05/11/how-to-find-expensive-inefficient-and-long-running-ldap-queries-in-active-directory.aspx">finding these expensive, inefficient, or long running queries</a> - But something was missing. Screen shots of regedit? If you have more than a handful of domain controllers, enabling and disabling this logging is going to be quite a chore.</p><p><a href="http://ramblingcookiemonster.github.io/Evil-LDAP-Queries/">Here&rsquo;s a quick bit</a> on using PowerShell to enable and disable this logging quickly. Take a peek, you might find some misbehaving applications.</p>
]]></content:encoded></item><item><title>2015-October Scripting Games Puzzle</title><link>https://powershell.org/articles/2015-10-03-october-2015-scripting-games-puzzle/</link><guid>https://powershell.org/articles/2015-10-03-october-2015-scripting-games-puzzle/</guid><pubDate>Sat, 03 Oct 2015 13:31:53 +0000</pubDate><description>&lt;p&gt;Our October 2015 puzzle might take us beyond the realm of one-liners, but it circles back to the August 2015 theme of retrieving information from the web. This is another scenario that actually has a lot of real-world applications, in that there&amp;rsquo;s a lot of practical uses in the work environment for this technique. &lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Our October 2015 puzzle might take us beyond the realm of one-liners, but it circles back to the August 2015 theme of retrieving information from the web. This is another scenario that actually has a lot of real-world applications, in that there&rsquo;s a lot of practical uses in the work environment for this technique. </p><h2 id="instructions" class="ps-heading"><strong>Instructions</strong><a class="ps-heading-anchor" href="#instructions" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month&rsquo;s puzzle. You can find them all at<a href="https://powershell.org/category/announcements/scripting-games/">https://powershell.org/category/announcements/scripting-games/</a>. Many puzzles will include optional challenges, that you can use to really push your skills.</p><p><strong>To participate</strong>, add your solution to a public Gist (<a href="http://gist.github.com">http://gist.github.com</a>; you&rsquo;ll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post. 
**Only post one entry per person. You are not allowed to come back and post corrected or improved versions. If you do, all of your posts will be ignored. **However, remember that you can always go back and edit your Gist. We&rsquo;ll always pull the most recent one when we display it, so there&rsquo;s no need to post multiple entries if you want to make an edit.</p><p>Don&rsquo;t forget the <a href="https://powershell.org/?p=2574">main rules and purpose of these monthly puzzles</a>, including the fact that you won&rsquo;t receive individual scoring or commentary on your entry.</p><p><strong>User groups are encouraged to work together</strong> on the monthly puzzles. User group leaders should submit their group&rsquo;s best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most &ldquo;favorite&rdquo; entries of the year will win a grand prize from PowerShell.org.</p><h2 id="" class="ps-heading"><a class="ps-heading-anchor" href="#" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><h2 id="our-puzzle" class="ps-heading"><strong>Our Puzzle</strong><a class="ps-heading-anchor" href="#our-puzzle" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Write a short script that can retrieve the most recent article headlines from a blog by using the blog’s RSS or Atom feed. You should ideally just display the headlines, but might also choose to display a URL that links to the article, and might display a short excerpt of the article. If the feed contains the full article text, don’t display it – at most, display a short excerpt.</p><p>While you could definitely write this as a one-liner, and might choose to do so as you start, there&rsquo;s real value in turning this into a &ldquo;Get-RSSFeed&rdquo; function. To be fair, lots of folks have done this before - but challenge yourself, and try to figure it out without opening a search engine!</p><p><strong>Challenges:</strong></p><ul><li>Try to write this to be a PowerShell command (an advanced function) that uses parameters to direct the behavior of the command.</li><li>Try to ensure your script’s output could be easily displayed in an on-screen table, or redirected to a CSV file.</li><li>Try to minimize your use of “raw” .NET classes (e.g., try to use only PowerShell commands as much as possible).</li></ul>]]></content:encoded></item><item><title>Delete Specific E-Mail or E-Mails From All Exchange Mailboxes</title><link>https://powershell.org/articles/2015-10-02-delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes/</link><guid>https://powershell.org/articles/2015-10-02-delete-specific-e-mail-or-e-mails-from-all-exchange-mailboxes/</guid><pubDate>Fri, 02 Oct 2015 15:27:10 +0000</pubDate><description>&lt;p&gt;Well this is week number two in my quest to post an article once a week and I am back with a common request for Exchange administrators. There are a lot of scenarios that bring up a need to remove an e-mail or e-mails from all mailboxes in your environment. Perhaps there was a disgruntled employee, a virus outbreak, or a reply all to the whole company. We all know that the &amp;ldquo;Retract&amp;rdquo; button is best effort (yes I still miss GroupWise for that purpose).&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Well this is week number two in my quest to post an article once a week and I am back with a common request for Exchange administrators. There are a lot of scenarios that bring up a need to remove an e-mail or e-mails from all mailboxes in your environment. Perhaps there was a disgruntled employee, a virus outbreak, or a reply all to the whole company. We all know that the &ldquo;Retract&rdquo; button is best effort (yes I still miss GroupWise for that purpose).</p><p>As always we can turn to PowerShell for our scripting needs. The Search-Mailbox command is your best friend for these scenarios. With a simple Get-Mailbox | Search-Mailbox you can take control of all your mailboxes. Be extremely cautious when executing, with great power comes great responsibility. For a full run down on how to accomplish this head on over to<a href="http://powershellblogger.com/?p=117">PowerShellBlogger.com</a>. I look forward to seeing everyone again next week!</p>
]]></content:encoded></item><item><title>Convert ISO and WIM to VHD with a module</title><link>https://powershell.org/articles/2015-09-28-convert-iso-and-wim-to-vhd-with-a-module/</link><guid>https://powershell.org/articles/2015-09-28-convert-iso-and-wim-to-vhd-with-a-module/</guid><pubDate>Tue, 29 Sep 2015 04:24:03 +0000</pubDate><description>&lt;p&gt;Convert-WindowsImage.ps1 is a very popular method to create VHD&amp;rsquo;s with. However it&amp;rsquo;s not a module, and in it&amp;rsquo;s current form cant be added to one.&lt;/p&gt;
&lt;p&gt;So I have started a new project on GitHub called WindowsImageTools and posted the results to the &lt;a href="https://www.powershellgallery.com/packages/WindowsImageTools/"&gt;PowerShell Gallery&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It has a few functions so far. Convert-Wim2Vhd, to do the work,  and New-UnattendXml because it hate having to edit XML to make minor changes. The resulting XML is universal in that it works on both 32 and 64 bit and will do a silent install (currently on Volume Media only). Then it auto-logs on the Admin and run a PowerShell script to kick off what ever you need bootstrapped (like DSC)&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Convert-WindowsImage.ps1 is a very popular method to create VHD&rsquo;s with. However it&rsquo;s not a module, and in it&rsquo;s current form cant be added to one.</p><p>So I have started a new project on GitHub called WindowsImageTools and posted the results to the<a href="https://www.powershellgallery.com/packages/WindowsImageTools/">PowerShell Gallery</a>.</p><p>It has a few functions so far. Convert-Wim2Vhd, to do the work,  and New-UnattendXml because it hate having to edit XML to make minor changes. The resulting XML is universal in that it works on both 32 and 64 bit and will do a silent install (currently on Volume Media only). Then it auto-logs on the Admin and run a PowerShell script to kick off what ever you need bootstrapped (like DSC)</p><p>To find out more. take look at the details over on<a href="https://bladefirelight.wordpress.com/2015/09/29/shaving-the-yak-leads-me-to-create-new-module-windowsimagetools/">my blog about WindowImageTools</a> (and Yaks) or the<a href="https://github.com/BladeFireLight/WindowsImageTools">GitHub repo</a></p>
]]></content:encoded></item><item><title>How to handle oAuth from PowerShell</title><link>https://powershell.org/articles/2015-09-25-how-to-handle-oauth-from-powershell/</link><guid>https://powershell.org/articles/2015-09-25-how-to-handle-oauth-from-powershell/</guid><pubDate>Fri, 25 Sep 2015 15:35:24 +0000</pubDate><description>&lt;p&gt;One of the coolest features of PowerShell is the many tools we have available to work with services on the web, be they SOAP, REST, RPC or even WSDL services.  It&amp;rsquo;s no question, PowerShell makes it very easy to pull down data from any of these places.&lt;/p&gt;
&lt;p&gt;Unfortunately, getting data from a service isn&amp;rsquo;t always as easy as embedding your credentials in a URL. In fact, some services require us to authenticate and ask the user for permission before giving up the goods.  For these, oAuth is the de-facto standard for delegated access.  &lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>One of the coolest features of PowerShell is the many tools we have available to work with services on the web, be they SOAP, REST, RPC or even WSDL services.  It&rsquo;s no question, PowerShell makes it very easy to pull down data from any of these places.</p><p>Unfortunately, getting data from a service isn&rsquo;t always as easy as embedding your credentials in a URL. In fact, some services require us to authenticate and ask the user for permission before giving up the goods.  For these, oAuth is the de-facto standard for delegated access.  </p><p>In this blog post today on FoxDeploy.com, we cover an easy method to present a user with an oAuth window to ask for permission, and offer a guide of how to handle the somewhat complicated flow of credentials and URLs needed to delegate permissions, using WordPress as an example.  </p><p><a href="http://foxdeploy.com/2015/09/25/using-powershell-and-oauth/">Using PowerShell and oAuth</a></p><h4 id="special-thanks" class="ps-heading">Special Thanks<a class="ps-heading-anchor" href="#special-thanks" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h4><p>This post couldn&rsquo;t have happened without contributions by Lee Holmes,<a href="http://www.adamtheautomator.com/">Adam Bertram</a>,<a href="https://rkeithhill.wordpress.com/">Keith Hill</a>,<a href="https://twitter.com/ps4it">Chris Wu</a>, and<a href="https://twitter.com/ryanyates1990">Ryan Yates</a> for helping me to understand how to safely store credentials, and for other questions.  Extra thanks go to Adam and Ryan for helping me fact-check the post, and to Chris Wu for his excellent write-up on the &lsquo;<a href="http://blogs.technet.com/b/heyscriptingguy/archive/2013/07/01/use-powershell-3-0-to-get-more-out-of-windows-live.aspx">Hey, Scripting Guy</a>&rsquo; blog.  </p><p>-Stephen</p>
]]></content:encoded></item><item><title>Automate enabling and disabling Lync / Skype for Business users</title><link>https://powershell.org/articles/2015-09-23-automate-enabling-and-disabling-lync-skype-for-business-users/</link><guid>https://powershell.org/articles/2015-09-23-automate-enabling-and-disabling-lync-skype-for-business-users/</guid><pubDate>Wed, 23 Sep 2015 21:30:58 +0000</pubDate><description>&lt;p&gt;Hello PowerShell.org community,&lt;/p&gt;
&lt;p&gt;This is my first post here at PowerShell.org, and I have a goal of posting tips, tricks, articles, and solutions once a week. My first exposure to scripting was on my x486 computer. I would always create .bat files to launch my DOS based games from the root folder. I learned complex scripting through the use of VB Script, automating the roll out and updating of Windows 2000 desktops and servers. I quickly transitioned to PowerShell as my preferred scripting language upon its release. I use PowerShell on a daily basis to administer Windows Server, SQL Server, Exchange, Lync / Skype for Business, Citrix XenApp / XenDesktop, Office 365, and Dell Active Roles Server. I have very much enjoyed watching the progression and adoption of PowerShell as the default scripting language. I hope my posts will be useful to other administrators around the world.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Hello PowerShell.org community,</p><p>This is my first post here at PowerShell.org, and I have a goal of posting tips, tricks, articles, and solutions once a week. My first exposure to scripting was on my x486 computer. I would always create .bat files to launch my DOS based games from the root folder. I learned complex scripting through the use of VB Script, automating the roll out and updating of Windows 2000 desktops and servers. I quickly transitioned to PowerShell as my preferred scripting language upon its release. I use PowerShell on a daily basis to administer Windows Server, SQL Server, Exchange, Lync / Skype for Business, Citrix XenApp / XenDesktop, Office 365, and Dell Active Roles Server. I have very much enjoyed watching the progression and adoption of PowerShell as the default scripting language. I hope my posts will be useful to other administrators around the world.</p><p>Today&rsquo;s post deals with automatically enabling and disabling users for Lync / Skype for Business. I kept the script examples simple so that they are easy to understand. If you would like a complex scenario tackled, simply comment on the blog and I will post the solution.</p><p>Head on over to<a href="http://powershellblogger.com/?p=111">PowerShellBlogger.com</a> for a full breakdown of enabling and disabling Lync / Skype for Business users locally or remotely.</p><p>Best Regards,<br>
Steve Parankewich<br>
Twitter:<a href="http://twitter.com/powershellblog">powershellblog</a></p>
]]></content:encoded></item><item><title>PowerShell Scheduled Jobs and Tableau analytics</title><link>https://powershell.org/articles/2015-09-21-powershell-scheduled-jobs-and-tableau-analytics/</link><guid>https://powershell.org/articles/2015-09-21-powershell-scheduled-jobs-and-tableau-analytics/</guid><pubDate>Mon, 21 Sep 2015 18:43:21 +0000</pubDate><description>&lt;p&gt;Here’s a brief rundown of how we leverage a few Cmdlets from the PSScheduledJob module to manage our Analytics stack. For those of us on the Analytics team at
&lt;a href="http://www.pluralsight.com/"&gt;
Pluralsight
&lt;/a&gt;
, PowerShell is the lynch-pin which binds our two worlds together. To manage the gaps inherent in all platforms (since one tool would be hard-pressed to cover all areas), we use PowerShell to link the worlds of Data and Analytics (and back). We do this because of its depth and the ease with which we can automate just about anything.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Here’s a brief rundown of how we leverage a few Cmdlets from the PSScheduledJob module to manage our Analytics stack. For those of us on the Analytics team at<a href="http://www.pluralsight.com/">
Pluralsight</a>
, PowerShell is the lynch-pin which binds our two worlds together. To manage the gaps inherent in all platforms (since one tool would be hard-pressed to cover all areas), we use PowerShell to link the worlds of Data and Analytics (and back). We do this because of its depth and the ease with which we can automate just about anything.</p><p><a href="https://powershell.org/wp-content/uploads/2015/09/data_stack.png"><img src="https://powershell.org/wp-content/uploads/2015/09/data_stack.png" alt="data_stack"/></p><p>All that said, we leverage two Cmdlets extensively:
_
Register-ScheduledJob
_
and
_
New-JobTrigger.
_
In all, there are:</p><ul><li/></ul><p>90+ jobs</p><ul><li/></ul><p>30+ enabled and scheduled</p><ul><li/></ul><p>2 jobs to manage the metadata</p><ul><li/></ul><p>1 Tableau workbook that surfaces this data to our team</p><p>**The ‘How does the job perform’ part: **</p><p>So, you’ve registered a job which soon becomes about 50 jobs. How do you know if each of them succeeded, how long they took, and whether or not they had errors? What about knowing if one takes 10x longer on one particular day? This is certainly worth investigating and analyzing so that you can react quickly to potential hiccups. The below script will let you do that and is meant to be&hellip;wait for it&hellip;scheduled.</p><p><code>$jobs = Get-ScheduledJob foreach ($job in $jobs) { Get-Job -Name $job.Name -Newest 1 | select -Property @{n='Env';e={"$env:computername"}},@{n='Name';e={$job.name}}, @{n='State';e={$_.State}},@{n='DurationInSec';e={($_.PSEndTime - $_.PSBeginTime).Total Seconds}},@{n='TimeStart';e={$_.PSBeginTime}},@{n='TimeEnd';e={$_.PSEndTime}},@{n='ErrCnt';e={($_.Error).count}},@{n='Date';e={(Get-Date).ToString('yyyy-MM-dd')}} | Export-Csv -Path 'your path' -Delimiter ";" -NoTypeInformation -Append }</code><strong>The ‘When do these jobs happen’ part:</strong></p><p>While we didn’t use all the properties in the<em>Get-ScheduledJob</em> cmdlet, we did pull out a few. Mostly, we want duration, error count and start/end times.</p><p>It’s one thing to have a few scheduled jobs running, but it becomes a different animal altogether when there are over 90 happening throughout the day (and on multiple machines). In order to both tame the chaos and control the inevitable job failures, it is necessary to know about (1) when they happened and (2) what happens
_
when
_
they, well, run.</p><p>Again, the basic assumption is that one has some scripts and/or files with code in them. The scheduled jobs, then, make this easier. Here’s a basic example of the ‘when’ regarding the scheduled jobs. We’re exporting a csv so that we can then consume it in<a href="http://www.tableau.com/">
Tableau</a>
for analysis and alerting:</p><p><code>$t = New-JobTrigger -Daily -At "8:00PM" -RandomDelay 00:00:30 Register-ScheduledJob -Name 'Cool Name Here' -ScriptBlock { $TsJobs = Get-ScheduledJob | select -expand Name foreach($job in $TsJobs) { Get-JobTrigger -Name $job | select @{n='Env';e={"$env:computername"}},@{n='Date';e={(Get-Date).ToString('yyyy-MM-dd')}},@{n='JobName';e={$job}},Frequency,@{n='Time';e={([datetime]($_.At)).ToShortTime String()}},@{n='DaysOfWeek';e={$_.DaysOfWeek}},Enabled,RepetitionInterval | export-csv 'your path' -delimiter ";" -NoTypeInformation -Append } } -Trigger $t</code>For this part, much like above, we use a few properties from the
_
Get-JobTrigger
_
cmdlet for the analysis and trending of our jobs (see image below).</p><p><a href="https://powershell.org/wp-content/uploads/2015/09/schd_job_triggers.png"><img src="https://powershell.org/wp-content/uploads/2015/09/schd_job_triggers.png" alt="schd_job_triggers"/></p><p><strong>Summary</strong></p><p>I have added a ‘Date’ field to both sections so that we can do some historical analysis with the jobs. What’s also important is whenever we have to update software/change things on the servers, we can use this to identify when, during the day, we might have a window to do this, not to mention what jobs would be affected by it.</p><p>With two simple bits, we’re able to get a deeper look into the performance and potential avenues for tuning of our analytics pipeline and the jobs. This type of analysis on the ScheduledJob cmdlets can also be correlated with system performance (eg: logs) and our Analytics infrastructure’s performance and logs. While it’s a unique look at a use case for PowerShell, we find it’s been invaluable at providing the data that might not fit into the domains listed above. In short, it’s a perfect ‘glue’ for each pillar we interact with.</p><p>In the image below, we’ve put it all together for the ‘Job Performance’ overview. This allows us to narrow in on the job/jobs that might not be performing up to par (or as they have historically).</p><p><a href="https://powershell.org/wp-content/uploads/2015/09/data_control_dashboard.png"><img src="https://powershell.org/wp-content/uploads/2015/09/data_control_dashboard.png" alt="data_control_dashboard"/></p>
]]></content:encoded></item><item><title>Take home from PowerShell Summit Europe</title><link>https://powershell.org/articles/2015-09-17-take-home-from-powershell-summit-europe/</link><guid>https://powershell.org/articles/2015-09-17-take-home-from-powershell-summit-europe/</guid><pubDate>Thu, 17 Sep 2015 12:25:55 +0000</pubDate><description>&lt;p&gt;WOOHA it&amp;rsquo;s been a great week.&lt;/p&gt;
&lt;p&gt;I sat down last night my brain all fried and tried to compile a list of things to remember from the past week.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.powershellmagazine.com/2011/09/23/powershell-wallpapers/"&gt;&lt;img src="https://powershell.org/wp-content/uploads/2015/09/KeepCalmAndLearnPowerShell_1024x768.jpg" alt="PowerShellMagazine - (wallpaper) - KEEP CALM.cdr"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There is  much focus on &amp;ldquo;changing the mindset&amp;rdquo; of the community. Get into the DevOps mindset and become a toolmakers. This is my take-home from the conference. There&amp;rsquo;s no way to summarize all of the conference other than to say: Look forward to the videos on YouTube.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>WOOHA it&rsquo;s been a great week.</p><p>I sat down last night my brain all fried and tried to compile a list of things to remember from the past week.</p><p><a href="http://www.powershellmagazine.com/2011/09/23/powershell-wallpapers/"><img src="https://powershell.org/wp-content/uploads/2015/09/KeepCalmAndLearnPowerShell_1024x768.jpg" alt="PowerShellMagazine - (wallpaper) - KEEP CALM.cdr"/></p><p>There is  much focus on &ldquo;changing the mindset&rdquo; of the community. Get into the DevOps mindset and become a toolmakers. This is my take-home from the conference. There&rsquo;s no way to summarize all of the conference other than to say: Look forward to the videos on YouTube.</p><h4 id="stuff-to-read" class="ps-heading">Stuff to read:<a class="ps-heading-anchor" href="#stuff-to-read" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h4><ul><li>A great short read about &ldquo;<a href="http://www.itskeptic.org/content/important-devops-word-toolmakers">Toolmaking</a>&rdquo;</li><li><a href="https://twitter.com/StevenMurawski">Steven</a> did a<a href="http://stevenmurawski.com/devops-reading-list/index.html">DevOps Reading list</a>.</li></ul><h3 id="concepts" class="ps-heading">Concepts:<a class="ps-heading-anchor" href="#concepts" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><ul><li><strong><a href="https://twitter.com/iainbrighton">Iain Brighton</a>&rsquo;s talk &ldquo;Man vs Testlab&rdquo;</strong>. I&rsquo;m definitely going home and testing his<a href="https://github.com/iainbrighton/PSHSummit-Man-vs-Testlab">script</a> He created a script that will do everything from downloading .iso&rsquo;s from Microsoft, Configure Hyper-V, create instances and spawns servers for you. To stand up a entire Testlab following the<a href="http://social.technet.microsoft.com/wiki/contents/articles/7807.windows-server-2012-test-lab-guides.aspx">Microsoft Lab guides standard</a>. (DC, Server, Non-domain joined server and a client) You can of cause easily change the setup.</li><li><strong>GitHub</strong> I was amazed by <a href="https://twitter.com/HemantMahawar">Hemant Mahawar</a> and<a href="https://github.com/KrishnaV-MSFT">Krishna C Vutukuri</a>&rsquo;s talk on the way the PowerShell team uses GitHub and how easy it is to contribute to the code today. (Go
get a GitHub account today
! and start learning if you haven&rsquo;t already, and<a href="https://github.com/powershell/">go here</a> to contribute)</li><li><strong>PowerShell Gallery</strong> There were multiple talks on the<a href="http://www.PowerShellGallery.com">Gallery</a> and I personally love this. It&rsquo;s nice to hear that the PowerShell Team feels the same way. (See earlier<a href="https://powershell.org/2015/09/11/working-with-powershellgallery/">post</a>)</li><li><strong>Pester tests</strong> Unfortunately I didn&rsquo;t attend any pester specific talks this time. But it&rsquo;s clear from the general theme that pester is a big part of the DevOps&rsquo; mindset and the way tools are being developed in the future.<ul><li> Quote<a href="https://twitter.com/juneb_get_help">June Blender</a>:<em>Free! #PowerShell Community Build Server. Runs Pester tests on v2-v5 automatically. Best thing since the pipeline.<a href="http://t.co/1SFKWez7O2">http://t.co/1SFKWez7O2</a></em></li></ul></li><li><strong>DSC</strong> This is a crucial platform for the future. The ability to use the &ldquo;Make it so&rdquo; mindset. To configure and services and prevent drift, this is the documentation of the future.<a href="https://www.microsoftvirtualacademy.com/en-US/training-courses/getting-started-with-powershell-desired-state-configuration-dsc--8672">Getting started</a></li></ul><p><a href="https://powershell.org/wp-content/uploads/2015/09/makeitso.png"><img src="https://powershell.org/wp-content/uploads/2015/09/makeitso.png" alt="makeitso"/></p><p>There were tons of other things going on. On a personal note after my trip to<a href="http://www.psug.dk/?p=649">PSUG.dk</a> a few weeks ago where we had a session on<a href="https://azure.microsoft.com/en-us/documentation/articles/resource-group-overview/">ARM</a> and spend a day creating JSON files by hand by following the schema&rsquo;s on GitHub and had a horrible experience.  <a href="https://twitter.com/JeffWouters">Jeff</a> blew my mind when he demoed roughly the same and noted, off cause we just do: ConvertFrom-Json play with the PowerShell object and ConvertTo-Json back to JSON. He had some really nice examples on how not to do JSON templates, and better ways to generate them.</p><p>And I got really excited when during <a href="https://twitter.com/SimonWahlin">Simon</a>&rsquo;s talk on GitHub, I asked for ISE integration and<a href="https://twitter.com/TobiasPSP">Tobias</a> replied from somewhere behind me.</p><p>-<em>Working on that</em>.</p><p>Meaning<a href="http://www.powertheshell.com/isesteroids/">ISESteroids</a> will have that soon. Happy times 😀</p><p>When all the above is done, I only need to figure out how to get to the next Summit 🙂</p><h4 id="contact-me" class="ps-heading">Contact me<a class="ps-heading-anchor" href="#contact-me" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h4><p>Twitter<a href="https://twitter.com/mrhvid">@mrhvid</a></p><p>Web<a href="http://Jonas.SommerNielsen.dk">Jonas.SommerNielsen.dk</a></p>
]]></content:encoded></item><item><title>Speaking at PowerShell Summit 2016: Topic Ideas for Aspiring Speakers</title><link>https://powershell.org/articles/2015-09-16-speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers/</link><guid>https://powershell.org/articles/2015-09-16-speaking-at-powershell-summit-2016-topic-ideas-for-aspiring-speakers/</guid><pubDate>Wed, 16 Sep 2015 08:26:25 +0000</pubDate><description>&lt;p&gt;Our call for topics for &lt;strong&gt;PowerShell and DevOps Global Summit 2016&lt;/strong&gt; is open until November 1st, and I thought I&amp;rsquo;d share some ideas for the kind of 400-level content we&amp;rsquo;re looking for.&lt;/p&gt;
&lt;p&gt;First, to submit abstracts, &lt;a href="https://eventloom.com/event/register/PSNA16/Speaker?preregister=1"&gt;pre-register as a speaker candidate&lt;/a&gt;. Be sure to fill in the brief demographic information presented, and then add any information for the Attendee Directory that you&amp;rsquo;d like. When you&amp;rsquo;re done with that, select &lt;strong&gt;Abstracts&lt;/strong&gt; from the menu at the tippy-top of the page, and enter your session information. Be sure to include, as the first characters in the abstract, either &amp;ldquo;[45m]&amp;rdquo;, &amp;ldquo;[90m]&amp;rdquo;, or &amp;ldquo;[120m]&amp;rdquo; as an indication on your desired timeslot - 45, 90, or 120 minutes. Also set your session to &amp;ldquo;Ready for Review&amp;rdquo; when you&amp;rsquo;re done.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Our call for topics for <strong>PowerShell and DevOps Global Summit 2016</strong> is open until November 1st, and I thought I&rsquo;d share some ideas for the kind of 400-level content we&rsquo;re looking for.</p><p>First, to submit abstracts,<a href="https://eventloom.com/event/register/PSNA16/Speaker?preregister=1">pre-register as a speaker candidate</a>. Be sure to fill in the brief demographic information presented, and then add any information for the Attendee Directory that you&rsquo;d like. When you&rsquo;re done with that, select <strong>Abstracts</strong> from the menu at the tippy-top of the page, and enter your session information. Be sure to include, as the first characters in the abstract, either &ldquo;[45m]&rdquo;, &ldquo;[90m]&rdquo;, or &ldquo;[120m]&rdquo; as an indication on your desired timeslot - 45, 90, or 120 minutes. Also set your session to &ldquo;Ready for Review&rdquo; when you&rsquo;re done.</p><p>Now&hellip; for some ideas! Feel free to riff on these and twist them in any direction you think people would find useful. Keep in mind that we&rsquo;re after 400+ level content - deep, deep dives.</p><ul><li>PowerShell Remoting. Tackle something difficult, like multi-hop authentication, certificate authentication, etc.</li><li>DevOps. Case studies and detailed information into how you&rsquo;ve seen DevOps succeed or fail, along with lessons learned.</li><li>Tooling. Bring deep education on tools that can help enable a DevOps way of life. More than just feature overviews - dig deep into exactly how you improved your organization&rsquo;s operations, and what you learned along the way.</li><li>Deeper coding. Using .NET, digging into the depths of CIM, creating scripted classes, diving into workflow - there&rsquo;s a huge universe of advanced, core PowerShell topics that attendees would benefit from.</li><li>Domain-specific topics. Using PowerShell with Azure, O365, System Center, and more - these are all in-demand topics. Keep the coverage deep - beginner content belongs at another event.</li><li>Hacking the shell. Extending the ISE, writing your own tab completion/expansion routines, and more - dig deep into the shell&rsquo;s guts and show people what can be done.</li><li>Practical shell. Help attendees build reporting infrastructure, inventorying systems, and other complete solutions using a PowerShell, DIY approach.</li></ul><p>As you can see, it&rsquo;s a real greenfield. Speakers will be offered 3 nights&rsquo; hotel accommodations at the Summit, and anyone presenting for more than 45 minutes will be offered an additional honorarium to further offset travel expenses. <strong>Everyone</strong> who has been using the shell for a while has something to offer - so step in and offer!</p>
]]></content:encoded></item><item><title>Store Secured Password in PowerShell Script</title><link>https://powershell.org/articles/2015-09-15-store-secured-password-in-powershell-script/</link><guid>https://powershell.org/articles/2015-09-15-store-secured-password-in-powershell-script/</guid><pubDate>Wed, 16 Sep 2015 00:52:27 +0000</pubDate><description>&lt;p&gt;Automation is awesome, but what if you need to run a script with elevated privileges?   If you are following security best practices then the account you login with most likely doesn&amp;rsquo;t have the required elevated privileges.  Storing your password in plain text in your scripts is no good either.  So what do we do?  There are several options and each has there place, but I&amp;rsquo;ll show you my favorite below.  Check out the full article by clicking on the link below.  While you are there check out some of my other posts, the &lt;a href="http://powershellmasters.com/scripts/"&gt;script repository&lt;/a&gt; and the &lt;a href="http://powershellmasters.com/resources/"&gt;resource page&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Automation is awesome, but what if you need to run a script with elevated privileges?   If you are following security best practices then the account you login with most likely doesn&rsquo;t have the required elevated privileges.  Storing your password in plain text in your scripts is no good either.  So what do we do?  There are several options and each has there place, but I&rsquo;ll show you my favorite below.  Check out the full article by clicking on the link below.  While you are there check out some of my other posts, the<a href="http://powershellmasters.com/scripts/">script repository</a> and the<a href="http://powershellmasters.com/resources/">resource page</a>.</p><p><strong><a href="http://powershellmasters.com/2015/08/store-secured-password-in-powershell-script">Store Secured Password in PowerShell Script</a></strong></p><p>As always make sure once you&rsquo;ve checked us out over at<a href="http://powershellmasters.com">PowerShellMasters.com</a> to head back here to read more awesome PowerShell posts on<a href="https://powershell.org">PowerShell.org</a>.</p><p>If you have some comments, questions or advice I&rsquo;m happy to hear it.  Thanks for reading and I hope everyone likes the article.</p><p>Thanks</p><p>Matt</p>
]]></content:encoded></item><item><title>Call for Topics Extended: PowerShell and DevOps Global Summit 2016</title><link>https://powershell.org/articles/2015-09-13-call-for-topics-extended-powershell-and-devops-global-summit-2016/</link><guid>https://powershell.org/articles/2015-09-13-call-for-topics-extended-powershell-and-devops-global-summit-2016/</guid><pubDate>Mon, 14 Sep 2015 06:56:16 +0000</pubDate><description>&lt;p&gt;In light of our recent &lt;a href="https://powershell.org/2015/09/13/future-of-powershell-summit-in-europe-and-north-america/"&gt;announcement regarding the future of PowerShell Summit&lt;/a&gt;, we are extending the call for topics to the end of October, 2015.&lt;/p&gt;
&lt;p&gt;We invite speakers to re-visit their existing proposals and indicate the desired length of their session. For example, simply add &amp;ldquo;[45min]&amp;rdquo; to the session abstract if you feel your session is suitable for our traditional 45-minute time slot. Or, indicate an alternative of [90min] or [120min]. &lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>In light of our recent<a href="https://powershell.org/2015/09/13/future-of-powershell-summit-in-europe-and-north-america/">announcement regarding the future of PowerShell Summit</a>, we are extending the call for topics to the end of October, 2015.</p><p>We invite speakers to re-visit their existing proposals and indicate the desired length of their session. For example, simply add &ldquo;[45min]&rdquo; to the session abstract if you feel your session is suitable for our traditional 45-minute time slot. Or, indicate an alternative of [90min] or [120min]. </p><p>We also are broadening the scope of the event to include a variety of DevOps-focused topics. We welcome sessions on DevOps practices, tooling, and technologies.</p><p>Topics on any technology centered on the PowerShell Language Specification are also welcome, including cross-platform DSC, PowerShell on operating systems other than Windows, and so on.</p><p>With our expanded focus and renewed commitment to deep-dive, DevOps-flavored information, we hope that you&rsquo;ll take the time to propose a session for this wonderful new event! Please<a href="https://powershell.org/2015/08/03/powershell-summit-north-america-2016-call-for-topics/">follow the instructions on the original call for topics</a>, with the new deadline and topical focus in mind.</p>
]]></content:encoded></item><item><title>Future of PowerShell Summit in Europe and North America</title><link>https://powershell.org/articles/2015-09-13-future-of-powershell-summit-in-europe-and-north-america/</link><guid>https://powershell.org/articles/2015-09-13-future-of-powershell-summit-in-europe-and-north-america/</guid><pubDate>Mon, 14 Sep 2015 06:49:02 +0000</pubDate><description>&lt;p&gt;As we kick off PowerShell Summit Europe 2015, I wanted to share some decisions we&amp;rsquo;ve made regarding the future of the event.&lt;/p&gt;
&lt;p&gt;When we first launched PowerShell Summit in 2013, our goal was to be the spiritual successor of the former “PowerShell Deep Dive” events held as part of Quest’s The Experts Conference (TEC) event. Dell’s acquisition of Quest eliminated TEC, and PowerShell.org worked with the PowerShell product team to create the Summit.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>As we kick off PowerShell Summit Europe 2015, I wanted to share some decisions we&rsquo;ve made regarding the future of the event.</p><p>When we first launched PowerShell Summit in 2013, our goal was to be the spiritual successor of the former “PowerShell Deep Dive” events held as part of Quest’s The Experts Conference (TEC) event. Dell’s acquisition of Quest eliminated TEC, and PowerShell.org worked with the PowerShell product team to create the Summit.</p><p>It’s important to understand that Microsoft has never financially supported PowerShell Summit, except for sending team members to participate and present. Microsoft wanted to ensure the Summit would continue even if Microsoft itself got distracted in one year – something which does happen – and establishing the event as independent and financially secure was a critical part of the vision. For the first two years, that meant Summit’s expenses were charged to the organizers’ personal credit cards, and then paid back once registration fees came in. With a budget of around $75,000 per year, it was a significant commitment.</p><p>Our expansion to Europe in 2014 was an attempt to make the content more readily accessible to a larger audience. Europe 2014 was also the first event where we recorded and posted all of the session content, using equipment funded entirely by members of the community. Although smaller, due to exchange rates, higher taxes, and higher overall expenses, Europe still runs a budget close to that of its US counterpart.</p><p>The format of the Summit – 45-minute session blocks – was established at the Deep Dive as a way to present a variety of content, force a tight topical scope, and provide ample time for both Q&amp;A and mingling.</p><p>After completing both 2015 events – in North America and Europe – we decided to sit down and take a look at Summit, think back to its original goals, and see if we were still doing the best job we could to meet those goals. It’s been an interesting conversation, and we have some decisions to share.</p><p><strong>PowerShell Summit Europe</strong></p><p>First, we at PowerShell.org will not be proceeding with a PowerShell Summit Europe event in 2016. The two Europe Summits that we’ve held so far have been successful, but they involve many times the level of work as the North American event, mainly because everyone running the thing is eight or nine time zones away from where it’s to be held. We literally, in some cases, don’t speak the language. And, because we rely entirely on the efforts of volunteers, the additional time commitment just isn’t sustainable. It’s also personally expensive, since everyone running the event pays – out of pocket – for their international flights, hotel rooms, and so on. It’s been a big burn for our Board members, in particular.</p><p>There’s also a financial problem with the event itself. After two years, we’ve been able to get the North American event to generate enough profit that the excess income from one year can pay for the deposits on the following year – meaning the event is financially self-sufficient, and people’s personal credit cards are no longer at risk. We’ve not been able to achieve that level of financial independence for the European event, in large part due to our own ignorance of the European market, pricing, business customs, taxes, and so on. That means the European events still require someone’s personal credit card to guarantee deposits and event expenses, and it’s pretty scary for those people. So far, we’ve always paid them back – but it’s a pretty big deal to be carrying tens of thousands of dollars on your own credit card, hoping the event sells out.</p><p>So it isn’t at all that we think Europe somehow doesn’t “deserve” its own event – those of us in the USA just can’t be the ones to organize it. In speaking with several members of the community here in Stockholm during Summit 2015, they agree - the community here is more than able to make an incredible event, and organize and price it according to local needs.</p><p><strong>PowerShell Forum: It’s Time for YOU to Get Involved</strong></p><p>So we’ve creating an<a href="http://cdn.powershell.org/wp/wp-content/uploads/2013/07/Making-a-PowerShell-Forum.docx">event planning guide</a>. If you, or someone you know, would like to organize a PowerShell event in your country or region, then we’re more than happy to help. We’ll help promote it, we’ll help you get a registration website set up (the same one that Summit uses), and we’ll connect you with the product team and as many global speakers as we can to help create your content program. Ultimately, we think Europeans can do a much better job at organizing an event in Europe, but we’re happy to help as much as we can. We’ve even reserved a brand name, “PowerShell Forum,” which you’d be welcome to use if you want to.</p><p>In fact, we hope that people inside the US will also want to hold “PowerShell Forum” events in their regions. They should be a great “next step” after a smaller PowerShell Saturday event, and they offer the opportunity to fine-tune the content for that specific area. The PowerShell Summit is meant as an expert-grade, deep-dive event – but PowerShell Forum could address beginners, intermediate users, or whatever is locally needed. We believe the guide we’ve created will help remove a lot of the uncertainty and ambiguity of organizing such an event, enabling more people to “give back to the community” by setting up locally focused and regional conferences.</p><p>Also, know that PowerShell Summit Europe was hardly the only option for Europeans. For years, PowerShell MVP Tobias Weltner has held a mostly German-language PowerShell event that’s well-attended by an enthusiastic and engaged audience. European DevOps Days and TechDays events outnumber the ones held in the US, in some years. If you’re looking for a live event with solid PowerShell content, make sure you’re actually<em>looking,</em> because they’re out there. And, as already mentioned, we hope to work with a lot of people all over the world to help promote locally organized events that feature amazing PowerShell content. Tobias’ work in particular shows that locally organized events can be fantastic, and can in many ways be superior to having us Americans come over and fumble our way through something in an unfamiliar environment.</p><p><strong>Many Forums, One Summit</strong></p><p>With all that in mind, PowerShell Summit North America will be known as<strong><a href="https://powershell.org/summit/">PowerShell and DevOps Global Summit</a></strong> from here on out, beginning with our 2016 event in Bellevue, Washington. We believe that one of the primary benefits of Summit is close contact with a wide swath of the PowerShell team, and so it’s likely that<em>most</em> future Summits will be in the area of Microsoft’s campus. It’s simply easier to fly us all up there than it is to have the product team close up shop and fly somewhere else to meet us. The “DevOps” part of the new name reflects the fact that while PowerShell is an awesome tool, it’s real purpose is to help meet business needs. DevOps – a kind of IT management and operational philosophy – is a business-level need that, in the Microsoft space, PowerShell helps realize.</p><p>We’re also going to be changing the session format of the Summit. Rather than a strict schedule of 45-minute sessions, we’re going to switch things up a bit. We’ll continue to offer space for short sessions, since they’re a great way to cover tightly focused topics. But we’re also going to expand into longer sessions, allowing presenters to truly “dive deep” into the guts of the technology. We’re going to create more opportunities for smaller breakouts, since it’s the discussions and personal interactions that create some of the best value from the Summit. And, aside from preparatory pre-conference sessions offered at additional charge, we’re going to strongly de-emphasize beginner- and even intermediate-level content. There are plenty of educational opportunities elsewhere for beginners, and part of the original mission of the Summit was to help the product team connect with some of PowerShell’s most hardcore users. So you’ll see us pushing the envelope more in terms of session content.</p><p>We’re also going to devote a lot of time and effort toward making Summit more interactive. The “wow” factor of that first year at TEC was the amazing amount of back-and-forth generated in the single, 50-person session room. The information shared, the perspectives gained – that’s all difficult in a 100-person session like we have now. So with a European event no longer consuming so much time and brainpower, we’re going to re-commit to making Summit a more personally engaging event, not just a conference. The community has offered a ton of great ideas in this direction already, and we’re going to start implementing some of them in 2016. We’ll continue to experiment and tweak as a regular part of doing business, evolving the event to meet your needs, and to better connect you to this technology community.</p><p>“Some longer sessions” means “fewer total speakers,” which means we’ll also be able to do a bit more, financially, to help our presenters. Until now, they’ve traveled and housed themselves more or less on their own dime, and we’d like to do a lot more to make it less burdensome. Our goal is to have the best presenters on the planet, and we want to try and reduce the “expense hurdle” as much as possible, so that speaker selection isn’t limited to just those who can easily afford to come. We also have a very specific goal of making room for new presenters, so that everyone in the community can truly participate.</p><p><strong>Facing Facts and Setting Expectations</strong></p><p>We do realize that a relocation to Bellevue, and the elimination of a European Summit event, will reduce the number of people who can make it to the Summit. We’ve decided we’re okay with that. The Summit was always intended to be a small event, attracting the best and brightest in the industry. If you’re working deeply with PowerShell and its related technologies, then the Summit still offers incredible value – even if you’re traveling from far away. We realize that for someone who isn’t deeply engaged with PowerShell, we may be making Summit a harder prospect – but if you’re not truly, deeply engaged, then Summit might not have been the right event for you.</p><p>To be very clear: we know that there’s a huge need for beginner- and intermediate-level education, and that it needs to be affordable. But Summit<em>isn’t that event.</em> We still think Summit is an incredible value, one that – if PowerShell is truly<em>part of your professional</em> – is well worth the expense, even if that involves international travel.</p><p>And what we’re<em>not</em> okay with is for Europeans, or anyone else in the world, to be somehow excluded from the great content that a dedicated PowerShell event offers. But that’s not something we can just<em>give</em> everyone. If you look at the major regions of the world – Asia, Australia, Northern Europe, Southern Europe, South Africa, the list goes on – there’s no way we at a single volunteer organization run by six people can possibly bring content to<em>everyone.</em> We just aren’t that wealthy! So everyone is going to have to pitch in and help. If you think an awesome PowerShell event would be a huge success in, say, France, then you’re going to have to be the one to step up and organize it. We will<em>absolutely help</em> in terms of promotion, finding speakers, selecting content, and so on – but this is community, and you only get out of it what you put into it. We’re putting a big effort into this event-planning guide to help you get started, but your success will depend a lot on your own efforts. We want<em>everyone</em> to have the education and interaction that a Summit-style event offers – but<em>everyone</em> is going to have to help make it happen.</p><p>Also, know that we will continue with our tradition of recording session content and posting it, for free, online. We’re looking into adding HD video so that you can see presenters as well as their presentations, although there’s no real way for us to capture the immersive experience of actually attending in person.</p><p><strong>What About Beginners?</strong></p><p>And if the Summit is going to double-down on deep-dive content, what about newcomers who are still trying to become deeply engaged? Hundreds of training centers across the globe still provide solid PowerShell training from Microsoft’s Official Curriculum catalog and Microsoft’s Courseware Marketplace. Independent conferences – TechMentor, for example – offer a range of PowerShell topics as a regular part of their agenda. Books and video training on entry-level topics are available in abundance. Summit was never really intended as an entry-level event, although we recognize that we’ve strayed a bit into that territory in an attempt to be more accessible to a broader audience.<strong>Our 2016 strategy is really a recommitment to our original concept of serving the PowerShell<em>professional.</em></strong> But the individual PowerShell Forum events, PowerShell Saturday events, or other PowerShell conferences you organize – whatever you name them, and wherever you hold them – can definitely help meet the need for beginners.</p><p><strong>Our Path Forward</strong></p><p><strong>PowerShell and DevOps Global Summit 2016</strong> will be happening in the same year as PowerShell’s 10th birthday, and so much has changed in that decade. Once-difficult topics like Remoting are – for the deeply engaged – now considered routine. We’ve moved on to higher-layer topics like Desired State Configuration, Continuous Integration and Delivery, cloud-based Workflow, and much more. As a community, we’ve developed best practices and patterns that we share, and we’ve seen Microsoft begin a shift toward open-source releases of key components. Heck, we’ve seen Microsoft move PowerShell technologies to other operating systems – something nobody ever thought would happen “back in the day.” And PowerShell.org has remained a volunteer-run organization that tries to benefit the entire community. We’re evolving Summit, and we’ll continue to do our best to do good works on behalf of the community.</p><p>The Board of PowerShell.org has gone through a lot of soul-searching in writing this document, because we don’t want to anyone to see us as walking away from the European Summit. Instead, we feel that we’ve proven a European event<em>can</em> be successful – and we think it<em>will</em> be successful once our European friends step in and take over. We are all stronger<em>together</em> as a community, especially when we can serve our local communities in more specific and granular ways. We would experience the most profound joy you can imagine if, in a couple of years, there are PowerShell Forum (or whatever they’re named) events throughout Europe… Canada… Africa… Asia… Australia and New Zealand… the United States… everywhere. We would take it as the greatest compliment and achievement if we’ve done nothing more than help people see how to pull it off, and inspire them to dive in and make things happen in their own backyard.</p><p>We hope, if you’ve read all this, that you’re already giving it some thought.</p>
]]></content:encoded></item><item><title>Find Stale Accounts in Active Directory</title><link>https://powershell.org/articles/2015-09-12-find-stale-accounts-in-active-directory/</link><guid>https://powershell.org/articles/2015-09-12-find-stale-accounts-in-active-directory/</guid><pubDate>Sat, 12 Sep 2015 16:02:38 +0000</pubDate><description>&lt;h1 id="find-stale-accounts-in-active-directory" class="ps-heading"&gt;&lt;strong&gt;Find Stale Accounts in Active Directory&lt;/strong&gt;&lt;a class="ps-heading-anchor" href="#find-stale-accounts-in-active-directory" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Everyone who has managed Active Directory knows that keeping it free of &amp;ldquo;stale&amp;rdquo; accounts is a tough task.  Typically no one cares about this until it’s time for the Microsoft True Up.  Then we’ve got to hustle to get rid of all these unused accounts before we have to pay for them again!  Pre-PowerShell it was tough because well&amp;hellip; you didn&amp;rsquo;t have POWERSHELL!  Now the hardest part about finding these accounts is defining what stale means to your company.  There is no right or wrong answer to this question, but there are some things that we can check to help lead us to an optimal answer.  You can read the rest of this article by clicking on the link below.  While you are there check out some of my other posts, the &lt;a href="http://powershellmasters.com/scripts/"&gt;script repository&lt;/a&gt; and the &lt;a href="http://powershellmasters.com/resources/"&gt;resource page&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<h1 id="find-stale-accounts-in-active-directory" class="ps-heading"><strong>Find Stale Accounts in Active Directory</strong><a class="ps-heading-anchor" href="#find-stale-accounts-in-active-directory" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>Everyone who has managed Active Directory knows that keeping it free of &ldquo;stale&rdquo; accounts is a tough task.  Typically no one cares about this until it’s time for the Microsoft True Up.  Then we’ve got to hustle to get rid of all these unused accounts before we have to pay for them again!  Pre-PowerShell it was tough because well&hellip; you didn&rsquo;t have POWERSHELL!  Now the hardest part about finding these accounts is defining what stale means to your company.  There is no right or wrong answer to this question, but there are some things that we can check to help lead us to an optimal answer.  You can read the rest of this article by clicking on the link below.  While you are there check out some of my other posts, the<a href="http://powershellmasters.com/scripts/">script repository</a> and the<a href="http://powershellmasters.com/resources/">resource page</a>.</p><p><strong><a href="http://powershellmasters.com/2015/07/find-stale-accounts-in-active-directory/">Find Stale Accounts in Active Directory</a></strong></p><p>As always make sure once you&rsquo;ve checked us out over at<a href="http://powershellmasters.com">PowerShellMasters.com</a> to head back here to read more awesome PowerShell posts on<a href="https://powershell.org">PowerShell.org</a>.</p><p>If you have some comments, questions or advice I&rsquo;m happy to hear it.  Thanks for reading and I hope everyone likes the article.</p><p>Thanks</p><p>Matt</p>
]]></content:encoded></item><item><title>Working with PowershellGallery</title><link>https://powershell.org/articles/2015-09-11-working-with-powershellgallery/</link><guid>https://powershell.org/articles/2015-09-11-working-with-powershellgallery/</guid><pubDate>Fri, 11 Sep 2015 13:34:23 +0000</pubDate><description>&lt;p&gt;After my two first posts (&lt;a href="https://powershell.org/2015/08/20/multithreading-using-jobs/"&gt;Multithreading using jobs&lt;/a&gt;, &lt;a href="https://powershell.org/2015/08/28/list-users-logged-on-to-your-machines/"&gt;List users logged on to your machines&lt;/a&gt;) where I mentioned &lt;a href="http://www.PowershellGallery.com"&gt;PowershellGallery.com&lt;/a&gt; a few times and after &lt;a href="https://powershell.org/2015/09/06/writing-and-publishing-powershell-modules/"&gt;Warren talked about the Gallery a few days ago&lt;/a&gt; I felt like digging a little deeper to see if I was actually doing it right.&lt;/p&gt;
&lt;p&gt;So I wrote them an email and this was their reply:&lt;/p&gt;
&lt;p&gt; &amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;mdash;&amp;ndash;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Hi Jonas – The “limited preview” designation on the PowerShell Gallery is because we are doing significant development to the site.&lt;/em&gt; * However, there is nothing about that status which should prevent you from sharing your code. *&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>After my two first posts (<a href="https://powershell.org/2015/08/20/multithreading-using-jobs/">Multithreading using jobs</a>,<a href="https://powershell.org/2015/08/28/list-users-logged-on-to-your-machines/">List users logged on to your machines</a>) where I mentioned<a href="http://www.PowershellGallery.com">PowershellGallery.com</a> a few times and after <a href="https://powershell.org/2015/09/06/writing-and-publishing-powershell-modules/">Warren talked about the Gallery a few days ago</a> I felt like digging a little deeper to see if I was actually doing it right.</p><p>So I wrote them an email and this was their reply:</p><p> &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash;</p><p><em>&ldquo;Hi Jonas – The “limited preview” designation on the PowerShell Gallery is because we are doing significant development to the site.</em> * However, there is nothing about that status which should prevent you from sharing your code. *</p><p><em>A couple of things you will want to consider as you get ready to publish to the Gallery:</em></p><ul><li><em>You will want to scan your modules with PSSCriptAnalyzer (see<a href="http://www.powershellgallery.com/packages/PSScriptAnalyzer/">http://www.powershellgallery.com/packages/PSScriptAnalyzer/</a>), as we scan all modules that have been posted with that tool. Anything flagged as an “error” must be corrected, things flagged as “warnings” should be fixed.</em></li><li><em>Most submitters have a project site on GitHub, or something of that nature, that they link to from the Gallery. That allows them to get feedback on what they have submitted, &amp; it’s something we would recommend.</em></li></ul><p><em>Hope this helps –</em> * The PowerShell Gallery Operations Team&rdquo;*</p><p> &mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&mdash;&ndash;</p><p>Really nice feedback. To the commandline.</p><p><a href="https://powershell.org/wp-content/uploads/2015/09/Install-PSScriptAnalyzer.a.png"><img src="https://powershell.org/wp-content/uploads/2015/09/Install-PSScriptAnalyzer.a.png" alt="Install-PSScriptAnalyzer.a"/></p><p>Installing the analyser is a breeze, suddenly I have two new commands. Lets try out the analyzer and see what it can do.</p><p><a href="https://powershell.org/wp-content/uploads/2015/09/2015-09-10-1.png"><img src="https://powershell.org/wp-content/uploads/2015/09/2015-09-10-1.png" alt="2015-09-10 (1)"/></p><p>Unfortunately the help on my machine is not updated, but the online version seems to be updated.</p><p><code>help Invoke-ScriptAnalyzer -online</code>This goes to the<a href="http://go.microsoft.com/fwlink/?LinkId=525914">online version</a>. Also from the<a href="http://www.powershellgallery.com/packages/PSScriptAnalyzer/">PowerShell Gallery PSScriptAnalyzer site</a> there is a link to the<a href="https://github.com/PowerShell/PSScriptAnalyzer/">Project Site at GitHub.</a> </p><p><a href="https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.png"><img src="https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.png" alt="ScriptAnalyzer-start-multithread"/></p><p>This is kind of neat and it looks like I only have one warning, though 6 times.</p><p><em><strong>&ldquo;Cmdlet &lsquo;Write-Verbose&rsquo; has positional parameter. Please use named parameters instead of positional parameters when calling a command.&rdquo;</strong></em></p><p>Opening the same file in ISE  looking at line 92 and running the script analyser</p><p><a href="https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.ise_.slim_.png"><img src="https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.ise_.slim_.png" alt="ScriptAnalyzer-start-multithread.ise.slim"/></p><p>The help from Write-Verbose tells me that they are referring to the -Message parameter.</p><p><a href="https://powershell.org/wp-content/uploads/2015/09/help-write-verbose.png"><img src="https://powershell.org/wp-content/uploads/2015/09/help-write-verbose.png" alt="help-write-verbose"/></p><p>That looks like a pretty easy fix. Going through the file and fixing the 6 warnings and suddenly there are none left.</p><p><a href="https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.ise_.fixed_.png"><img src="https://powershell.org/wp-content/uploads/2015/09/ScriptAnalyzer-start-multithread.ise_.fixed_.png" alt="ScriptAnalyzer-start-multithread.ise.fixed"/></p><p>I&rsquo;m sure the fact that there weren&rsquo;t more errors was mostly due to dumb luck combined with me testing<a href="http://www.powertheshell.com/isesteroids/">ISESteroids</a> at the time of writing. (Side note: Try it out.<strong>Install-Module ISESteroids.</strong> It is really AWSOME or quoting Tim Cook; It&rsquo;s AMAZING) ISESteroids is an add-on for ISE which adds some neat stuff like highlighting errors in the code but that&rsquo;s a subject for some other day. Let&rsquo;s just say it saved my behind this time.</p><p><a href="https://powershell.org/wp-content/uploads/2015/09/github.update.png"><img src="https://powershell.org/wp-content/uploads/2015/09/github.update.png" alt="github.update"/></p><p>Now that really wasn&rsquo;t too bad. To update the code on PowerShellGallery I need to increment the version of the module. This is done in the manifest file .psd1.</p><p><a href="https://powershell.org/wp-content/uploads/2015/09/update-version.png"><img src="https://powershell.org/wp-content/uploads/2015/09/update-version.png" alt="update-version"/></p><p>Now I can update the module by running the command from the<a href="https://www.powershellgallery.com/packages/upload">Publish Module</a> page</p><p><code>PS&gt; Publish-Module -Name -NuGetApiKey</code><a href="https://powershell.org/wp-content/uploads/2015/09/publish-module.png"><img src="https://powershell.org/wp-content/uploads/2015/09/publish-module.png" alt="publish-module"/></p><p>Now the code is accessible to all &hellip;. And there was<a href="https://www.youtube.com/watch?v=GjjZGyYcH9E">much rejoicing</a>. </p><h2 id="looking-a-little-closer-at-the-scriptanalyzer" class="ps-heading">Looking a little closer at the ScriptAnalyzer<a class="ps-heading-anchor" href="#looking-a-little-closer-at-the-scriptanalyzer" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Lets see what the help says. </p><h4 id="invoke-scriptanalyzer" class="ps-heading">Invoke-ScriptAnalyzer<a class="ps-heading-anchor" href="#invoke-scriptanalyzer" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h4><p><em>&ldquo;Parameter Set: Default</em><em>Invoke-ScriptAnalyzer [-Path]  [-CustomizedRulePath  ] [-
ExcludeRule 
] [-
IncludeRule
  ] [-LoggerPath  ] [-Recurse] [-
Severity
  ] [ ]</em></p><p><em>Detailed Description</em><em>Invoke-ScriptAnalyzer starts analyzing one or more specified scripts by using ScriptAnalyzer, evaluating your scripts against a set of best practice measures called rules. ScriptAnalyzer works by evaluating scripts against either all available rules, or against a set of rules that you specify by adding the ExcludeRule or IncludeRule parameters. After ScriptAnalyzer finishes evaluating your scripts, it displays results in the console window.&rdquo;</em></p><p>Looks like IncludeRule and ExcludeRule parameters are straight forward. To get a list of rules and their descriptions Get-ScriptAnalyzerRule is very helpful.</p><h4 id="get-scriptanalyzerrule" class="ps-heading">Get-ScriptAnalyzerRule<a class="ps-heading-anchor" href="#get-scriptanalyzerrule" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h4><p>Parameter Set: Default Get-ScriptAnalyzerRule [-CustomizedRulePath  ] [-Name  ] [-Severity  ] [ ]</p><p><a href="https://powershell.org/wp-content/uploads/2015/09/Get-ScriptAnalyzerRule.png"><img src="https://powershell.org/wp-content/uploads/2015/09/Get-ScriptAnalyzerRule.png" alt="Get-ScriptAnalyzerRule"/></p><p>The output gives us much useful information, severity level and a nice description of each rule.</p><h2 id="more" class="ps-heading">More<a class="ps-heading-anchor" href="#more" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>PowerShellGallery.org has a nice<a href="https://www.powershellgallery.com/pages/GettingStarted">GettingStarted</a> page. </p><h2 id="ps" class="ps-heading">ps.<a class="ps-heading-anchor" href="#ps" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Remember PowerShell Summit Europe starts Monday. Check out the <a href="https://eventmgr.azurewebsites.net/event/home/PSEU15">Event Schedule</a> and I hope to see you there. If on the other hand you&rsquo;re missing out check out these videos from<a href="https://www.youtube.com/playlist?list=PLfeA8kIs7CochwcgX9zOWxh4IL3GoG05P">PowerShell Summit North America 2015</a>.</p><h4 id="contact-me" class="ps-heading">Contact me<a class="ps-heading-anchor" href="#contact-me" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h4><p>Twitter<a href="https://twitter.com/mrhvid">@mrhvid</a><br>
Web<a href="http://Jonas.SommerNielsen.dk">Jonas.SommerNielsen.dk</a></p>
]]></content:encoded></item><item><title>DevOps: A Practical Example</title><link>https://powershell.org/articles/2015-09-11-devops-a-practical-example/</link><guid>https://powershell.org/articles/2015-09-11-devops-a-practical-example/</guid><pubDate>Fri, 11 Sep 2015 11:22:12 +0000</pubDate><description>&lt;p&gt;If you look at DevOps as a means of removing hurdles between coders and users, there&amp;rsquo;s almost no better real-world, practical example than Amazon Elastic Beanstalk. If you&amp;rsquo;re not familiar with EBS, look into it - it&amp;rsquo;s kinda cool.&lt;/p&gt;
&lt;p&gt;EBS isn&amp;rsquo;t suitable for every situation, to be sure. It&amp;rsquo;s mainly useful for Linux VMs, running Web sites, in fact, which isn&amp;rsquo;t 100% of your workloads. But the &lt;em&gt;idea&lt;/em&gt; is pretty awesome. Developers store their code in a source control repo - ideally, Git. Along with their code - and this is the cool bit - they include a configuration file. This file can list things like environment variables, packages (installed from repos using NPM, RHL, YUM, etc), and so on.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>If you look at DevOps as a means of removing hurdles between coders and users, there&rsquo;s almost no better real-world, practical example than Amazon Elastic Beanstalk. If you&rsquo;re not familiar with EBS, look into it - it&rsquo;s kinda cool.</p><p>EBS isn&rsquo;t suitable for every situation, to be sure. It&rsquo;s mainly useful for Linux VMs, running Web sites, in fact, which isn&rsquo;t 100% of your workloads. But the<em>idea</em> is pretty awesome. Developers store their code in a source control repo - ideally, Git. Along with their code - and this is the cool bit - they include a configuration file. This file can list things like environment variables, packages (installed from repos using NPM, RHL, YUM, etc), and so on.</p><p>When you recycle the application, EBS spins up new VMs _and configures them on the fly to match your configuration file. _It then shuts down any currently running machines. </p><p>So the deal is, <em>the developer</em> specifies the machine configuration - and they can do that in a test silo. All the code, _including the configuration directives, _live in Git. So when it&rsquo;s working in test, you just point the production silo at the same Git repo, and SHAZAM! application is up and running. Nobody manually configures anything. Change the app? No problem - just check in the code and recycle the application, and the new code - and its configuration - is live.</p><p>The &ldquo;ops&rdquo; portion of the scenario, in other words, is completely automated. Amazon has automated all the bits that sit between a developer and deployed code. Amazon&rsquo;s back end magic reads that configuration document and uses it to configure 1-to-infinity virtual machines as directed. Nobody has to do anything manual. The &ldquo;server,&rdquo; in the form of a VM, just becomes another software element. &ldquo;Infrastructure as code,&rdquo; if you will.</p><p>Gosh, what could Microsoft do to compete with that in Azure? What could <em>you</em> do, in your &ldquo;private cloud,&rdquo; to provide similar capabilities?</p><p>Hmm&hellip; 🙂</p>
]]></content:encoded></item><item><title>Where Are My FSMO Roles?</title><link>https://powershell.org/articles/2015-09-08-where-are-my-fsmo-roles/</link><guid>https://powershell.org/articles/2015-09-08-where-are-my-fsmo-roles/</guid><pubDate>Tue, 08 Sep 2015 14:00:21 +0000</pubDate><description>&lt;p&gt;Hello, PowerShell people! I&amp;rsquo;ve never posted on PowerShell.org before and so I feel as though I owe you a quick introduction before we dive into the tip I&amp;rsquo;d like to share with you.&lt;/p&gt;
&lt;p&gt;My name is Thomas Rayner and I am a Microsoft MVP for Windows PowerShell. I&amp;rsquo;m also a systems administrator and degree program instructor. I volunteer a fair bit of time as the President of the Edmonton Microsoft User Group (EMUG). EMUG has a more in depth bio for me on their &lt;a href="http://emug.ca/executive/"&gt;About Executive&lt;/a&gt; page in case you want to know more about the person behind the avatar. If you&amp;rsquo;re in the Edmonton area, I strongly recommend &lt;a href="http://emug.ca/contact-us/"&gt;signing up for our mailing list&lt;/a&gt; so you can come attend the great events we put on.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Hello, PowerShell people! I&rsquo;ve never posted on PowerShell.org before and so I feel as though I owe you a quick introduction before we dive into the tip I&rsquo;d like to share with you.</p><p>My name is Thomas Rayner and I am a Microsoft MVP for Windows PowerShell. I&rsquo;m also a systems administrator and degree program instructor. I volunteer a fair bit of time as the President of the Edmonton Microsoft User Group (EMUG). EMUG has a more in depth bio for me on their<a href="http://emug.ca/executive/">About Executive</a> page in case you want to know more about the person behind the avatar. If you&rsquo;re in the Edmonton area, I strongly recommend<a href="http://emug.ca/contact-us/">signing up for our mailing list</a> so you can come attend the great events we put on.</p><p>I&rsquo;m pretty active on Twitter at<a href="http://twitter.com/MrThomasRayner">@MrThomasRayner</a> and I post bi-weekly on my own blog,<a href="http://workingsysadmin.com">workingsysadmin.com</a>.</p><p><strong>Ok, tip time!</strong></p><p>If you&rsquo;re an IT pro of any kind, it would be difficult to not bump into Active Directory from time to time. If you&rsquo;re a reader of PowerShell.org, you most likely administer Active Directory in some capacity. Inevitably, as an AD admin, you&rsquo;re going to find yourself asking &ldquo;Which server is holding which FSMO role right now?&rdquo; and &ldquo;Isn&rsquo;t there a way to do this in PowerShell?&rdquo;. _If you&rsquo;re scratching your head right now wondering what a Flexible Single Master Operation (FSMO) role is, please check out this prerequisite reading: <a href="https://support.microsoft.com/en-us/kb/197132">https://support.microsoft.com/en-us/kb/197132</a>. _</p><p>Of course there&rsquo;s a way to do this in PowerShell! Let&rsquo;s work through a solution. Firstly, we need to import the Active Directory module. <em><a href="http://blogs.msdn.com/b/rkramesh/archive/2012/01/17/how-to-add-active-directory-module-in-powershell-in-windows-7.aspx">Stuck already?</a></em></p><p><code>Import-Module ActiveDirectory</code>That was easy. Now, let&rsquo;s get digging. There&rsquo;s a cmdlet called Get-ADDomainController which seems like a good place to start since we know our FSMO roles are going to be on Domain Controllers (DC). Let&rsquo;s take a look at what gets returned for each DC.</p><p>`Get-ADDomainController -Filter * | Select-Object -First 1 | Get-Member
TypeName: Microsoft.ActiveDirectory.Management.ADDomainController
Name MemberType Definition</p><hr><p>Contains Method bool Contains(string propertyName)
Equals Method bool Equals(System.Object obj)
GetEnumerator Method System.Collections.IDictionaryEnumerator GetEnumerator()
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Item ParameterizedProperty Microsoft.ActiveDirectory.Management.ADPropertyValueCollection Item(string propertyName) {get;}
ComputerObjectDN Property System.String ComputerObjectDN {get;}
DefaultPartition Property System.String DefaultPartition {get;}
Domain Property System.String Domain {get;set;}
Enabled Property System.Boolean Enabled {get;}
Forest Property System.String Forest {get;set;}
HostName Property System.String HostName {get;}
InvocationId Property System.Guid InvocationId {get;}
IPv4Address Property System.String IPv4Address {get;set;}
IPv6Address Property System.String IPv6Address {get;set;}
IsGlobalCatalog Property System.Boolean IsGlobalCatalog {get;}
IsReadOnly Property System.Boolean IsReadOnly {get;}
LdapPort Property System.Int32 LdapPort {get;}
Name Property System.String Name {get;set;}
NTDSSettingsObjectDN Property System.String NTDSSettingsObjectDN {get;}
OperatingSystem Property System.String OperatingSystem {get;}
OperatingSystemHotfix Property System.String OperatingSystemHotfix {get;}
OperatingSystemServicePack Property System.String OperatingSystemServicePack {get;}
OperatingSystemVersion Property System.String OperatingSystemVersion {get;}
OperationMasterRoles Property Microsoft.ActiveDirectory.Management.ADPropertyValueCollection OperationMasterRoles {get;}
Partitions Property Microsoft.ActiveDirectory.Management.ADPropertyValueCollection Partitions {get;}
ServerObjectDN Property System.String ServerObjectDN {get;}
ServerObjectGuid Property System.Guid ServerObjectGuid {get;}
Site Property System.String Site {get;set;}
SslPort Property System.Int32 SslPort {get;}
`That&rsquo;s a lot of stuff. We can see if a DC is an RODC, which forest and domain it&rsquo;s in, the OS, its site&hellip; and its OperationMasterRoles! Looks like we&rsquo;re in business. The following code just about accomplishes our goal.</p><p><code>Get-ADDomainController -Filter * | Select-Object -Property Name, OperationMasterRoles</code>The above script will get all the DCs in the environment and return the name of the DC and the FSMO roles held. That&rsquo;s great, but, what if you have dozens of DCs and looking at a big list of DCs isn&rsquo;t appealing? There must be a way to get _only _the DCs that actually have FSMO roles, right?</p><p><code>Get-ADDomainController -Filter "OperationMasterRoles -like '*'" | Select-Object -Property Name, OperationMasterRoles</code>Of course there is! We don&rsquo;t even need to pipe our output into another cmdlet like Where-Object because we can simply adjust our filter on which DCs we return in the first place. &ldquo;OperationMasterRoles -like &lsquo;*&rsquo;&rdquo; translates to &ldquo;Domain Controllers whose OperationMasterRoles field have a value in them&rdquo; which doesn&rsquo;t include the DCs whose OperationMasterRoles field are null (because they&rsquo;re not holding any FSMO roles).</p><p><strong>That&rsquo;s it!</strong></p><p>Locating your Active Directory FSMO roles is just that easy.</p><p>Thank you, PowerShell.org for letting me post on your blog. I&rsquo;ve got tremendous respect and admiration for the people who contribute to this website and the PowerShell community. PowerShell.org is an incredible resource for people of any experience level to improve their skills and learn new things. The world is a better place for having resources like this one.</p>
]]></content:encoded></item><item><title>Find Location of Locked Out Accounts</title><link>https://powershell.org/articles/2015-09-08-find-location-of-locked-out-accounts/</link><guid>https://powershell.org/articles/2015-09-08-find-location-of-locked-out-accounts/</guid><pubDate>Tue, 08 Sep 2015 11:16:45 +0000</pubDate><description>&lt;h1 id="im-locked-out-help" class="ps-heading"&gt;I&amp;rsquo;m Locked Out, Help!&lt;a class="ps-heading-anchor" href="#im-locked-out-help" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;If you&amp;rsquo;ve been a sys admin for more than a week you&amp;rsquo;ve probably heard this&amp;hellip;&amp;ldquo;I&amp;rsquo;m locked-out, help!&amp;rdquo;.  Normally the user has made their way to your cube and is impatiently tapping their foot waiting for you to magically solve there problem.  So you find their account, reset their password and everything is right with the world&amp;hellip;Or is it?  Two minutes later they show up again because their account was locked-out before they even got back to their desk.  Now what do you do?&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<h1 id="im-locked-out-help" class="ps-heading">I&rsquo;m Locked Out, Help!<a class="ps-heading-anchor" href="#im-locked-out-help" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>If you&rsquo;ve been a sys admin for more than a week you&rsquo;ve probably heard this&hellip;&ldquo;I&rsquo;m locked-out, help!&rdquo;.  Normally the user has made their way to your cube and is impatiently tapping their foot waiting for you to magically solve there problem.  So you find their account, reset their password and everything is right with the world&hellip;Or is it?  Two minutes later they show up again because their account was locked-out before they even got back to their desk.  Now what do you do?</p><p>There are several ways to go about finding this information, some MUCH better than others.  Since we are all PowerShell people (or at least stayed at a Holiday Inn Express) that will be our method of choice.  If you want to read more click on the link below, but if you just want to get to the script you can follow this link to my<a href="http://powershellmasters.com/scripts/">downloads page</a>.</p><p>As always make sure once you&rsquo;ve checked us out over at<a href="http://powershellmasters.com">PowerShellMasters.com</a> to head back here to read more awesome PowerShell posts on<a href="https://powershell.org">PowerShell.org</a>.</p><p><strong><a href="http://powershellmasters.com/2015/07/find-location-of-locked-out-accounts/">Find Location of Locked Out Accounts</a></strong></p><p>If you have some comments, questions or advice I&rsquo;m happy to hear it.  Thanks for reading and I hope everyone likes the article.</p><p>Thanks</p><p>Matt</p>
]]></content:encoded></item><item><title>Writing and Publishing PowerShell Modules</title><link>https://powershell.org/articles/2015-09-06-writing-and-publishing-powershell-modules/</link><guid>https://powershell.org/articles/2015-09-06-writing-and-publishing-powershell-modules/</guid><pubDate>Sun, 06 Sep 2015 20:31:29 +0000</pubDate><description>&lt;p&gt;Earlier in August &lt;a href="https://powershell.org/2015/08/16/abstraction-and-configuration-data/"&gt;we mentioned&lt;/a&gt; that modularity and abstraction are quite helpful. PowerShell modules can help enable these concepts.&lt;/p&gt;
&lt;p&gt;You might ask &amp;ldquo;Modules&amp;hellip; why can&amp;rsquo;t I just write a function?&amp;rdquo; There are a number of benefits to bundling your functions into modules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Simplify code organization&lt;/li&gt;
&lt;li&gt;Group related functions together&lt;/li&gt;
&lt;li&gt;Share state between functions, but not with the user&lt;/li&gt;
&lt;li&gt;Re-use &amp;ldquo;helper functions&amp;rdquo; that you don&amp;rsquo;t want exposed to the user&lt;/li&gt;
&lt;li&gt;Improve discoverability:
&lt;code&gt;Find-Module MyModule&lt;/code&gt;Get-Command -Module MyModule
&lt;code&gt;* Simplify distribution: &lt;/code&gt;Install-Module MyModule
`Where does that last bullet come from?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-powershell-gallery" class="ps-heading"&gt;The PowerShell Gallery&lt;a class="ps-heading-anchor" href="#the-powershell-gallery" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;ve worked with Perl, you&amp;rsquo;ve probably used &lt;a href="https://www.perl.org/about/whitepapers/perl-cpan.html"&gt;CPAN&lt;/a&gt;, which archives more than 150,000 modules. Other languages have similar tools, like &lt;a href="https://pypi.python.org/pypi"&gt;PyPI&lt;/a&gt; for Python, or &lt;a href="https://rubygems.org/"&gt;RubyGems&lt;/a&gt; for Ruby.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Earlier in August<a href="https://powershell.org/2015/08/16/abstraction-and-configuration-data/">we mentioned</a> that modularity and abstraction are quite helpful. PowerShell modules can help enable these concepts.</p><p>You might ask &ldquo;Modules&hellip; why can&rsquo;t I just write a function?&rdquo; There are a number of benefits to bundling your functions into modules:</p><ul><li>Simplify code organization</li><li>Group related functions together</li><li>Share state between functions, but not with the user</li><li>Re-use &ldquo;helper functions&rdquo; that you don&rsquo;t want exposed to the user</li><li>Improve discoverability:<code>Find-Module MyModule</code>Get-Command -Module MyModule<code>* Simplify distribution:</code>Install-Module MyModule
`Where does that last bullet come from?</li></ul><h2 id="the-powershell-gallery" class="ps-heading">The PowerShell Gallery<a class="ps-heading-anchor" href="#the-powershell-gallery" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>If you&rsquo;ve worked with Perl, you&rsquo;ve probably used<a href="https://www.perl.org/about/whitepapers/perl-cpan.html">CPAN</a>, which archives more than 150,000 modules. Other languages have similar tools, like<a href="https://pypi.python.org/pypi">PyPI</a> for Python, or<a href="https://rubygems.org/">RubyGems</a> for Ruby.</p><p>In the PowerShell world we&rsquo;ve had a few community alternatives, but nothing official until late 2014, when Microsoft introduced the<a href="https://www.powershellgallery.com/">PowerShell Gallery</a>. The gallery is still under limited preview, with less than 300 modules published.</p><p>The PowerShell community can benefit from the PowerShell Gallery through simplified and centralized discovery and distribution. We can find, install, or publish modules with a single command in PowerShell 5. Perhaps some day we will see a vibrant PowerShell community that extends<a href="http://ramblingcookiemonster.github.io/PowerShell-Beyond-Administration/">beyond IT administration</a>.</p><h2 id="write-and-publish-powershell-modules" class="ps-heading">Write and Publish PowerShell Modules<a class="ps-heading-anchor" href="#write-and-publish-powershell-modules" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Let&rsquo;s help build up the PowerShell Gallery. Do you write PowerShell modules at work or at home? Consider<a href="http://stevenmurawski.com/powershell/2015/8/moving-in-to-open-source">open sourcing</a> them on GitHub, and publishing them in the PowerShell Gallery!</p><p>If you&rsquo;re comfortable writing PowerShell functions, but haven&rsquo;t started writing modules, check out<a href="http://ramblingcookiemonster.github.io/Building-A-PowerShell-Module">Building a PowerShell Module</a>, where we walk through the creation and publication of a PowerShell module.</p><p>Edit:<a href="https://powershell.org/deploying-modules-to-the-powershell-gallery/">This follow-up</a> shows a simple way to automatically deploy your modules to the gallery.</p><p>Cheers!</p>
]]></content:encoded></item><item><title>20115-September Scripting Games Puzzle</title><link>https://powershell.org/articles/2015-09-05-september-2015-scripting-games-puzzle/</link><guid>https://powershell.org/articles/2015-09-05-september-2015-scripting-games-puzzle/</guid><pubDate>Sat, 05 Sep 2015 13:26:02 +0000</pubDate><description>&lt;p&gt;Our September 2015 puzzle is another one-liner, to help get you out of Summer Mood and back into Work Mode. This time, it&amp;rsquo;s a pretty real-world scenario, designed to test your understanding of the pipeline and how data can be manipulated within it. You&amp;rsquo;ll need to really grasp pipeline parameter binding to make this work in the shortest command possible.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Our September 2015 puzzle is another one-liner, to help get you out of Summer Mood and back into Work Mode. This time, it&rsquo;s a pretty real-world scenario, designed to test your understanding of the pipeline and how data can be manipulated within it. You&rsquo;ll need to really grasp pipeline parameter binding to make this work in the shortest command possible.</p><h2 id="instructions" class="ps-heading"><strong>Instructions</strong><a class="ps-heading-anchor" href="#instructions" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month&rsquo;s puzzle. You can find them all at<a href="https://powershell.org/category/announcements/scripting-games/">https://powershell.org/category/announcements/scripting-games/</a>. Many puzzles will include optional challenges, that you can use to really push your skills.</p><p><strong>To participate</strong>, add your solution to a public Gist (<a href="http://gist.github.com">http://gist.github.com</a>; you&rsquo;ll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post. 
**Only post one entry per person. You are not allowed to come back and post corrected or improved versions. If you do, all of your posts will be ignored. **However, remember that you can always go back and edit your Gist. We&rsquo;ll always pull the most recent one when we display it, so there&rsquo;s no need to post multiple entries if you want to make an edit.</p><p>Don&rsquo;t forget the <a href="https://powershell.org/?p=2574">main rules and purpose of these monthly puzzles</a>, including the fact that you won&rsquo;t receive individual scoring or commentary on your entry.</p><p><strong>User groups are encouraged to work together</strong> on the monthly puzzles. User group leaders should submit their group&rsquo;s best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most &ldquo;favorite&rdquo; entries of the year will win a grand prize from PowerShell.org.</p><h2 id="" class="ps-heading"><a class="ps-heading-anchor" href="#" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><h2 id="our-puzzle" class="ps-heading"><strong>Our Puzzle</strong><a class="ps-heading-anchor" href="#our-puzzle" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>You’ve been given a CSV file (named Input.csv) that has a single column, named MACHINENAME. The contents of that column are either computer host names or IP addresses. The computers named run a mix of operating systems, from Windows Server 2003 and Windows XP, up through the newest versions. All have at least PowerShell v2 installed. RPC communications are open between all computers on the network. All computers belong to the same domain.</p><p>Write a command or short script that reads the CSV file, contacts each computer, and retrieves each computer’s textual operating system version (e.g., “Microsoft Windows 8.1 Pro”, not “6.3.9600”). The command or script should output a CSV file, named Output.csv, that has two columns: MACHINENAME and OSVERSION.</p><p>There’s no need to handle errors for machines that aren’t reachable.</p><p><strong>Challenges:</strong></p><ul><li>Try to do write this as a one-liner, using as few semicolons as possible.</li><li>Try to minimize your use of curly brackets (just for fun) in your answer.</li></ul>]]></content:encoded></item><item><title>#MSPSUG Virtual Meeting: The Art of #PowerShell Runspaces – September 8th 2015</title><link>https://powershell.org/articles/2015-09-04-mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015/</link><guid>https://powershell.org/articles/2015-09-04-mspsug-virtual-meeting-the-art-of-powershell-runspaces-september-8th-2015/</guid><pubDate>Fri, 04 Sep 2015 14:58:27 +0000</pubDate><description>&lt;p&gt;Join the Mississippi PowerShell User Group virtually on Tuesday, September 8th at 8:30pm Central Time when PowerShell MVP &lt;a href="http://learn-powershell.net/"&gt;Boe Prox&lt;/a&gt; will present “&lt;em&gt;&lt;strong&gt;The Art of PowerShell Runspaces&lt;/strong&gt;&lt;/em&gt;”.&lt;/p&gt;
&lt;p&gt;PowerShell runspaces are a known but little documented area that can help to provide performance improvements in your scripts. Besides just using this for performance gains, you can use this to provide a snappier approach to building GUIs in PowerShell. This presentation will show you examples of using Runspaces, RunspacePools as well as utilizing shared variables that can be viewed and modified in multiple runspaces during runtime. Also being demoed is a module called &lt;a href="https://github.com/proxb/PoshRSJob"&gt;PoshRSJob&lt;/a&gt; which provides runspace multhreading in a familiar jobs infrastructure.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join the Mississippi PowerShell User Group virtually on Tuesday, September 8th at 8:30pm Central Time when PowerShell MVP<a href="http://learn-powershell.net/">Boe Prox</a> will present “<em><strong>The Art of PowerShell Runspaces</strong></em>”.</p><p>PowerShell runspaces are a known but little documented area that can help to provide performance improvements in your scripts. Besides just using this for performance gains, you can use this to provide a snappier approach to building GUIs in PowerShell. This presentation will show you examples of using Runspaces, RunspacePools as well as utilizing shared variables that can be viewed and modified in multiple runspaces during runtime. Also being demoed is a module called<a href="https://github.com/proxb/PoshRSJob">PoshRSJob</a> which provides runspace multhreading in a familiar jobs infrastructure.</p><p>Visit the<a href="http://mspsug.com/2015/08/25/mspsug-virtual-meeting-the-art-of-powershell-runspaces-on-tuesday-september-8th-at-830pm-cdt/">Mississippi PowerShell User Group</a> website to learn more about Boe and to find out more details about this month’s meeting.</p><p>The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “<a href="http://mspsug.com/attendee-info/">Attendee Info</a>” section.</p><p>Register via<a href="http://mspsug.eventbrite.com/">EventBrite</a> to receive the URL for this meeting.</p><p>Note: It is not necessary to live in Mississippi or join our user group to attend our meetings or present a session for our user group.</p><p>µ</p>
]]></content:encoded></item><item><title>Use Import-LocalizedData to Internationalize your Scripts</title><link>https://powershell.org/articles/2015-09-03-use-import-localizeddata-to-internationalize-your-scripts/</link><guid>https://powershell.org/articles/2015-09-03-use-import-localizeddata-to-internationalize-your-scripts/</guid><pubDate>Thu, 03 Sep 2015 21:13:28 +0000</pubDate><description>&lt;p&gt;Whether you&amp;rsquo;re working with an enterprise client with a global presence or building a tool that you want to share with the world, you may find yourself wanting to build support for multiple languages into your scripts. The Import-LocalizedData Cmdlet is a simple and powerful way to achieve this. I put up a pair of posts about my recent experience with a globalization effort and how we were able to get a lot of functionality with only a few lines of code.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Whether you&rsquo;re working with an enterprise client with a global presence or building a tool that you want to share with the world, you may find yourself wanting to build support for multiple languages into your scripts. The Import-LocalizedData Cmdlet is a simple and powerful way to achieve this. I put up a pair of posts about my recent experience with a globalization effort and how we were able to get a lot of functionality with only a few lines of code.</p><p>The first post, <a href="http://www.plattsoft.net/2015/08/24/internationalization-with-import-localizeddata/">Internationalization with Import-LocalizedData</a>, describes the Cmdlet itself, how it works, and how to use it to automatically detect and load the correct language files for display at runtime. This is based on the regional settings of the user under which the PowerShell session is running.</p><p>The second post, <a href="http://www.plattsoft.net/2015/08/27/internationalization-with-import-localizeddata-part-2/">Internationalization with Import-LocalizedData: Part 2</a>, goes into more detail about some research we had to do into what exact regional settings control the language that PowerShell will attempt to use.</p><p>Even if you&rsquo;re not planning to localize your scripts into other languages right now, you should still think about globalizing your code so that it&rsquo;s easy to do if you change your mind, or if someone is kind enough to want to contribute some translations.</p>
]]></content:encoded></item><item><title>Basic Exchange Monitoring</title><link>https://powershell.org/articles/2015-09-01-basic-exchange-monitoring/</link><guid>https://powershell.org/articles/2015-09-01-basic-exchange-monitoring/</guid><pubDate>Wed, 02 Sep 2015 01:32:03 +0000</pubDate><description>&lt;p&gt;Hello Powershell.org!  This is the first time I&amp;rsquo;ve posted for anyone outside of my own powershell blog site &lt;a href="http://www.powershellmasters.com"&gt;PowerShellMasters.com&lt;/a&gt; and I just want to thank PowerShell.org for everything they do for our community.  I think most of you would agree that this site is one of the best PowerShell sites out there today and I am grateful for the opportunity to reach so many PowerShell people.  OK enough with the touchy-feely stuff. 🙂&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Hello Powershell.org!  This is the first time I&rsquo;ve posted for anyone outside of my own powershell blog site<a href="http://www.powershellmasters.com">PowerShellMasters.com</a> and I just want to thank PowerShell.org for everything they do for our community.  I think most of you would agree that this site is one of the best PowerShell sites out there today and I am grateful for the opportunity to reach so many PowerShell people.  OK enough with the touchy-feely stuff. 🙂</p><p>If you&rsquo;ve been a Sys Admin for any extended time then you&rsquo;ve probably had your fair share of run-ins with Exchange.  Whether you are a full-time Exchange Admin or just doing it as part of your &ldquo;other duties&rdquo; I think we all know you have to keep an eye on this system or it can get away from you!  </p><p>Now there are dozens of monitoring solution out there that can help us monitor our Exchange environments and the are great especially in detailed reports.  But who has time to pour over screen after screen of stats?  I wrote the script<a href="http://powershellmasters.com/scripts/">Exchange_Basic_Monitor.ps1</a> because I wanted a simple one-page report to check each morning when I get to the office.  There&rsquo;s nothing fancy or overly complicated about this script, but it will definitely let you know where you stand with your Exchange environment.  If you want to read more about this script just follow the link below.  When you are done make sure to come back and check out some more of<a href="http://www.powershell.org">PowerShell.org</a>&rsquo;s site.</p><p><strong><a href="http://powershellmasters.com/2015/09/exchange-2013-basic-monitoring/">Exchange 2013: Basic Monitoring</a></strong></p><p>Like I said I&rsquo;m pretty new to this whole blogging thing, but so far it&rsquo;s been really fun (and a little theraputic too!).  If you have some comments, questions or advice I&rsquo;m happy to hear it.  Thanks for reading and I hope everyone likes the article.</p><p>Thanks</p><p>Matt</p>
]]></content:encoded></item><item><title>List users logged on to your machines</title><link>https://powershell.org/articles/2015-08-28-list-users-logged-on-to-your-machines/</link><guid>https://powershell.org/articles/2015-08-28-list-users-logged-on-to-your-machines/</guid><pubDate>Fri, 28 Aug 2015 11:12:07 +0000</pubDate><description>&lt;p&gt;Password policies are the best 😀 Sometimes they lead to account logouts when someone forgets to logout of a session somewhere on the network though. It might be the TS session they use once a quarter for reporting or maybe you know the feeling when you RDP to a server only to find that it is locked by 2 other admins who forgot to logoff when they left. (Off cause this never happens… we all use PowerShell…) Anyway, this had me searching for a user session somewhere on the network. The worst thing is when my own password expires. I hate when my account ends up being locked. Therefor I made it a rule to just check all servers before I change password. There are multiple ways to do this but of course I tend to go the PowerShell route. &lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Password policies are the best 😀 Sometimes they lead to account logouts when someone forgets to logout of a session somewhere on the network though. It might be the TS session they use once a quarter for reporting or maybe you know the feeling when you RDP to a server only to find that it is locked by 2 other admins who forgot to logoff when they left. (Off cause this never happens… we all use PowerShell…) Anyway, this had me searching for a user session somewhere on the network. The worst thing is when my own password expires. I hate when my account ends up being locked. Therefor I made it a rule to just check all servers before I change password. There are multiple ways to do this but of course I tend to go the PowerShell route. </p><h2 id="research" class="ps-heading">Research<a class="ps-heading-anchor" href="#research" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The originally method I used is from<a href="https://gallery.technet.microsoft.com/scriptcenter/d46b1f3b-36a4-4a56-951b-e37815a2df0c">TechNet gallery</a></p><p>In short: Get-WmiObject -Class Win32_process</p><p>This basically finds all unique users running processes on the machine. This is cool because it finds everything even stuff running as a service but I&rsquo;m not convinced it is the most efficient way.</p><p>Checking up with google I find a lot of creative ways to check who is logged on to your box.</p><p><a href="http://www.peetersonline.nl/2008/11/oneliner-get-logged-on-users-with-powershell/">peetersonline.nl/2008/11/oneliner-get-logged-on-users-with-powershell/</a> gave me the idea to check Win32_LoggedOnUser which seems obvious.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-1.png"><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-1.png" alt="2015-08-28 (1)"/></p><p>This looks great and seems to work with Get-CimInstance too though the output is a little different.</p><p><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-28.png" alt="2015-08-28"/><p><a href="http://learn-powershell.net/2010/11/01/quick-hit-find-currently-logged-on-users/">learn-powershell.net/&hellip;/Quick-hit-find-currently-logged-on-users/</a> took a little more old-school approach which I kind of like because it&rsquo;s a little rough and forces me to play with my<a href="https://powershell.org/2015/08/12/template-based-parsing-and-progress-bars/">template based parsing.</a></p><p> <a href="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-2.png"><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-2.png" alt="2015-08-28 (2)"/></p><p>I&rsquo;m not really sure which method is faster so why not try implementing all 3 in a module and test it out.</p><h2 id="sketching" class="ps-heading">Sketching<a class="ps-heading-anchor" href="#sketching" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>It&rsquo;s always a good idea to begin by making a sketch of what you&rsquo;re trying to accomplish.</p><p>`Pseudo code:
Get-ActiveUser -ComputerName [] -Method [Cim,Wmi,Query]
Wanted output:
Username ComputerName</p><hr><p>TestUser1 Svr3
TestUser3 Svr3
DonaldDuck Client2
`Now I have all the information I need to set up the GitHub repository.</p><p><a href="https://github.com/mrhvid/Get-ActiveUser">github.com/mrhvid/Get-ActiveUser</a></p><h2 id="code" class="ps-heading">Code<a class="ps-heading-anchor" href="#code" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>First of all the parameters I&rsquo;m interested in are ComputerName and Method.</p><p><code>Param ( # Computer name, IP, Hostname [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=0)] [String[]] $ComputerName, # Choose method, WMI, CIM or Query [Parameter(Mandatory=$true, ValueFromPipelineByPropertyName=$true, Position=1)] [ValidateSet('WMI','CIM','Query')] [String] $Method )</code>I already have 3 possible Methods in mind so I set ValidateSet with the 3 possibilities. Then I don&rsquo;t have to worry about that input later.</p><p><code>Process { switch ($Method) { 'WMI' { } 'CIM' { } 'Query' { } } }</code>In the Process part of my function I simply use a switch for the 3 different methods I allowed in the Parameter.</p><p>Now it&rsquo;s basic fill-in-the-blanks.</p><h3 id="wmi" class="ps-heading">WMI<a class="ps-heading-anchor" href="#wmi" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>My old solution is simpel and works fine.</p><p><code>$WMI = Get-WmiObject -Class Win32_Process -ComputerName $ComputerName -ErrorAction Stop $ProcessUsers = $WMI.getowner().user | Select-Object -Unique</code><a href="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-3.png"><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-3.png" alt="2015-08-28 (3)"/></p><p>But now that I found Win32_LoggedOnUser it seams wrong to do it this way. Lets look at the new idea instead.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-4.png"><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-4.png" alt="2015-08-28 (4)"/></p><p><a href="https://powershell.org/wp-content/uploads/2015/08/gwmi-Wmi32_LoggedOnUser_gm.png"><img src="https://powershell.org/wp-content/uploads/2015/08/gwmi-Wmi32_LoggedOnUser_gm.png" alt="gwmi-Wmi32_LoggedOnUser_gm"/></p><p>This is all the right data but it seems to be in a string format so I&rsquo;ll have to do a little manipulation. This can be done in a million ways.</p><p><code>function Get-MyLoggedOnUsers { param([string]$Computer) Get-WmiObject Win32_LoggedOnUser -ComputerName $Computer | Select Antecedent -Unique | %{“{0}{1}” -f $_.Antecedent.ToString().Split(‘”‘)[1], $_.Antecedent.ToString().Split(‘”‘)[3]} }</code>Peter&rsquo;s aforementioned one-liner didn&rsquo;t seem very reader-friendly to me, which is ok for a one-liner, but I would like it to be a little more readable if possible.</p><p><code>$WMI = (Get-WmiObject Win32_LoggedOnUser).Antecedent $ActiveUsers = @() foreach($User in $WMI) { $StartOfUsername = $User.LastIndexOf('=') + 2 $EndOfUsername = $User.Length - $User.LastIndexOf('=') -3 $ActiveUsers += $User.Substring($StartOfUsername,$EndOfUsername) }</code><a href="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-5.png"><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-5.png" alt="2015-08-28 (5)"/></p><p> This seams right 🙂 I&rsquo;ll save the output in $ActiveUsers variable and do the same for CIM and Query.</p><h3 id="cim" class="ps-heading">CIM<a class="ps-heading-anchor" href="#cim" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>Lets try with CIM.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-6.png"><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-6.png" alt="2015-08-28 (6)"/></p><p>This looks way more structured.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-7.png"><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-28-7.png" alt="2015-08-28 (7)"/></p><p>CIM ends up being an easy to understand one-liner 😀</p><p><code>$ActiveUsers = (Get-CimInstance Win32_LoggedOnUser -ComputerName $ComputerName).antecedent.name | Select-Object -Unique</code>### Query</p><p>Using the good ol&rsquo; Query.exe I found the<a href="https://powershell.org/2015/08/12/template-based-parsing-and-progress-bars/">template based parsing discussed earlier</a> very useful.</p><p>`$Template = @'
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME</p><blockquote><p>{USER*:jonas} console 1 Active 1+00:27 24-08-2015 22:22
{USER*:test} 2 Disc 1+00:27 25-08-2015 08:26
&lsquo;@
$Query = query.exe user
$ActiveUsers = $Query | ConvertFrom-String -TemplateContent $Template | Select-Object -ExpandProperty User
`### Output</p></blockquote><p>Now I just need to format and output the users in a nice way. I want clean objects with ComputerName and UserName.</p><p>`# Create nice output format
$UsersComputersToOutput = @()
foreach($User in $ActiveUsers) {
$UsersComputersToOutput += New-Object psobject -Property @{
ComputerName=$ComputerName;
UserName=$User
}
}
}</p><h1 id="output-data" class="ps-heading">output data<a class="ps-heading-anchor" href="#output-data" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>$UsersComputersToOutput
`## Testing</p><p>Now I have a problem. I can&rsquo;t test this as I don&rsquo;t have a bunch of test serveres at my disposal. All my testing has been done against my own Windows 10 box. It&rsquo;s seems that query is a lot faster running locally but WMI/CIM might give a more complete view of what services are running.  </p><p><a href="https://powershell.org/wp-content/uploads/2015/08/get-activeuser_wmi_highlight.png"><img src="https://powershell.org/wp-content/uploads/2015/08/get-activeuser_wmi_highlight.png" alt="get-activeuser_wmi_highlight"/></p><p>I have a bunch of standard service accounts running that might be nice to remove from the output. Also for this to be useful we will want to run it against a lot of machines.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/get-activeuser_query.png"><img src="https://powershell.org/wp-content/uploads/2015/08/get-activeuser_query.png" alt="get-activeuser_query"/></p><p>Combining Get-ActiveUser with<a href="https://powershell.org/2015/08/20/multithreading-using-jobs/">Start-Multithread from last weeks post</a> seems to be working as intended.</p><p><code>Start-Multithread -Script { param($C) Get-ActiveUser -ComputerName $C -Method Query } -ComputerName ::1,Localhost | Out-GridView</code>Piping the above to Out-GridView is proberbly my personal favorite way of accomplishing something truly useful.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/get-activeuser_query_out-gridview.png"><img src="https://powershell.org/wp-content/uploads/2015/08/get-activeuser_query_out-gridview.png" alt="get-activeuser_query_out-gridview"/></p><p>Now we have all the data in a nice searchable way and it&rsquo;s really easy to check if your user is logged in on some random machine. It also an easy way to check for rouge users on your network.</p><h2 id="publishing-and-feedback" class="ps-heading">Publishing and feedback<a class="ps-heading-anchor" href="#publishing-and-feedback" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The code is published on<a href="https://www.powershellgallery.com/packages/Get-ActiveUser/">PowerShellGallery</a>.</p><p>Please help me out by testing it for me. I would love to know if this works in the real world 🙂</p><p><code># To install Get-ActiveUser Install-Module Get-ActiveUser #To install Start-Multithread Install-Module Start-Multithread</code>This should work when you have WMF 5 + installed and on Windows 10 out of the box. </p><p>As this is my third blogpost ever I would love some feedback. Is there something I could do better or in a better format? Have you used this and for what? Please let me know in the comments 🙂</p><h4 id="contact-me" class="ps-heading">Contact me<a class="ps-heading-anchor" href="#contact-me" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h4><p>Twitter<a href="https://twitter.com/mrhvid">@mrhvid</a><br>
Web<a href="http://Jonas.SommerNielsen.dk">Jonas.SommerNielsen.dk</a></p>
]]></content:encoded></item><item><title>TechSession Webinar: The Top 10 Considerations When Writing #PowerShell Advanced Functions</title><link>https://powershell.org/articles/2015-08-26-techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions/</link><guid>https://powershell.org/articles/2015-08-26-techsession-webinar-the-top-10-considerations-when-writing-powershell-advanced-functions/</guid><pubDate>Wed, 26 Aug 2015 14:52:40 +0000</pubDate><description>&lt;p&gt;On Wednesday, September 2nd at 2pm EDT (1pm CDT), I’ll be presenting the September TechSession Webinar for PowerShell.org. The topic for this month&amp;rsquo;s session is: “&lt;a href="https://powershell.org/event/techsession-the-top-10-considerations-when-writing-powershell-advanced-functions/"&gt;The Top 10 Considerations When Writing PowerShell Advanced Functions&lt;/a&gt;”.&lt;/p&gt;
&lt;p&gt;Here’s what you can expect from my presentation:&lt;/p&gt;
&lt;p&gt;There are lots of things to consider when writing an advanced function in PowerShell depending on what the function will be designed to accomplish, what operating system and PowerShell versions it will be written for, and who will be using it. During this session, PowerShell MVP Mike F Robbins will walk you through the top 10 items that he takes into consideration along with his thought process when creating advanced functions in PowerShell. We’ll briefly discuss comment based help, parameters, parameter validation, pipeline input, and error handling. This will NOT be a deep dive into any one of these topics as the focus of this session will be on writing advanced functions to maximize code reusability by minimizing static values. Prior experience with PowerShell is recommended.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>On Wednesday, September 2nd at 2pm EDT (1pm CDT), I’ll be presenting the September TechSession Webinar for PowerShell.org. The topic for this month&rsquo;s session is: “<a href="https://powershell.org/event/techsession-the-top-10-considerations-when-writing-powershell-advanced-functions/">The Top 10 Considerations When Writing PowerShell Advanced Functions</a>”.</p><p>Here’s what you can expect from my presentation:</p><p>There are lots of things to consider when writing an advanced function in PowerShell depending on what the function will be designed to accomplish, what operating system and PowerShell versions it will be written for, and who will be using it. During this session, PowerShell MVP Mike F Robbins will walk you through the top 10 items that he takes into consideration along with his thought process when creating advanced functions in PowerShell. We’ll briefly discuss comment based help, parameters, parameter validation, pipeline input, and error handling. This will NOT be a deep dive into any one of these topics as the focus of this session will be on writing advanced functions to maximize code reusability by minimizing static values. Prior experience with PowerShell is recommended.</p><p>Registration URL:<a href="https://attendee.gotowebinar.com/register/39900545688014338">https://attendee.gotowebinar.com/register/39900545688014338</a></p><p>Who am I?</p><p>Mike F Robbins is a Microsoft MVP on Windows PowerShell and a SAPIEN Technologies MVP. He is a co-author of Windows PowerShell TFM 4th Edition and is a contributing author of a chapter in the PowerShell Deep Dives book. Mike has written guest blog articles for the Hey, Scripting Guy! Blog, PowerShell Magazine, and PowerShell.org. He is the winner of the advanced category in the 2013 PowerShell Scripting Games. Mike is also the leader and co-founder of the<a href="http://mspsug.com/">Mississippi PowerShell User Group</a>. He blogs at<a href="http://mikefrobbins.com/">mikefrobbins.com</a> and can be found on twitter<a href="http://twitter.com/mikefrobbins">@mikefrobbins</a>.</p><p>µ</p>
]]></content:encoded></item><item><title>Multithreading using jobs</title><link>https://powershell.org/articles/2015-08-20-multithreading-using-jobs/</link><guid>https://powershell.org/articles/2015-08-20-multithreading-using-jobs/</guid><pubDate>Thu, 20 Aug 2015 10:23:48 +0000</pubDate><description>&lt;p&gt;Often I have had to check something against all servers or clients. A classic problem and every time I run into the it it&amp;rsquo;s time consuming and running the job multithreaded would be nice.&lt;/p&gt;
&lt;p&gt;A few years back I found a nice little script for multithreading which I have been using quite often. Unfortunately this wasn&amp;rsquo;t a module. And I can&amp;rsquo;t remember where it came from. So this week I set my mind on recreating this as a module and to see if I can publish it on &lt;a href="https://www.powershellgallery.com/"&gt;PowerShell Gallery&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Often I have had to check something against all servers or clients. A classic problem and every time I run into the it it&rsquo;s time consuming and running the job multithreaded would be nice.</p><p>A few years back I found a nice little script for multithreading which I have been using quite often. Unfortunately this wasn&rsquo;t a module. And I can&rsquo;t remember where it came from. So this week I set my mind on recreating this as a module and to see if I can publish it on<a href="https://www.powershellgallery.com/">PowerShell Gallery</a>.</p><h2 id="version-control-101" class="ps-heading"><strong>Version control 101</strong><a class="ps-heading-anchor" href="#version-control-101" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>I recently watched the<a href="https://www.youtube.com/watch?v=wmPfDbsPeZY">crash course</a> Warren did on youtube a month back and I started out creating a repository for the project.</p><p><a href="https://github.com/mrhvid/Start-MultiThread">github.com/mrhvid/Start-MultiThread</a></p><p>I will let the video explain the concept. But I already feel more productive and safe while coding. Only thing left is to get in a process where I commit often or at least when it makes sense.</p><h2 id="idea" class="ps-heading"><strong>Idea</strong><a class="ps-heading-anchor" href="#idea" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The original version was just a function I found on google somewhere. It worked fine but it wasn&rsquo;t too handy to load up each time. And the input for the function was for two files, a script and a text file with a list of ComputerNames.</p><p>It would be nice if I could just call it with a list of computer names from whereever. e.g. Get-ADComputer, (Computer1, Computer2, localhost) or (Get-content servers.txt).b</p><p>And for quick oneliners if I need something simple it would be nice to be able to just write the script and not have to save a .ps1 file with the command.</p><p><strong>Pseudo code</strong>:</p><p><code>Multi-Thread -Script { Test-Connection } -Computers [list of computers]</code>## Execution</p><p>First off I needed to figure out a good name.</p><p>Get-Verb lists 98 verbs on my machine. Sadly &ldquo;multi&rdquo; is not one of them. After som consideration I chose<strong>&ldquo;Start&rdquo;</strong> as a good verb, and<strong>&ldquo;multithread&rdquo;</strong> as the noun.</p><p><code>Start-MultiThread</code>Sounds fair so I created a new folder with this name and a Start-MultiThread.psm1 file for the module.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/Snippit.png"><img src="https://powershell.org/wp-content/uploads/2015/08/Snippit.png" alt="Snip"/></p><p>A snippet for a full advanced function is always a good starting point. I added this to my version control and things are looking good so far.</p><p><a href="https://github.com/mrhvid/Start-Multithread/commit/9355446aae85c9f23abe07481edc3ec84d487fe4">https://github.com/mrhvid/Start-Multithread/&hellip;</a> (first upload)</p><p>It already looks way more organized than what I usually come up with.</p><h3 id="coding" class="ps-heading">Coding<a class="ps-heading-anchor" href="#coding" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>Tuesday afternoon I put on my headphones, started banging away on my keyboard and the result was this code</p><p><code>function Start-Multithread { [CmdletBinding(DefaultParameterSetName='Parameter Set 1', SupportsShouldProcess=$true, PositionalBinding=$false, HelpUri = 'https://github.com/mrhvid/Start-MultiThread/', ConfirmImpact='Medium')] [Alias()] [OutputType([String])] Param ( # Command or script to run. Must take ComputerName as argument to make sense. [Parameter(Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0)] $Script, # List of computers to run script against [Parameter(Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=1)] [String[]] $Computers, # Maximum concurrent threads to start [Parameter(Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=2)] [int] $MaxThreads = 20 , # Number of sec to wait after last thred is started. [Parameter(Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=3)] [int] $MaxWaitTime = 600, # Number of Milliseconds to wait if MaxThreads is reached [Parameter(Mandatory=$false, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=4)] $SleepTime = 500 ) Begin { } Process { if ($pscmdlet.ShouldProcess('Target', 'Operation')) { $i = 0 $Jobs = @() Foreach($Computer in $Computers) { # Wait for running jobs to finnish if MaxThreads is reached While((Get-Job -State Running).count -gt $MaxThreads) { Write-Progress -Id 1 -Activity 'Waiting for existing jobs to complete' -Status "$($(Get-job -State Running).count) jobs running" -PercentComplete ($i / $Computers.Count * 100) Start-Sleep -Milliseconds $SleepTime } # Start new jobs $i++ $Jobs += Start-Job -ScriptBlock $Script -ArgumentList $Computer -Name $Computer -OutVariable LastJob Write-Progress -Id 1 -Activity 'Starting jobs' -Status "$($(Get-job -State Running).count) jobs running" -PercentComplete ($i / $Computers.Count * 100) } # All jobs have now been started # Wait for jobs to finish While((Get-Job -State Running).count -gt 0) { $JobsStillRunning = '' foreach($RunningJob in (Get-Job -State Running)) { $JobsStillRunning += $RunningJob.Name } Write-Progress -Id 1 -Activity 'Waiting for jobs to finish' -Status "$JobsStillRunning" -PercentComplete (($Computers.Count - (Get-Job -State Running).Count) / $Computers.Count * 100) Start-Sleep -Milliseconds $SleepTime } # Output Get-job | Receive-Job # Cleanup Get-job | Remove-Job } } End { } }</code>This is by no means final code. (I already made small changes check<a href="https://github.com/mrhvid/Start-Multithread">GitHub</a> for latest code). But the outline started to look good.</p><p>The Foreach just runs through the list of computers supplied and for each one starts a new job with the script code and the ComputerName as argument.  </p><p>To make sure the throttle limit is kept I have a small While loop that checks the number of running jobs and just sleeps until it falls under $MaxThreads limit.</p><p>When all jobs are started it&rsquo;s just a matter of waiting for all jobs to finish. (It would be wise to add a timer here and kill hanging jobs after some time)</p><p>And lastly I just output all the results.</p><h3 id="testing" class="ps-heading">Testing<a class="ps-heading-anchor" href="#testing" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p> <a href="https://powershell.org/wp-content/uploads/2015/08/2015-08-19-6.png"><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-19-6.png" alt="2015-08-19 (6)"/></p><p> This looks great but unfortunately it fails to receive the computername.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/2015-08-19-7.png"><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-19-7.png" alt="2015-08-19 (7)"/></p><p>It does run the code once for each computer but it asks for a computername each time which kind of defeats the point.</p><p>Good thing we have google and good ol&rsquo;<a href="https://powershell.org/forums/topic/passing-parameter-to-start-job/">Don</a>.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/2015-08-19-8.png"><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-19-8.png" alt="2015-08-19 (8)"/></p><p>Adding a parameter() block to the script makes it work.</p><p>Clearly there&rsquo;s still a lot to be done here.</p><h3 id="publishing" class="ps-heading">Publishing<a class="ps-heading-anchor" href="#publishing" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>But creating modules is only really fun if you can share them with others. And this is where I&rsquo;m beginning to love PowerShell v5. It turns out it&rsquo;s quite simpel to do this.</p><p><a href="https://www.powershellgallery.com/packages/upload">PowerShellGallery.com</a> describes this. After signing up it&rsquo;s a one-liner.</p><p><code>PS&gt; Publish-Module -Name -NuGetApiKey</code>You need to create a manifest for your module first.</p><p>Now I have my module published and it has it&rsquo;s own page on the internet WUUHU</p><p><a href="https://www.powershellgallery.com/packages/Start-Multithread/">www.powershellgallery.com/packages/Start-Multithread</a></p><p>Cool as that might seem the really cool stuff comes next.</p><h3 id="installing-on-a-new-machine" class="ps-heading">Installing on a new machine<a class="ps-heading-anchor" href="#installing-on-a-new-machine" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>This requires WMF 5 or newer. Aka. Windows 10 works out of the box. Try it out from your elevated powershell promt.</p><p><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-19-9.png" alt="2015-08-19 (9)"/><p>The module is available from the standard PSGallery repository. And installing it on your machine is as simpel as piping this to Install-Module</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/2015-08-19-10.png"><img src="https://powershell.org/wp-content/uploads/2015/08/2015-08-19-10.png" alt="2015-08-19 (10)"/></p><p>Now you can try out the module on your own machine. Promission to be impressed. </p><h2 id="help-make-it-better" class="ps-heading">Help make it better<a class="ps-heading-anchor" href="#help-make-it-better" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>This module is not flawless so if you have any ideas feel free to get on your<a href="https://github.com/mrhvid/Start-Multithread">GitHub</a> and submit changes 🙂</p><p>My idea is to keep it simple and try to follow some good practices e.g. as described in<a href="http://www.manning.com/jones4/">Learn PowerShell Toolmaking in a Month of Lunches</a>.</p><h4 id="contact-me" class="ps-heading">Contact me<a class="ps-heading-anchor" href="#contact-me" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h4><p>Twitter<a href="https://twitter.com/mrhvid">@mrhvid</a><br>
Web<a href="http://Jonas.SommerNielsen.dk">Jonas.SommerNielsen.dk</a></p>
]]></content:encoded></item><item><title>Philadelphia PowerShell User Group Meeting – September 3rd 2015 with Max Trinidad</title><link>https://powershell.org/articles/2015-08-17-philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad/</link><guid>https://powershell.org/articles/2015-08-17-philadelphia-powershell-user-group-meeting-september-3rd-2015-with-max-trinidad/</guid><pubDate>Tue, 18 Aug 2015 01:11:05 +0000</pubDate><description>&lt;p&gt;Join us on Thursday, September 3rd when &lt;a href="https://twitter.com/juneb_get_help"&gt;
Maximo Trinidad
&lt;/a&gt; will be giving a talk called a &amp;ldquo;&lt;strong&gt;Creating a SQL Server Database Report with PowerShell&lt;/strong&gt;&amp;rdquo;. As describe by Maximo: This is a deep dive on how to create a SQL Server report using PowerShell and SMO. At the same time, you will learn how to create and work with PowerShell objects, scriptblocks, formatting properties, and generating output results. We&amp;rsquo;ll be looking into creating a report to identify database properties irregularities. This will be a good start to help begin documenting your SQL Server on the network.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join us on Thursday, September 3rd when<a href="https://twitter.com/juneb_get_help">
Maximo Trinidad</a> will be giving a talk called a &ldquo;<strong>Creating a SQL Server Database Report with PowerShell</strong>&rdquo;. As describe by Maximo: This is a deep dive on how to create a SQL Server report using PowerShell and SMO. At the same time, you will learn how to create and work with PowerShell objects, scriptblocks, formatting properties, and generating output results. We&rsquo;ll be looking into creating a report to identify database properties irregularities. This will be a good start to help begin documenting your SQL Server on the network.</p><p><strong>About Maximo Trinidad</strong></p><p>Maximo Trinidad (Florida Aka – Mr. PowerShell) hails from Puerto Rico and have been working with computers since 1979. Throughout his many years, he has worked with SQL Server Technologies, and provided support to Windows Servers/Client Systems, Microsoft Cloud and Virtualization Technologies. Maximo has also been a Microsoft PowerShell MVP since 2009 and MVP SAPIEN Technologies 2015.  You can find him speaking in most at most of the SQLSaturday, IT Pro and .NET camps events around the Florida’s State.  He is also the founder of the Florida PowerShell User Group which meets every 3rd Thursday evening of the month.
Follow him on<a href="https://twitter.com/MaxTrinidad">
Twitter</a> and on his<a href="http://www.maxtblog.com/">
blog</a>!</p><p>Please <a href="https://www.eventbrite.com/e/phillyposh-september-3rd-2015-max-trinidad-tickets-18198473123">
register</a> if you plan to attend in person or online.<strong>PLEAE NOTE THE NEW LOCATION!</strong> The meeting URL to join us remotely will be included in your Eventbrite registration confirmation.</p><p><a href="http://www.eventbrite.com/e/phillyposh-september-3rd-2015-max-trinidad-tickets-18198473123?ref=ebtnebregn"><img src="https://www.eventbrite.com/custombutton?eid=18198473123" alt="Eventbrite - PhillyPosh September 3rd 2015 - Max Trinidad"/></p>
]]></content:encoded></item><item><title>TEST IT: New IISAdministration Module</title><link>https://powershell.org/articles/2015-08-17-test-it-new-iisadministration-module/</link><guid>https://powershell.org/articles/2015-08-17-test-it-new-iisadministration-module/</guid><pubDate>Mon, 17 Aug 2015 17:35:08 +0000</pubDate><description>&lt;p&gt;It&amp;rsquo;s no secret that Microsoft&amp;rsquo;s WebAdministration module isn&amp;rsquo;t universally loved. It&amp;rsquo;s functionality isn&amp;rsquo;t deep, and it doesn&amp;rsquo;t play well in the PowerShell pipeline. There are also a number of things in it that run really slowly, making bulk administration a pain.&lt;/p&gt;
&lt;p&gt;Last week, &lt;a href="http://blogs.iis.net/bariscaglar/iisadministration-powershell-cmdlets-new-feature-in-windows-10-server-2016"&gt;Baris Caglar announced that Windows 10 contains a new IISAdministration module&lt;/a&gt;, which is a rough draft of what is hoped to be a final module in Windows Server 2016. &lt;strong&gt;If you use IIS, get hold of this and start testing so the team can get feedback.&lt;/strong&gt; Note that this is a _feature of Windows 10; _I haven&amp;rsquo;t yet been able to test and see if file-copying it to another version of Windows will work or not (if you try, please post your results in a comment). The module seems to rely heavily on the &lt;a href="https://msdn.microsoft.com/en-us/library/microsoft.web.administration.servermanager(v=vs.90).aspx"&gt;IIS Administration .NET class&lt;/a&gt;, going so far as giving you easy access to an instance of it so you can code against it directly for whatever the module itself doesn&amp;rsquo;t offer.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>It&rsquo;s no secret that Microsoft&rsquo;s WebAdministration module isn&rsquo;t universally loved. It&rsquo;s functionality isn&rsquo;t deep, and it doesn&rsquo;t play well in the PowerShell pipeline. There are also a number of things in it that run really slowly, making bulk administration a pain.</p><p>Last week,<a href="http://blogs.iis.net/bariscaglar/iisadministration-powershell-cmdlets-new-feature-in-windows-10-server-2016">Baris Caglar announced that Windows 10 contains a new IISAdministration module</a>, which is a rough draft of what is hoped to be a final module in Windows Server 2016. <strong>If you use IIS, get hold of this and start testing so the team can get feedback.</strong> Note that this is a _feature of Windows 10; _I haven&rsquo;t yet been able to test and see if file-copying it to another version of Windows will work or not (if you try, please post your results in a comment). The module seems to rely heavily on the<a href="https://msdn.microsoft.com/en-us/library/microsoft.web.administration.servermanager(v=vs.90).aspx">IIS Administration .NET class</a>, going so far as giving you easy access to an instance of it so you can code against it directly for whatever the module itself doesn&rsquo;t offer.</p><p>IIS as a product is in a weird place, because it no longer has a dedicated sub-team within the Windows Server team (at least, it didn&rsquo;t last I checked). That&rsquo;s made it difficult for anyone at Microsoft to produce a better administration module, since nobody really &ldquo;owned&rdquo; the product as their daily job, and nobody was available to be tasked with PowerShell improvements. Hopefully this new module is a step in the right direction at last.</p><p>Some of what we still don&rsquo;t know:</p><ul><li>Will this be released under an open-source license, perhaps posted on GitHub where others can contribute?</li><li>Is the Win2016 release a for-sure on finalizing this module, or is that more a target? How will subsequent releases be made available?</li><li>Can this be made available for downlevel operating systems? The .NET class in question has been around since IIS7, so it seems in theory that the code would run on older versions of Windows.</li></ul><p>Unfortunately, because Microsoft&rsquo;s IIS.NET blog system doesn&rsquo;t seem to do well with handling spam 😉 I&rsquo;m not sure asking the author there will produce any answers - but let&rsquo;s try!</p>
]]></content:encoded></item><item><title>Abstraction and Configuration Data</title><link>https://powershell.org/articles/2015-08-16-abstraction-and-configuration-data/</link><guid>https://powershell.org/articles/2015-08-16-abstraction-and-configuration-data/</guid><pubDate>Sun, 16 Aug 2015 20:55:20 +0000</pubDate><description>&lt;p&gt;Modularity and abstraction are a huge benefit in scripting and coding. Which of the following blocks of code are easier to understand?&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$SQLConnection = New-Object System.Data.SqlClient.SQLConnection $SQLConnection.ConnectionString = 'Server=SqlServer1;Database=MyDB;Integrated Security=True;Connect Timeout=15' $cmd = New-Object system.Data.SqlClient.SqlCommand(&amp;quot;SELECT * FROM Table1&amp;quot;,$SQLConnection) $ds = New-Object system.Data.DataSet $da = New-Object system.Data.SqlClient.SqlDataAdapter($cmd) [void]$da.fill($ds) $SQLConnection.Close() $ds.Tables[0] &lt;/code&gt;Or&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;# Invoke-Sqlcmd2 -ServerInstance SQLServer1 -Database MyDB -Query 'SELECT * FROM Table1' &lt;/code&gt;If you aren&amp;rsquo;t a masochist, &lt;a href="https://raw.githubusercontent.com/RamblingCookieMonster/PowerShell/master/Invoke-Sqlcmd2.ps1"&gt;the latter&lt;/a&gt; probably looks a bit nicer. Oh, and it offers other parameters, error handling, parameterized SQL queries, built in help, and other benefits the .NET code block misses.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Modularity and abstraction are a huge benefit in scripting and coding. Which of the following blocks of code are easier to understand?</p><p><code>$SQLConnection = New-Object System.Data.SqlClient.SQLConnection $SQLConnection.ConnectionString = 'Server=SqlServer1;Database=MyDB;Integrated Security=True;Connect Timeout=15' $cmd = New-Object system.Data.SqlClient.SqlCommand("SELECT * FROM Table1",$SQLConnection) $ds = New-Object system.Data.DataSet $da = New-Object system.Data.SqlClient.SqlDataAdapter($cmd) [void]$da.fill($ds) $SQLConnection.Close() $ds.Tables[0]</code>Or&hellip;</p><p><code># Invoke-Sqlcmd2 -ServerInstance SQLServer1 -Database MyDB -Query 'SELECT * FROM Table1'</code>If you aren&rsquo;t a masochist,<a href="https://raw.githubusercontent.com/RamblingCookieMonster/PowerShell/master/Invoke-Sqlcmd2.ps1">the latter</a> probably looks a bit nicer. Oh, and it offers other parameters, error handling, parameterized SQL queries, built in help, and other benefits the .NET code block misses.</p><p>The takeaway? You should be writing or using Advanced Functions and Modules, not monolithic scripts and snippets. Do it for yourself. Do it for anyone who might have to read your code down the line.</p><p>Some modules can benefit from persistent configurations. If you have a module that wraps a REST API, you might want to allow the end user to specify a default URL, rather than specify it every time they run a command.</p><p>This begs the question: what data format should you use? XML? JSON? YAML? INI?</p><p><a href="http://ramblingcookiemonster.github.io/PowerShell-Configuration-Data/">This is a quick hit on options for storing configuration data in PowerShell</a>.</p><p>Don&rsquo;t be ashamed. Many of us sysadmins pride ourselves on learning through experience. That doesn&rsquo;t mean you need to re-invent all the wheels. It can be a great learning experience to write your own code and functions, but at the end of the day, there&rsquo;s nothing wrong with finding the best tool for the job, and sticking with it. Developers make a living writing code, yet they all borrow existing libraries.</p><p>Once you start writing modules and advanced functions, be sure to<a href="http://stevenmurawski.com/powershell/2015/8/moving-in-to-open-source">share them with the community</a>!</p>
]]></content:encoded></item><item><title>Template based parsing and progress bars</title><link>https://powershell.org/articles/2015-08-12-template-based-parsing-and-progress-bars/</link><guid>https://powershell.org/articles/2015-08-12-template-based-parsing-and-progress-bars/</guid><pubDate>Wed, 12 Aug 2015 22:54:37 +0000</pubDate><description>&lt;p&gt;Working with wifi I have often needed to do a survey of the surroundings, and therefor I loved that windows 7 (maybe even Vista) introduced more advanced netsh with wifi support.&lt;/p&gt;
&lt;p&gt;There’s a lot of useful information but it might be nice to have a more graphical overview. The thing is that a text blob like this is not very handy to work with.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://powershell.org/wp-content/uploads/2015/08/image1.png"&gt;&lt;img src="https://powershell.org/wp-content/uploads/2015/08/image1.png" alt="image1"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Some time late last year I heard a guy from the powershell team on the Powerscripting podcast talk about ConvertFrom-String and the new template based parsing. And it occurred to me that you can combine this with a simple powershell progress bar (write-progress) to give a visual representation of signal strength.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Working with wifi I have often needed to do a survey of the surroundings, and therefor I loved that windows 7 (maybe even Vista) introduced more advanced netsh with wifi support.</p><p>There’s a lot of useful information but it might be nice to have a more graphical overview. The thing is that a text blob like this is not very handy to work with.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/image1.png"><img src="https://powershell.org/wp-content/uploads/2015/08/image1.png" alt="image1"/></p><p>Some time late last year I heard a guy from the powershell team on the Powerscripting podcast talk about ConvertFrom-String and the new template based parsing. And it occurred to me that you can combine this with a simple powershell progress bar (write-progress) to give a visual representation of signal strength.</p><p><strong>Why not try it out</strong></p><p>Ps&gt; help ConvertFrom-String -<a href="https://technet.microsoft.com/library/dn807178(v=wps.640).aspx">online</a></p><p><a href="https://powershell.org/wp-content/uploads/2015/08/Help_ConvertFrom-String.png"><img src="https://powershell.org/wp-content/uploads/2015/08/Help_ConvertFrom-String.png" alt="Help_ConvertFrom-String"/></p><p>This looks straight forward.</p><p><code>$TemplateSSID = @' Interface name : Wi-Fi There are 9 networks currently visible. SSID 1 : {SSID*:My Movies 5G} Network type : Infrastructure Authentication : WPA2-Personal Encryption : CCMP BSSID 1 : bc:ae:c5:eb:59:8c Signal : {SIGNAL:88}% Radio type : 802.11n Channel : 36 Basic rates (Mbps) : 6 12 24 Other rates (Mbps) : 9 18 36 48 54 SSID 3 : {SSID*:blackbox} Network type : Infrastructure Authentication : WPA2-Personal Encryption : CCMP BSSID 1 : c8:be:19:aa:98:a4 Signal : {SIGNAL:41}% Radio type : 802.11n Channel : 2 Basic rates (Mbps) : 1 2 5.5 11 Other rates (Mbps) : 6 9 12 18 24 36 48 54 SSID 4 : {SSID*:Greenbox} Network type : Infrastructure Authentication : WPA2-Personal Encryption : CCMP BSSID 1 : 20:c9:d0:28:fb:05 Signal : {SIGNAL:60}% Radio type : 802.11n Channel : 1 Basic rates (Mbps) : 1 2 5.5 11 Other rates (Mbps) : 6 9 12 18 24 36 48 54 BSSID 2 : 20:c9:d0:28:fb:06 Signal : 40% Radio type : 802.11n Channel : 100 Basic rates (Mbps) : 6 12 24 Other rates (Mbps) : 9 18 36 48 54 '@ $Netsh = netsh.exe wlan show networks mode=bssid $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID</code>Executing the the above code resulted in</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/testoutput1.png"><img src="https://powershell.org/wp-content/uploads/2015/08/testoutput1.png" alt="testoutput1"/></p><p>This looks great. The data is structured nicely in a easy to use form.</p><p>Now lets combine that with a progress bar. We need a while loop to keep the progress bar alive and a one second sleep timer is probably a good idea.</p><p><code>while ($true) { $Netsh = netsh.exe wlan show networks mode=bssid $Networks = $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID $i = 0 foreach($Network in $Networks) { Write-Progress -Id $i -Activity $Network.SSID -PercentComplete $Network.SIGNAL $i++ } Start-Sleep -Seconds 1 }</code>The essential part is just a foreach looping through the networks objects. We use Write-Progress with parameters SIGNAL strength as PercentComplete and SSSID as Activity.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/image3.png"><img src="https://powershell.org/wp-content/uploads/2015/08/image3.png" alt="ise progress bars"/></p><p>It looks great in ISE and even works in the shell</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/image4.png"><img src="https://powershell.org/wp-content/uploads/2015/08/image4.png" alt="shell progress"/></p><p>How cool is that?</p><p>The bright reader might have spotted an obvious flaw in the first template. It doesn’t handle networks with multiple radios e.g. a network with both a 2.4 ghz and 5 ghz and same ssid. And all the other nice information from netsh is simply ignored.</p><p><strong>Second try</strong></p><p><code>$TemplateSSID = @' Interface name : Wi-Fi There are 9 networks currently visible. {NETWORK*:SSID 1 : {SSID:My Movies 5G} Network type : Infrastructure Authentication : WPA2-Personal Encryption : CCMP {BSSID*:BSSID 1 : {MAC:bc:ae:c5:eb:59:8c} Signal : {SIGNAL:88}% Radio type : 802.11n Channel : {CHANNEL:36} Basic rates (Mbps) : 6 12 24 Other rates (Mbps) : 9 18 36 48 54}} {NETWORK*:SSID 3 : {SSID:blackbox} Network type : Infrastructure Authentication : WPA2-Personal Encryption : CCMP {BSSID*:BSSID 1 : {MAC:c8:be:19:aa:98:a4} Signal : {SIGNAL:41}% Radio type : 802.11n Channel : {CHANNEL:2} Basic rates (Mbps) : 1 2 5.5 11 Other rates (Mbps) : 6 9 12 18 24 36 48 54}} {NETWORK*:SSID 4 : {SSID:Greenbox} Network type : Infrastructure Authentication : WPA2-Personal Encryption : CCMP {BSSID*:BSSID 1 : {MAC:20:c9:d0:28:fb:05} Signal : {SIGNAL:60}% Radio type : 802.11n Channel : {CHANNEL:1} Basic rates (Mbps) : 1 2 5.5 11 Other rates (Mbps) : 6 9 12 18 24 36 48 54} {BSSID*:BSSID 2 : {MAC:20:c9:d0:28:fb:06} Signal : {SIGNAL:40}% Radio type : 802.11n Channel : {CHANNEL:100} Basic rates (Mbps) : 6 12 24 Other rates (Mbps) : 9 18 36 48 54}} '@ $Netsh = netsh.exe wlan show networks mode=bssid $Networks = $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID $Networks</code>There&rsquo;s a bit more markup here, and I admit it took me a few tries to get my head around the nested data structure. Look more closely at SSID 4 above, and how this have 2 BSSID&rsquo;s, because of this they are marked with a *.</p><p>Now $Networks contain a little more complicated data structure</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/testoutput2.png"><img src="https://powershell.org/wp-content/uploads/2015/08/testoutput2.png" alt="testoutput2"/></p><p>Though if we dive into it                             </p><p><a href="https://powershell.org/wp-content/uploads/2015/08/testoutput3.png"><img src="https://powershell.org/wp-content/uploads/2015/08/testoutput3.png" alt="testoutput3"/></p><p>It does look more like what we saw first. But with more info. And we can even dig into TDC-TC network and see each channel.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/testoutput4.png"><img src="https://powershell.org/wp-content/uploads/2015/08/testoutput4.png" alt="testoutput4"/></p><p>A slightly modified loop</p><p><code>while ($true) { $Netsh = netsh.exe wlan show networks mode=bssid $Networks = $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID $i = 0 foreach($Network in $Networks) { Write-Progress -Id $i -Activity $Network.network.SSID $i++ } Start-Sleep -Seconds 1 }</code>And the percentage complete is a sub object. So we will need another loop to go through every BSSID attached to the SSID</p><p><code>while ($true) { $Netsh = netsh.exe wlan show networks mode=bssid $Networks = $Netsh | ConvertFrom-String -TemplateContent $TemplateSSID $i = 0 foreach($Network in $Networks) { foreach($bssid in $Network.NETWORK.bssid) { Write-Progress -id $i -Activity $Network.network.SSID -Status "Channel: $($bssid.CHANNEL) MAC: $($bssid.MAC)" -PercentComplete $bssid.SIGNAL $i++ } } Start-Sleep -Seconds 1 }</code>The main thing here is of course using the template based parsing. It took me a few tries to figure it out, but it’s cool when it works and might be very useful in many other situations. The progress is just a hack that makes the presentation a little more fun.</p><p><strong>References</strong></p><ul><li><a href="http://www.lazywinadmin.com/2014/09/powershell-convertfrom-string-and.html">http://www.lazywinadmin.com/2014/09/powershell-convertfrom-string-and.html</a></li><li><a href="http://www.powershellmagazine.com/2014/09/09/using-the-convertfrom-string-cmdlet-to-parse-structured-text/">http://www.powershellmagazine.com/2014/09/09/using-the-convertfrom-string-cmdlet-to-parse-structured-text/</a></li><li><a href="http://blogs.msdn.com/b/powershell/archive/2014/10/31/convertfrom-string-example-based-text-parsing.aspx">http://blogs.msdn.com/b/powershell/archive/2014/10/31/convertfrom-string-example-based-text-parsing.aspx</a></li></ul><h4 id="contact-me" class="ps-heading">Contact me<a class="ps-heading-anchor" href="#contact-me" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h4><p>Twitter<a href="https://twitter.com/mrhvid">@mrhvid</a><br>
Web<a href="http://Jonas.SommerNielsen.dk">Jonas.SommerNielsen.dk</a></p>
]]></content:encoded></item><item><title>The Start Sharing Challenge</title><link>https://powershell.org/articles/2015-08-10-the-start-sharing-challenge/</link><guid>https://powershell.org/articles/2015-08-10-the-start-sharing-challenge/</guid><pubDate>Mon, 10 Aug 2015 15:55:25 +0000</pubDate><description>&lt;p&gt;I&amp;rsquo;m back from &lt;a href="https://techmentorevents.com/Home.aspx"&gt;Techmentor Redmond 2015&lt;/a&gt; which was my first public speaking talk ever. It went great. I met a ton of great people and really enjoyed myself. When speaking to IT pros one of the questions I typically ask them is &amp;ldquo;&lt;strong&gt;Are you blogging or sharing your knowledge?&lt;/strong&gt;&amp;rdquo;. 9 times out of 10 I get a big, fat no. Why? It&amp;rsquo;s because they feel like they have nothing to share. They feel like no one would be interested in their ho-hum, mundane life as an IT guy. I always followup that comment with &amp;ldquo;How do you know?&amp;rdquo; which ultimately results in a shrug. You don&amp;rsquo;t know that your life isn&amp;rsquo;t interesting and can teach others something. &lt;strong&gt;Why are you making the decision for others?&lt;/strong&gt; You&amp;rsquo;ve acquired lots of knowledge in your career. Don&amp;rsquo;t be stingy! Share it!&lt;br&gt;
As a personal challenge to you, I have a copy of Don Jones&amp;rsquo; and Jeff Hicks&amp;rsquo; &lt;a href="http://www.manning.com/jones4/"&gt;Learn PowerShell Toolmaking in a Month of Lunches&lt;/a&gt; book. If you don&amp;rsquo;t have a blog today, start one. If you do and haven&amp;rsquo;t blogged in awhile, dust it off and start writing again. The first one to contact me on my blog &lt;a href="http://adamtheautomator.com"&gt;Adam, The Automator&lt;/a&gt; with a link to their blog with at least 5 good posts will win the book. Don&amp;rsquo;t try to sneak those piddly little one paragraph posts by me just to get a free book! Minimum post length is 500 words.&lt;br&gt;
You have nothing to lose but perhaps a few hours of your time and some further opportunities in your career. Give back and you will be rewarded.&lt;br&gt;
P.S. Did you know I used to blog about selling used books on Amazon? Talk about a niche topic. At it&amp;rsquo;s peak it was getting over 1,000 readers/day. Now, don&amp;rsquo;t you think IT is just a wee bit bigger than that? If I can blog about selling used books and get 1,000 readers/day you can spend just an hour a week writing a blog post about your IT experiences and you &lt;em&gt;will&lt;/em&gt; help more people than you think.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I&rsquo;m back from<a href="https://techmentorevents.com/Home.aspx">Techmentor Redmond 2015</a> which was my first public speaking talk ever. It went great. I met a ton of great people and really enjoyed myself. When speaking to IT pros one of the questions I typically ask them is &ldquo;<strong>Are you blogging or sharing your knowledge?</strong>&rdquo;. 9 times out of 10 I get a big, fat no. Why? It&rsquo;s because they feel like they have nothing to share. They feel like no one would be interested in their ho-hum, mundane life as an IT guy. I always followup that comment with &ldquo;How do you know?&rdquo; which ultimately results in a shrug. You don&rsquo;t know that your life isn&rsquo;t interesting and can teach others something.<strong>Why are you making the decision for others?</strong> You&rsquo;ve acquired lots of knowledge in your career. Don&rsquo;t be stingy! Share it!<br>
As a personal challenge to you, I have a copy of Don Jones&rsquo; and Jeff Hicks&rsquo;<a href="http://www.manning.com/jones4/">Learn PowerShell Toolmaking in a Month of Lunches</a> book. If you don&rsquo;t have a blog today, start one. If you do and haven&rsquo;t blogged in awhile, dust it off and start writing again. The first one to contact me on my blog<a href="http://adamtheautomator.com">Adam, The Automator</a> with a link to their blog with at least 5 good posts will win the book. Don&rsquo;t try to sneak those piddly little one paragraph posts by me just to get a free book! Minimum post length is 500 words.<br>
You have nothing to lose but perhaps a few hours of your time and some further opportunities in your career. Give back and you will be rewarded.<br>
P.S. Did you know I used to blog about selling used books on Amazon? Talk about a niche topic. At it&rsquo;s peak it was getting over 1,000 readers/day. Now, don&rsquo;t you think IT is just a wee bit bigger than that? If I can blog about selling used books and get 1,000 readers/day you can spend just an hour a week writing a blog post about your IT experiences and you<em>will</em> help more people than you think.</p>
]]></content:encoded></item><item><title>Continuous Integration, Continuous Delivery, and PSDeploy</title><link>https://powershell.org/articles/2015-08-08-continuous-integration-continuous-delivery-and-psdeploy/</link><guid>https://powershell.org/articles/2015-08-08-continuous-integration-continuous-delivery-and-psdeploy/</guid><pubDate>Sat, 08 Aug 2015 15:16:01 +0000</pubDate><description>&lt;p&gt;Are you starting to use version control at work? Are you being pestered by fellow PowerShell aficionados to start learning version control? Did you catch the PowerShell.org &lt;a href="https://powershell.org/event/techsession-a-crash-course-in-version-control-and-git/"&gt;Crash Course in Version Control&lt;/a&gt; and pick up some Git and GitHub experience? Shameless plug, sorry : )&lt;/p&gt;
&lt;p&gt;Version control is just the start. What if we want to automate testing? To deploy our files, folders, and other artifacts out to production or other environments? Version control alone offers some nice benefits, but without these extra steps, it might introduce some pain points!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Are you starting to use version control at work? Are you being pestered by fellow PowerShell aficionados to start learning version control? Did you catch the PowerShell.org<a href="https://powershell.org/event/techsession-a-crash-course-in-version-control-and-git/">Crash Course in Version Control</a> and pick up some Git and GitHub experience? Shameless plug, sorry : )</p><p>Version control is just the start. What if we want to automate testing? To deploy our files, folders, and other artifacts out to production or other environments? Version control alone offers some nice benefits, but without these extra steps, it might introduce some pain points!</p><p>Developers have a bit of a head start on some of the interesting ideas and tools that streamline these processes. These will be increasingly important as IT professionals start to rely on version control. Let&rsquo;s take a quick look at a few key concepts.</p><h2 id="continuous-integration" class="ps-heading">Continuous Integration<a class="ps-heading-anchor" href="#continuous-integration" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Let&rsquo;s pretend we have a PowerShell project called ProjectX.</p><p>Traditionally, we might check this out of version control, work on it for days on end, and integrate it back into version control once we were done with some major component, or at some arbitrary interval (check in once a day!).</p><p>With<a href="https://en.wikipedia.org/wiki/Continuous_integration">continuous integration</a> (CI), we focus on making many small changes, integrating into version control often, rather than only after completing a major task, or at some pointless interval.</p><p>CI is often associated with running automated unit and integration tests, perhaps with<a href="https://www.youtube.com/watch?v=SftZCXG0KPA">Pester</a>.</p><p>You can get practical experience with this at home - set up a PowerShell project in GitHub, add some Pester tests, and sign up for AppVeyor - If you need some pointers, hit<a href="http://ramblingcookiemonster.github.io/GitHub-Pester-AppVeyor/">the walk through here</a>.</p><p>So! What does this look like? I make a change, commit to version control, tests automatically run, validate that I didn&rsquo;t break anything, and<a href="http://ramblingcookiemonster.github.io/GitHub-For-PowerShell-Projects/#continuous-integration">update my view from version control</a> to let me know the build is passing.</p><h2 id="continuous-deployment" class="ps-heading">Continuous Deployment<a class="ps-heading-anchor" href="#continuous-deployment" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Okay! We have our files in version control, and maybe we set up some automatic tests to run when we make a change. There&rsquo;s still a small problem. Will you remember to update the files where they actually live? Will you update those files outside of source control because this process is a pain? Continuous deployment (CD) can help with this.</p><p>For our purposes, the idea is that you can set up a series of validations, and if everything passes, you deploy to production.</p><p>While you can certainly involve<a href="https://en.wikipedia.org/wiki/Continuous_delivery#Principles">more gates</a>, you might have CI/CD pipeline that works as follows:</p><ul><li>You make a change</li><li>You commit to source control</li><li>Automated tests run</li><li>If the automated tests pass, the deployment runs</li></ul><p>So, now you don&rsquo;t need to worry about keeping production and other environments in sync with source control - this can all happen automatically!</p><p>We left out an important bit. What exactly happens with a deployment?</p><h2 id="psdeploy" class="ps-heading">PSDeploy<a class="ps-heading-anchor" href="#psdeploy" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>We use<a href="https://powershell.org/2015/06/04/automating-with-jenkins-and-powershell-on-windows/">Jenkins</a> at work. What if we move to TeamCity? or Bamboo? Or some other solution?<a href="http://ramblingcookiemonster.github.io/PSDeploy/">PSDeploy</a> is a quick and dirty module to help deployments on your preferred CI/CD platform.</p><p>Long story short, you have a deployment config file in each project. This spells out what you want to deploy (perhaps files or folders) and where to deploy them. You invoke PSDeploy, and it runs these deployments.</p><p>A few quick examples:</p><ul><li>We have a PowerShell module in version control.  Deployments.yml tells PSDeploy to copy the module to a network share, and a few servers.  Now, any time I commit a change to this module, Jenkins runs some Pester tests, and if they succeed, PSDeploy copies the module out. No extra work for me!</li><li>We have a repository that stores a variety of config files.  Deployments.yml tells PSDeploy to copy these config files out to the various shares and servers that need them.  John Doe, who struggled a bit with version control (imagine forcing them to use Jenkins!) pushes a commit, a few Pester tests run, and we deploy the config files out as needed.</li><li>We have an<em>everything but the kitchen sink</em> repository, containing scheduled task scripts, PowerShell session configuration scripts, and other files. Same deal. Commit to source control, tests run, these files are delivered to their homes.</li></ul><p>All I need to do in these cases is pick out what to deploy and where to deploy it to; PSDeploy does the rest. I can use the exact same build script for each of these projects, invoking PSDeploy against the deployments.yml.</p><p>What does this look like in practice? Here&rsquo;s a quick illustration:</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/PSDeployFlow.png"><img src="https://powershell.org/wp-content/uploads/2015/08/PSDeployFlowSmall.png" alt="PSDeployFlowSmall"/></p><p>There are certainly product-specific ways to do this, but if PSDeploy sounds interesting, you can<a href="http://ramblingcookiemonster.github.io/PSDeploy/">read more here</a>.</p><h2 id="next-steps" class="ps-heading">Next Steps<a class="ps-heading-anchor" href="#next-steps" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>That&rsquo;s about it! If you plan to start using version control, take a look at the concepts and tools that can make your life easier.</p><p><a href="http://ramblingcookiemonster.github.io/GitHub-Pester-AppVeyor/">GitHub, Pester, and AppVeyor</a> are a great free way to get started, but be sure to check out<a href="https://powershell.org/event/techsession-discovering-teamcity-and-build-powershell-org/">Dave Wyatt&rsquo;s TechSession on TeamCity and the Build.PowerShell.org</a>, which will cover a handy new service enabling free continuous integration and delivery for community PowerShell projects.</p><p>Lastly, I can&rsquo;t help but mention Steven Murawski&rsquo;s great post<a href="http://stevenmurawski.com/powershell/2015/8/moving-in-to-open-source">on joining the open source community</a>. This is a great way to learn, to get involved, and to help others - skim through his post, and definitely consider it!</p>
]]></content:encoded></item><item><title>What are variables anyway…</title><link>https://powershell.org/articles/2015-08-07-what-are-variables-anyway/</link><guid>https://powershell.org/articles/2015-08-07-what-are-variables-anyway/</guid><pubDate>Fri, 07 Aug 2015 09:03:51 +0000</pubDate><description>&lt;p&gt;Fellow Admins.&lt;/p&gt;
&lt;p&gt;A quick chat if you&amp;rsquo;re new to variables.&lt;/p&gt;
&lt;p&gt;So if you&amp;rsquo;re like me and don&amp;rsquo;t know any other programing/scripting language then all this PowerShell stuff is a bit daunting. So to help, this articles is on
PowerShell Variables. The thing is that Variables in PowerShell are very important. I&amp;rsquo;m assuming you know what a cmdlet is? The very basic underlying tools that make powershell work. They are like powershell building blocks or bricks in a PowerShell wall. For example, get-aduser gets a list of all the users in AD and includes a few details like SID, name and distinguished name. So that little cmdlet gets all that information, and more once you learn to manipulate it. If cmdlets are the bricks then Variables are the mortar. They hold all this information you have gathered together and let you save and pick and choose what you want.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Fellow Admins.</p><p>A quick chat if you&rsquo;re new to variables.</p><p>So if you&rsquo;re like me and don&rsquo;t know any other programing/scripting language then all this PowerShell stuff is a bit daunting. So to help, this articles is on
PowerShell Variables. The thing is that Variables in PowerShell are very important. I&rsquo;m assuming you know what a cmdlet is? The very basic underlying tools that make powershell work. They are like powershell building blocks or bricks in a PowerShell wall. For example, get-aduser gets a list of all the users in AD and includes a few details like SID, name and distinguished name. So that little cmdlet gets all that information, and more once you learn to manipulate it. If cmdlets are the bricks then Variables are the mortar. They hold all this information you have gathered together and let you save and pick and choose what you want.</p><p>Let&rsquo;s stick with get-aduser as an example. By the way, it&rsquo;s available if you have the AD module installed on your server. It will work out of the box if you try it on a domain controller but you can install it on other servers so you don&rsquo;t have to log  into your DC. The reason it&rsquo;s a good example is that if you have a thousand users then you get 1000 entries in your list when you use the get-ADuser cmdlet. Thats a lot of information and it may take some time for the cmdlet to finish running. Say you want just the names that start with P. And you also want to look at the users who were created in the last week. And you also want to see their email address. This is what a Variable is for. You run the cmdlet once, collecting all the user information, and then you have the information sitting there to use in anyway you want for as often as you want. There is a lot to learn about Variables but the most import thing is you understand the idea. So look at this&hellip;</p><p>$ADusers = get-ADuser</p><p>Powershell uses the $ sign to denote a variable. So these are variables. $servers, $comp, $process, and $Itdoesntmatterwhatthenameis. They are just containers - thats it!  And just like any bucket or plastic box you can put a label on it that is anything you like. But it must start with a $ so 
PowerShell knows it&rsquo;s a container. There is a cmdlet called new-variable for creating variables which you can explore but the easiest way is using the = sign. So now all the users in the domain are stored in the variable $ADusers. Let use another example. Say we wanted to work with services. We could use the get-service cmdlet and get a list of all the services on our machine. And if we want to work with them we can store them in a variable. Like this. $myservices = Get-service. So now if we enter $myservices in powershell and press enter, all the services gathered by the get-service cmdlet are listed.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/Services.png"><img src="https://powershell.org/wp-content/uploads/2015/08/Services.png" alt="Services"/></p><p>Now we get to work with a variable. Quite a lot of information is in our variable and we want to get some out. This is where we can use a thing called a pipeline. It is a big thing in 
PowerShell. I&rsquo;m not sure about other languages but for powershell it&rsquo;s like a production line. So we could do something like this. $myservices  | where {$_.name -like &ldquo;<em>spool</em>&rdquo;}.  That straight up and down bar is like a pipe from one part of the line to the next. They are a bit like filters.  So we have all this information in our variable but we only want to look at the print service. And worse I can&rsquo;t remember what the name of the print service is. Something about spool&hellip; No problem though because we told PowerShell to get something* like &ldquo;*spool&rdquo; and I&rsquo;m sure I&rsquo;ll recognise it.</p><p>So lets have a look at what happens when we run the line of script.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/SpoolerSVC.png"><img src="https://powershell.org/wp-content/uploads/2015/08/SpoolerSVC.png" alt="SpoolerSVC"/></p><p>You can do all kinds of things now you have all that information in the variable. We just extract what we want. Maybe you think to yourself&hellip;I wonder how many running services I have? Or how many are not running. Don&rsquo;t be concerned with the code you see here, as if you&rsquo;re beginning it is hard to get a handle on it all at once. The point is that the Variable has all this information stored and we can get it out. Variables are great if not essential in scripts as the script can do all these things once it collects the information for the Variable at the beginning. </p><p><img src="https://powershell.org/wp-content/uploads/2015/08/statuscount.png" alt="statuscount"/><p>There is something else about Variables that is really important to understand in PowerShell. And I have to say it took me quite a while to &ldquo;get it&rdquo;. PowerShell is an Object Orientated language.  It is very important to understand and deserves a blog post in it&rsquo;s own right. It&rsquo;s like saying it&rsquo;s a 3 dimensional language instead of a 2 dimensional language. So when we create a variable we are not just holding a word or a string we are holding an object. And objects are exciting! Because they hold heaps of information (properties)  and another another thing called methods. All of this is inside the variable. In the example above the &ldquo;name&rdquo; spooler is a property. It&rsquo;s like naming anything. Like a car. The cars name is Ford. But the method is drive, for example. There (hopefully) is also a method for stop. In our PowerShell example the method is count and the property we are looking for is status. Some properties have properties&hellip;like &ldquo;running&rdquo;. It can get complex. The thing is all this is in a variable and all of it you can access bit by bit when and how you want it.</p><p>In other languages variables have to be declared. There are lots of kinds of variables but PowerShell is smart enough to automatically work out what kind of variable it should be looking at. So declaring a variable is usually not needed. The problem in Powershell is that most of the time the automatic part works well &hellip;. so well sometimes I forget that variables can be declared. Sometimes the script just doesn&rsquo;t work like you thought it would. It turns out you need to declare the variable. And sometimes you want to because there are some juicy methods you want to get to. Image you want to work with a date. 12/05/15. So you put it in a variable called $date. $date = &ldquo;12/05/15&rdquo;. Remember we talked about methods. Methods are things we can do. By the way that date is just some writing. It&rsquo;s basic. What PowerShell thinks is, that it&rsquo;s a sting. Like this: [string]$date. That&rsquo;s how you can declare a variable in PowerShell. Use [] and the appropriate syntax. If you want to work with numbers [int]$date and PowerShell knows you want to work with numbers. In out case we want to work with a date. So we declare our variable. [datetime]$date. There is a very cool cmdlet called get-member that shows all the properties and methods (and other things) in a variable. Check this out. This is what<em>$date | get-member</em>  gives us when we don&rsquo;t declare the variable.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/stringmethod.png"><img src="https://powershell.org/wp-content/uploads/2015/08/stringmethod.png" alt="stringmethod"/></p><p>All those methods let you do things to the content of the variable. Like<em>toupper</em>. That will make all the letters capital. Or<em>replace</em>. Lets you replace letter or words in a string stored in the variable. But we don&rsquo;t want that! We want to work with our date! Now check this out&hellip; [datetime]$date | get-member</p><p><img src="https://powershell.org/wp-content/uploads/2015/08/datemethods.png" alt="datemethods"/><p>It&rsquo;s totally different. There&rsquo;s all those juicy properties like<em>month,minute</em> and<em>dayofyear</em>. And cool methods like<em>todatetime</em>, and<em>tolongdatestring</em>. So now that we have made available <em>tolongdatestring</em> we can use it like this_. _Our 12/05/15 has become Saturday, 5 December 2015. If we hadn&rsquo;t declared our variable we wouldn&rsquo;t have been able to do that.</p><p><a href="https://powershell.org/wp-content/uploads/2015/08/tolongdate2.png"><img src="https://powershell.org/wp-content/uploads/2015/08/tolongdate2.png" alt="tolongdate2"/></p><p>Hopefully if you didn&rsquo;t know what those $ sign things were you now have a better idea. Oh and that . in the .count or .tolongdatestring is so cool. I had no idea when I was starting out and you should try looking up . on the internet. That . is like a short cut to get into the variables and access methods or properties. $myservice.name, $myservice.status, and $myservice.displayname will give just those properties.  All that complexity is yours to play with, explore and use once it&rsquo;s stored in a variable. </p><p>Keep practicing, PowerShell is the best thing since Windows.</p><p>Steve</p>
]]></content:encoded></item><item><title>MSPSUG Virtual Meeting: Conquering Azure and Office 365 with PowerShell – August 11th 2015</title><link>https://powershell.org/articles/2015-08-05-mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015/</link><guid>https://powershell.org/articles/2015-08-05-mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-august-11th-2015/</guid><pubDate>Wed, 05 Aug 2015 14:49:49 +0000</pubDate><description>&lt;p&gt;Join the Mississippi PowerShell User Group virtually on Tuesday, August 11th at 8:30pm Central Time when SharePoint MVP &lt;a href="http://www.toddklindt.com/blog/default.aspx"&gt;Todd Klindt&lt;/a&gt; will present “
&lt;em&gt;**Conquering Azure and Office 365 with PowerShell **&lt;/em&gt;
”.&lt;/p&gt;
&lt;p&gt;After years and years of anticipation, 2015 might end up actually being the year of the Cloud. With any new technology comes the opportunity to tame it with PowerShell. In this session Todd will give you an overview of the PowerShell options you have when interacting with Office 365 and Azure. He’ll go over how to get them installed in your environment. Then he’ll walk you through getting them connected to Office 365 and Azure and actually doing some work with them. Finally he’ll show you some tricks to get around the limitations. When this session is finished you’ll be armed with all the information you need to fire up PowerShell and wrangle Office 365 and Azure AD into submission.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join the Mississippi PowerShell User Group virtually on Tuesday, August 11th at 8:30pm Central Time when SharePoint MVP<a href="http://www.toddklindt.com/blog/default.aspx">Todd Klindt</a> will present “<em>**Conquering Azure and Office 365 with PowerShell **</em>
”.</p><p>After years and years of anticipation, 2015 might end up actually being the year of the Cloud. With any new technology comes the opportunity to tame it with PowerShell. In this session Todd will give you an overview of the PowerShell options you have when interacting with Office 365 and Azure. He’ll go over how to get them installed in your environment. Then he’ll walk you through getting them connected to Office 365 and Azure and actually doing some work with them. Finally he’ll show you some tricks to get around the limitations. When this session is finished you’ll be armed with all the information you need to fire up PowerShell and wrangle Office 365 and Azure AD into submission.</p><p>Visit the<a href="http://mspsug.com/2015/08/02/mspsug-virtual-meeting-conquering-azure-and-office-365-with-powershell-on-tuesday-august-11th-at-830pm-cdt/">Mississippi PowerShell User Group</a>
website to learn more about Todd and to find out more details about this month’s meeting.</p><p>The Mississippi PowerShell User Group Meetings are held online (via Skype for Business) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “<a href="http://mspsug.com/attendee-info/">Attendee Info</a>” section.</p><p>Register via<a href="http://mspsug.eventbrite.com/">EventBrite</a> to receive the URL for this meeting.</p><p>µ</p>
]]></content:encoded></item><item><title>PowerShell Summit North America 2016 – Call for Topics</title><link>https://powershell.org/articles/2015-08-03-powershell-summit-north-america-2016-call-for-topics/</link><guid>https://powershell.org/articles/2015-08-03-powershell-summit-north-america-2016-call-for-topics/</guid><pubDate>Mon, 03 Aug 2015 16:39:58 +0000</pubDate><description>&lt;p&gt;**&lt;/p&gt;
&lt;p&gt;PowerShell Summit NA 2016 – Call for Topics&lt;/p&gt;
&lt;p&gt;**&lt;/p&gt;
&lt;p&gt;The PowerShell Summit is the number one conference where PowerShell enthusiasts gather and learn from each other in fast-paced, knowledge packed presentations. PowerShell experts from all over the world including MVP’s, Guru’s, community leaders and PowerShell team members, will once again join together for a few days in Bellevue, WA. to discuss and learn about maximizing PowerShell in the workplace. If you want to share your PowerShell expertise or story, then this is your official call to submit presentations for selection!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>**</p><p>PowerShell Summit NA 2016 – Call for Topics</p><p>**</p><p>The PowerShell Summit is the number one conference where PowerShell enthusiasts gather and learn from each other in fast-paced, knowledge packed presentations. PowerShell experts from all over the world including MVP’s, Guru’s, community leaders and PowerShell team members, will once again join together for a few days in Bellevue, WA. to discuss and learn about maximizing PowerShell in the workplace. If you want to share your PowerShell expertise or story, then this is your official call to submit presentations for selection!</p><p>PowerShell Summit North America 2016 will be held 4-6 April in the Meydenbauer center, Bellevue WA.</p><p>**</p><p>Topic Areas – What we are looking for</p><p>**</p><p>We are looking for 45-minute presentations covering a wide aspect of PowerShell expertise. We have two main topic areas that may assist you in building an abstract.</p><p>PowerShell Internals – A deep look into the inside workings of PowerShell and practical solutions that are built from them. These presentations are typically more directed to the PowerShell development community that is building extensions and solutions relating to PowerShell.</p><p>PowerShell Features Deep Dive – These presentations are a deep look into configuring and working with PowerShell features and capabilities such as Remoting, Desired State Configuration and more. These presentations tend to be more IT Pro focused.</p><p>We are open to presentations across the entire ecosystem that has been built around PowerShell; so don’t hesitate to send an abstract for your particular area of expertise. This includes Microsoft platforms and products that have PowerShell-based management tools as well as 3rd parties such as VMware. New topics will be preferred over recycling of older topics – look to see what’s new in PowerShell 5.0 and use the questions on PowerShell.org to spot areas of confusion that could supply a good session for the Summit.</p><p>_</p><p>We may consider double length sessions, but only in exceptional cases. Please contact us –</p><p><em>[</em></p><p><a href="mailto:summit@powershell.org">summit@powershell.org</a></p><p><em>]<a href="mailto:summit@powershell.org">1</a></em></p><p>– with your idea before spending too much time developing such a session.</p><p>_</p><p>**</p><p> What kind of sessions get selected?</p><p>**</p><p>We’re looking for sessions that go beyond – way beyond – “beginner.” If you want to see examples of the depth we’re looking for use the recordings on the PowerShell.org Youtube channel from the PowerShell Summit Europe 2014, or PowerShell Summit NA 2015 as a guide. We look for an abstract that’s compelling and makes us salivate to see your session – so spend time writing a punchy abstract! We want sessions that offer real-world usability combined with “wow, nobody talks about THAT” awesomeness. If in doubt aim high, very high. Remember, Summit sessions are recorded, so if you’ve previously presented a topic at a Summit, we’re less likely to choose it for another Summit. We want sessions that are challenging, and that ideally present things that simply aren’t explained or documented elsewhere. New modules, new techniques, and crazy approaches are all welcome. Discussion-format sessions are great, too, especially if you plan to turn them into a community deliverable (like a “best practices for writing DSC Resources” session that gets turned into a free e-guide later). Think community, deep dive, engaging, and amazing as keywords. We want attendees to finish each day with information leaking… just a little bit… out their eyeballs. Help us make it happen.</p><p>_</p><p>If you have any doubts about the suitability of a particular session please contact us -</p><p><em>[</em></p><p><a href="mailto:summit@powershell.org">summit@powershell.org</a></p><p><em>]<a href="mailto:summit@powershell.org">1</a></em></p><p>– we’re always happy to discuss proposed sessions.</p><p>_</p><p>We do have some goals for speaker selection, too. We obviously have, and appreciate, the great involvement we get from the product team. We aim to have a certain number of sessions from well-known members of the community, simply because they’re well-known for a reason – they do a great job! But we also set aside slots for newcomers who’ve never presented before, or who’ve maybe only presented once or twice before – the audience will judge you on content not style. We want to create opportunities for more folks to become engaged and active in our community, and the Summit is a great way to do that.</p><p>We aren’t looking for soft-skills sessions, like “how to get a new user group running,” although contact us via email (<a href="mailto:summit@powershell.org">summit@powershell.org</a>) if you’d like to do something like that as an extra evening thing after the main content wraps for the day.</p><p>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<strong>NOT</strong> supported. Presenter must be able to manually select an appropriate screen resolution for video output. Typically, 1024×768 or 1280×720 are preferred.</p><p>**</p><p>How to submit abstracts of presentations</p><p>**</p><p>Presentations will be 45-minutes in length and the submission should include the following:</p><p>Presentation Title</p><p>Presentation abstract – a description of the presentation and the topics covered. 250 words or less and suitable for marketing.&lt;/ span&gt;</p><p>Go to</p><p><a href="https://eventloom.com/event/register/PSNA16/Speaker?preregister=1">
https://eventloom.com/event/register/PSNA16/Speaker?preregister=1</a></p><p>.</p><p>This is the only valid URL for pre-registration. Provide your e-mail address, password, and confirm password. You’re creating a new account, even if you’ve attended past Summit events.</p><p>**</p><p>DO NOT ATTEMPT TO REGISTER FOR THE SUMMIT AS AN ATTENDEE AT THIS STAGE – WE WILL BE OPENING REGISTRATION IN NOVEMBER 2015. ANY NON-SPEAKER REGISTRATIONS WILL BE DELETED.</p><p>**</p><p>Click Abstracts on the top menu</p><p>Click SUBMIT ABSTRACT</p><p>Enter Title and Description.</p><p>Click SUBMIT</p><p>Provide a title and description; descriptions must be 50-250 words. Set the Status to “Ready to Review” when you are ready to send your session to us for consideration.</p><p>To return to the site at a later time, go to</p><p><a href="https://eventloom.com/event/login/PSNA16">
https://eventloom.com/event/login/PSNA16</a></p><p>Click Log In. You can then re-visit Abstracts.</p><p>Note that you must set your abstract status to<strong>Ready for Review</strong> or we won’t see it. If you leave it in **Pending, **it won’t be considered.</p><p>You can submit multiple presentations in the same topic area or for different ones. Be aware that even though the session length is 45 minutes we prefer to have at least 10 minutes set aside for questions. Summit presentations are intense and intimate often with plenty of audience interaction. You must expect questions and discussions. This is not a “lecture to the audience” event. Also because of the session length, generally co-presenters are unnecessary, but that is not a requirement.</p><p>**</p><p>Presentation submission deadline – When you should send it by</p><p>**</p><p>Start sending your presentation submissions immediately! The selection committee will start selecting presentations as soon as they arrive so you don’t want to miss out. The last day we will accept presentation submissions will be<strong>Thursday 1 October 2015</strong>. This is a<strong>hard</strong> deadline – no sessions will be accepted after this date.</p><p>**</p><p>When you will know you’ve been selected</p><p>**</p><p>The selection committee will start reviewing submissions immediately and begin the selection process. You will be informed if one or more of your presentations have been selected and notified by Thursday 15 October 2015.</p><p>You will need to log back onto the event site and complete your registration with the code we will provide in the notification email. This will have to occur before 31 October 2015 so that we have a completed agenda in time for attendee registration.</p><p>Speakers, with accepted sessions, will be given free admission to the event, including attendance at all official Summit activities. However, AWPP membership is not included. 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 partially governed by that budget.</p><p>Pre-registering does not guarantee you a place at the event. Pre-registration is until 1 October 2015. Final session selections will be made by 15 October 2015, and you will be notified of accepted/unaccepted sessions.</p><p>If at least two sessions are accepted, you will be asked to immediately make a reservation at our speaker hotel. You will be given our group code, and we will directly pay for up to 3 nights’ lodging. Any additional nights are your responsibility as are travel and other costs.</p><p>If any sessions are accepted, you will be asked to immediately complete your Summit registration using a free promotional code. If you do not complete your registration by 1 November 2015, then we will assume you do not wish to present and your sessions will be cancelled, and the slots offered to another speaker.</p><p>If no sessions are accepted, then your pre-registration will be deleted. Beginning 1 November 2015 and through 4 March 2016, you are welcome to create a new account and register as a standard attendee on a space-available basis.</p><p>The final agenda will be announced and posted on PowerShell.Org on, or about, Sunday 1 November 2015.</p><p>We look forward to your submissions and your help in making PowerShell Summit North America 2016 the most valuable IT/Dev conference of the year building on and surpassing the previous Summits!</p>
]]></content:encoded></item><item><title>2015-August Scripting Games Puzzle</title><link>https://powershell.org/articles/2015-08-01-august-2015-scripting-games-puzzle/</link><guid>https://powershell.org/articles/2015-08-01-august-2015-scripting-games-puzzle/</guid><pubDate>Sat, 01 Aug 2015 13:10:40 +0000</pubDate><description>&lt;p&gt;Our August 2015 puzzler tests your ability to retrieve data from the Web. If you&amp;rsquo;ve never done this before, it can be a real brain-bender - but don&amp;rsquo;t overthink it; experts can probably pull this off in a one-liner if they&amp;rsquo;re using a newer version of PowerShell!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Our August 2015 puzzler tests your ability to retrieve data from the Web. If you&rsquo;ve never done this before, it can be a real brain-bender - but don&rsquo;t overthink it; experts can probably pull this off in a one-liner if they&rsquo;re using a newer version of PowerShell!</p><h2 id="instructions" class="ps-heading"><strong>Instructions</strong><a class="ps-heading-anchor" href="#instructions" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month&rsquo;s puzzle. You can find them all at<a href="https://powershell.org/category/announcements/scripting-games/">https://powershell.org/category/announcements/scripting-games/</a>. Many puzzles will include optional challenges, that you can use to really push your skills.</p><p><strong>To participate</strong>, add your solution to a public Gist (<a href="http://gist.github.com">http://gist.github.com</a>; you&rsquo;ll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post. 
**Only post one entry per person. You are not allowed to come back and post corrected or improved versions. If you do, all of your posts will be ignored. **However, remember that you can always go back and edit your Gist. We&rsquo;ll always pull the most recent one when we display it, so there&rsquo;s no need to post multiple entries if you want to make an edit.</p><p>Don&rsquo;t forget the <a href="https://powershell.org/?p=2574">main rules and purpose of these monthly puzzles</a>, including the fact that you won&rsquo;t receive individual scoring or commentary on your entry.</p><p><strong>User groups are encouraged to work together</strong> on the monthly puzzles. User group leaders should submit their group&rsquo;s best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most &ldquo;favorite&rdquo; entries of the year will win a grand prize from PowerShell.org.</p><h2 id="heading" class="ps-heading"> <a class="ps-heading-anchor" href="#heading" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><h2 id="our-puzzle" class="ps-heading"><strong>Our Puzzle</strong><a class="ps-heading-anchor" href="#our-puzzle" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>At<a href="https://www.telize.com/geoip">www.telize.com/geoip</a>, you&rsquo;ll find a JavaScript Object Notation endpoint. It&rsquo;s public. Your goal is to get PowerShell to display something like the following (because this is based on <em>your</em> IP address, the property values will be different than what&rsquo;s shown here):</p><p>`longitude latitude continent_code timezone</p><hr><p>-115.1685 36.2212 NA America/Los_Angeles
`Being able to query information from the Web - often in XML or JavaScript Object Notation - is an important integration skill. PowerShell can actually make it pretty easy. Although this challenge <em>can</em> be solved using a one-liner, you could also go further and write a complete &ldquo;Get-GeoInformation&rdquo; function around it. However, keep in mind that a function would not normally (a) limit the data that&rsquo;s output or (b) pre-format the data. Why not?</p><p><strong>Challenges:</strong></p><ul><li>Try to do this in a one-liner, but spell out all command and parameter names.</li><li>Write an advanced function that provides a complete Get-GeoInformation &ldquo;wrapper&rdquo; around this endpoint.</li><li>Along with your entry, include the endpoint for another XML or JavaScript Object Notation web service that you think is cool, along with a brief notation of what it does</li></ul>]]></content:encoded></item><item><title>Introduction to Powershell</title><link>https://powershell.org/articles/2015-07-31-introduction-to-powershell/</link><guid>https://powershell.org/articles/2015-07-31-introduction-to-powershell/</guid><pubDate>Fri, 31 Jul 2015 11:07:47 +0000</pubDate><description>&lt;p&gt;Hi Guys,&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to have a PowerShell ramble on a semi regular basis. What prompts me to write here on powershell.org is that I love powershell. I makes my job so much better. I&amp;rsquo;m an IT Pro and work for a large ish world spanning company. I mostly work with windows servers but get to work with other technology too. Like VMware and Citrix for example. The other thing I want to point out is that I&amp;rsquo;m not a programer. I don&amp;rsquo;t know VB Script and no one taught me
PowerShell
. There are many people though that helped me on my PowerShell Journey through their books, blogs, postings, and videos. &lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Hi Guys,</p><p>I&rsquo;m going to have a PowerShell ramble on a semi regular basis. What prompts me to write here on powershell.org is that I love powershell. I makes my job so much better. I&rsquo;m an IT Pro and work for a large ish world spanning company. I mostly work with windows servers but get to work with other technology too. Like VMware and Citrix for example. The other thing I want to point out is that I&rsquo;m not a programer. I don&rsquo;t know VB Script and no one taught me
PowerShell
. There are many people though that helped me on my PowerShell Journey through their books, blogs, postings, and videos. </p><p>I want to spread the word of PowerShell. I want people to understand that it helps in so many ways. I&rsquo;ve learned about wmi, .net classes and all the properties of an AD object. This helps me understand the computers I work with every day. With a GUI these things are under the hood and no one needs to know too much about them. With 
PowerShell you naturally learn about these things as you come across them. Didn&rsquo;t know that you can install VMware tools without having to restart? Well if you use PowerShell there&rsquo;s a switch that stands out that makes it obvious.  It makes life easier.</p><p>One thing I really love about 
PowerShell is that it is very consistent (well mostly). So once you learn the basics anything else you want to do is kind of the same. I don&rsquo;t need complication. I have so many technologies to learn ( the System Center Suite comes to mind) that I really don&rsquo;t want to waste my time learning where in the GUI Microsoft have hidden what I&rsquo;m looking for this time. You see, I have always thought computers existed for a reason. To automate things. To do the work for us. To make life easier. We have i7 processors. They are so powerful.. just amazing. So why as an admin would you want to be clicking on menus and buttons. Hit the PowerShell go button and let the computer do all the work. It&rsquo;s liberating!</p><p>Now I know what some people think. It&rsquo;s too hard. And it is hard. There are people that are so good at powershell that it just blows me away. But what I want to stress is that you don&rsquo;t have to be that good. You can be, but you don&rsquo;t have to be. So take it one step at a time and then it&rsquo;s not so hard. But it&rsquo;s like a snow ball rolling down hill. If you use it your knowledge will grow exponentially. So I want to stress 3 things this week.</p><ol><li><p>  You<em>can</em> learn 
PowerShell.</p></li><li><p>  
PowerShell has a shell&hellip;.. Don&rsquo;t know what a shell is? It&rsquo;s a window into the operating system that lets you communicate with it.  So open PowerShell and start communicating. Always have the shell open. If you want to open the temp folder on C drive. Type invoke-item c:\temp and press enter. Now you think of something to do! One step at a time. If you&rsquo;re not in a hurry try and find out how to do it in powershell. Remember you are just starting out so don&rsquo;t be hard on yourself.</p></li><li><p>  Of course 
PowerShell is a scripting language as well. So think of something to automate. Maybe there is a process you have to restart everyday. That old server with the legacy app. Automate it! It will be a great first script. And don&rsquo;t forget that you can use scheduled tasks to help with the automation. And it&rsquo;s not that hard to send an email letting you know it&rsquo;s been done with the send-mail cmdlet. Enjoy. Don&rsquo;t start with something critical.</p></li></ol><p>I haven&rsquo;t told you specifically how to do things on purpose. There are heaps of books, technet articles and other plog posts. Google is your best friend. (sorry Bing). So today I got an alert from Operations Manager telling me a C drive on a server was running out of space. It wasn&rsquo;t the usual suspects like a large profile or log files etc. I didn&rsquo;t want to look through every folder and I can&rsquo;t use programs like treesize for policy reasons. So I wrote a quick script that looped through all the folders, measured the length of the files, added them together and let me know where the space had gone. I used Google. And I confess I do not understand 100% how the cmdlet for measuring stuff works. You&rsquo;re probably smarter than me so don&rsquo;t worry.  I can worry about that later. I worked out how to use it to do what I wanted. That was enough for today. I got the job done and the Server fixed. I don&rsquo;t know how I would have found the solution without 
PowerShell. In case you are curious the little script looked like this. Open the Powershell ISE. Make sure under view you change it so you can see the scripting pane. Poke around&hellip;. explore, you&rsquo;ll find it. </p><h1 id="so-this-bit-gets-the-names-of-all-the-directories-and-stores-them-in-a-variable-called-folders-i-know-its-so-cool" class="ps-heading">so this bit gets the names of all the directories and stores them in a Variable called $folders. I know! It&rsquo;s so cool!<a class="ps-heading-anchor" href="#so-this-bit-gets-the-names-of-all-the-directories-and-stores-them-in-a-variable-called-folders-i-know-its-so-cool" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>$folders = Get-ChildItem \Yourservername\C$\windows -force | where {$_.mode -like &ldquo;*d*&rdquo;}</p><p>#And this bit goes through each one and counts the file lengths adding them together. It prints out the name of the folder followed by how big it is. Powershell is like magic, what can I say.</p><p>foreach ($folder in $folders)</p><p>{</p><p>$folder.name</p><p>$colItems = (Get-ChildItem &ldquo;\
Yourservername
\C$\windows$($folder.name)&rdquo; -Recurse -force | Measure-Object -Property length -Maximum -Minimum -Average -Sum)</p><p>&ldquo;{0:N2}&rdquo; -f ($colItems.sum / 1MB) + " MB"</p><p>}</p><p>Now there are many different ways to write the same script. For me the important thing is that I understand it. In more permanent or bigger scripts in production make sure you explain each part of the script in detail. # lets you write in the script without powershell reading it when it&rsquo;s running the script. Keep this script. Start a collection of all your scripts. You can safely keep them all in a folder in text files. And always test scripts first!!!. Do not just run them. As a rule of thumb though if the cmdlet is get-&hellip;.. then you are safe enough. The get- cmdlets just read information and then display it for you. For example get-ADuser -filter * will just give you a list of all your users in Active Directory. If you use remove-ADuser -filter * the results will be far more tragic&hellip; (Please don&rsquo;t try it!)</p><p>Thanks for reading. Comment if you feel you want to. The blogs is titled introduction to
PowerShell. Should be called introduction to blogging&hellip;. 
It&rsquo;s my first ever blog so sorry if it&rsquo;s a bit rough. I&rsquo;ll write some more PowerShell insights next week. I sincerely hope you start your 
PowerShell journey or continue with it. The rewards are definitely worth it. </p><p>Steve</p>
]]></content:encoded></item><item><title>[UPDATED] Even Vaguely Considering PowerShell Cruise? READ THIS RIGHT NOW.</title><link>https://powershell.org/articles/2015-07-29-even-vaguely-considering-powershell-cruise-read-this-right-now/</link><guid>https://powershell.org/articles/2015-07-29-even-vaguely-considering-powershell-cruise-read-this-right-now/</guid><pubDate>Wed, 29 Jul 2015 19:02:14 +0000</pubDate><description>&lt;p&gt;It&amp;rsquo;s no secret that I&amp;rsquo;m a big fan of next year&amp;rsquo;s &lt;a href="http://poshcruise.org"&gt;PowerShell Cruise&lt;/a&gt; and am excited for the folks who are organizing it. Tonight&amp;rsquo;s &lt;a href="https://t.co/StJPSxbexE"&gt;webinar&lt;/a&gt; (which they&amp;rsquo;ll post to their YouTube channel) will be a chance for you to learn more.&lt;/p&gt;
&lt;p&gt;But.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve never cruised before, you may not be aware of how the majority of the cruise industry works:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your cruise price includes your room, and is based on two people staying in the room together.&lt;/li&gt;
&lt;li&gt;Your cruise price includes most food on the ship - certain specialty restaurants may charge a la carte like a normal restaurant, or may have a small ($25-ish) per-person charge to dine there. If they have the per-person charge, everything on the menu is  then included at no extra charge.&lt;/li&gt;
&lt;li&gt;Your drinks cost extra - everything but water, tea, and plain coffee in most cases. Even soda is an extra price.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&amp;rsquo;s why I want you to think &lt;strong&gt;really really hard&lt;/strong&gt; about what I&amp;rsquo;m going to write next.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>It&rsquo;s no secret that I&rsquo;m a big fan of next year&rsquo;s<a href="http://poshcruise.org">PowerShell Cruise</a> and am excited for the folks who are organizing it. Tonight&rsquo;s<a href="https://t.co/StJPSxbexE">webinar</a> (which they&rsquo;ll post to their YouTube channel) will be a chance for you to learn more.</p><p>But.</p><p>If you&rsquo;ve never cruised before, you may not be aware of how the majority of the cruise industry works:</p><ul><li>Your cruise price includes your room, and is based on two people staying in the room together.</li><li>Your cruise price includes most food on the ship - certain specialty restaurants may charge a la carte like a normal restaurant, or may have a small ($25-ish) per-person charge to dine there. If they have the per-person charge, everything on the menu is  then included at no extra charge.</li><li>Your drinks cost extra - everything but water, tea, and plain coffee in most cases. Even soda is an extra price.</li></ul><p>That&rsquo;s why I want you to think <strong>really really hard</strong> about what I&rsquo;m going to write next.</p><p>If you **put a deposit down for the cruise before Friday July 31 2015, you can get all beverages included for just $68 extra per person. **That&rsquo;s all your soda. All your drinks (including cocktails up to $15 each). If you plan to have one nice glass of wine per day, and then drink cola, this will pay for itself easily. </p><p>The deposit is $250 per person, meaning $500 per stateroom. And it&rsquo;s fully refundable - <strong>you can get the entire deposit back</strong> - until April 2016. **So you don&rsquo;t need to make up your mind yet, **but if you don&rsquo;t do the deposit <strong>now</strong> you can&rsquo;t get the cheap drink package. Sure, you could buy it later, but it&rsquo;ll run you another $350 or so per person, I believe. </p><p>Even if you&rsquo;re planning to take the kids, they can get the drink package too - it&rsquo;ll cover their soft drinks for the entire cruise. </p><p>So look - I don&rsquo;t want anyone to miss this opportunity just because they&hellip; well, <em>missed</em> it. And keep in mind, this is the _first of a kind event, _and there will be swag to prove you were there. So there&rsquo;s a lot of reasons to <em>at least consider going</em> - and if you&rsquo;re considering it, get that deposit in <em>right now</em> so you can score the drink package, at the very least.<a href="http://poshcruise.org/booking.html">Call the travel agency that&rsquo;s handling the bookings</a> (don&rsquo;t e-mail, you want this done _now). _</p><p>Thank you. This ends the public service announcement. Resume shelling.</p>
]]></content:encoded></item><item><title>2015-July Scripting Games Wrap-Up</title><link>https://powershell.org/articles/2015-07-29-2015-july-scripting-games-wrap-up/</link><guid>https://powershell.org/articles/2015-07-29-2015-july-scripting-games-wrap-up/</guid><pubDate>Wed, 29 Jul 2015 17:39:26 +0000</pubDate><description>&lt;p&gt;The &lt;a href="https://powershell.org/2015/07/04/2015-july-scripting-games-puzzle/"&gt;July puzzler&lt;/a&gt; wasn&amp;rsquo;t intended to break your brain - but it was intended to highlight an extremely important pipeline technique - and to make you think about how PowerShell parses command lines. Let&amp;rsquo;s begin with our Celebrity Entry, from Boe Prox. We think you&amp;rsquo;ll discover some interesting new techniques in this answer - and learn from understanding how he got there.&lt;/p&gt;
&lt;h1 id="celebrity-entry" class="ps-heading"&gt;Celebrity Entry&lt;a class="ps-heading-anchor" href="#celebrity-entry" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;The 2015 Scripting Games have started and have taken a different route this year in that we are they are running a monthly puzzle vs. the usual format. That being said, I was asked to be a celebrity contestant and put together my solution as well as adding my thoughts (I promise to try and stay on a clear path) and various routes that I took to get to my final solution.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The<a href="https://powershell.org/2015/07/04/2015-july-scripting-games-puzzle/">July puzzler</a> wasn&rsquo;t intended to break your brain - but it was intended to highlight an extremely important pipeline technique - and to make you think about how PowerShell parses command lines. Let&rsquo;s begin with our Celebrity Entry, from Boe Prox. We think you&rsquo;ll discover some interesting new techniques in this answer - and learn from understanding how he got there.</p><h1 id="celebrity-entry" class="ps-heading">Celebrity Entry<a class="ps-heading-anchor" href="#celebrity-entry" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>The 2015 Scripting Games have started and have taken a different route this year in that we are they are running a monthly puzzle vs. the usual format. That being said, I was asked to be a celebrity contestant and put together my solution as well as adding my thoughts (I promise to try and stay on a clear path) and various routes that I took to get to my final solution.</p><p>The event, while seemingly simple, did cause me to spend some time trying to whittle down the number of characters to try and get as few as possible (because shorter code, while harder to read is always fun to write ;)).</p><p>The rules of engagement for this particular puzzle are as follows:</p><p>_Write a one-liner that produces the following output (note that property values will be different from computer to computer; that’s fine). _</p><p><strong>_PSComputerName ServicePackMajorVersion Version  BIOSSerial  _</strong></p><p><em>By definition, a one-liner is a single, long command or pipeline that you type, hitting Enter only at the very end. If it wraps to more than one physical line as you’re typing, that’s OK. But, in order to really test your skill with the parser, try to make your one-liner as short as technically possible while still running correctly.</em></p><p>That’s not all though, here are some extra pieces to make it a little more challenging;</p><ul><li>Try to use no more than one semicolon total in the entire one-liner</li><li>Try not to use ForEach-Object or one of its aliases</li><li>Write the command so that it could target multiple computers (no error handling needed) if desired</li><li>Want to go obscure? Feel free to use aliases and whatever other shortcuts you want to produce a teeny-tiny one-liner.</li></ul><p>Now that we have all of this understood, it is time to start looking at how I am going to handle this.</p><p>I know already that I need to look at WMI as my source to pull this information. PSComputername is already available when I use Get-CIMInstance to handle my query.</p><p>The first thing that I need to do is that in order to pull both the<strong>ServicePackMajorVersion</strong> and<strong>Version</strong> I need to use the Cim_OperatingSystem class (it has everything I need from Win32_OperatingSystem, but at fewer characters!), but then I have the BIOSSerial property which happens to exist on the Win32_BIOS class. If I intend to overcome the<em>only use 1 semicolon</em> challenge and also make this a one liner, I need to start thinking of a good workaround. Fortunately, a workaround exists in creating a custom property that will define the BIOSSerial label and then performs a query to the class that returns the serial number.</p><p><code>Get-CIMInstance -Class Cim_OperatingSystem | Select-Object PSComputername,ServicePackMajorVersion,Version,@{Label='BIOSSerial';Expression={(Get-CIMInstance -Class Win32_BIOS).SerialNumber}}</code>This works great and also ensures that I only have a single semicolon to boot! At this point I technically have a submission that works…but it is missing a few things extra that would really meet all of the requirements to include being able to target multiple systems as well as shrinking the code down to its smallest possible size while still retaining its functionality.</p><h2 id="handling-multiple-systems" class="ps-heading"><strong>Handling Multiple Systems</strong><a class="ps-heading-anchor" href="#handling-multiple-systems" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>First off is the concept of
allowing for multiple systems
(remember that this was one of the challenge requirements). I wanted something that would be dynamic enough to where I wasn’t hard coding a host file or computer names into the script.</p><p>I thought I could get away with this using Read-Host, but unfortunately for me, it displays everything as a single string, not an array of strings that I had hoped for. </p><p><code>(Read-Host ' ').GetType().Fullname</code>That pretty much threw out one idea that I had until I had the idea of splitting the comma (which would be the common character to use with building a collection of items) if it was used with Read-Host and instantly this is back in the game! I also realized that I just needed to give a single character (that wasn’t a single or double quote) to knock out a couple of characters for the prompt.</p><p><code>(Read-Host .).split(',')</code>I almost thought that I had this done until I did a little more research. Sure enough, there is a better approach to be had here in the form of<strong>Echo</strong>, which happens to be an alias for Write-Output. If nothing is supplied to it, it prompts for input and continues to do so until you hit return on an empty line which means…you guessed it…instant collections that can be passed to the command!</p><p>That really knocked down my character count!</p><h2 id="shrinking-cmdlets" class="ps-heading"><strong>Shrinking Cmdlets</strong><a class="ps-heading-anchor" href="#shrinking-cmdlets" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Obviously, this is where aliases begin to come into play. I start knocking down my cmdlets to get them as small as possible. Get-WMIObject becomes gwmi and Select-Object becomes Select. Next up I can take my custom property and bring Label down to just ‘l’ and then make Expression ‘e’.  Because it was not explicitly mentioned that we would be outputting this to a file or doing anything else with it, I am going to instead use Format-Table, or more appropriately, its alias of<strong>FT</strong> to further reclaim the valuable character count.</p><p><code>FT @{l='BIOSSerial';e={(gcim -Class Win32_BIOS).SerialNumber}}</code>As a bonus to this, I am also going to use the smallest possible property names with wildcards to still have the proper display but much fewer characters.</p><p><code>ft PSC*,*aj*,V*,@{n='BIOSSerial';e={(gcim Win32_BIOS).SerialNumber}}</code>##<strong>Shrinking Parameters</strong></p><p>Getting there… Parameters also will sometimes have their own aliases that can be used, so –Computername can become –cn and –Class can be knocked down to –cl without fear of running into the dreaded ambiguous parameter error. But why stop at shortened parameter names when positional parameter can be much more fun while at the same time squeezing out more characters in my attempt to make this as small as possible. Using gwmi, we have the positional parameter for the –Class parameter meaning that we can specific the class first and the cmdlet will process it just as though we specified the parameter name.</p><h2 id="positional-parameter" class="ps-heading"><strong>Positional Parameter</strong><a class="ps-heading-anchor" href="#positional-parameter" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Parameter aliases are nice and all, but if I want to continue to shrink down my command, I need to look at parameters by position. With Get-WMIObject, I only have one option for a positional parameter with –Class (which happens to be as position 0). –Computername is unfortunately not a positional parameter (as shown in the image below) in the way that I can just have it right after –Class.</p><p><code>(Get-Command Get-CimInstance).Parameters.GetEnumerator()|ForEach{ $Param = $_.Key $_.Value.Attributes|ForEach{ If ($_.TypeId -eq [System.Management.Automation.ParameterAttribute]) { [pscustomobject]@{ Name=$Param Position=$_.Position ParamSet=$_.ParameterSetName } } } }</code>But…it turns out Computername is an accepted value via the pipeline, so now I can go that route and not have to worry about specifying any parameters in my one liner!</p><p>What I ended up with is the following submission (I’ve broke this out at a natural line break for the sake of readability):</p><p><code>echo|gcim cim_operatingsystem| ft PSC*,*j*,V*,@{n='BIOSSerial';e={(gcim Win32_BIOS).SerialNumber}}</code>This one liner is<strong>97</strong> characters in length (woo hoo!) with the various aliases being used, removing any unnecessary white space in between things such as the pipe (|) and commas. I also ensure that the output is exactly what was shown in the example for the event. My victory was short lived however.</p><p>Did you notice what I was missing here in this approach? I didn’t realize this until I was at the end of this article that I was only querying the local system for the BIOS. With that issue, I quickly fixed it (at the cost of more characters) and now have something that comes in at<strong>105 characters</strong>
and
meets the requirements and challenges.</p><p><code>echo|gcim cim_operatingsystem| ft PSC*,*j*,V*,@{n='BIOSSerial';e={($_.csname|gcim Win32_BIOS).SerialNumber}}</code>##<strong>Side Note on Invoke-Command</strong></p><p>I could have went with Invoke-Command (using icm an alias) but the problem lies with the output object that includes Runspaceid which obviously would not meet the requirement of this puzzle.</p><p>With that, I look forward to seeing what everyone else has put together and learning some awesome ways of accomplishing this puzzle including who can put together an insanely short command that meets all of the design criteria!</p><h1 id="official-answer" class="ps-heading">Official Answer<a class="ps-heading-anchor" href="#official-answer" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>While there&rsquo;s no one right way to accomplish this task, our puzzle author obviously has an answer in mind. Here it is:</p><p><code>gwmi win32_operatingsystem | select pscomputername,servicepackmajorversion,version,@{n='BIOSSerial';e={gwmi win32_bios | select -expand serialnumber}}</code>This solution doesn&rsquo;t hit all of the additional challenges, but it perhaps makes it clearer to see the most important bit: using a custom property to execute a second query, and extracting the results of that query into the custom property&rsquo;s value. Boe&rsquo;s celebrity solution, above, is a much more concise version of this, and meets many more of the optional challenges!</p><h1 id="interesting-submissions" class="ps-heading">Interesting Submissions<a class="ps-heading-anchor" href="#interesting-submissions" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>Stephen Testino had an interesting approach:</p><p><code>gwmi win32_operatingsystem -co @(".") | select *pu*, *j*, v*, @{n="BIOSSerial";e={(gwmi win32_bios -co $_.csname).serialnumber}}</code>Here, you&rsquo;re seeing the value in using wildcards with Select-Object. Stephen also saved a little space by not using Select-Object and -ExpandProperty to get the SerialNumber property&rsquo;s contents; instead, he used a parenthetical expression. A but harder to read, perhaps, but more concise in this case. You might argue that the addition of the -ComputerName parameter isn&rsquo;t necessary, since the local computer is already the default; creating a one-element array was also unnecessary because PowerShell would have done that anyway.</p><p>&ldquo;powershelleanpeoplesfront&rdquo; offered one of the Invoke-Command approaches we saw:</p><p><code>icm{gwmi cim_operatingsystem|ft psc*,*j*,v*,@{n='BIOSSerial';e={(gwmi win32_bios).SerialNumber}}}-cn .</code>Basically the same idea. In this case, Format-Table is being used as an alternate for Select-Object. Within the scope of the puzzle, they&rsquo;re doing the same thing; the only downside to using Format-Table is that the output can&rsquo;t then be piped on to very many other cmdlets. So in a more real-world scenario, Select-Object offers more flexibility.</p><p>Paal had one of the &ldquo;who cares about the optional challenges?&rdquo; answers (which is totally fine, as it&rsquo;s a lot easier to read!!!) - a lot of people came up with something similar to this.</p><p><code># https://powershell.org/2015/07/04/2015-july-scripting-games-puzzle/ Get-CimInstance -ClassName Win32_OperatingSystem -ComputerName $Computers | Format-Table -AutoSize PSComputerName,ServicePackMajorVersion,Version,@{l="BIOSSerial"; e={(Get-CimInstance -ClassName Win32_BIOS -ComputerName $_.PSComputerName).SerialNumber}}</code>Again, note the use of Format-Table. Within the scope of this puzzle, it&rsquo;s fine - but make sure you know why Select-Table can do more or less the same thing, and how it differs from formatting.</p><p>Joshua Wortz used pipeline input to save some space:</p><p><code>@('Comp1','Comp2')|gcim win32_operatingsystem|ft PSC*,*j*,V*,@{N="BIOSSerial";E={(gwmi win32_bios -cn $_.pscomputername).serialnumber}}</code>By piping in the computer names, you eliminate the need to manually specify -ComputerName. However, Joshua could have eliminated the <strong>@()</strong> array construct; PowerShell usually treats comma-separated strings as arrays anyway, so you&rsquo;d reduce your character count by three more that way. With the Win32_OperatingSystem class in particular, you also get a CSName property that could be used instead of PSComputerName, for ad additional reduction in character count. You&rsquo;ll notice that some entries used CSName, probably for that reason. The PSComputerName property wasn&rsquo;t added until PowerShell 3, also.</p><p>Stephen Owen<a href="https://gist.github.com/1RedOne/e2a89f1a2ec5413d2c37#file-july-2015-powershell-challenge">posted an entry that included his thoughts</a>, and that&rsquo;s something <em>everyone</em> is welcome, and encouraged, to do. It&rsquo;s super-useful to everyone in the community to see your thought process as well as your solution! Stephen also had the same learning moment that Boe had, which was that the output of Read-Host is a single string, not the array you need in order to feed the names to a parameter. That&rsquo;s valuable knowledge! Several others, based on their solutions&rsquo; use of -Split or the Split() method, learned the same thing.</p><p>&ldquo;kvprasoon&rdquo; has an absolutely unique approach:</p><p><code>foreach($O in "Win32_operatingsystem","win32_bios"){if($O -eq "win32_bios"){$r+=(gwmi $O|select @{E="Serialnumber";L="BIOS Serialnumber"},Pscomputername,@{E={$r.servicepackmajorversion};L="servicepackmajorversion"},@{E={$R.version};L="version"})} else{[array]$r+=(gwmi $O|select @{E={""};L="Serialnumber"},Pscomputername,servicepackmajorversion,version)};$R[1]}</code>I think that&rsquo;s probably <em>way</em> more code than anyone else wrote, and having it as a one-liner makes it pretty tough to read, but it&rsquo;s definitely an interesting approach. I think, though, that this demonstrates how <em>not</em> to use the pipeline in PowerShell. This is really structural code, and it doesn&rsquo;t let PowerShell do most of the work that it&rsquo;s willing to do. But hopefully everyone can learn a little bit by comparing this to some of the more commonly offered patterns, including those I&rsquo;ve shared here. For the record, the same user also posted other, better solutions; in the future, we ask folks to post just one submission, to make the read-through a little easier.</p><p>I hope everyone found this puzzle to be fun, a little challenging, and perhaps learned something new. Two notes going forward:</p><ul><li>**Please post only one solution. **Keep in mind that you can always go back and edit your Gist, and we&rsquo;ll always pull the most recent one, so there&rsquo;s no need to re-post a new solution if you want to change something.</li><li>**Please use Gists, as indicated in the instructions. **That&rsquo;s different from a regular GitHub URL, and it&rsquo;s not the same as just pasting code into a comment. </li></ul><p>If you&rsquo;re a blogger, you are <strong>more than welcome</strong> to create a blog article about your solution; just add that article&rsquo;s URL to the comment with your Gist URL.</p><p>See you in a little bit with next month&rsquo;s puzzle!</p>
]]></content:encoded></item><item><title>Powershell IS for the desktop tech as well</title><link>https://powershell.org/articles/2015-07-28-powershell-is-for-the-desktop-tech-as-well/</link><guid>https://powershell.org/articles/2015-07-28-powershell-is-for-the-desktop-tech-as-well/</guid><pubDate>Wed, 29 Jul 2015 00:06:26 +0000</pubDate><description>&lt;p&gt;Every day some one tends to ask me if there is a simpler way to do task A or B, and the minute I mention PowerShell the response is almost always the same, &amp;ldquo;yea i have been meaning to learn that but. This really saddens me for 2 reasons, &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Because PowerShell can and does make your life simpler &lt;/li&gt;
&lt;li&gt;i am already seeing peoples jobs get replaced when they fall behind in the skill and as more and more companies move closer to automation it will only get worse. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It saddens me even more so when I see co-workers who i have taken the time to write the scripts to improve the speed of resolution not use them either. then wounder why i am able to fix the same issue in a fraction of the time they have. &lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Every day some one tends to ask me if there is a simpler way to do task A or B, and the minute I mention PowerShell the response is almost always the same, &ldquo;yea i have been meaning to learn that but. This really saddens me for 2 reasons, </p><ol><li>Because PowerShell can and does make your life simpler </li><li>i am already seeing peoples jobs get replaced when they fall behind in the skill and as more and more companies move closer to automation it will only get worse. </li></ol><p>It saddens me even more so when I see co-workers who i have taken the time to write the scripts to improve the speed of resolution not use them either. then wounder why i am able to fix the same issue in a fraction of the time they have. </p><p>As you probably guessed from the title i am talking about people in the world of desktop technicians. the , in my opinion, unsung heroes of IT support. <br>
Powershell is not just for system admins, the local desktop guy can make his life much simpler by scripting out the simple stuff to save you time and money. <br>
here is an example, <br>
one of our clients has an issue with network printers getting jammed up if they do not print PDF documents as an image, once I had to do 3 or 4 of these i decided this took to long to fix, since we have to stop the print spooler, delete all the Print jobs and then restart then spooler again, and when you have 20-30 PCs to do this on i am sue you can guess this takes up a lot of our time. so I wrote a script to solve the issue, and it is really simple as well </p><p>`/**</p><ul><li>function Start-Error49FixV3
{
[CmdletBinding()]
[OutputType([int])]
Param
(
# Enter the Hostname of the Target PC(s)
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
[string[]]$Computername
)
Begin
{
}
Process
{
foreach ($Computer in $Computername)
{
Invoke-Command -computername $Computer -ScriptBlock {Stop-Service -Displayname &ldquo;Citrix Print Manager Service&rdquo;}
Invoke-Command -computername $Computer -ScriptBlock {Stop-Service -Name spooler -force}
Remove-Item -Path \$Computer\c$\Windows\System32\spool\PRINTERS* -recurse
Invoke-Command -computername $Computer -ScriptBlock {Start-Service -Displayname &ldquo;Citrix Print Manager Service&rdquo;}
Invoke-Command -computername $Computer -ScriptBlock {Start-Service -Name spooler}
Get-Service -Computername $Computer -name Spooler | Select name,status,$Computer | sort $Computer |format-table -AutoSize
Get-Service -Computername $Computer -Displayname &ldquo;Citrix Print Manager Service&rdquo; | Select name,status,$Computer | sort $Computer |format-table -AutoSize
}
}
End
{
}
}
*/
`This simple line of Code was able to turn this process from being done after hours to a normall 20 minute fix for most of the clients locations, not only allowing us to get back to other issues faster but also helpinn to make the client happy since they no longer ad to wait a day for the printer to get backup and running.<br>
This is just one example, i could fill up your PC with other even simpler examples but instead i would rather show you. so over the course of the blog I am going to introduce you to a verity of topics from how to right clean code, how to test it safely, and lastly how to get a devops platform discussion into your work place for this so your code can get properly validated and confirmed safe in the environment.<br>
also if you have any questions on anything to do with PowerHhell feel free to drop it in the comments below or e-mail me @<a href="mailto:Brian.Bourque@live.com">Brian.Bourque@live.com</a><br>
until next time guys happy scripting</li></ul>
]]></content:encoded></item><item><title>PowerShell Summit NA 2016 – call for topics coming soon</title><link>https://powershell.org/articles/2015-07-28-powershell-summit-na-2016-call-for-topics-coming-soon/</link><guid>https://powershell.org/articles/2015-07-28-powershell-summit-na-2016-call-for-topics-coming-soon/</guid><pubDate>Tue, 28 Jul 2015 15:28:45 +0000</pubDate><description>&lt;p&gt;The North American PowerShell Summit 2016 will take place at the
Meydenbauer center in Bellevue WA. on April 4-6 2016. The Summit is a community event, with community based speakers. That means we need **you **to submit sessions. Members of the PowerShell team will be attending, and speaking, as in previous years as will a number of PowerShell MVPs. One of the goals of PowerShell.org is to help build the PowerShell community and that means helping and developing new speakers. You don&amp;rsquo;t have to be an established speaker to present at the Summit - just knowledgeable about your topic and enthusiastic about PowerShell.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The North American PowerShell Summit 2016 will take place at the
Meydenbauer center in Bellevue WA. on April 4-6 2016. The Summit is a community event, with community based speakers. That means we need **you **to submit sessions. Members of the PowerShell team will be attending, and speaking, as in previous years as will a number of PowerShell MVPs. One of the goals of PowerShell.org is to help build the PowerShell community and that means helping and developing new speakers. You don&rsquo;t have to be an established speaker to present at the Summit - just knowledgeable about your topic and enthusiastic about PowerShell.</p><p>We&rsquo;ll be posting the official &ldquo;Call for Topics&rdquo; next week. This is a warning to get you thinking about topics you can present at the Summit.  Standard sessions are 45 minutes with Q&amp;A though expect discussions to continue over coffee.</p><p>This year we&rsquo;re expecting to be able to cover at least some of the hotel room costs for speakers - more details next week.</p><p>In the mean time - start thinking of those ideas and be ready to submit them when we open up the event site for speaker submissions. Established expert or new-comer - we need your sessions to make the Summit work. We&rsquo;ve had 3 excellent NA Summits so far - your session will help make 2016 the best one yet.</p>
]]></content:encoded></item><item><title>Curious about PowerShell Cruise? Here's how to learn more.</title><link>https://powershell.org/articles/2015-07-24-curious-about-powershell-cruise-heres-how-to-learn-more/</link><guid>https://powershell.org/articles/2015-07-24-curious-about-powershell-cruise-heres-how-to-learn-more/</guid><pubDate>Fri, 24 Jul 2015 19:58:17 +0000</pubDate><description>&lt;p&gt;I&amp;rsquo;m stupid-excited about &lt;a href="Http://PoshCruise.org"&gt;PowerShell Cruise&lt;/a&gt;. Did you know you can register now for just $500, which is fully refundable up to a point? And that doing so NOW gets you awesome amenities like free Internet minutes or liquor packages? Did you know I&amp;rsquo;m speaking? Did you&amp;hellip; &lt;/p&gt;
&lt;p&gt;Wait. You probably have a ton of questions, especially if you&amp;rsquo;ve never cruised. So on Wednesday July 29, at 4pm Pacific, get your answers. Go to https://attendee.gotowebinar.com/register/4206318439550861826 to register for a webinar. I&amp;rsquo;ll host, and I&amp;rsquo;ll be joined by the event organizers, as well as the travel agency that&amp;rsquo;s handling the bookings. There&amp;rsquo;s literally no PowerShell Cruise question these brave souls can&amp;rsquo;t answer.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I&rsquo;m stupid-excited about<a href="Http://PoshCruise.org">PowerShell Cruise</a>. Did you know you can register now for just $500, which is fully refundable up to a point? And that doing so NOW gets you awesome amenities like free Internet minutes or liquor packages? Did you know I&rsquo;m speaking? Did you&hellip; </p><p>Wait. You probably have a ton of questions, especially if you&rsquo;ve never cruised. So on Wednesday July 29, at 4pm Pacific, get your answers. Go to https://attendee.gotowebinar.com/register/4206318439550861826 to register for a webinar. I&rsquo;ll host, and I&rsquo;ll be joined by the event organizers, as well as the travel agency that&rsquo;s handling the bookings. There&rsquo;s literally no PowerShell Cruise question these brave souls can&rsquo;t answer.</p><p>Did you know the conference portion of the cruise - the technical conten - will be FREE? Did you know two people can sail for under $1900, inclusive of meals, snacks, and most onboard activities? NO, you did not know, and that&rsquo;s why you need to at least show up and get the facts. We will record the whole thing, too.</p><p>I want to emphasize that this isn&rsquo;t a PowerShell.org event - we are just being as hugely supportive as possible to the bold individuals who are trying to do this thing for their community, at no profit for themselves, and with (probably) more than a few evil eyes from their spouses. So show your love and join the webinar!!!</p>
]]></content:encoded></item><item><title>Building a test lab : The basics Part 1 RootCA</title><link>https://powershell.org/articles/2015-07-15-building-a-test-lab-the-basics-part-1-rootca/</link><guid>https://powershell.org/articles/2015-07-15-building-a-test-lab-the-basics-part-1-rootca/</guid><pubDate>Thu, 16 Jul 2015 04:16:28 +0000</pubDate><description>&lt;p&gt;Part of building a functional test lab is being able to deal with cattle and not pets. With that in mode I&amp;rsquo;m writing a series about the script necessary to build a production like lab for testing DSC, and be able to to tear it down and rebuild it with little effort.&lt;/p&gt;
&lt;p&gt;Part 1 is about bootstrapping DSC for the Root CA. and doing so without using plaintext passwords.&lt;/p&gt;
&lt;p&gt;I would welcome some feedback on both my methods and writing style.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Part of building a functional test lab is being able to deal with cattle and not pets. With that in mode I&rsquo;m writing a series about the script necessary to build a production like lab for testing DSC, and be able to to tear it down and rebuild it with little effort.</p><p>Part 1 is about bootstrapping DSC for the Root CA. and doing so without using plaintext passwords.</p><p>I would welcome some feedback on both my methods and writing style.</p><p><a href="https://bladefirelight.wordpress.com/2015/07/16/building-the-basics-part-1-pki-rootca/">Building the basics Part 1 | PKI: RootCA</a></p>
]]></content:encoded></item><item><title>Curious About the #PoshCruise? Ask Questions Here.</title><link>https://powershell.org/articles/2015-07-14-curious-about-the-poshcruise-ask-questions-here/</link><guid>https://powershell.org/articles/2015-07-14-curious-about-the-poshcruise-ask-questions-here/</guid><pubDate>Tue, 14 Jul 2015 16:12:57 +0000</pubDate><description>&lt;p&gt;Jeffrey Langdon, Doug Finke, and untold others are putting together &lt;a href="http://poshcruise.org"&gt;PoshCruise&lt;/a&gt;, a PowerShell Cruise Conference. I wanted to make sure everyone knew about it, because it (A) stands to be a lot of run, and (B) offers some special pricing through this month.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;conference&amp;rdquo; itself is free - you just have to pay for your cruise. There&amp;rsquo;ll be presentations (I&amp;rsquo;m guessing mainly on the &amp;ldquo;at sea&amp;rdquo; days of the 7-day trip, although personally I&amp;rsquo;ve rented a beach cabana on Great Stirrup Cay and will hold forth on technical topics over tropical cocktails). &lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Jeffrey Langdon, Doug Finke, and untold others are putting together<a href="http://poshcruise.org">PoshCruise</a>, a PowerShell Cruise Conference. I wanted to make sure everyone knew about it, because it (A) stands to be a lot of run, and (B) offers some special pricing through this month.</p><p>The &ldquo;conference&rdquo; itself is free - you just have to pay for your cruise. There&rsquo;ll be presentations (I&rsquo;m guessing mainly on the &ldquo;at sea&rdquo; days of the 7-day trip, although personally I&rsquo;ve rented a beach cabana on Great Stirrup Cay and will hold forth on technical topics over tropical cocktails). </p><p>Cruises can be a pretty good deal in terms of value. NCL, the cruise line, is really clear about<a href="https://www.ncl.com/faq/cruise-fare-includes">what&rsquo;s included</a> and what&rsquo;s extra. And, unlike many lines, NCL&rsquo;s &ldquo;Freestyle Cruising&rdquo; means you&rsquo;re not locked into a schedule for things like meals - you just eat when you want, where you want, in a number of different venues. I plan to inject PowerShell into every possible minute of the cruise - PowerShell in the pool, DSC in the whiskey bar, Toolmaking in the buffet, you name it.</p><p>If you&rsquo;ve not cruised before, and are curious about how different stuff works, pop a question into the comments here. I&rsquo;ve cruised a _ton, _so I&rsquo;ll do my best to answer - and if something comes up about the PowerShell aspect of the cruise, I&rsquo;ll grab one of the guys to drop an answer here.</p><p>At a per-person price as low as $950 (based on double occupancy), it&rsquo;s amongst the cheapest conferences you&rsquo;ll find. You&rsquo;ll need to factor in airfare to NYC, about $110 in shipboard service charges, but apart from that you don&rsquo;t <em>have</em> to spend any more. That covers your food, beverages like tea and water, and most shipboard activities. Packages can lower the price of alcoholic or soft drinks (especially if you book early, when those packages are either included in the price or are heavily discounted), even.</p><p>So&hellip; whatcha wanna know about a PoshCruise?</p>
]]></content:encoded></item><item><title>PhillyPoSH 07/07/2015 meeting summary and presentation materials</title><link>https://powershell.org/articles/2015-07-13-phillyposh-07072015-meeting-summary-and-presentation-materials/</link><guid>https://powershell.org/articles/2015-07-13-phillyposh-07072015-meeting-summary-and-presentation-materials/</guid><pubDate>Tue, 14 Jul 2015 00:51:36 +0000</pubDate><description>&lt;p&gt;&lt;a href="https://twitter.com/Iczer1"&gt;John Mello&lt;/a&gt; gave a presentation entitled “ConvertFrom-String Overview and Examples”.
&lt;a href="https://github.com/PhillyPoSH/2015-07-ConvertFrom-String"&gt;A copy of his demo scripts and presentation&lt;/a&gt;
are available at our
&lt;a href="https://github.com/PhillyPoSH"&gt;GitHub site&lt;/a&gt;
. &lt;a href="https://twitter.com/techguytj"&gt;TJ Turner&lt;/a&gt;&amp;rsquo;s presentation &amp;ldquo;&lt;a href="http://techguytj.com/whats-in-your-toolbox/"&gt;What&amp;rsquo;s in your Toolbox&lt;/a&gt;&amp;rdquo; is available at his &lt;a href="http://techguytj.com/"&gt;blog&lt;/a&gt;. 
&lt;a href="https://www.youtube.com/watch?v=GGr3dQRi5nQ"&gt;A recording of this meeting&lt;/a&gt;
has been posted to our
&lt;a href="https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg"&gt;YouTube channel&lt;/a&gt;
.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><a href="https://twitter.com/Iczer1">John Mello</a> gave a presentation entitled “ConvertFrom-String Overview and Examples”.<a href="https://github.com/PhillyPoSH/2015-07-ConvertFrom-String">A copy of his demo scripts and presentation</a>
are available at our<a href="https://github.com/PhillyPoSH">GitHub site</a>
. <a href="https://twitter.com/techguytj">TJ Turner</a>&rsquo;s presentation &ldquo;<a href="http://techguytj.com/whats-in-your-toolbox/">What&rsquo;s in your Toolbox</a>&rdquo; is available at his<a href="http://techguytj.com/">blog</a>. <a href="https://www.youtube.com/watch?v=GGr3dQRi5nQ">A recording of this meeting</a>
has been posted to our<a href="https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg">YouTube channel</a>
.</p>
]]></content:encoded></item><item><title>Philadelphia PowerShell User Group Meeting – August 6th 2015</title><link>https://powershell.org/articles/2015-07-12-philadelphia-powershell-user-group-meeting-august-6th-2015/</link><guid>https://powershell.org/articles/2015-07-12-philadelphia-powershell-user-group-meeting-august-6th-2015/</guid><pubDate>Mon, 13 Jul 2015 03:40:33 +0000</pubDate><description>&lt;p&gt;Join us on Thursday, August 6th when &lt;a href="https://twitter.com/juneb_get_help"&gt;June Blender&lt;/a&gt; will be conducting a hands on lab (in person!) called &lt;strong&gt;Working with Classes in PowerShell&lt;/strong&gt; &lt;strong&gt;5.0.&lt;/strong&gt; To participate in the lab, bring a laptop (or VM) with PowerShell 5.0, but it&amp;rsquo;s not required! After that, we will review the results of the &lt;a href="https://powershell.org/2015/07/04/2015-july-scripting-games-puzzle/"&gt;
July Scripting games puzzle
&lt;/a&gt;. &lt;/p&gt;
&lt;h4 id="aboutjune" class="ps-heading"&gt;About June&lt;a class="ps-heading-anchor" href="#aboutjune" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;June Blender is a technology evangelist for SAPIEN Technologies, Inc.
Formerly a Senior Programming Writer at Microsoft Corporation, she is best known for her work with the Windows PowerShell product team from 2006-2012. developing the help system and writing the Get-Help help topics for PowerShell 1.0 – 3.0. In other roles, June wrote content for the Azure Active Directory SDK and Azure PowerShell Help, Windows Driver Kits, Windows Support Tools, and Windows Resource Kits.
She lives in magnificent Escalante, Utah, where she works remotely when she&amp;rsquo;s not out hiking, canyoneering, taking Coursera classes, or convincing lost tourists to try Windows PowerShell.
She is a Windows PowerShell MVP, a PowerShell Hero, an Honorary Scripting Guy, and a frequent contributor to PowerShell.org. Contact her at [&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join us on Thursday, August 6th when <a href="https://twitter.com/juneb_get_help">June Blender</a> will be conducting a hands on lab (in person!) called<strong>Working with Classes in PowerShell</strong><strong>5.0.</strong> To participate in the lab, bring a laptop (or VM) with PowerShell 5.0, but it&rsquo;s not required! After that, we will review the results of the <a href="https://powershell.org/2015/07/04/2015-july-scripting-games-puzzle/">
July Scripting games puzzle</a>. </p><h4 id="aboutjune" class="ps-heading">About June<a class="ps-heading-anchor" href="#aboutjune" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h4><p>June Blender is a technology evangelist for SAPIEN Technologies, Inc.
Formerly a Senior Programming Writer at Microsoft Corporation, she is best known for her work with the Windows PowerShell product team from 2006-2012. developing the help system and writing the Get-Help help topics for PowerShell 1.0 – 3.0. In other roles, June wrote content for the Azure Active Directory SDK and Azure PowerShell Help, Windows Driver Kits, Windows Support Tools, and Windows Resource Kits.
She lives in magnificent Escalante, Utah, where she works remotely when she&rsquo;s not out hiking, canyoneering, taking Coursera classes, or convincing lost tourists to try Windows PowerShell.
She is a Windows PowerShell MVP, a PowerShell Hero, an Honorary Scripting Guy, and a frequent contributor to PowerShell.org. Contact her at [</p><p><a href="mailto:juneb@sapien.com">juneb@sapien.com</a></p><p>]<a href="mailto:juneb@sapien.com">3</a>
and follow her on the
[</p><p>SAPIEN Blog</p><p>]<a href="http://www.sapien.com/blog/">4</a>
and on Twitter at
[</p><p>@juneb_get_help</p><p>](<a href="https://twitter.com/juneb_get_help">https://twitter.com/juneb_get_help</a>)
.</p><p>Please <a href="https://www.eventbrite.com/e/phillyposh-august-6th-2015-june-blender-tickets-17741751055?ref=ebtn">
register</a> if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation.</p><p><a href="http://www.eventbrite.com/e/phillyposh-august-6th-2015-june-blender-tickets-17741751055?ref=ebtnebregn"><img src="https://www.eventbrite.com/custombutton?eid=17741751055" alt="Eventbrite - PhillyPosh August 6th 2015 - June Blender"/></p>
]]></content:encoded></item><item><title>NYC Powershell Usergroup meets on July 13th</title><link>https://powershell.org/articles/2015-07-10-nyc-powershell-usergroup-meets-on-july13/</link><guid>https://powershell.org/articles/2015-07-10-nyc-powershell-usergroup-meets-on-july13/</guid><pubDate>Fri, 10 Jul 2015 18:03:27 +0000</pubDate><description>&lt;p&gt;We have an exciting line-up for the July Powershell User-Group meeting.&lt;br&gt;
Powershell MVP, Tome Tanasovski will be presenting a beginner’s track on Powershell covering File Management, and Date/Time manipulations.&lt;br&gt;
We also have Powershell MVP Doug Finke, who will be covering Pester.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AGENDA:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tome Tanasovski&lt;/strong&gt;:&lt;br&gt;
File management&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Managing paths&lt;/li&gt;
&lt;li&gt;Reading data from a file&lt;/li&gt;
&lt;li&gt;Finding strings in a collection of files&lt;/li&gt;
&lt;li&gt;XML and CSV file manipulation&lt;/li&gt;
&lt;li&gt;Exporting data to an HTML page&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Handling dates and time&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We have an exciting line-up for the July Powershell User-Group meeting.<br>
Powershell MVP, Tome Tanasovski will be presenting a beginner’s track on Powershell covering File Management, and Date/Time manipulations.<br>
We also have Powershell MVP Doug Finke, who will be covering Pester.</p><p><strong>AGENDA:</strong></p><p><strong>Tome Tanasovski</strong>:<br>
File management</p><ul><li>Managing paths</li><li>Reading data from a file</li><li>Finding strings in a collection of files</li><li>XML and CSV file manipulation</li><li>Exporting data to an HTML page</li></ul><p>Handling dates and time</p><ul><li>Date and time formatting and custom date formats</li><li>Creating and updating a datetime object</li><li>Date comparison</li><li>Timespan datatype</li></ul><p>**Bio<br>
** Tome is an executive for a market-leading global financial services firm in New York City where he focuses on automation, private cloud, and distributed computing. He is the founder and leader of the New York City PowerShell User group, a blogger, and speaks regularly at conferences and user groups. In 2011, he became a cofounder of the NYC Techstravaganza, coauthored the Windows PowerShell Bible, and received the title of Honorary Scripting Guy from the Hey Scripting Guy! blog. Tome has also received the MVP award from Microsoft for the last five years in Windows PowerShell.<br><strong>Blog</strong>:<a href="http://powertoe.wordpress.com">http://powertoe.wordpress.com</a><br><strong>Twitter</strong>:<a href="http://twitter.com/toenuff">http://twitter.com/toenuff</a></p><p>**<br>
Doug Finke:<br>
** Testing PowerShell Scripts with Pester.<br>
This will be a demo heavy presentation showing how to test scripts and test Modules</p><ul><li>Pester, Why Test, How to Test, Mocks.</li><li>Visual Studio PoshTools Addin</li></ul><p><strong>Bio</strong><br>
Doug Finke, author of<em>PowerShell for Developers</em>, 7 time MVP recipient and an international professional speaker. Doug works at Start-Automating, a company that builds advanced PowerShell tools, provides PowerShell training and PowerShell consulting. You can catch up with Doug at his blog Development in a Blink at<br><strong>Blog:</strong><a href="http://dougfinke.com/blog">http://dougfinke.com/blog</a><br><strong>Twitter:</strong><a href="https://twitter.com/dfinke">https://twitter.com/dfinke</a> </p><p>Pizza is being sponsored by SAPIEN, Makers of PowerShell Studio and Primal Script</p><p><a href="http://www.sapien.com"><img src="https://powershell.org/wp-content/uploads/2015/06/SapienLogo3.png" alt="SapienLogo3"/></p><p>6 pm - 6:30 - Pizza and catching up<br>
6:30 - 7:15 – Tome Tanasovski.<br>
7:15 - 7:45 – Doug Finke.<br>
8ish - ?? - Drinks at Beer Authority (next to Port Authority)</p><p>You must RSVP via Event Brite in order to attend:<a href="https://www.eventbrite.com/e/nyc-powershell-ug-doug-finke-introduction-to-pester-tome-managing-datetime-with-powershellfile-tickets-17726352999">Register Here</a>!</p><p><a href="https://www.eventbrite.com/e/nyc-powershell-ug-doug-finke-introduction-to-pester-tome-managing-datetime-with-powershellfile-tickets-17726352999"><img src="https://powershell.org/wp-content/uploads/2015/06/EventBriteLogo.png" alt="EventBriteLogoEventBriteLogo"/></p><p><strong>Meeting Date:</strong><br>
Monday, July 13, 2015 - 18:00 - 20:00</p><p><strong>Location</strong></p><p>Microsoft - Times Square - 6th Floor<br>
11 Times Square<br>
New York, NY 10018<br>
United States<br>
See map:<a href="https://www.google.com/maps/place/11+Times+Square,+New+York,+NY+10036/@40.7567203,-73.9896494,17z/data=!3m1!4b1!4m2!3m1!1s0x89c258534f8455ad:0x55d4588f7b23a524">Google Maps</a></p>
]]></content:encoded></item><item><title>Mississippi PowerShell User Group Virtual Meeting – July 14th 2015</title><link>https://powershell.org/articles/2015-07-07-mississippi-powershell-user-group-virtual-meeting-july-14th-2015/</link><guid>https://powershell.org/articles/2015-07-07-mississippi-powershell-user-group-virtual-meeting-july-14th-2015/</guid><pubDate>Tue, 07 Jul 2015 15:19:57 +0000</pubDate><description>&lt;p&gt;Join us virtually on Tuesday, July 14th at 8:30pm Central Time when PowerShell MVP Sean Kearney will present “&lt;em&gt;&lt;strong&gt;Introduction to Windows PowerShell&lt;/strong&gt;&lt;/em&gt;”.&lt;/p&gt;
&lt;p&gt;Windows PowerShell is not a difficult system to work with however sometimes, like with anything in life, you stare at it and say “Where do I even start?”. In this session we will do a very simple overview of Windows PowerShell and what it is and how to make it useful at very simple level. It comes directly from a person who had Zero time to learn about any technology in his first IT Job, Windows PowerShell MVP, Sean Kearney. You might not master PowerShell after this session, but you certainly should be a little more comfortable to open up the door and play afterwards.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join us virtually on Tuesday, July 14th at 8:30pm Central Time when PowerShell MVP Sean Kearney will present “<em><strong>Introduction to Windows PowerShell</strong></em>”.</p><p>Windows PowerShell is not a difficult system to work with however sometimes, like with anything in life, you stare at it and say “Where do I even start?”. In this session we will do a very simple overview of Windows PowerShell and what it is and how to make it useful at very simple level. It comes directly from a person who had Zero time to learn about any technology in his first IT Job, Windows PowerShell MVP, Sean Kearney. You might not master PowerShell after this session, but you certainly should be a little more comfortable to open up the door and play afterwards.</p><p>Visit the<a href="http://mspsug.com/2015/06/30/mspsug-virtual-meeting-introduction-to-windows-powershell-on-tuesday-july-14th-at-830pm-cdt/">Mississippi PowerShell User Group</a> website to learn more about Sean and to find out more details about this month’s meeting.</p><p>The Mississippi PowerShell User Group Meetings are held online (via Microsoft Lync) on the second Tuesday of each month at 8:30pm Central Time and are free to attend. The system requirements to attend these online meetings can be found on the MSPSUG website under the “<a href="http://mspsug.com/attendee-info/">Attendee Info</a>” section.</p><p>Register via<a href="http://mspsug.eventbrite.com/">EventBrite</a> to receive the URL for this meeting.</p><p>µ</p>
]]></content:encoded></item><item><title>RabbitMQ and PowerShell</title><link>https://powershell.org/articles/2015-07-07-rabbitmq-and-powershell/</link><guid>https://powershell.org/articles/2015-07-07-rabbitmq-and-powershell/</guid><pubDate>Tue, 07 Jul 2015 11:22:36 +0000</pubDate><description>&lt;p&gt;Have you ever needed to communicate between scripts, perhaps running on different servers and in different languages?  Did you use a non-standard &amp;ldquo;messaging&amp;rdquo; solution like the file system or a SQL database? Did you try to avoid this and squeeze everything into a monolithic, delicate script?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ramblingcookiemonster.github.io/RabbitMQ-Intro/"&gt;RabbitMQ&lt;/a&gt; is a solid messaging solution that happens to have a handy REST API and .NET client, which means we can use PowerShell!&lt;/p&gt;
&lt;p&gt;Wrote a quick hit on setting up a simple RabbitMQ deployment and using PowerShell to manage the solution and send and receive messages. Thanks go to Mariusz Wojcik and Chris Duck for writing and sharing the PowerShell modules that were tweaked for this article.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Have you ever needed to communicate between scripts, perhaps running on different servers and in different languages?  Did you use a non-standard &ldquo;messaging&rdquo; solution like the file system or a SQL database? Did you try to avoid this and squeeze everything into a monolithic, delicate script?</p><p><a href="http://ramblingcookiemonster.github.io/RabbitMQ-Intro/">RabbitMQ</a> is a solid messaging solution that happens to have a handy REST API and .NET client, which means we can use PowerShell!</p><p>Wrote a quick hit on setting up a simple RabbitMQ deployment and using PowerShell to manage the solution and send and receive messages. Thanks go to Mariusz Wojcik and Chris Duck for writing and sharing the PowerShell modules that were tweaked for this article.</p><p><a href="http://ramblingcookiemonster.github.io/RabbitMQ-Intro/">RabbitMQ and PowerShell</a></p><p>Here&rsquo;s an example showing two independent PowerShell sessions talking to each other over a RabbitMQ server:</p><p><a href="https://powershell.org/wp-content/uploads/2015/07/Listener.gif"><img src="https://powershell.org/wp-content/uploads/2015/07/listener-small.gif" alt="listener-small"/><a href="https://powershell.org/wp-content/uploads/2015/07/Listener.gif"/></p><p>Is this something you could use in your solutions? Hit the link and check it out - pull requests and input would be welcome.</p><p>Cheers!</p>
]]></content:encoded></item><item><title>2015-July Scripting Games Puzzle</title><link>https://powershell.org/articles/2015-07-04-2015-july-scripting-games-puzzle/</link><guid>https://powershell.org/articles/2015-07-04-2015-july-scripting-games-puzzle/</guid><pubDate>Sat, 04 Jul 2015 08:01:13 +0000</pubDate><description>&lt;p&gt;Our July 2015 puzzler is designed to make you really think about the PowerShell parser. Normally, you can more or less ignore the parser, because if you&amp;rsquo;re typing best-practice, long-form code (no aliases, spell out parameter names, etc), the parser deals really well with everything. But knowing how the parser works is useful, because when you get into tricky syntax, the parser can be harder to work with. So we&amp;rsquo;re going to test the limits of the parser&amp;rsquo;s patience - and your skills!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Our July 2015 puzzler is designed to make you really think about the PowerShell parser. Normally, you can more or less ignore the parser, because if you&rsquo;re typing best-practice, long-form code (no aliases, spell out parameter names, etc), the parser deals really well with everything. But knowing how the parser works is useful, because when you get into tricky syntax, the parser can be harder to work with. So we&rsquo;re going to test the limits of the parser&rsquo;s patience - and your skills!</p><h2 id="instructions" class="ps-heading"><strong>Instructions</strong><a class="ps-heading-anchor" href="#instructions" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The Scripting Games have been re-imagined as a monthly puzzle. We publish puzzles the first Saturday of each month, along with solutions and commentary for the previous month&rsquo;s puzzle. You can find them all at<a href="https://powershell.org/category/announcements/scripting-games/">https://powershell.org/category/announcements/scripting-games/</a>. Many puzzles will include optional challenges, that you can use to really push your skills.</p><p><strong>To participate</strong>, add your solution to a public Gist (<a href="http://gist.github.com">http://gist.github.com</a>; you&rsquo;ll need a free GitHub account, which all PowerShellers should have anyway). After creating your public Gist, just copy the URL from your browser window and paste it, by itself, as a comment of this post. 
**Only post one entry per person. You are not allowed to come back and post corrected or improved versions. If you do, all of your posts will be ignored. **However, remember that you can always go back and edit your Gist. We&rsquo;ll always pull the most recent one when we display it, so there&rsquo;s no need to post multiple entries if you want to make an edit.</p><p>Don&rsquo;t forget the<a href="https://powershell.org/?p=2574">main rules and purpose of these monthly puzzles</a>, including the fact that you won&rsquo;t receive individual scoring or commentary on your entry.</p><p><strong>User groups are encouraged to work together</strong> on the monthly puzzles. User group leaders should submit their group&rsquo;s best entry to Ed Wilson, the Scripting Guy, via e-mail, prior to the third Saturday of the month. On the last Saturday of the month, Ed will post his favorite, along with commentary and excerpts from noteworthy entries. The user group with the most &ldquo;favorite&rdquo; entries of the year will win a grand prize from PowerShell.org.</p><h2 id="" class="ps-heading"><a class="ps-heading-anchor" href="#" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><h2 id="our-puzzle" class="ps-heading"><strong>Our Puzzle</strong><a class="ps-heading-anchor" href="#our-puzzle" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Write a one-liner that produces the following output (note that property values will be different from computer to computer; that’s fine). </p><p><code>PSComputerName ServicePackMajorVersion Version  BIOSSerial                                -------------- ----------------------- -------  ----------                                win81                                0 6.3.9600 VMware-56 4d 09 1 71 dd a9 d0 e6 46 9f</code>By definition, a one-liner is a single, long command or pipeline that you type, hitting Enter only at the very end. If it wraps to more than one physical line as you’re typing, that’s OK. But, in order to really test your skill with the parser, try to make your one-liner as short as technically possible while still running correctly.</p><p><strong>Challenges:</strong></p><p>•</p><p>Try to use no more than one semicolon total in the entire one-liner</p><p>•</p><p>Try not to use ForEach-Object or one of its aliases</p><p>•</p><p>Write the command so that it could target multiple computers (no error handling needed) if desired</p><p>•</p><p>Want to go obscure? Feel free to use aliases and whatever other shortcuts you want to produce a teeny-tiny one-liner.</p>]]></content:encoded></item><item><title>Want to Blog at PowerShell.org?</title><link>https://powershell.org/articles/2015-07-01-want-to-blog-at-powershell-org/</link><guid>https://powershell.org/articles/2015-07-01-want-to-blog-at-powershell-org/</guid><pubDate>Wed, 01 Jul 2015 22:16:52 +0000</pubDate><description>&lt;p&gt;PowerShell.org was never meant to be a small group of people doing good - it was meant to be a place where &lt;em&gt;all of us&lt;/em&gt; can do good for each other. And that&amp;rsquo;s why **everyone is invited to blog here. **&lt;br&gt;
Yup, even you.&lt;br&gt;
If you&amp;rsquo;d like blogging permissions added to your account, just e-mail webmaster@ with your site username, and we&amp;rsquo;ll make it so. Now, I do realize that a lot of folks would much rather blog in their own space, and that&amp;rsquo;s totally, 100% cool. But, if you&amp;rsquo;d like to blog here, we only have a few rules.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>PowerShell.org was never meant to be a small group of people doing good - it was meant to be a place where <em>all of us</em> can do good for each other. And that&rsquo;s why **everyone is invited to blog here. **<br>
Yup, even you.<br>
If you&rsquo;d like blogging permissions added to your account, just e-mail webmaster@ with your site username, and we&rsquo;ll make it so. Now, I do realize that a lot of folks would much rather blog in their own space, and that&rsquo;s totally, 100% cool. But, if you&rsquo;d like to blog here, we only have a few rules.</p><h2 id="your-content-is-your-content" class="ps-heading">Your Content is YOUR Content<a class="ps-heading-anchor" href="#your-content-is-your-content" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>If you ever decide you don&rsquo;t want to blog here anymore, we&rsquo;ll be happy to export your articles (in whatever form WordPress supports at the time) and give you that archive. You can then do whatever you want with your content.</p><h2 id="minimize-dupli-blogging" class="ps-heading">Minimize Dupli-Blogging<a class="ps-heading-anchor" href="#minimize-dupli-blogging" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>We ask that, if you post an article here, that you not also post it in a ton of other places. This isn&rsquo;t an &ldquo;exclusivity&rdquo; thing at all - it&rsquo;s that search engines like Google &ldquo;penalize&rdquo; sites for carrying duplicate content, and that would make it harder for people to find other resources that we offer here.<br>
That said, you&rsquo;re more than welcome to write a post elsewhere, and then write a shorter, &ldquo;introductory&rdquo; post here, pointing to your &ldquo;main&rdquo; article elsewhere. That&rsquo;s absolutely OK. We just ask that the shorter post you submit here be entirely original - that is, not just an excerpt of your longer post, but something uniquely written for this site. Again - that&rsquo;s just us trying to be square with the Goog.<br>
For example, you might write a quick &ldquo;tip&rdquo; article here that offers someone genuine learning value, and then point them to a longer article that includes additional, related material on your own site.</p><h2 id="thats-it" class="ps-heading">That&rsquo;s It<a class="ps-heading-anchor" href="#thats-it" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>PowerShell.org is meant to be a service to <em>you</em> and to the entire community. We get over 200,000 hits a month, so we&rsquo;re a pretty decent place for your writing to get more exposure - and to help more people. But we also want to be a respectful player in the community, so aside from the above ground rules, we really don&rsquo;t want to restrict you or ask you to do something that might not be good for _you. _</p><h2 id="well-also-this" class="ps-heading">Well, Also This<a class="ps-heading-anchor" href="#well-also-this" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>We&rsquo;ve also created some generic artwork that you can set as the &ldquo;Featured Image&rdquo; for your post. When your post is fresh, it&rsquo;ll cycle through the front page of PowerShell.org in the &ldquo;carousel&rdquo; at the top of the page. Having an image makes it a little sexier. Just click &ldquo;Set featured image&rdquo; and then choose one of the media items we&rsquo;ve provided. You&rsquo;ll find them in the Media Library from December 2015 (there&rsquo;s a drop-down list to filter to that month).<br>
We look forward to hearing from you!</p>
]]></content:encoded></item><item><title>I need YOUR PowerShell Stories</title><link>https://powershell.org/articles/2015-06-30-i-need-your-powershell-stories/</link><guid>https://powershell.org/articles/2015-06-30-i-need-your-powershell-stories/</guid><pubDate>Tue, 30 Jun 2015 18:57:25 +0000</pubDate><description>&lt;p&gt;We all love PowerShell and we all probably have some very entertaining stories about a situation where it really saved our butts (or caused problems). Either way, we can all tell some kind of interesting story around a memorable moment you had with PowerShell or automation in general.  I&amp;rsquo;d love to hear about them.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m looking for a short story anywhere from a few paragraphs to an entire article if you want.  The more detail the better. What kind of situation were you in? Were you under a deadline and PowerShell saved the day?  Did automation backfire in your face and you blew up your whole datacenter?  I want to know about it!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We all love PowerShell and we all probably have some very entertaining stories about a situation where it really saved our butts (or caused problems). Either way, we can all tell some kind of interesting story around a memorable moment you had with PowerShell or automation in general.  I&rsquo;d love to hear about them.</p><p>I&rsquo;m looking for a short story anywhere from a few paragraphs to an entire article if you want.  The more detail the better. What kind of situation were you in? Were you under a deadline and PowerShell saved the day?  Did automation backfire in your face and you blew up your whole datacenter?  I want to know about it!</p><p>If you have any stories around PowerShell please send them to me by contacting me via<a href="http://www.adamtheautomator.com/get-ahold-of-me/">my blog&rsquo;s contact page</a>.  I will be editing and collecting them all up soon and putting them all into a community eBook here on<a href="https://powershell.org/">powershell.org</a> as well as my blog. If you don&rsquo;t want your name attached to the story let me know.</p><p><strong>The deadline for submissions is 7/31/15.</strong></p><p>I look forward to reading your contributions!</p><ul><li><a href="http://www.adamtheautomator.com">Adam Bertram</a></li></ul>
]]></content:encoded></item><item><title>PowerShell.org, Inc. 2015 Shareholder Meeting Roundup</title><link>https://powershell.org/articles/2015-06-30-powershell-org-inc-2015-shareholder-meeting-roundup/</link><guid>https://powershell.org/articles/2015-06-30-powershell-org-inc-2015-shareholder-meeting-roundup/</guid><pubDate>Tue, 30 Jun 2015 17:55:23 +0000</pubDate><description>&lt;p&gt;I wanted to provide a quick wrap-up of the Annual Shareholder Meeting that we just concluded. We had a quorum of shareholder votes present online or by proxy, and we made some important decisions that I want to share with the community overall.&lt;/p&gt;
&lt;p&gt;One, we voted to amend the organization&amp;rsquo;s Articles of Incorporation and Bylaws to make some important structural changes. These are absolutely in line with our original &lt;em&gt;intent&lt;/em&gt; for the organization, and reflect how we&amp;rsquo;ve actually done things, but now they&amp;rsquo;re &amp;ldquo;law.&amp;rdquo; The first was to remove any legal possibility of corporate funds being paid out to shareholders; all corporate funds must be used only for corporate programs and operating expenses. We also voted that, in the event the corporation is completely dissolved, any remaining assets and proceeds will be donated to a 501(c)(3) charity.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I wanted to provide a quick wrap-up of the Annual Shareholder Meeting that we just concluded. We had a quorum of shareholder votes present online or by proxy, and we made some important decisions that I want to share with the community overall.</p><p>One, we voted to amend the organization&rsquo;s Articles of Incorporation and Bylaws to make some important structural changes. These are absolutely in line with our original <em>intent</em> for the organization, and reflect how we&rsquo;ve actually done things, but now they&rsquo;re &ldquo;law.&rdquo; The first was to remove any legal possibility of corporate funds being paid out to shareholders; all corporate funds must be used only for corporate programs and operating expenses. We also voted that, in the event the corporation is completely dissolved, any remaining assets and proceeds will be donated to a 501(c)(3) charity.</p><p>The bigger news is that we also voted to, if necessary, cancel all shares held by the corporation&rsquo;s owners - with no financial consideration - and re-incorporate as a nonprofit corporation. That means everyone who&rsquo;s invested time and money into PowerShell.org would get no money back, yet would lose their ownership of it. That&rsquo;s likely to be a necessary step for us to achieve tax-free status, which is something we&rsquo;d very much like to do moving forward. We would still have a Board of Directors, and would likely form a volunteer Community Council to help advise on program directions and other matters of governance. Legally, under US nonprofit rules, the Directors could not be paid for their service as Directors - which is exactly how we&rsquo;ve always done things.</p><p>We also announced that Steve Murawski will be joining the Board as our sixth Director. Steve&rsquo;s been instrumental in moving the community forward on DSC, and plays an important role in connecting the community to the DSC product team members, so we&rsquo;re pleased to have him.</p><p>Director Dave Wyatt, known for his work on Pester, will be working on a PowerShell.org Continuous Integration service. The theory is that you submit your code to an open-source repo, and the CI service automatically runs your Pester tests on the code. If the code passes, your code is packaged and made available for production use in a repository (similar to PowerShellGallery.com, perhaps, and potentially <em>that</em> repository depending on Microsoft&rsquo;s directions).</p><p>Our other big announcement was a 2016 plan to launch a DevOps-focused education program designed for young people and young entrants to the IT field. This program will combine self-study online training with live mentorship, and lead to as many as nine entry-level certification titles by its conclusion. Anyone will be welcome to join the program on an a-la-carte basis, meaning you could simply follow it on your own, skip the exams, or whatever. However, in partnership with vendor sponsors to be announced, we hope to provide two full-ride scholarships to the program. One will be a general scholarship, and the other will be a &ldquo;Diversity in Tech&rdquo; scholarship reserved for members of groups that are presently underrepresented in the industry. The goal of the program will be to take a recent high school graduate, or someone with similar education, and provide them the skills and knowledge needed to successfully apply for an entry-level job (such as Help Desk Technician), with a focus on pointing their career in a DevOps direction.</p><p>As you can see, our community is coming together into a significant force, and these major programs are one reason we&rsquo;d like to pursue nonprofit status - doing so will not only remove our own tax burden and leave more money for programs, but also potentially make donations to the organization tax-deductible for the donor. </p><p>All of this on top of two annual Summit events, a revamped website, the re-imagined Scripting Games, our information-packed TechLetter, and our newly launched TechSession webinars. We&rsquo;ve got a lot going on, and it couldn&rsquo;t be done without the ample and able help of our many volunteers, and the support of our wonderful community. Thank you - our most exciting years appear to be ahead of us!</p><p>Slide deck: <a href="https://powershell.org/wp-content/uploads/2015/06/Shareholder-Meeting.pptx">Shareholder Meeting</a></p>
]]></content:encoded></item><item><title>The Scripting Games: Here's What's Happening</title><link>https://powershell.org/articles/2015-06-29-the-scripting-games-heres-whats-happening/</link><guid>https://powershell.org/articles/2015-06-29-the-scripting-games-heres-whats-happening/</guid><pubDate>Mon, 29 Jun 2015 15:11:27 +0000</pubDate><description>&lt;p&gt;I know a lot of folks have been wondering about when the next Scripting Games will be. It&amp;rsquo;s a complicated answer&amp;hellip; so bear with me for a minute while I unburden my soul to you. If you prefer to just skip the explanations, you can skip a bit to see what we&amp;rsquo;re doing, part 1.&lt;/p&gt;
&lt;h2 id="the-background" class="ps-heading"&gt;&lt;strong&gt;The Background&lt;/strong&gt;&lt;a class="ps-heading-anchor" href="#the-background" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m not sure how long Microsoft&amp;rsquo;s Scripting Guys ran The Scripting Games, but it goes back at least to 2006. Back then, the focus was on VBScript, it wasn&amp;rsquo;t until a year or so later that a parallel PowerShell track was started, and another year or two before VBScript was discontinued. The Games back then were&amp;hellip; well, &lt;em&gt;games.&lt;/em&gt; They weren&amp;rsquo;t always terribly real-world, but they were fun, and they made you think.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I know a lot of folks have been wondering about when the next Scripting Games will be. It&rsquo;s a complicated answer&hellip; so bear with me for a minute while I unburden my soul to you. If you prefer to just skip the explanations, you can skip a bit to see what we&rsquo;re doing, part 1.</p><h2 id="the-background" class="ps-heading"><strong>The Background</strong><a class="ps-heading-anchor" href="#the-background" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>I&rsquo;m not sure how long Microsoft&rsquo;s Scripting Guys ran The Scripting Games, but it goes back at least to 2006. Back then, the focus was on VBScript, it wasn&rsquo;t until a year or so later that a parallel PowerShell track was started, and another year or two before VBScript was discontinued. The Games back then were&hellip; well,<em>games.</em> They weren&rsquo;t always terribly real-world, but they were fun, and they made you think.</p><p>In 2013, Last Scripting Guy Standing, Ed Wilson, turned the Games over to PowerShell.org. Ed was, to put it bluntly, exhausted. Coming up with nine events in two tracks, let alone grading the thousands of entries, wrangling the assistant judges, begging for prizes - it was a couple of months out of his life, during which he was still expected to do his full-time job. So we stepped in, mindful of the trust he was placing in us, to take over and keep the tradition alive.</p><p>We&rsquo;ve tried some variations on the Games, but two things became abundantly clear:</p><ol><li><p>The real value people like in the Games is getting the individual expert feedback and scoring.</p></li><li><p>The one thing we simply can&rsquo;t feasibly provide is individual expert feedback and scoring.</p></li></ol><p>Seriously, we&rsquo;d go out and recruit a couple of dozen judges, but it&rsquo;s just mind-numbing to look through entry after entry after entry after you&rsquo;ve already put in a full day of work at your job. YOU wouldn&rsquo;t want to do it. So in the end, it&rsquo;d always be the same 4-5 stalwarts who slaved away for 40 or more hours - not kidding - to make sure everyone got a grade and a comment. It&rsquo;s just insane. None of us who&rsquo;ve done it for a few years ever wants to do it again, even if it&rsquo;s the one thing that would save us from our robotic conquerors. We can&rsquo;t handle it.</p><p>We tried to do community scoring and that was a huge non-popular-thing-to-do. People wanted &ldquo;the experts&rdquo; giving feedback, not some schmuck from the next cube over. Which we understand, but it doesn&rsquo;t mean we can physically deliver what people are after.</p><h2 id="what-we-thought-about-trying" class="ps-heading"><strong>What We Thought About Trying</strong><a class="ps-heading-anchor" href="#what-we-thought-about-trying" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>So we thought about a Games where we went back to focusing on puzzles. Believe me, the original Scripting Guys weren&rsquo;t reviewing, grading, and commenting on every submission. Most entries went in via e-mail, and they picked the ones they thought were winners. But the Games evolved to the point where people expected that individual feedback.</p><p>So when we shared our draft plans with a few folks, their knee-jerk reaction was universally, &ldquo;WTF?!??&rdquo; They struggled with the idea of a Games that didn&rsquo;t include individual feedback. And once we started being honest with ourselves, we could appreciate the value in that, and how people would react when the Games eliminating the judging.</p><p>But we still can&rsquo;t do the individual judging. There just aren&rsquo;t enough experts with enough time. We&rsquo;ve all got 50-hour a week jobs just like you do, and we&rsquo;re talking THOUSANDS of submissions that we&rsquo;re supposed to do instead of hanging out with our friends and families. </p><p>So&hellip; there we were. Kind of stuck between a rock and a hard place.</p><h2 id="here" class="ps-heading"><strong>Here&rsquo;s What We&rsquo;re Doing, Part 1</strong><a class="ps-heading-anchor" href="#here" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>We&rsquo;re going to pivot the Scripting Games into a monthly event, sort of. Each month, we&rsquo;ll publish a puzzle. They won&rsquo;t all necessarily be real-world, but they&rsquo;ll all be designed to make you think about something important. We&rsquo;ll try to describe<em>why</em> it&rsquo;s important, too, since in some cases it won&rsquo;t be super-obvious. You&rsquo;ll get a full month to work on your entry, and you&rsquo;ll be encouraged to post it (we&rsquo;ll provide posting instructions). </p><p>We&rsquo;re encouraging user groups to occasionally or regularly make the monthly puzzle a part of their meetings. We&rsquo;re encouraging them to publicize when they&rsquo;re doing so, and if they allow virtual visitors, then you&rsquo;ll have the opportunity to share your solution with a group of peers, work on a solution together, and give each other feedback in real-time. That&rsquo;s a hugely valuable exercise, by the way, and I encourage everyone to take advantage of the opportunity if they can. You don&rsquo;t work in this field alone - start to make some friends and colleagues, even if they&rsquo;re across the globe.</p><p>The following month, we&rsquo;ll post a new puzzle. We&rsquo;ll also post a wrap-up for the preceding month&rsquo;s puzzle. In it, we&rsquo;ll offer a sample solution and an explanation for it. When possible, we&rsquo;ll offer Celebrity Participant solutions, often from members of the PowerShell team or from other MVPs. And, when we have volunteers willing to do so, we&rsquo;ll post a &ldquo;stream of consciousness&rdquo; article that shares how that person tackled the problem and came to their solution. Finally, we&rsquo;ll include some analysis of the entries people posted, including things we especially liked, and things we didn&rsquo;t like so much.</p><p>All of that should provide the learning opportunity that the Games were originally created for. You&rsquo;ll have to use some critical thinking, some out-of-the-box skills, and some cleverness. You&rsquo;ll get to see how other people approached the problem, and gain some new perspective. No, you won&rsquo;t get an individual score or commentary - but this isn&rsquo;t a certification exam, and it isn&rsquo;t intended as a personal benchmark for YOU. It&rsquo;s a way for us to all learn together.</p><p>And, best of all, the Scripting Games&rsquo; monthly puzzle will create an opportunity for the Games to resurface on The Scripting Guy&rsquo;s blog, as Ed has offered to run the monthly puzzles.</p><h2 id="here-1" class="ps-heading"><strong>Here&rsquo;s What Else We&rsquo;re Doing, Part 2</strong><a class="ps-heading-anchor" href="#here-1" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>We haven&rsquo;t given up on the idea of an annual, fast-paced event that includes individual feedback. It&rsquo;s going to have to be a new set of volunteers who tackle that, though, and we have a few people thinking about it. I imagine it&rsquo;ll be a larger-scale challenge, so that you can exercise several sets of skills and knowledge and once, and get feedback on something that&rsquo;s perhaps more real-world than a puzzle. I can&rsquo;t offer any timelines or promises on this; it&rsquo;s a huge undertaking, and we&rsquo;re still running ideas around. Heck, if you think you have a solution, share them in Web Site Feedback forum on PowerShell.org. </p><p>However, if you offer an solution, be prepared to volunteer to implement it. What we don&rsquo;t want are, &ldquo;here&rsquo;s what I&rsquo;d like YOU do to, and I&rsquo;ll just sit back and consume that.&rdquo; &ldquo;Solutions,&rdquo; for us, are PEOPLE, not ideas. I myself am not a community, nor are my fellow PowerShell.org Board members. ALL OF US are a community - so if this is something the community wants, the community has to pull together to build it out.</p><h2 id="a-user-group-call-to-action" class="ps-heading"><strong>A User Group CALL TO ACTION</strong><a class="ps-heading-anchor" href="#a-user-group-call-to-action" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Do you run or participate in a PowerShell User Group? Well, today&rsquo;s your lucky day. First - why not make the monthly Scripting Games puzzle a part of your user group meetings? Invite remote visitors to come along for the ride - increase participation by putting code front and center.</p><p>And here&rsquo;s a special offer just for user groups: We&rsquo;ll be publishing the monthly puzzles on the beginning of the month (likely the first Saturday). As a user group, you can send your best join submission right to Ed Wilson, The Scripting Guy. He&rsquo;ll select the most noteworthy user group submissions, publish them, and comment on it, raising visibility for your group and its members. He&rsquo;ll also publish selected excerpts that he finds noteworthy from other user group entries. Caveats, here: only the registered user group leader will be able to submit the group&rsquo;s entry. So if you&rsquo;re not listing your user group on PowerShell.org, consider doing so.</p><p>So now there&rsquo;s a HUGE reason to get involved with a user group, since it&rsquo;s another opportunity for you to work on code together, and have that code published in one of the highest-profile PowerShell blogs in existence! </p><p>And to sweeten that pot even more - the user group that has the most entries selected over the year will be eligible for a grand prize, courtesy of PowerShell.org. You see (and this was all Ed&rsquo;s idea), we really want to give people more reasons to create, run, and participate in user groups. They&rsquo;re really the best way to make community happen. It all starts at a local level, even if you&rsquo;re attending remotely.</p><h2 id="here-2" class="ps-heading"><strong>Here&rsquo;s Something YOU Can Do To Help</strong><a class="ps-heading-anchor" href="#here-2" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Offer to write the monthly puzzle. Seriously. Drop a line to Admin over here at PowerShell.org, and include an RTF (not Word, please) document with your monthly puzzle. You&rsquo;ll get credit, and you&rsquo;ll be giving back to the community that&rsquo;s supported you as you learned PowerShell. Do it for the children.</p><h2 id="here-3" class="ps-heading"><strong>Here&rsquo;s Something Else YOU Can Do</strong><a class="ps-heading-anchor" href="#here-3" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>We&rsquo;ve heard over and over that expert reviews are valuable to people. You know, you can probably have an expert review without having a Scripting Games. Get together with a handful of colleagues, and invite your favorite PowerShell expert to a Code Review Hour. Have some code ready for them, and do a Skype screen-share or something and let them pick apart what you&rsquo;ve done. PAY THEM. Offer $100 or $200 an hour, which is a going rate depending on the level of expertise you&rsquo;re getting. You and your friends can pool your funds. Heck, with five people offering $20 each, you&rsquo;ve got $100, right? And if that expert review is truly valuable to you - well, &ldquo;valuable&rdquo; means you can put a value on it, and $100 an hour ain&rsquo;t much.</p><p>If PowerShell.org can do something to facilitate these, like helping you contact interested experts, let me know in the Web Site Feedback forum, and I&rsquo;ll figure something out.</p><h2 id="in-the-meantime" class="ps-heading"><strong>In the Meantime</strong><a class="ps-heading-anchor" href="#in-the-meantime" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>So while you&rsquo;re waiting on that first Scripting Games, Monthly Edition (expect it in July), start thinking of the kinds of puzzles you&rsquo;d like to see. Ones that make people think, even if they don&rsquo;t necessarily have one-and-only-one correct answer. Don&rsquo;t just CONSUME community, help CREATE it by offering to write one of the monthly Puzzlers. And start thinking how you, and we, all together, can do a better job AS A COMMUNITY of providing peer code reviews, code feedback, and other elements. I look forward to your ideas.</p>
]]></content:encoded></item><item><title>Decorating PowerShell Objects</title><link>https://powershell.org/articles/2015-06-22-decorating-powershell-objects/</link><guid>https://powershell.org/articles/2015-06-22-decorating-powershell-objects/</guid><pubDate>Mon, 22 Jun 2015 12:44:21 +0000</pubDate><description>&lt;p&gt;Ever wonder how PowerShell seems to know how to format objects? When you run&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Get-ChildItem &lt;/code&gt;or&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Get-WmiObject &lt;/code&gt;, you only see a few key properties, but a wealth of other information is available through commands like&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Select-Object &lt;/code&gt;and&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Get-Member &lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Have you ever written a PowerShell function that you nearly always pipe to&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Format-Table &lt;/code&gt;? Wouldn&amp;rsquo;t it be nice to specify some default properties and force them into a table?&lt;/p&gt;
&lt;p&gt;Stop by for &lt;a href="http://bit.ly/DecoratePSObjects"&gt;a quick hit on how to decorate your PowerShell objects&lt;/a&gt; with type names and formatting, including a re-usable tool to abstract out some of the details.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Ever wonder how PowerShell seems to know how to format objects? When you run</p><p><code>Get-ChildItem</code>or</p><p><code>Get-WmiObject</code>, you only see a few key properties, but a wealth of other information is available through commands like</p><p><code>Select-Object</code>and</p><p><code>Get-Member</code>.</p><p>Have you ever written a PowerShell function that you nearly always pipe to</p><p><code>Format-Table</code>? Wouldn&rsquo;t it be nice to specify some default properties and force them into a table?</p><p>Stop by for<a href="http://bit.ly/DecoratePSObjects">a quick hit on how to decorate your PowerShell objects</a> with type names and formatting, including a re-usable tool to abstract out some of the details.</p><p>Cheers!</p>
]]></content:encoded></item><item><title>Walkthrough: An example of how I write PowerShell functions</title><link>https://powershell.org/articles/2015-06-19-walkthrough-an-example-of-how-i-write-powershell-functions/</link><guid>https://powershell.org/articles/2015-06-19-walkthrough-an-example-of-how-i-write-powershell-functions/</guid><pubDate>Fri, 19 Jun 2015 14:59:15 +0000</pubDate><description>&lt;p&gt;A couple of days ago I posted a blog article titled &amp;ldquo;&lt;a href="http://mikefrobbins.com/2015/06/17/powershell-function-test-consolecolor-provides-a-visual-demonstration-of-the-foreach-scripting-construct/"&gt;PowerShell function: &lt;em&gt;Test-ConsoleColor&lt;/em&gt; provides a visual demonstration of the foreach scripting construct&lt;/a&gt;&amp;rdquo; and today I thought I would walk you through that function step by step since it&amp;rsquo;s what I consider to be a well written PowerShell function.&lt;/p&gt;
&lt;p&gt;It starts out by using the &lt;a href="https://technet.microsoft.com/en-us/library/hh847765.aspx"&gt;#Requires&lt;/a&gt; statement to require at least PowerShell version 3 or it won&amp;rsquo;t run. It also requires that the &lt;a href="https://pscx.codeplex.com/"&gt;PowerShell Community Extensions&lt;/a&gt; module be installed since it uses a function from that module and continuing without it only leads to errors:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>A couple of days ago I posted a blog article titled &ldquo;<a href="http://mikefrobbins.com/2015/06/17/powershell-function-test-consolecolor-provides-a-visual-demonstration-of-the-foreach-scripting-construct/">PowerShell function:<em>Test-ConsoleColor</em> provides a visual demonstration of the foreach scripting construct</a>&rdquo; and today I thought I would walk you through that function step by step since it&rsquo;s what I consider to be a well written PowerShell function.</p><p>It starts out by using the<a href="https://technet.microsoft.com/en-us/library/hh847765.aspx">#Requires</a> statement to require at least PowerShell version 3 or it won&rsquo;t run. It also requires that the<a href="https://pscx.codeplex.com/">PowerShell Community Extensions</a> module be installed since it uses a function from that module and continuing without it only leads to errors:</p><p><code>#Requires -Version 3.0 -Modules Pscx</code>The function is then declared using a<a href="https://msdn.microsoft.com/en-us/library/dd878270(v=vs.85).aspx#SD02">Pascal case name</a> that uses an<a href="https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).aspx">approved verb</a> along with a<a href="https://msdn.microsoft.com/en-us/library/dd878270(v=vs.85).aspx#SD01">singular noun</a>.<a href="https://technet.microsoft.com/en-us/library/hh847834.aspx">Comment based help</a> is provided just inside the function declaration. This isn&rsquo;t the only location where comment based help can be specified at, but it&rsquo;s my preferred location for it.</p><p><a href="http://mikefrobbins.com/2015/06/19/walkthrough-an-example-of-how-i-write-powershell-functions/">Click here</a>
 to be redirected to the original post of this article on the author’s blog site where you can read the remainder of the article.</p><p>µ</p>
]]></content:encoded></item><item><title>Philadelphia PowerShell User Group Meeting – July 7th 2015</title><link>https://powershell.org/articles/2015-06-16-philadelphia-powershell-user-group-meeting-july-7th-2015/</link><guid>https://powershell.org/articles/2015-06-16-philadelphia-powershell-user-group-meeting-july-7th-2015/</guid><pubDate>Wed, 17 Jun 2015 01:30:48 +0000</pubDate><description>&lt;p&gt;Join us Tuesday, July 7th when PhillyPosh members &lt;a href="https://twitter.com/Iczer1"&gt;John Mello&lt;/a&gt; and &lt;a href="https://twitter.com/techguytj"&gt;TJ Turner&lt;/a&gt; will be presenting. John will be giving a presentation on the new ConvertFrom-String cmdlet in the PowerShell V5 preview. Afterwards TJ Turner will be giving a presentation entitled &amp;ldquo;What&amp;rsquo;s in your toolbox?”.&lt;/p&gt;
&lt;p&gt;Please &lt;a href="https://www.eventbrite.com/e/phillyposh-july-7th-2015-tickets-17420823151"&gt;
register
&lt;/a&gt; if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.eventbrite.com/e/phillyposh-july-7th-2015-tickets-17420823151?ref=ebtnebregn"&gt;&lt;img src="https://www.eventbrite.com/custombutton?eid=17420823151" alt="Eventbrite - PhillyPoSH July 7th 2015"&gt;&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join us Tuesday, July 7th when PhillyPosh members<a href="https://twitter.com/Iczer1">John Mello</a> and<a href="https://twitter.com/techguytj">TJ Turner</a> will be presenting. John will be giving a presentation on the new ConvertFrom-String cmdlet in the PowerShell V5 preview. Afterwards TJ Turner will be giving a presentation entitled &ldquo;What&rsquo;s in your toolbox?”.</p><p>Please <a href="https://www.eventbrite.com/e/phillyposh-july-7th-2015-tickets-17420823151">
register</a> if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation.</p><p><a href="http://www.eventbrite.com/e/phillyposh-july-7th-2015-tickets-17420823151?ref=ebtnebregn"><img src="https://www.eventbrite.com/custombutton?eid=17420823151" alt="Eventbrite - PhillyPoSH July 7th 2015"/></p>
]]></content:encoded></item><item><title>Why Remoting vs. SSH Isn't Even a Thing</title><link>https://powershell.org/articles/2015-06-09-why-remoting-vs-ssh-isnt-even-a-thing/</link><guid>https://powershell.org/articles/2015-06-09-why-remoting-vs-ssh-isnt-even-a-thing/</guid><pubDate>Tue, 09 Jun 2015 21:13:04 +0000</pubDate><description>&lt;p&gt;As you&amp;rsquo;ve probably read, Microsoft &lt;a href="http://blogs.msdn.com/b/powershell/archive/2015/06/03/looking-forward-microsoft-support-for-secure-shell-ssh.aspx"&gt;recently announced&lt;/a&gt; that they&amp;rsquo;re getting on board with &lt;a href="http://en.wikipedia.org/wiki/Secure_Shell"&gt;SSH&lt;/a&gt;, and that they&amp;rsquo;ve plans to, in some future-and-unspecified version of Windows, include a default SSH server and client. Some folks have taken to the Twittersphere rejoicing this decision, even though I suspect they&amp;rsquo;ve no idea why Microsoft is doing it. Others have suggested that this is the downfall of Remoting (management via &lt;a href="http://en.wikipedia.org/wiki/WS-Management"&gt;WS-MAN&lt;/a&gt;), because who would want that when you&amp;rsquo;ve got SSH?&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>As you&rsquo;ve probably read, Microsoft<a href="http://blogs.msdn.com/b/powershell/archive/2015/06/03/looking-forward-microsoft-support-for-secure-shell-ssh.aspx">recently announced</a> that they&rsquo;re getting on board with<a href="http://en.wikipedia.org/wiki/Secure_Shell">SSH</a>, and that they&rsquo;ve plans to, in some future-and-unspecified version of Windows, include a default SSH server and client. Some folks have taken to the Twittersphere rejoicing this decision, even though I suspect they&rsquo;ve no idea why Microsoft is doing it. Others have suggested that this is the downfall of Remoting (management via<a href="http://en.wikipedia.org/wiki/WS-Management">WS-MAN</a>), because who would want that when you&rsquo;ve got SSH?</p><p>And so now I have to write this.</p><p>First of all, let&rsquo;s speculate - with some objectivity - why Microsoft is getting involved with SSH at all. My personal belief is that an SSH client is simply massively overdue. Literally every other business-grade operating system on the entire planet comes with a decent command-line SSH client, so for pity&rsquo;s sake, let&rsquo;s get Windows one, too. Being able to reach out to Linux boxes, routers, switches, and all manner of other devices isn&rsquo;t a convenience, it&rsquo;s a necessity.</p><p>The SSH server piece is a little more interesting. My suspicion is that Microsoft wants to further enable management systems that are primarily built for Linux to log into Windows and manage Windows boxes. If you&rsquo;ve got Ansible or Salt, for example, then you know that they revolve in part around using SSH to log into nodes and run commands. Fine - Microsoft can enable that on Windows if it&rsquo;ll help.</p><p>But.</p><p>Let&rsquo;s be clear on why making a decision between Remoting and SSH isn&rsquo;t actually a decision.</p><p>SSH is, basically, Telnet*. You send characters to the remote computer, and it sends characters back. It&rsquo;s built entirely around stdin and stdout. On a Unix system, this works beautifully, because at the end of the day everything on Unix is a process, a file, or a folder. It&rsquo;s all text, all the way down to the turtles. SSH is great at accessing text. Now, _text itself _isn&rsquo;t necessarily a wonderful management API, because it requires administrators to become experts at string manipulation and slicing, but in the Unix world that&rsquo;s a de facto skill. In other words, _for the type of management API that Unix uses, SSH is a wonderful data transport mechanism. _</p><p>(*yes, I know that SSH has evolved tremendously beyond Telnet - but for the purpose of discussing how SSH moves data back and forth, Telnet is a useful analogy. I know SSH does a lot more than just the Telnet-y bits. That&rsquo;s less relevant to my discussion, but thanks to the SSH fans who&rsquo;ve pointed it out. I&rsquo;m simplifying so I can get to the point - I don&rsquo;t regard SSH as bad or weak.)</p><p>Windows, on the other hand, is entirely different. It is based on APIs. Data doesn&rsquo;t move between bits of software as a text stream; it moves as a data structure called an _object. _Windows APIs all assume that you&rsquo;re passing objects back and forth, and text parsing-and-slicing isn&rsquo;t part of the deal. When an API gets input, it expects the computer name to be in the ComputerName property of an input object, not hiding in columns 26 to 46 of a text block. SSH, therefore, is <em>not</em> a good mechanism for transmitting the data structures that Windows uses for management.</p><p>Remoting, on the other hand, <em>is</em> a good mechanism. It has built-in code for serializing objects into XML, and then deserializing them back into objects on the other end. Like SSH, Remoting natively supports encryption. Unlike SSH, which is really just a remote console, Remoting wasn&rsquo;t built with synchronous operations in mind. Remoting is perfectly happy to fire off a command and then wait until the data comes back some time later. Remoting&rsquo;s underlying protocol, WS-Management, as implemented by the WinRM service, is capable of connecting to far more than just PowerShell, too. CIM and OMI, for example, communicate using WS-MAN. So, unlike SSH, Remoting (well, its underlying infrastructure) connects <em>software endpoints</em> for manageability. That&rsquo;s important in Windows, because those endpoints are where we call the APIs we need to get stuff done.</p><p>SSH and Remoting (and WS-MAN) solve different problems. The fact that both solutions involve transmitting encrypted bits across the wire is <em>literally</em> the only thing they have in common. Yes, when you use <strong>Enter-PSSession</strong> to interactively connect to a remote machine, it looks and feels a lot like SSH in how it works. It isn&rsquo;t. It&rsquo;s <em>entirely and completely</em> different, and if you don&rsquo;t know why, you should learn.</p><p>(Briefly, Enter-PSSession doesn&rsquo;t send one character out, and then receive that same character echo back. Your typing occurs entirely inside your <em>local console</em>, where you can have rich tools like PSReadLine running. When you hit Enter, what you&rsquo;ve typed is transmitted <em>all at once</em> to the remote box. It runs your commands, serializes the results into XML, and sends &rsquo;em. Your console deserializes the XML into objects, and <em>your local formatting system</em> takes over to display those objects. SSH assumes a dumb client; Remoting and Enter-PSSession require a smarter client.)</p><p>Remoting and SSH enable different functionality. Neither is better than the other, any more than cars are better than hot tubs. Both have their place, and both have strengths and weaknesses that devolve primarily from the operating system environments in which they were born. Microsoft <em>is not implementing an SSH server</em> because they believe it&rsquo;s the best way to administer Windows; they&rsquo;re doing it to enable some customer scenarios that, previously, were unnecessarily difficult. Rich management of Windows will always be easier to accomplish using Remoting, but if your management solution can only do SSH, at least you&rsquo;ll be able to do what that can do.</p><p>Keep in mind that Microsoft&rsquo;s also provided a reference implementation for WS-MAN running on Linux, because if your solution supports WS-MAN - as Microsoft&rsquo;s do - then it&rsquo;s nice to be able to use that cross-platform.</p><p>Now, another argument is, &ldquo;my security people won&rsquo;t approve Remoting, but they already approve SSH, so we should just use that.&rdquo; First, your &ldquo;security&rdquo; people (and they&rsquo;re clearly anything but secure or people) have also probably allowed RDP for managing servers, which is just dumb. Choosing to use an inappropriate tool just because the organization won&rsquo;t grouse about it suggests that you have H.R. problems. Either someone in &ldquo;security&rdquo; should be fired, or you should be applying for new jobs at companies that aren&rsquo;t stupid. SSH wasn&rsquo;t <em>always</em> approved; someone had to understand it, what it did, how it worked, and become comfortable with it. They&rsquo;re going to need to do that with WS-MAN whether they like it or not, because it&rsquo;s _what Microsoft is going to fixate on, exclusively, for proper management of their operating system. _You&rsquo;re not going to be able to properly manage Windows via SSH, trust me. Microsoft investing some time in OpenSSH is not the same as Microsoft investing time to re-architect their entire operating system around Telnet as a management communications protocol. If you don&rsquo;t believe me on that, then you&rsquo;re just being obstinate. Which is fine, but time will prove me right on this. So, if your organization doesn&rsquo;t &ldquo;like&rdquo;  Remoting, fix your organization.</p><p>And SSH will be another tool in our toolbox. Hopefully, you&rsquo;ll use it when it&rsquo;s the very best thing to do, and use other tools when <em>they</em> offer the best way to accomplish a particular task.</p>
]]></content:encoded></item><item><title>Trust, but Verify</title><link>https://powershell.org/articles/2015-06-08-trust-but-verify/</link><guid>https://powershell.org/articles/2015-06-08-trust-but-verify/</guid><pubDate>Tue, 09 Jun 2015 00:12:33 +0000</pubDate><description>&lt;p&gt;The PowerShell code you write can turn up in interesting places. Production services might rely on it. Your co-workers might take a peak and borrow ideas from it. You might decide to share it online. Someone might see your code online and use it in their own solutions.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ramblingcookiemonster.github.io/Trust-but-Verify/"&gt;Hit the link&lt;/a&gt; for a quick bit on how we can help create more reliable, consistent, and secure solutions. Simplified to one line: always ask yourself &amp;ldquo;what could go wrong?&amp;rdquo;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The PowerShell code you write can turn up in interesting places. Production services might rely on it. Your co-workers might take a peak and borrow ideas from it. You might decide to share it online. Someone might see your code online and use it in their own solutions.</p><p><a href="http://ramblingcookiemonster.github.io/Trust-but-Verify/">Hit the link</a> for a quick bit on how we can help create more reliable, consistent, and secure solutions. Simplified to one line: always ask yourself &ldquo;what could go wrong?&rdquo;</p><p>What do you think? Is this over the top? Do you have any funny or awe-inspiring-train-wreck stories that resulted from assumptions around PowerShell or other code?</p><p>I&rsquo;ve been lucky so far. My scariest moment? A while back, I was testing some code against a test server or two with<a href="https://github.com/RamblingCookieMonster/Invoke-Parallel">Invoke-Parallel</a>. Oops! The code to pull test systems hit a bug, and pulled all computer accounts. A number of domain controllers were hit before I could press ctrl+c. After recovering from a minor heart attack, I realized the code was benign, quickly fixed the bug, and broke the bad habit of running with a high-privilege account.</p><p>Cheers!</p>
]]></content:encoded></item><item><title>PowerShell.org: Where We've Been, Our New Look, Where We're Going</title><link>https://powershell.org/articles/2015-06-08-powershell-org-where-weve-been-our-new-look-where-were-going/</link><guid>https://powershell.org/articles/2015-06-08-powershell-org-where-weve-been-our-new-look-where-were-going/</guid><pubDate>Mon, 08 Jun 2015 18:29:11 +0000</pubDate><description>&lt;p&gt;PowerShell.org has come a long way, both spiritually and physically, since our inception in September of 2012. Let&amp;rsquo;s look at some screen grabs from the &lt;a href="http://archive.org"&gt;Internet Archive&lt;/a&gt;, and take a stroll through our history.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>PowerShell.org has come a long way, both spiritually and physically, since our inception in September of 2012. Let&rsquo;s look at some screen grabs from the<a href="http://archive.org">Internet Archive</a>, and take a stroll through our history.</p><h2 id="before-powershellorg" class="ps-heading">Before PowerShell.org<a class="ps-heading-anchor" href="#before-powershellorg" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Not long after PowerShell&rsquo;s product launching 2006, I convinced my employer at the time, SAPIEN Technologies, as well as Quest Software, Dell, and Microsoft to help fund the launch of a new PowerShell community. Creatively named PowerShellCommunity.org, it was a DotNetNuke site, launched around 2007.</p><p>The idea was to create something central that could serve as a jumping-off point to the rest of the PowerShell community. Criticized by some for the &ldquo;toilet bowl water&rdquo; color scheme (it was changed to a blue version in 2009), it saw moderate success. Unfortunately, for a variety of reasons, it never really caught on.</p><p>Back in 2007, PowerShell.org didn&rsquo;t look even that nice.</p><p>That was before I acquired the PowerShell.org domain name, in fact. But after speaking with some of the PowerShell product team members, myself and the other PowerShell.org founders (including Kirk Munro, Richard Siddaway, and Jeff Hicks) knew we needed a standalone, independent entity in order to accomplish some of what we wanted. So I purchased the PowerShell.org name, and we started getting a new site ready.</p><h2 id="an-org-is-born-2012" class="ps-heading">An Org is Born: 2012<a class="ps-heading-anchor" href="#an-org-is-born-2012" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>And so in 2012, PowerShell.org was born. As of March 2013, it had a pretty basic look. At that time, our front page led to the different, distinct applications that made up the website - primarily the forums, along with pages for the Scripting Games and PowerShell Summit. We&rsquo;d moved quickly, taking on the Games and starting the Summit at the behest of Microsoft. Our little community was starting to chug along, based largely on the selfless efforts of its early volunteers. We had strong support from some early, dedicated sponsors, and we started to make an impact right away. Although there are a number of incredible PowerShell resources online, they were a bit scattered. The friendliness of Q&amp;A forums, in particular, was pretty variable. We wanted to offer a friendly starting point in the community, and then help guide people to the other offerings that were out there.</p><h2 id="settling-in-2014" class="ps-heading">Settling In: 2014<a class="ps-heading-anchor" href="#settling-in-2014" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Yeah, we were a little rough-looking back then. But by a year later, we&rsquo;d started to refine our look. Our new &ldquo;metro&rdquo; logo and a cleaner look went along with our integration into a single platform for everything. As you can see, we&rsquo;d started to make big strides in supporting local user groups, and welcomed the PowerScripting Podcast (started in 2006) to our site. We&rsquo;d finished our first PowerShell Summit, and in March 2014 were getting ready for our second one - and our first European Summit, later that year. Our dream of helping to foster community was coming true - we just had to keep plugging at it.</p><h2 id="more-community-2015" class="ps-heading">More Community: 2015<a class="ps-heading-anchor" href="#more-community-2015" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Fast forward a year&hellip; Now, we&rsquo;ve got more user groups featured! More volunteers authoring articles! And we&rsquo;ve launched our DSC Hub, providing quick access to new ebooks, a GitHub repo, and learning resources. By March 2015, we&rsquo;ve got three PowerShell Summit events under our belts, and three Scripting Games events. We&rsquo;ve got our first North American Summit outside Washington coming up in Charlotte, and are looking ahead to our second European Summit in Stockholm. We&rsquo;re welcoming 150,000 visitors a month to the site, and we&rsquo;ve launched a series of TechSession webinars. We&rsquo;ve got a TechLetter newsletter with a dozen issues published, and almost a dozen free ebooks authored by members of the community. Our site look hasn&rsquo;t changed much, but we&rsquo;re doing a lot more with it.</p><p>But there was still some valid criticism. The site wasn&rsquo;t very small-screen friendly. Posting code in the forums was a little touch-and-go. Major elements like the Summit, our free ebooks, and the incredible work done by our volunteer authors were still kind of buried.</p><h2 id="a-new-us-2015" class="ps-heading">A New Us: 2015<a class="ps-heading-anchor" href="#a-new-us-2015" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>One last leap forward in time - about a year and 3 months, to June 2015. In other words, we&rsquo;re in the present, and PowerShell.org is ready to continue moving forward.</p><p>Our new look is fresher, cleaner, and more modern. We&rsquo;re doing more to highlight the great work being done by the community, with a formal Articles area for our volunteer writers, better exposure of the forums, and a fully-responsive theme that&rsquo;s small-screen friendly. Our forums have a great new code colorizer, and supports pasting of Gist snippets simply by adding the URL to the post. Forums posts can now even be marked as &ldquo;resolved,&rdquo; to help future generations better identify answers when they come searching.</p><p>But beyond our look, I feel that we&rsquo;ve accomplished <em>so much</em> in terms of fostering a true community.</p><ul><li>Our volunteers take on everything from writing articles, editing the newsletter, producing ebooks, running the website, and organizing webinars. And we&rsquo;re always looking for more, especially writers, so chime in!</li><li>We&rsquo;ve successfully produced four PowerShell Summit events globally, with a fifth on the way this September, and 2016 already in planning.</li><li>We&rsquo;re back with a new edition of the Scripting Game this summer, in what we believe will be a long-term-sustainable format that offers fun and challenge.</li><li>Our TechSession webinars are getting traction, and we&rsquo;re starting to build out a reliable monthly schedule of free educational offerings.</li><li>Our free ebooks have been downloaded more than 50,000 times, making them a collective set of bestsellers by any calculation.</li><li>We&rsquo;re helping support almost two dozen independent user groups by giving them a space to publish their meeting notes, meeting announcements, and other details.</li><li>The PowerScripting Podcast continues to draw thousands of listeners to each episode, and we&rsquo;re proud to offer them some space from which to do it, along with financial support.</li></ul><p>I&rsquo;m proudest of the fact that _I&rsquo;m not doing most of these things _- you, in the community, are. You&rsquo;re helping answer questions in the forums, you&rsquo;re driving demand for the PowerShell Summit, and you&rsquo;re writing resources for our DSC Repository. PowerShell.org is achieving exactly what its founders always intended: providing a gathering place for community, because we know that once you all have a place to come together, you&rsquo;ll do amazing things.</p><p>It&rsquo;s been an exciting three years since we began, and I can&rsquo;t wait to see where you take us next.</p>]]></content:encoded></item><item><title>Mississippi PowerShell User Group Virtual Meeting – June 9th 2015</title><link>https://powershell.org/articles/2015-06-08-mississippi-powershell-user-group-virtual-meeting-june-9th-2015/</link><guid>https://powershell.org/articles/2015-06-08-mississippi-powershell-user-group-virtual-meeting-june-9th-2015/</guid><pubDate>Mon, 08 Jun 2015 13:46:23 +0000</pubDate><description>&lt;p&gt;Join us virtually on Tuesday, June 9th at 8:30pm Central Time when PowerShell MVP Trevor Sullivan will present
&lt;em&gt;&lt;strong&gt;“Creating Object-Oriented Scripts using PowerShell Classes”&lt;/strong&gt;&lt;/em&gt;
.&lt;/p&gt;
&lt;p&gt;During this deep, technical discussion, we will take a look at PowerShell classes, and then authoring PowerShell Desired State Configuration (DSC) Resource using PowerShell v5 classes. We’ll also explore leveraging PowerShell DSC on Microsoft Azure infrastructure (IaaS) virtual machines using the Azure VM DSC Extension. This session assumes some previous knowledge of PowerShell &amp;amp; DSC, so make sure you’re familiar with the basics ahead of time!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join us virtually on Tuesday, June 9th at 8:30pm Central Time when PowerShell MVP Trevor Sullivan will present<em><strong>“Creating Object-Oriented Scripts using PowerShell Classes”</strong></em>
.</p><p>During this deep, technical discussion, we will take a look at PowerShell classes, and then authoring PowerShell Desired State Configuration (DSC) Resource using PowerShell v5 classes. We’ll also explore leveraging PowerShell DSC on Microsoft Azure infrastructure (IaaS) virtual machines using the Azure VM DSC Extension. This session assumes some previous knowledge of PowerShell &amp; DSC, so make sure you’re familiar with the basics ahead of time!</p><p>**About Trevor
**
Trevor Sullivan is an 11 year veteran in the IT industry, and a multi-year recipient of the Microsoft Most Valuable Professional (MVP) award for Windows PowerShell automation. With 8 years of automation experience with PowerShell, and 3 years of experience working with the Microsoft Azure public cloud, Trevor is uniquely equipped to offer cost and process efficiency enhancements to nearly any area of the business. Trevor is a passionate community member, and seeks to spread awareness and knowledge about various technical solutions to business problems through a variety of social media channels. You can find out more about Trevor at<a href="http://trevorsullivan.net/">http://trevorsullivan.net</a>
and <a href="http://twitter.com/pcgeek86">http://twitter.com/pcgeek86</a>
.</p><p>Register via<a href="http://mspsug.eventbrite.com/">EventBrite</a>
to receive the URL for this virtual meeting. <a href="http://mspsug.com/2015/06/02/mspsug-virtual-meeting-creating-object-oriented-scripts-using-powershell-classes-on-tuesday-june-9th-at-830pm-cdt/">Click here</a>
 to be redirected to the original post of this article on the<a href="http://mspsug.com/">Mississippi PowerShell User Group</a>
website which contains additional information about the meeting including the system requirements to attend.</p><p>µ</p>
]]></content:encoded></item><item><title>DON'T Start Learning PowerShell?!?!?</title><link>https://powershell.org/articles/2015-06-07-dont-start-learning-powershell/</link><guid>https://powershell.org/articles/2015-06-07-dont-start-learning-powershell/</guid><pubDate>Sun, 07 Jun 2015 16:13:59 +0000</pubDate><description>&lt;p&gt;Jason Helmick and I were recently up in Redmond recording a Microsoft Virtual Academy series entitled, &amp;ldquo;Building Your Datacenter One DSC Resource at a Time.&amp;rdquo; While we were there, we decided to film a tongue-in-cheek promo for the series that started with the premise that, &amp;ldquo;if you haven&amp;rsquo;t already learned PowerShell, you missed the bus.&amp;rdquo; Obviously, there&amp;rsquo;s a bit more to the story.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Jason Helmick and I were recently up in Redmond recording a Microsoft Virtual Academy series entitled, &ldquo;Building Your Datacenter One DSC Resource at a Time.&rdquo; While we were there, we decided to film a tongue-in-cheek promo for the series that started with the premise that, &ldquo;if you haven&rsquo;t already learned PowerShell, you missed the bus.&rdquo; Obviously, there&rsquo;s a bit more to the story.</p><p>First, watch the video at https://www.youtube.com/watch?v=kuzFUI5Id0g …</p><p>Second, notice that _we specifically encourage people to learn DSC. _Hmm&hellip; are there any pre-requisite technologies for learning DSC?</p><p>Maybe, learning PowerShell ?</p><p>We were really speaking to the folks who&rsquo;ve been procrastinating on PowerShell for the past half-decade or more, because we <em>really do believe</em> that DSC is a great, and often easier, way to actually learn PowerShell. Sometimes, PowerShell is tough to get into simply because you don&rsquo;t have a task to tackle. DSC gives you one - a practical application of PowerShell that lets you dive in from a different angle.</p><p>_Obviously, _we think learning PowerShell is important, _<strong>or we wouldn&rsquo;t have built our careers around the technology</strong>. _But we know it can be tough to get started in - and every year that passes makes it harder to get started, as new features are added. But DSC represents a bit of a fresh start, and an opportunity to get into PowerShell on the ground floor, from a somewhat different direction.</p><p>Some folks got really ticked when we basically said, &ldquo;if you haven&rsquo;t started learning PowerShell by now, then it&rsquo;s too late,&rdquo; but seemed to miss the massive encouragement we gave for learning DSC. </p><p>And no, we don&rsquo;t <em>really</em> think that it&rsquo;s too late to start in PowerShell if you haven&rsquo;t, already. I&rsquo;m forever reminding people that there&rsquo;s this thing called a &ldquo;birth rate&rdquo; in the world, which means there&rsquo;ll always be new people coming into the industry and starting from scratch. I&rsquo;ve spent a massive amount of effort producing materials to help those newcomers, and I certainly don&rsquo;t think that &ldquo;entry level&rdquo; just stopped in 2015!</p><p>But&hellip; if you&rsquo;ve been putting it off, maybe take a new look at PowerShell from the DSC perspective. It&rsquo;s different, I promise - and it&rsquo;s not at all like programming as you get started. It&rsquo;s a neat way to leverage, and kind of abstract, the massive investment that&rsquo;s been made in PowerShell since 2006, and might be just the thing to win you over to the Shell Side.</p>]]></content:encoded></item><item><title>Creating a small footprint, base image Part 4 | Bringing it all together with automation</title><link>https://powershell.org/articles/2015-06-04-creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/</link><guid>https://powershell.org/articles/2015-06-04-creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/</guid><pubDate>Fri, 05 Jun 2015 04:07:16 +0000</pubDate><description>&lt;p&gt;In this entry I combing all I covered into a set of scripts to automate the process of creating a small footprint VHDX base image and a WIM to use a sorce that is fully patched. And I added a script to update the files on a regular basis.&lt;br&gt;
Check it out and let me know what you think.&lt;br&gt;
&lt;a href="https://bladefirelight.wordpress.com/2015/06/05/creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/"&gt;Creating a small footprint, base image Part 4 | Bringing it all together with automation&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>In this entry I combing all I covered into a set of scripts to automate the process of creating a small footprint VHDX base image and a WIM to use a sorce that is fully patched. And I added a script to update the files on a regular basis.<br>
Check it out and let me know what you think.<br><a href="https://bladefirelight.wordpress.com/2015/06/05/creating-a-small-footprint-base-image-part-4-bringing-it-all-together-with-automation/">Creating a small footprint, base image Part 4 | Bringing it all together with automation</a></p>
]]></content:encoded></item><item><title>Automating with Jenkins and PowerShell on Windows</title><link>https://powershell.org/articles/2015-06-04-automating-with-jenkins-and-powershell-on-windows/</link><guid>https://powershell.org/articles/2015-06-04-automating-with-jenkins-and-powershell-on-windows/</guid><pubDate>Fri, 05 Jun 2015 01:31:32 +0000</pubDate><description>&lt;p&gt;Take a minute think about how many PowerShell scripts you have written for yourself or your team. Countless functions and modules, helping to automate this or fix that or make your teams lives easier. You spend hours coding, writing in-line help, testing, packaging your script, distributing it to your team. All that effort, and then a lot of the time the script is forgotten about! People just go back to doing things the manual way.&lt;br&gt;
I put this down to being out of sight, out of mind. Users who do not use the command line regularly will quickly forget about the amazing PowerShell-ing that you did to try and make their lives easier.&lt;br&gt;
Then there are are other problems, like working out the best way to give end users permissions to use your function when they aren’t administrators. Do you give them remote desktop access to a server and only provide a PowerShell session? Setup PowerShell Web Access? Configure a restricted endpoint? I thought the point of this module was to make your life easier, not make things harder!&lt;br&gt;
These problems are what an open source tool called &lt;strong&gt;Jenkins&lt;/strong&gt; can solve for you. Traditionally used by developers to automate their build process, it can be leveraged to wrap web interfaces, job tracking and scheduling around the PowerShell scripts you worked so hard on.&lt;br&gt;
The below image shows what a Jenkins build looks like. In this basic example, the the build creates a text file on a remote machine by using PowerShell Remoting and the &lt;strong&gt;Set-Content&lt;/strong&gt; CmdLet**. **The parameters for these commands can be entered into the form, and will be passed to your PowerShell script via variables.&lt;br&gt;
&lt;img src="https://powershell.org/wp-content/uploads/2015/06/jenkins.png" alt="jenkins"&gt;&lt;br&gt;
To find out how to start leveraging Jenkins in your environment, take a look at the below blog posts:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Take a minute think about how many PowerShell scripts you have written for yourself or your team. Countless functions and modules, helping to automate this or fix that or make your teams lives easier. You spend hours coding, writing in-line help, testing, packaging your script, distributing it to your team. All that effort, and then a lot of the time the script is forgotten about! People just go back to doing things the manual way.<br>
I put this down to being out of sight, out of mind. Users who do not use the command line regularly will quickly forget about the amazing PowerShell-ing that you did to try and make their lives easier.<br>
Then there are are other problems, like working out the best way to give end users permissions to use your function when they aren’t administrators. Do you give them remote desktop access to a server and only provide a PowerShell session? Setup PowerShell Web Access? Configure a restricted endpoint? I thought the point of this module was to make your life easier, not make things harder!<br>
These problems are what an open source tool called<strong>Jenkins</strong> can solve for you. Traditionally used by developers to automate their build process, it can be leveraged to wrap web interfaces, job tracking and scheduling around the PowerShell scripts you worked so hard on.<br>
The below image shows what a Jenkins build looks like. In this basic example, the the build creates a text file on a remote machine by using PowerShell Remoting and the<strong>Set-Content</strong> CmdLet**. **The parameters for these commands can be entered into the form, and will be passed to your PowerShell script via variables.<br><img src="https://powershell.org/wp-content/uploads/2015/06/jenkins.png" alt="jenkins"><br>
To find out how to start leveraging Jenkins in your environment, take a look at the below blog posts:</p><ul><li><a href="http://bit.ly/PSJenkins1">Part 1 - Installing Jenkins, Configuring Basic Security, The PowerShell Plugin, Creating Jobs</a></li><li><a href="http://bit.ly/PSJenkins2">Part 2 - Using SSL on the Web Interface, Configuring PowerShell Remoting, How to Pass Credentials to Jobs</a></li></ul>
]]></content:encoded></item><item><title>NYC Powershell Usergroup meets on June 8th</title><link>https://powershell.org/articles/2015-06-04-nyc-powershell-usergroup-meets-on-june-8th/</link><guid>https://powershell.org/articles/2015-06-04-nyc-powershell-usergroup-meets-on-june-8th/</guid><pubDate>Thu, 04 Jun 2015 18:47:58 +0000</pubDate><description>&lt;p&gt;Continuing from our May meeting, Tome will be presenting a beginner’s track on Powershell covering String manipulations, Functions and Powershell Scripts.&lt;br&gt;
We also have Powershell MVP Doug Finke, who will be covering the new components as part of the Powershell V5.0 release, including PSPM, Classes and Convert-String.&lt;br&gt;
&lt;strong&gt;AGENDA:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Tome Tanasovski&lt;/strong&gt;:&lt;br&gt;
String manipulation&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Counting, splitting, uppercasing/lowercasing, etc.&lt;/li&gt;
&lt;li&gt;Format operator&lt;/li&gt;
&lt;li&gt;-split, -join&lt;/li&gt;
&lt;li&gt;-match, -replace&lt;/li&gt;
&lt;li&gt;Select-String&lt;/li&gt;
&lt;li&gt;Secure strings&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scripts and functions&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Principles&lt;/li&gt;
&lt;li&gt;Execution policies&lt;/li&gt;
&lt;li&gt;Passing arguments and parameters&lt;/li&gt;
&lt;li&gt;Scoping&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Bio&lt;/strong&gt;&lt;br&gt;
Tome is an executive for a market-leading global financial services firm in New York City where he focuses on automation, private cloud, and distributed computing. He is the founder and leader of the New York City PowerShell User group, a blogger, and speaks regularly at conferences and user groups. In 2011 he became a cofounder of the NYC Techstravaganza, coauthored the Windows PowerShell Bible, and received the title of Honorary Scripting Guy from the Hey Scripting Guy! blog. Tome has also received the MVP award from Microsoft for the last five years in Windows PowerShell.&lt;br&gt;
&lt;strong&gt;Blog&lt;/strong&gt;: &lt;a href="http://powertoe.wordpress.com"&gt;http://powertoe.wordpress.com&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Twitter&lt;/strong&gt;: &lt;a href="http://twitter.com/toenuff"&gt;http://twitter.com/toenuff&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Doug Finke:&lt;/strong&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Continuing from our May meeting, Tome will be presenting a beginner’s track on Powershell covering String manipulations, Functions and Powershell Scripts.<br>
We also have Powershell MVP Doug Finke, who will be covering the new components as part of the Powershell V5.0 release, including PSPM, Classes and Convert-String.<br><strong>AGENDA:</strong><br><strong>Tome Tanasovski</strong>:<br>
String manipulation</p><ul><li>Counting, splitting, uppercasing/lowercasing, etc.</li><li>Format operator</li><li>-split, -join</li><li>-match, -replace</li><li>Select-String</li><li>Secure strings</li></ul><p>Scripts and functions</p><ul><li>Principles</li><li>Execution policies</li><li>Passing arguments and parameters</li><li>Scoping</li></ul><p><strong>Bio</strong><br>
Tome is an executive for a market-leading global financial services firm in New York City where he focuses on automation, private cloud, and distributed computing. He is the founder and leader of the New York City PowerShell User group, a blogger, and speaks regularly at conferences and user groups. In 2011 he became a cofounder of the NYC Techstravaganza, coauthored the Windows PowerShell Bible, and received the title of Honorary Scripting Guy from the Hey Scripting Guy! blog. Tome has also received the MVP award from Microsoft for the last five years in Windows PowerShell.<br><strong>Blog</strong>:<a href="http://powertoe.wordpress.com">http://powertoe.wordpress.com</a><br><strong>Twitter</strong>:<a href="http://twitter.com/toenuff">http://twitter.com/toenuff</a><br><strong>Doug Finke:</strong></p><ul><li>What’s new in Powershell V5<ul><li>Covers Package Management, object oriented constructs with the new<em>Class</em> keyword</li><li>ConvertFrom-String, and Convert-String.</li></ul></li></ul><p><strong>Bio</strong><br>
Doug Finke, author of “PowerShell for Developers”, 7 time MVP recipient and an international professional speaker. Doug works at Start-Automating, a company that builds advanced PowerShell tools, provides PowerShell training and PowerShell consulting. You can catch up with Doug at his blog Development in a Blink at<a href="http://dougfinke.com/blog">http://dougfinke.com/blog</a>.<br>
Pizza is being sponsored by SAPIEN, Makers of PowerShell Studio and Primal Script<br><a href="http://www.sapien.com"><img src="https://powershell.org/wp-content/uploads/2015/06/SapienLogo3.png" alt="SapienLogo3"/><br>
6pm - 6:30 - Pizza and catching up<br>
6:30 - 7:15 – Tome Tanasovski.<br>
7:15 - 7:45 – Doug Finke.<br>
8ish - ?? - Drinks at Beer Authority (next to Port Authority)<br>
You must RSVP via Event Brite in order to attend:<a href="https://www.eventbrite.com/e/nyc-powershell-ug-tome-tanasovski-doug-finke-powershell-v5-pspm-classes-and-powershell-fundamentals-tickets-17221745705">Register Here</a>!<br><a href="https://www.eventbrite.com/e/nyc-powershell-ug-tome-tanasovski-doug-finke-powershell-v5-pspm-classes-and-powershell-fundamentals-tickets-17221745705"><img src="https://powershell.org/wp-content/uploads/2015/06/EventBriteLogo.png" alt="EventBriteLogoEventBriteLogo"/><br><strong>Meeting Date:</strong><br>
Monday, June 08, 2015 - 18:00 - 20:00<br><strong>Location</strong><br>
Microsoft - Times Square - 6th Floor<br>
11 Times Square<br>
New York, NY 10018<br>
United States<br>
See map:<a href="https://www.google.com/maps/place/11+Times+Square,+New+York,+NY+10036/@40.7567203,-73.9896494,17z/data=!3m1!4b1!4m2!3m1!1s0x89c258534f8455ad:0x55d4588f7b23a524">Google Maps</a></p>
]]></content:encoded></item><item><title>VERIFIED EFFECTIVE Self-Assessment</title><link>https://powershell.org/articles/2015-06-02-verified-effective-self-assessment/</link><guid>https://powershell.org/articles/2015-06-02-verified-effective-self-assessment/</guid><pubDate>Tue, 02 Jun 2015 23:36:16 +0000</pubDate><description>&lt;p&gt;We&amp;rsquo;ve had a number of people ask about a self-assessment for their PowerShell Toolmaking skills. We&amp;rsquo;ve decided to publish one, just once, in July. Here&amp;rsquo;s how to get it.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We&rsquo;ve had a number of people ask about a self-assessment for their PowerShell Toolmaking skills. We&rsquo;ve decided to publish one, just once, in July. Here&rsquo;s how to get it.</p><p>The self-assessment will be published as a <em>very</em> long article in our July 2015 TechLetter. That means, to get it, you&rsquo;ll need to<a href="https://powershell.org/newsletter/">subscribe to the newsletter</a> prior to that date. Don&rsquo;t worry, we use that e-mail list <em>only</em> for the newsletter, and you can always bail out and unsubscribe later, if you like.<br>
So sign up prior to July 2015. This issue will be made available in our back-issue page by November 2015, in case you&rsquo;ve run across this in what is currently the future.</p>]]></content:encoded></item><item><title>Major Changes to DSC Pull Server Configuration IDs</title><link>https://powershell.org/articles/2015-06-02-major-changes-to-dsc-pull-server-configuration-ids/</link><guid>https://powershell.org/articles/2015-06-02-major-changes-to-dsc-pull-server-configuration-ids/</guid><pubDate>Tue, 02 Jun 2015 13:45:09 +0000</pubDate><description>&lt;p&gt;Configuration IDs - Globally Unique Identifiers, or GUIDs, that DSC nodes use to identify themselves to a pull server - have always been a limiting factor in DSC design and architecture. In the April 2015 preview of WMF5, however, Microsoft has completely overhauled Configuration IDs. If you&amp;rsquo;re working with DSC, this is must-have information.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Configuration IDs - Globally Unique Identifiers, or GUIDs, that DSC nodes use to identify themselves to a pull server - have always been a limiting factor in DSC design and architecture. In the April 2015 preview of WMF5, however, Microsoft has completely overhauled Configuration IDs. If you&rsquo;re working with DSC, this is must-have information.</p><p>For the official write-up, see http://blogs.msdn.com/b/powershell/archive/2015/05/29/how-to-register-a-node-with-a-dsc-pull-server.aspx?utm_content=bufferd9bce&amp;utm_medium=social&amp;utm_source=twitter.com&amp;utm_campaign=buffer.<br>
In a nutshell:</p><ul><li>Nodes can now be assigned a human-meaningful AgentID. This is unique per node, and allows the node to uniquely identify itself to the pull server for reporting purposes, regardless of what configuration the node is pulling.</li><li>Configuration IDs are no longer GUIDs, but are instead human-readable strings. This means your MOF filenames on the pull server can now be meaningful and easier to identify. It also means it&rsquo;s easier to track which configuration a node is pulling.</li><li>A new RegistrationKey acts as a password between the node and the pull server, making it harder for a bad actor to pull configuration files. Now that configuration MOFs have more meaningful text names, and not hard-to-guess GUIDs, this provides an extra layer of protection. The registration key is set in the node&rsquo;s meta config, and in the web.config file of the pull server.</li></ul><p>These changes should make it MUCH easier for nodes to share configurations (especially partials), and help eliminate the hassle of tracking which node had which GUID. In fact, these changes can actually reduce the need for certain DSC tooling (that we&rsquo;ve never gotten anyway) to track node-to-configuration mappings.</p>]]></content:encoded></item><item><title>New PS Module for working with F5's LTM REST API</title><link>https://powershell.org/articles/2015-05-26-new-ps-module-for-working-with-f5s-ltm-rest-api/</link><guid>https://powershell.org/articles/2015-05-26-new-ps-module-for-working-with-f5s-ltm-rest-api/</guid><pubDate>Wed, 27 May 2015 04:54:03 +0000</pubDate><description>&lt;p&gt;If you use F5&amp;rsquo;s BIG‑IP Local Traffic Manager (LTM) for load-balancing, then you may find the new PS module I&amp;rsquo;ve written helpful. The module uses the REST API in ver. 11.6 of the LTM to query and manipulate an F5 LTM device. You can add and remove members from a pool, enable and disable them, and find out what pools a member is in, among other things.&lt;br&gt;
I&amp;rsquo;ve made the module files available &lt;a href="https://github.com/joel74/POSH-LTM-Rest"&gt;here&lt;/a&gt;. I welcome all comments.&lt;br&gt;
A few notes: Since the module uses the Invoke-WebRequest cmdlet, PowerShell 3 or higher is required. Also, since some F5&amp;rsquo;s utilize self-signed certificates, and Invoke-WebRequest is unhappy if part of the certificate chain isn&amp;rsquo;t trusted, I&amp;rsquo;ve included a dependency on Jaykul&amp;rsquo;s PS module &lt;a href="https://github.com/Jaykul/Tunable-SSL-Validator"&gt;TunableSSLValidator&lt;/a&gt;, which allows for temporarily ignoring certificate errors. If you&amp;rsquo;re using a trusted certificate chain, then you don&amp;rsquo;t need the TunableSSLValidator module and can remove the -insecure flags from the Invoke-WebRequest calls.&lt;br&gt;
Cheers,&lt;br&gt;
Joel&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>If you use F5&rsquo;s BIG‑IP Local Traffic Manager (LTM) for load-balancing, then you may find the new PS module I&rsquo;ve written helpful. The module uses the REST API in ver. 11.6 of the LTM to query and manipulate an F5 LTM device. You can add and remove members from a pool, enable and disable them, and find out what pools a member is in, among other things.<br>
I&rsquo;ve made the module files available<a href="https://github.com/joel74/POSH-LTM-Rest">here</a>. I welcome all comments.<br>
A few notes: Since the module uses the Invoke-WebRequest cmdlet, PowerShell 3 or higher is required. Also, since some F5&rsquo;s utilize self-signed certificates, and Invoke-WebRequest is unhappy if part of the certificate chain isn&rsquo;t trusted, I&rsquo;ve included a dependency on Jaykul&rsquo;s PS module <a href="https://github.com/Jaykul/Tunable-SSL-Validator">TunableSSLValidator</a>, which allows for temporarily ignoring certificate errors. If you&rsquo;re using a trusted certificate chain, then you don&rsquo;t need the TunableSSLValidator module and can remove the -insecure flags from the Invoke-WebRequest calls.<br>
Cheers,<br>
Joel</p>
]]></content:encoded></item><item><title>Creating a small footprint, base image Part 2</title><link>https://powershell.org/articles/2015-05-20-creating-a-small-footprint-base-image-part-2/</link><guid>https://powershell.org/articles/2015-05-20-creating-a-small-footprint-base-image-part-2/</guid><pubDate>Thu, 21 May 2015 00:56:25 +0000</pubDate><description>&lt;p&gt;I posted Part 2 of using PowerShell to create small footprint VHDX that are fully patched.&lt;br&gt;
&lt;a href="https://bladefirelight.wordpress.com/2015/05/20/creating-a-small-footprint-base-image-part-2-patching-and-cleanup-via-powershell/"&gt;Patching and Cleanup via PowerShell&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I posted Part 2 of using PowerShell to create small footprint VHDX that are fully patched.<br><a href="https://bladefirelight.wordpress.com/2015/05/20/creating-a-small-footprint-base-image-part-2-patching-and-cleanup-via-powershell/">Patching and Cleanup via PowerShell</a></p>
]]></content:encoded></item><item><title>Creating a small footprint, base image Part 1</title><link>https://powershell.org/articles/2015-05-19-creating-a-small-footprint-base-image-part-1/</link><guid>https://powershell.org/articles/2015-05-19-creating-a-small-footprint-base-image-part-1/</guid><pubDate>Tue, 19 May 2015 19:01:13 +0000</pubDate><description>&lt;p&gt;I&amp;rsquo;m starting a new blog series on using &lt;a href="https://bladefirelight.wordpress.com/2015/05/19/creating-a-small-footprint-base-image-part-1-vhdx-from-iso/"&gt;PowerShell to create small footprint VHDX&lt;/a&gt; that are fully patched.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I&rsquo;m starting a new blog series on using<a href="https://bladefirelight.wordpress.com/2015/05/19/creating-a-small-footprint-base-image-part-1-vhdx-from-iso/">PowerShell to create small footprint VHDX</a> that are fully patched.</p>
]]></content:encoded></item><item><title>Philadelphia PowerShell User Group Meeting – June 4th 2015</title><link>https://powershell.org/articles/2015-05-18-philadelphia-powershell-user-group-meeting-june-4th-2015/</link><guid>https://powershell.org/articles/2015-05-18-philadelphia-powershell-user-group-meeting-june-4th-2015/</guid><pubDate>Tue, 19 May 2015 01:14:53 +0000</pubDate><description>&lt;p&gt;Join us on Thursday, June 4th when &lt;a href="https://twitter.com/MSH_Dave"&gt;Dave Wyatt&lt;/a&gt;, will present &lt;strong&gt;The basics of encrypting and decrypting data, including symmetric and public key algorithms, key management / sharing, and digital certificates.&lt;/strong&gt; This talk will focus on doing so in the .NET Framework and PowerShell.&lt;/p&gt;
&lt;h4 id="about-dave" class="ps-heading"&gt;About Dave&lt;a class="ps-heading-anchor" href="#about-dave" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://twitter.com/MSH_Dave"&gt;Dave Wyatt&lt;/a&gt; has been in the IT business since 1999 and is currently an Application Operations Engineer at &lt;a href="http://www.devopsguys.com/team/"&gt;DevOpsGuys.&lt;/a&gt; In addition Dave is a Microsoft MVP (PowerShell) and a member of PowerShell.org&amp;rsquo;s Board of Directors.&lt;br&gt;
Please &lt;a href="https://www.eventbrite.com/e/phillyposh-june-4th-2015-tickets-17038157588"&gt;
register
&lt;/a&gt; if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join us on Thursday, June 4th when<a href="https://twitter.com/MSH_Dave">Dave Wyatt</a>, will present <strong>The basics of encrypting and decrypting data, including symmetric and public key algorithms, key management / sharing, and digital certificates.</strong> This talk will focus on doing so in the .NET Framework and PowerShell.</p><h4 id="about-dave" class="ps-heading">About Dave<a class="ps-heading-anchor" href="#about-dave" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h4><p><a href="https://twitter.com/MSH_Dave">Dave Wyatt</a> has been in the IT business since 1999 and is currently an Application Operations Engineer at<a href="http://www.devopsguys.com/team/">DevOpsGuys.</a> In addition Dave is a Microsoft MVP (PowerShell) and a member of PowerShell.org&rsquo;s Board of Directors.<br>
Please <a href="https://www.eventbrite.com/e/phillyposh-june-4th-2015-tickets-17038157588">
register</a> if you plan to attend in person or online. The meeting URL to join us remotely will be included in your Eventbrite registration confirmation.</p>
]]></content:encoded></item><item><title>Survey Results: Source Control for the IT Professional</title><link>https://powershell.org/articles/2015-05-18-source-control-survey-results/</link><guid>https://powershell.org/articles/2015-05-18-source-control-survey-results/</guid><pubDate>Mon, 18 May 2015 13:42:42 +0000</pubDate><description>&lt;p&gt;First off - thank you to everyone who participated in the version control survey!&lt;br&gt;
We&amp;rsquo;ve had a fun few weeks - Somehow the &lt;a href="http://ramblingcookiemonster.github.io/PowerShell-Summit-Wrap/"&gt;PowerShell Summit&lt;/a&gt;, Build, and Ignite were scheduled back-to-back-to-back. Among a host of other announcements and tidbits, we found that Microsoft has open sourced the DSC resources on GitHub, that Pester will be included in Windows, and saw a cool demonstration from Steven Murawski on &lt;a href="https://www.youtube.com/watch?v=h2P5Az3vfxk"&gt;using Test Kitchen to test DSC resources&lt;/a&gt;.&lt;br&gt;
These and other solutions and technologies are starting to assume you know how to use source control, and many require having a source control solution in place - how do you automate testing and deployment on a commit, if you have nothing to commit to?&lt;br&gt;
Source control has long been an important component of IT, but it seems IT professionals, particularly those in Microsoft environments, aren&amp;rsquo;t consistently using it.&lt;br&gt;
You might expect a gap between IT professionals and developers, but less than 50% of IT pro respondents used source control as a team.&lt;br&gt;
&lt;img src="http://ramblingcookiemonster.github.io/images/source-control/UseByDevVsITPro.png" alt=""&gt;&lt;br&gt;
Breaking down the IT professional population by environment, we see that Microsoft environments are even further behind. Many PowerShell aficionados work on teams that aren&amp;rsquo;t using version control.&lt;br&gt;
&lt;img src="http://ramblingcookiemonster.github.io/images/source-control/UseByEnvironment.png" alt=""&gt;&lt;br&gt;
Long story short? IT professionals, management, and vendors have work to do; these new tools and ideas that rely on source control are great, but we need to work on finding a horse for the cart. The rest of &lt;a href="http://ramblingcookiemonster.github.io/Source-Control-Survey"&gt;my rambling analysis can be found here&lt;/a&gt;.&lt;br&gt;
If you want to get up and running quickly, consider &lt;a href="http://ramblingcookiemonster.github.io/GitHub-For-PowerShell-Projects/"&gt;using GitHub for your PowerShell projects&lt;/a&gt;. You can start with the easy-to-use GUI client, and drop into the command line when you want to get your hands dirty. It&amp;rsquo;s a great way to start learning about source control, and to get involved in the community.&lt;br&gt;
Do you have any suggestions on how we can get to a place where using source control is common place for IT professionals? Is this a worthwhile goal? Sound off in the comments!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>First off - thank you to everyone who participated in the version control survey!<br>
We&rsquo;ve had a fun few weeks - Somehow the<a href="http://ramblingcookiemonster.github.io/PowerShell-Summit-Wrap/">PowerShell Summit</a>, Build, and Ignite were scheduled back-to-back-to-back. Among a host of other announcements and tidbits, we found that Microsoft has open sourced the DSC resources on GitHub, that Pester will be included in Windows, and saw a cool demonstration from Steven Murawski on<a href="https://www.youtube.com/watch?v=h2P5Az3vfxk">using Test Kitchen to test DSC resources</a>.<br>
These and other solutions and technologies are starting to assume you know how to use source control, and many require having a source control solution in place - how do you automate testing and deployment on a commit, if you have nothing to commit to?<br>
Source control has long been an important component of IT, but it seems IT professionals, particularly those in Microsoft environments, aren&rsquo;t consistently using it.<br>
You might expect a gap between IT professionals and developers, but less than 50% of IT pro respondents used source control as a team.<br><img src="http://ramblingcookiemonster.github.io/images/source-control/UseByDevVsITPro.png" alt=""><br>
Breaking down the IT professional population by environment, we see that Microsoft environments are even further behind. Many PowerShell aficionados work on teams that aren&rsquo;t using version control.<br><img src="http://ramblingcookiemonster.github.io/images/source-control/UseByEnvironment.png" alt=""><br>
Long story short? IT professionals, management, and vendors have work to do; these new tools and ideas that rely on source control are great, but we need to work on finding a horse for the cart. The rest of<a href="http://ramblingcookiemonster.github.io/Source-Control-Survey">my rambling analysis can be found here</a>.<br>
If you want to get up and running quickly, consider<a href="http://ramblingcookiemonster.github.io/GitHub-For-PowerShell-Projects/">using GitHub for your PowerShell projects</a>. You can start with the easy-to-use GUI client, and drop into the command line when you want to get your hands dirty. It&rsquo;s a great way to start learning about source control, and to get involved in the community.<br>
Do you have any suggestions on how we can get to a place where using source control is common place for IT professionals? Is this a worthwhile goal? Sound off in the comments!</p>
]]></content:encoded></item><item><title>What's it Like at PowerShell Summit?</title><link>https://powershell.org/articles/2015-05-16-whats-it-like-at-powershell-summit/</link><guid>https://powershell.org/articles/2015-05-16-whats-it-like-at-powershell-summit/</guid><pubDate>Sat, 16 May 2015 13:15:03 +0000</pubDate><description>&lt;p&gt;Ever wonder what it&amp;rsquo;s like to attend PowerShell Summit? Attendee Tommy Maynard &lt;a href="http://tommymaynard.com/extra-powershell-summit-north-america-2015-0-2015/"&gt;blogged about his entire experience&lt;/a&gt; - including the build-up anticipation prior to the event - and it&amp;rsquo;s a great set of reads. Check it out.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Ever wonder what it&rsquo;s like to attend PowerShell Summit? Attendee Tommy Maynard<a href="http://tommymaynard.com/extra-powershell-summit-north-america-2015-0-2015/">blogged about his entire experience</a> - including the build-up anticipation prior to the event - and it&rsquo;s a great set of reads. Check it out.</p>
]]></content:encoded></item><item><title>Mississippi PowerShell User Group Virtual Meeting – May 12th 2015</title><link>https://powershell.org/articles/2015-05-11-mississippi-powershell-user-group-virtual-meeting-may-12th-2015/</link><guid>https://powershell.org/articles/2015-05-11-mississippi-powershell-user-group-virtual-meeting-may-12th-2015/</guid><pubDate>Mon, 11 May 2015 14:30:40 +0000</pubDate><description>&lt;p&gt;Join us virtually on Tuesday, May 12th at 8:30pm Central Time when PowerShell MVP Kirk Munro will present &lt;em&gt;&lt;strong&gt;&amp;ldquo;A peek inside the Poshoholic’s toolbelt&amp;rdquo;&lt;/strong&gt;&lt;/em&gt;.&lt;br&gt;
It’s easy to get excited about all of the new technologies that are being talked about these days.  PowerShell 5.  Windows 10.  Nano server.  .NET Core.  But none of these technologies have been released yet, and even when they are released, it will be some time before we can fully adopt them in our organizations.  That’s why I like to arm my PowerShell toolbelt with impactful modules that work with current releases, so that people like you and I can work with innovative solutions for today while we keep learning about what will be available tomorrow.  This session is about those modules that I use in my toolbelt every day.  HistoryPx, FormatPx, DebugPx, SnippetPx, TypePx, and others.  Highly impactful, innovative PowerShell solutions that you can use, right now.&lt;br&gt;
**About Kirk&lt;br&gt;
** Kirk Munro is a Technical Product Manager at Provance Technologies, where he is helping build the next generation of Provance’s flagship IT Asset Management product, along with several smaller products such as the ScsmPx PowerShell module and the Auto-Close Work Item MP.  He is also an 8-time recipient of the Microsoft Most Valued Professional (MVP) award for his involvement in the PowerShell community.  For the past 9 years, Kirk has focused almost all of his time on PowerShell and PowerShell solutions, including managing popular products such as PowerGUI, PowerWF and PowerSE.  It is through this work he became known as the world’s first self-proclaimed Poshoholic.  Outside of work these days Kirk is returning to his software developer roots, learning mobile technologies like Xamarin and Ruby on Rails, and taking courses on Coursera or edX whenever he can make the time to do so.&lt;br&gt;
Register via &lt;a href="http://mspsug.eventbrite.com/"&gt;EventBrite&lt;/a&gt; to receive the URL for this virtual meeting. &lt;a href="http://mspsug.com/2015/05/05/mspsug-virtual-meeting-a-peek-inside-the-poshoholics-toolbelt-on-tuesday-may-12th-at-830pm-cst/"&gt;Click here&lt;/a&gt; to be redirected to the original post of this article on the &lt;a href="http://mspsug.com/"&gt;Mississippi PowerShell User Group&lt;/a&gt; website which contains additional information about the meeting including the system requirements to attend.&lt;br&gt;
µ&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join us virtually on Tuesday, May 12th at 8:30pm Central Time when PowerShell MVP Kirk Munro will present<em><strong>&ldquo;A peek inside the Poshoholic’s toolbelt&rdquo;</strong></em>.<br>
It’s easy to get excited about all of the new technologies that are being talked about these days.  PowerShell 5.  Windows 10.  Nano server.  .NET Core.  But none of these technologies have been released yet, and even when they are released, it will be some time before we can fully adopt them in our organizations.  That’s why I like to arm my PowerShell toolbelt with impactful modules that work with current releases, so that people like you and I can work with innovative solutions for today while we keep learning about what will be available tomorrow.  This session is about those modules that I use in my toolbelt every day.  HistoryPx, FormatPx, DebugPx, SnippetPx, TypePx, and others.  Highly impactful, innovative PowerShell solutions that you can use, right now.<br>
**About Kirk<br>
** Kirk Munro is a Technical Product Manager at Provance Technologies, where he is helping build the next generation of Provance’s flagship IT Asset Management product, along with several smaller products such as the ScsmPx PowerShell module and the Auto-Close Work Item MP.  He is also an 8-time recipient of the Microsoft Most Valued Professional (MVP) award for his involvement in the PowerShell community.  For the past 9 years, Kirk has focused almost all of his time on PowerShell and PowerShell solutions, including managing popular products such as PowerGUI, PowerWF and PowerSE.  It is through this work he became known as the world’s first self-proclaimed Poshoholic.  Outside of work these days Kirk is returning to his software developer roots, learning mobile technologies like Xamarin and Ruby on Rails, and taking courses on Coursera or edX whenever he can make the time to do so.<br>
Register via<a href="http://mspsug.eventbrite.com/">EventBrite</a> to receive the URL for this virtual meeting. <a href="http://mspsug.com/2015/05/05/mspsug-virtual-meeting-a-peek-inside-the-poshoholics-toolbelt-on-tuesday-may-12th-at-830pm-cst/">Click here</a> to be redirected to the original post of this article on the<a href="http://mspsug.com/">Mississippi PowerShell User Group</a> website which contains additional information about the meeting including the system requirements to attend.<br>
µ</p>
]]></content:encoded></item><item><title>Survey: Source Control for the IT Professional [Results in]</title><link>https://powershell.org/articles/2015-05-10-survey-source-control-for-the-it-professional/</link><guid>https://powershell.org/articles/2015-05-10-survey-source-control-for-the-it-professional/</guid><pubDate>Sun, 10 May 2015 18:22:05 +0000</pubDate><description>&lt;p&gt;&lt;strong&gt;Edit:&lt;/strong&gt; &lt;strong&gt;&lt;a href="https://powershell.org/2015/05/18/source-control-survey-results/"&gt;The results are in.&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
I was watching Don and Jeffrey&amp;rsquo;s &lt;a href="http://channel9.msdn.com/Events/Ignite/2015/BRK4451"&gt;PowerShell Unplugged session&lt;/a&gt; from Ignite the other day, and something stood out.&lt;br&gt;
At 30 minutes in, Don asked the crowd whether they were using source control. Based on the video, the crowd wasn&amp;rsquo;t big on source control.&lt;br&gt;
I work in IT. If I asked that same question at work, I would likely get a similar response. Why is that? Source control is incredibly important and can drive a number of other processes, yet it seems to be an afterthought for many IT professionals.&lt;br&gt;
I drafted up a quick, informal &lt;a href="http://bit.ly/VCSForIT"&gt;survey on source control for IT professionals&lt;/a&gt;. If you have a moment, would love to see your responses. Stay tuned for a rough analysis and write-up on the results [Edit: &lt;a href="https://powershell.org/2015/05/18/source-control-survey-results/"&gt;Results are in&lt;/a&gt;].&lt;br&gt;
Cheers!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><strong>Edit:</strong> <strong><a href="https://powershell.org/2015/05/18/source-control-survey-results/">The results are in.</a></strong><br>
I was watching Don and Jeffrey&rsquo;s<a href="http://channel9.msdn.com/Events/Ignite/2015/BRK4451">PowerShell Unplugged session</a> from Ignite the other day, and something stood out.<br>
At 30 minutes in, Don asked the crowd whether they were using source control. Based on the video, the crowd wasn&rsquo;t big on source control.<br>
I work in IT. If I asked that same question at work, I would likely get a similar response. Why is that? Source control is incredibly important and can drive a number of other processes, yet it seems to be an afterthought for many IT professionals.<br>
I drafted up a quick, informal<a href="http://bit.ly/VCSForIT">survey on source control for IT professionals</a>. If you have a moment, would love to see your responses. Stay tuned for a rough analysis and write-up on the results [Edit:<a href="https://powershell.org/2015/05/18/source-control-survey-results/">Results are in</a>].<br>
Cheers!</p>
]]></content:encoded></item><item><title>NYC User Group Restart!</title><link>https://powershell.org/articles/2015-05-07-nyc-user-group-restart/</link><guid>https://powershell.org/articles/2015-05-07-nyc-user-group-restart/</guid><pubDate>Thu, 07 May 2015 18:52:22 +0000</pubDate><description>&lt;p&gt;After a long hiatus, NYC Powershell User-group is back.&lt;br&gt;
Tome and Sunny will be presenting 2 sessions&lt;br&gt;
This is the inaugural series of Tome&amp;rsquo;s 1-year residency on Powershell Concepts (Beginner to Advanced)&lt;br&gt;
&lt;strong&gt;Tome Tanasovski:&lt;/strong&gt;&lt;br&gt;
Concept of Objects&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Object Characterization&lt;/li&gt;
&lt;li&gt;Everything is an object&lt;/li&gt;
&lt;li&gt;Sorting, Grouping, Counting&lt;/li&gt;
&lt;li&gt;Where-Object and ForEach&lt;br&gt;
Language Fundamentals&lt;/li&gt;
&lt;li&gt;Operators, Variables.&lt;/li&gt;
&lt;li&gt;Arrays and Hashtables&lt;/li&gt;
&lt;li&gt;Loop structures&lt;/li&gt;
&lt;li&gt;Conditional Structures&lt;/li&gt;
&lt;li&gt;Useful rules to know.&lt;br&gt;
Tome is an executive for a market-leading global financial services firm in New York City where he focuses on automation, private cloud, and distributed computing. He is the founder and leader of the New York City PowerShell User group, a blogger, and speaks regularly at conferences and user groups. In 2011 he became a cofounder of the NYC Techstravaganza, coauthored the Windows PowerShell Bible, and received the title of Honorary Scripting Guy from the Hey Scripting Guy! blog. Tome has also received the MVP award from Microsoft for the last five years in Windows PowerShell.&lt;br&gt;
&lt;strong&gt;Blog&lt;/strong&gt;: &lt;a href="http://powertoe.wordpress.com"&gt;http://powertoe.wordpress.com&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Twitter&lt;/strong&gt;: &lt;a href="http://twitter.com/toenuff"&gt;http://twitter.com/toenuff&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Sunny Chakraborty:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Large scale Application inventory using Custom MOF Files.&lt;/li&gt;
&lt;li&gt;Remote MSI Execution Tricks&lt;/li&gt;
&lt;li&gt;Invoke-Command AST&lt;/li&gt;
&lt;li&gt;Powershell Anonymous Functions.&lt;br&gt;
Sunny is a Sr. Engineer with a global financial services firm in Philadelphia, where he focusses on Messaging, Microsoft Applications and Automation using Powershell.&lt;br&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://gist.github.com/sunnyc7"&gt;https://gist.github.com/sunnyc7&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Twitter&lt;/strong&gt;: &lt;a href="https://twitter.com/sunnyc7"&gt;https://twitter.com/sunnyc7&lt;/a&gt;&lt;br&gt;
Pizza is being sponsored by SAPIEN, Makers of PowerShell Studio and Primal Script&lt;br&gt;
6pm - 6:30 - Pizza and catching up&lt;br&gt;
6:30 - 7:15 - Tome.&lt;br&gt;
7:15 - 7:45 - Sunny.&lt;br&gt;
8ish - ?? - Drinks at Beer Authority (next to Port Authority)&lt;br&gt;
You must RSVP via Event Brite in order to attend:&lt;br&gt;
&lt;a href="https://www.eventbrite.com/e/nyc-powershell-ug-tome-tanasovski-and-sunny-chakraborty-powershell-language-fundamentals-powershell-tickets-4054585374"&gt;&lt;img src="https://powershell.org/wp-content/uploads/2015/05/EventBriteLogo.bmp" alt="EventBriteLogo"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Meeting Date:&lt;/strong&gt;&lt;br&gt;
Monday, May 11, 2015 - 18:00 - 20:00&lt;br&gt;
&lt;strong&gt;Location&lt;/strong&gt;&lt;br&gt;
Microsoft - Times Square - 6th Floor&lt;br&gt;
11 Times Square&lt;br&gt;
New York, NY 10018&lt;br&gt;
United States&lt;br&gt;
See map: &lt;a href="http://maps.google.com/?q=40.750879+-73.985792+%2811+Times+Square%2C+New+York%2C+NY%2C+10018%2C+us%29"&gt;Google Maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><content:encoded>&lt;![CDATA[<p>After a long hiatus, NYC Powershell User-group is back.<br>
Tome and Sunny will be presenting 2 sessions<br>
This is the inaugural series of Tome&rsquo;s 1-year residency on Powershell Concepts (Beginner to Advanced)<br><strong>Tome Tanasovski:</strong><br>
Concept of Objects</p><ul><li>Object Characterization</li><li>Everything is an object</li><li>Sorting, Grouping, Counting</li><li>Where-Object and ForEach<br>
Language Fundamentals</li><li>Operators, Variables.</li><li>Arrays and Hashtables</li><li>Loop structures</li><li>Conditional Structures</li><li>Useful rules to know.<br>
Tome is an executive for a market-leading global financial services firm in New York City where he focuses on automation, private cloud, and distributed computing. He is the founder and leader of the New York City PowerShell User group, a blogger, and speaks regularly at conferences and user groups. In 2011 he became a cofounder of the NYC Techstravaganza, coauthored the Windows PowerShell Bible, and received the title of Honorary Scripting Guy from the Hey Scripting Guy! blog. Tome has also received the MVP award from Microsoft for the last five years in Windows PowerShell.<br><strong>Blog</strong>:<a href="http://powertoe.wordpress.com">http://powertoe.wordpress.com</a><br><strong>Twitter</strong>:<a href="http://twitter.com/toenuff">http://twitter.com/toenuff</a><br><strong>Sunny Chakraborty:</strong></li><li>Large scale Application inventory using Custom MOF Files.</li><li>Remote MSI Execution Tricks</li><li>Invoke-Command AST</li><li>Powershell Anonymous Functions.<br>
Sunny is a Sr. Engineer with a global financial services firm in Philadelphia, where he focusses on Messaging, Microsoft Applications and Automation using Powershell.<br><strong>GitHub</strong>:<a href="https://gist.github.com/sunnyc7">https://gist.github.com/sunnyc7</a><br><strong>Twitter</strong>:<a href="https://twitter.com/sunnyc7">https://twitter.com/sunnyc7</a><br>
Pizza is being sponsored by SAPIEN, Makers of PowerShell Studio and Primal Script<br>
6pm - 6:30 - Pizza and catching up<br>
6:30 - 7:15 - Tome.<br>
7:15 - 7:45 - Sunny.<br>
8ish - ?? - Drinks at Beer Authority (next to Port Authority)<br>
You must RSVP via Event Brite in order to attend:<br><a href="https://www.eventbrite.com/e/nyc-powershell-ug-tome-tanasovski-and-sunny-chakraborty-powershell-language-fundamentals-powershell-tickets-4054585374"><img src="https://powershell.org/wp-content/uploads/2015/05/EventBriteLogo.bmp" alt="EventBriteLogo"/><br><strong>Meeting Date:</strong><br>
Monday, May 11, 2015 - 18:00 - 20:00<br><strong>Location</strong><br>
Microsoft - Times Square - 6th Floor<br>
11 Times Square<br>
New York, NY 10018<br>
United States<br>
See map:<a href="http://maps.google.com/?q=40.750879+-73.985792+%2811+Times+Square%2C+New+York%2C+NY%2C+10018%2C+us%29">Google Maps</a></li></ul>
]]></content:encoded></item><item><title>Setting up the PowerShell.org DSC tools from Github</title><link>https://powershell.org/articles/2015-05-05-setting-up-the-powershell-org-dsc-tools-from-github/</link><guid>https://powershell.org/articles/2015-05-05-setting-up-the-powershell-org-dsc-tools-from-github/</guid><pubDate>Wed, 06 May 2015 04:27:34 +0000</pubDate><description>&lt;p&gt;I have created a &lt;a href="https://bladefirelight.wordpress.com/2015/04/27/test-homelab-inputobject-the-plan/"&gt;short blog series&lt;/a&gt; about how to setup the DSC tooling from the &lt;a href="https://github.com/PowerShellOrg/DSC"&gt;PowerShell.org DSC repository&lt;/a&gt;. With the mindset of contributing changes.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://bladefirelight.wordpress.com/2015/04/27/test-homelab-inputobject-the-plan/"&gt;Test-HomeLab -InputObject ‘The Plan’&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bladefirelight.wordpress.com/2015/04/30/get-posh-git-test-lab/"&gt;Get-Posh-Git | Test-Lab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bladefirelight.wordpress.com/2015/05/02/get-dscframework-test-lab/"&gt;Get-DSCFramework | Test-Lab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bladefirelight.wordpress.com/2015/05/03/invoke-dscbuild-test-lab-2/"&gt;Invoke-DscBuild | Test-Lab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bladefirelight.wordpress.com/2015/05/06/test-lab-update-github/"&gt;Test-Lab | Update-GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;-David Jones&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I have created a<a href="https://bladefirelight.wordpress.com/2015/04/27/test-homelab-inputobject-the-plan/">short blog series</a> about how to setup the DSC tooling from the<a href="https://github.com/PowerShellOrg/DSC">PowerShell.org DSC repository</a>. With the mindset of contributing changes.</p><ol><li><a href="https://bladefirelight.wordpress.com/2015/04/27/test-homelab-inputobject-the-plan/">Test-HomeLab -InputObject ‘The Plan’</a></li><li><a href="https://bladefirelight.wordpress.com/2015/04/30/get-posh-git-test-lab/">Get-Posh-Git | Test-Lab</a></li><li><a href="https://bladefirelight.wordpress.com/2015/05/02/get-dscframework-test-lab/">Get-DSCFramework | Test-Lab</a></li><li><a href="https://bladefirelight.wordpress.com/2015/05/03/invoke-dscbuild-test-lab-2/">Invoke-DscBuild | Test-Lab</a></li><li><a href="https://bladefirelight.wordpress.com/2015/05/06/test-lab-update-github/">Test-Lab | Update-GitHub</a></li></ol><p>-David Jones</p>
]]></content:encoded></item><item><title>Dealing with the Click-Next-Admin</title><link>https://powershell.org/articles/2015-05-04-dealing-with-the-click-next-admin/</link><guid>https://powershell.org/articles/2015-05-04-dealing-with-the-click-next-admin/</guid><pubDate>Mon, 04 May 2015 17:24:17 +0000</pubDate><description>&lt;p&gt;I had a good deal of yard work to do this weekend; I see yard work in a similar way that a click-next-admin sees Windows PowerShell. I want no part in it. So I wrote a quick bit on &lt;a href="http://ramblingcookiemonster.github.io/Dealing-With-The-Click-Next-Admin/"&gt;how we can deal with the click-next-admin&lt;/a&gt;.&lt;br&gt;
Jeffrey Snover recently gave a TechDays Online session where he candidly asked us to &amp;ldquo;make today the last day you hire a click next admin.&amp;rdquo;&lt;br&gt;
&lt;img src="http://ramblingcookiemonster.github.io/images/click-next/lastday.png" alt="Reward the right people"&gt;&lt;br&gt;
This is a fantastic goal, but how do we get there? There&amp;rsquo;s no set answer, but I listed out some of the major challenges I see.&lt;br&gt;
Would love to hear your feedback and ideas - &lt;a href="http://ramblingcookiemonster.github.io/Dealing-With-The-Click-Next-Admin/"&gt;flip through the post&lt;/a&gt; and stop back here to discuss!&lt;br&gt;
If you&amp;rsquo;d like to have some fun, share your click-next-admin stories on twitter with the &lt;a href="https://twitter.com/search?q=%23clicknextadmin&amp;amp;src=typd"&gt;#ClickNextAdmin&lt;/a&gt; tag.&lt;br&gt;
&lt;img src="http://ramblingcookiemonster.github.io/images/click-next/toobusy.png" alt="Too Busy"&gt;&lt;br&gt;
Aside: Thank you for the invite to contribute here, it&amp;rsquo;s an honor.&lt;br&gt;
Cheers!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I had a good deal of yard work to do this weekend; I see yard work in a similar way that a click-next-admin sees Windows PowerShell. I want no part in it. So I wrote a quick bit on<a href="http://ramblingcookiemonster.github.io/Dealing-With-The-Click-Next-Admin/">how we can deal with the click-next-admin</a>.<br>
Jeffrey Snover recently gave a TechDays Online session where he candidly asked us to &ldquo;make today the last day you hire a click next admin.&rdquo;<br><img src="http://ramblingcookiemonster.github.io/images/click-next/lastday.png" alt="Reward the right people"><br>
This is a fantastic goal, but how do we get there? There&rsquo;s no set answer, but I listed out some of the major challenges I see.<br>
Would love to hear your feedback and ideas -<a href="http://ramblingcookiemonster.github.io/Dealing-With-The-Click-Next-Admin/">flip through the post</a> and stop back here to discuss!<br>
If you&rsquo;d like to have some fun, share your click-next-admin stories on twitter with the<a href="https://twitter.com/search?q=%23clicknextadmin&amp;src=typd">#ClickNextAdmin</a> tag.<br><img src="http://ramblingcookiemonster.github.io/images/click-next/toobusy.png" alt="Too Busy"><br>
Aside: Thank you for the invite to contribute here, it&rsquo;s an honor.<br>
Cheers!</p>
]]></content:encoded></item><item><title>PowerShell.org Is Now On Imgur!</title><link>https://powershell.org/articles/2015-04-30-powershell-org-is-now-on-imgur/</link><guid>https://powershell.org/articles/2015-04-30-powershell-org-is-now-on-imgur/</guid><pubDate>Thu, 30 Apr 2015 17:00:11 +0000</pubDate><description>&lt;p&gt;Hey there everyone!  I&amp;rsquo;m pleased to announce that PowerShell.org has a new feed on Imgur!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Hey there everyone!  I&rsquo;m pleased to announce that PowerShell.org has a new feed on Imgur!</p><p>During the PowerShell Summit, I began the hunt for a social photo sharing site that had a set of features that would meet the needs of PowerShell.org.  Our list of criteria was rigorous.  We required a site that was capable of providing embed code for posts.  We needed a site that would be easy to upload images and add them to albums for publishing.  It needed to be social media friendly.  And it needed to be free.<br>
Mainly it needed to be free.<br>
So I present to you, our new<a href="http://powershellorg.imgur.com/">PowerShell.org Imgur feed</a>!  If you want quick access to it and don&rsquo;t feel like adding it to your favorites, you can just hit the Imgur icon on our nifty new social media bar on the right!<br>
We shall be endeavouring to cover more PowerShell related events in our feeds and posts in the future.  I&rsquo;m still working on a list of standards for photo submissions, but in the meantime, if you happen to be at a PowerShell event and have some photos that you&rsquo;d like us to share on the Imgur feed, please feel free to contact me at<em><strong>webmaster at powershell dot org</strong></em> and we&rsquo;ll take a look at them!</p><blockquote/><blockquote><p><a href="//imgur.com/a/UxUNW">PowerShell Summit NA 2015</a></p></blockquote>]]></content:encoded></item><item><title>Why is Remoting Enabled by Default on Windows Server?</title><link>https://powershell.org/articles/2015-04-28-why-is-remoting-enabled-by-default-on-windows-server/</link><guid>https://powershell.org/articles/2015-04-28-why-is-remoting-enabled-by-default-on-windows-server/</guid><pubDate>Tue, 28 Apr 2015 23:16:44 +0000</pubDate><description>&lt;p&gt;There was a brief and lively discussion on Twitter recently stemming from someone asking for advice on how to convince management to turn on Remoting.&lt;br&gt;
&amp;ldquo;Fire Management, if they have to ask&amp;rdquo; was apparently not an option, although it should have been. I mean, at this stage, you either know the value of PowerShell and its Remoting technology, or you&amp;rsquo;re being willfully ignorant.&lt;br&gt;
But that wasn&amp;rsquo;t where the discussion got lively.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>There was a brief and lively discussion on Twitter recently stemming from someone asking for advice on how to convince management to turn on Remoting.<br>
&ldquo;Fire Management, if they have to ask&rdquo; was apparently not an option, although it should have been. I mean, at this stage, you either know the value of PowerShell and its Remoting technology, or you&rsquo;re being willfully ignorant.<br>
But that wasn&rsquo;t where the discussion got lively.</p><p>The real discussion was about why Remoting was turned on by default in the first place, on newer versions of Windows Server (since Win2012). After all, Remote Desktop Protocol (RDP) is turned off by default. Most Linux distributions, it was pointed out, turn off sshd by default. So why is Remoting turned on? Isn&rsquo;t the safest bet to just disable everything, and let people turn on what they need?<br>
I think Remoting (and by Remoting, I mean the Windows Remote Management, or WinRM service) being turned on by default gives us a valuable look at Microsoft&rsquo;s psyche these days.<br>
First, keep in mind that _you can turn it off. _You can even do that via a Group Policy for domain computers, and you could certainly do so in a server master image if you wanted to. So it&rsquo;s pretty easy to have an &ldquo;off by default&rdquo; setup in your environment if you want. But wouldn&rsquo;t it therefore be just as easy for Microsoft to leave it off, and let you &ldquo;default it to on&rdquo; by whatever means you prefer, if that&rsquo;s what you want? Sure. But again, I think this is about Microsoft&rsquo;s psyche, these days.<br>
Understand that what follows is conjecture, but it&rsquo;s conjecture based on more than 20 years of watching this company, and on a pretty good working relationship with many of the company&rsquo;s technology leaders. This also isn&rsquo;t intended to make you feel that &ldquo;on by default&rdquo; is the right answer for you, nor is it intended to convince you that &ldquo;on by default&rdquo; is the right answer for _anyone. _This is an attempt to speculate about the <em>reasons</em> behind &ldquo;on by default,&rdquo; whether the decision itself was correct or not.<br>
The short reason is, &ldquo;Nano Server.&rdquo;<br>
If you just nodded and went, &ldquo;yeah, that would explain their thinking,&rdquo; then you can skip the rest of this. Keep in mind that Remoting isn&rsquo;t turned on for <em>client</em> computers by default, and that just pretty much reinforces the Nano Server reason.<br>
The very long answer is that Microsoft, these days, is building _first for themselves. _Specifically, for Azure. They believe - and again, you&rsquo;re free to disagree and I&rsquo;m not pitching their belief as gospel - that enterprises should manage their datacenter in much the same way Microsoft manages Azure. Microsoft&rsquo;s argument for this revolves around efficiency, primarily, and specifically efficiency at scale. Reliability factors into the argument, too. So Microsoft&rsquo;s decisions have to be examined in light of what works in &ldquo;the cloud,&rdquo; because that&rsquo;s how they expect you&rsquo;re going to be managing your own servers in the future.<br>
Microsoft has been on a long path, since 2008, of breaking down the monolithic Windows Server product into a discrete set of chunks that can be turned on or off at will. We say that first with the big refactoring of the product into Roles &amp; Features, which could be installed or uninstalled pretty easily. We also saw them ripping out the GUI bits to create the first Server Core. Over the next 5 years, the company refactored Server more and more, through a series of three releases culminating in Windows Server 2012 R2. In that time, Server Core became more and more functional, as more and more of Windows Server was refactored into standalone little bits, and separated from the &ldquo;GUI stuff.&rdquo;<br>
Microsoft&rsquo;s direction here has never been a big secret: they want to ship a fully-functioning version of Windows Server that doesn&rsquo;t have any&hellip; er&hellip; windows. They want it, in other words, to be a _server, _not a client that just happens to have a lot of RAM installed.<br>
Once you kind of buy into the &ldquo;no GUI on the server&rdquo; idea, even if just for the sake of discussion, it&rsquo;s not a far step to &ldquo;no logging into the server at all, in any way.&rdquo; Headless servers, in other words, where the host hardware might not even contain video output hardware. After all, if there&rsquo;s no GUI, then you can be definition do everything via text, which is very easy to transmit over a network. Ask Unix, which has been doing it for decades over Telnet and SSH. If you can do everything remotely, why even support a local login?<br>
Well, that&rsquo;s Nano Server, an installation option in the version of Windows Server that is expected to ship in 2016.<br>
_And if you can&rsquo;t log on locally at all, then you need some way of connecting to the server to initially configure it. _Which is why Remoting is enabled by default, even though little else is. You use your existing OSD infrastructure to deploy new Nano servers, and then you Remote into them to set them up as needed. Unlike most Linux distributions, which<em>allow</em> local login, Nano isn&rsquo;t even going to provide a means to log into &ldquo;the console.&rdquo; At least, as far as we currently know, it won&rsquo;t; Microsoft&rsquo;s only made a few statements about it so far.<br>
Windows Server&rsquo;s architect, Jeffrey Snover, put it fairly concisely in the Twitter discussion: &ldquo;We believe in a world of headless remote mgmt as the norm.&rdquo; <em>Headless</em> meaning _no way to log in locally, no such thing. _Ergo, you need some way to log in remotely, and Remoting is it, and it therefore is enabled by default.<br>
Now, in defense of this &ldquo;on by default&rdquo; approach, I&rsquo;ll point out that unlike nearly every preceding remote management protocol introduced by Microsoft, Remoting is incredibly controllable. It uses WS-Management (WS-MAN), which is HTTP-based. It runs on just one incoming port, which is easy to lock down through physical, soft, and virtual firewalls. You can certainly have an environment that&rsquo;s pre-engineered to protect that port. But if you buy into Microsoft&rsquo;s &ldquo;headless&rdquo; approach - and whether you do or not, Microsoft certainly buys in - then they had to enable _something _so you could configure the server, at least initially.<br>
So whether you agree with this direction or not is entirely up to you - and you&rsquo;re welcome to add your polite, professional comments to this post. I wanted to write this in an attempt to _explain, _just justify, <em>why</em> I think Microsoft took this approach, and what I think it means for the long term of Windows Server itself. I think simply knowing that direction can inform a lot of your base infrastructure decisions and planning going forward, whether you buy into the approach or not.</p>]]></content:encoded></item><item><title>PowerShellTO's Next Meeting – May 6th, 2015</title><link>https://powershell.org/articles/2015-04-27-powershelltos-next-meeting-may-6th-2015/</link><guid>https://powershell.org/articles/2015-04-27-powershelltos-next-meeting-may-6th-2015/</guid><pubDate>Mon, 27 Apr 2015 23:00:51 +0000</pubDate><description>&lt;p&gt;Join us on Wednesday, May 6th for our second Toronto PowerShell User’s Group meeting.  This time you get to take the wheel!  Send us some of your PowerShell related challenges and we’ll pick the top ones to work out in a group together!  We’ll also be talking about some of the things learned at PowerShell Summit – North America, and more!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join us on Wednesday, May 6th for our second Toronto PowerShell User’s Group meeting.  This time you get to take the wheel!  Send us some of your PowerShell related challenges and we’ll pick the top ones to work out in a group together!  We’ll also be talking about some of the things learned at PowerShell Summit – North America, and more!</p><p><a href="http://powershellto.ca/contact/">Hit us up and let us know</a>what PowerShell challenges you’d like to table at the next PowerShellTO meeting!<br>
For this meeting, we&rsquo;ll be located at the Microsoft Technology Center in Mississauga at 1950 Meadowvale Blvd - Mississauga, Ontario, L5N8L9.  Space is limited, so be sure to claim your EventBrite ticket below!<br>
A note on parking: When you arrive at the MTC, go around to the side facing Meadowvale Blvd.  There is a visitor entrance and parking there.  See you soon!</p><pre><code>[Online Ticketing](http://www.eventbrite.ca/r/etckt)</code></pre><p>for<a href="https://www.eventbrite.ca/e/powershellto-may-2015-meeting-tickets-16415587464?ref=etckt">PowerShellTO - May 2015 Meeting</a>
powered by<a href="http://www.eventbrite.ca?ref=etckt">Eventbrite</a></p>]]></content:encoded></item><item><title>Management Information: The OMI/CIM/WMI/MI/DMTF Dictionary</title><link>https://powershell.org/articles/2015-04-24-management-information-the-omicimwmimidmtf-dictionary/</link><guid>https://powershell.org/articles/2015-04-24-management-information-the-omicimwmimidmtf-dictionary/</guid><pubDate>Fri, 24 Apr 2015 22:57:48 +0000</pubDate><description>&lt;p&gt;Not too long ago, over on DonJones.com, I &lt;a href="http://donjones.com/2015/04/14/omi-cim-wmi/"&gt;wrote an article&lt;/a&gt; that tried to explain some of the confusion between Microsoft&amp;rsquo;s World of Management Instrumentation - e.g., WMI, OMI, CIM, and a bunch of other acronyms. I glossed over some of the finer details, and this article is intended to provide more specificity and accuracy - thanks to Microsoft&amp;rsquo;s Keith Bankston for helping me sort things out.&lt;/p&gt;
&lt;h2 id="cim-and-the-dmtf" class="ps-heading"&gt;CIM and the DMTF&lt;a class="ps-heading-anchor" href="#cim-and-the-dmtf" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Let us begin with CIM. CIM stands for Common Information Model, and it is not a tangible thing. It isn&amp;rsquo;t even software. It&amp;rsquo;s a set of standards that describe how management information can be represented in software, and it was created by the Distributed Management Task Force (DMTF), an industry working group that Microsoft is a member of.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Not too long ago, over on DonJones.com, I<a href="http://donjones.com/2015/04/14/omi-cim-wmi/">wrote an article</a> that tried to explain some of the confusion between Microsoft&rsquo;s World of Management Instrumentation - e.g., WMI, OMI, CIM, and a bunch of other acronyms. I glossed over some of the finer details, and this article is intended to provide more specificity and accuracy - thanks to Microsoft&rsquo;s Keith Bankston for helping me sort things out.</p><h2 id="cim-and-the-dmtf" class="ps-heading">CIM and the DMTF<a class="ps-heading-anchor" href="#cim-and-the-dmtf" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Let us begin with CIM. CIM stands for Common Information Model, and it is not a tangible thing. It isn&rsquo;t even software. It&rsquo;s a set of standards that describe how management information can be represented in software, and it was created by the Distributed Management Task Force (DMTF), an industry working group that Microsoft is a member of.</p><h2 id="oldwmi-dcom-and-rpc" class="ps-heading">Old WMI, DCOM, and RPC<a class="ps-heading-anchor" href="#oldwmi-dcom-and-rpc" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Back in the day - we&rsquo;re talking Windows NT 4.0 timeframe - Microsoft created Windows Management Instrumentation, or WMI. This was a server component (technically, a background service, and it ran on Workstation as well as Server) that delivered up management information in the CIM format. Now, at the time, the CIM standards were pretty early in their life, and WMI complied with what existed at the time. But the standards themselves were silent on quite a few things, like what network communications protocol you&rsquo;d use to actually talk to a server. Microsoft opted for Distributed Component Object Model, or DCOM, which was a very mainstream thing for them at the time. DCOM talks by using Remote Procedure Calls, or RPCs, also a very standard thing for Windows in those days.</p><h2 id="newwmi-ws-man-and-winrm" class="ps-heading">New WMI, WS-MAN, and WINRM<a class="ps-heading-anchor" href="#newwmi-ws-man-and-winrm" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Fast forward a bit to 2012. With Windows Management Framework 3, Microsoft releases a new version of WMI. They fail to give it a unique name, which causes a lot of confusion, but it complies with all the latest CIM specifications. There&rsquo;s still a server-side component, but this &ldquo;new WMI&rdquo; talks over WS-Management (Web Services for Management, often written as WS-MAN) instead of DCOM/RPC. Microsoft&rsquo;s implementation of WS-MAN lives in the Windows Remote Management (WinRM) service. The PowerShell cmdlets that talk this new kind of WMI all use CIM as part of the noun, giving us Get-CimInstance, Get-CimClass, Invoke-CimMethod, and so on. But make no mistake - these things aren&rsquo;t &ldquo;talking CIM,&rdquo; because CIM isn&rsquo;t a protocol. They&rsquo;re talking WS-MAN, which is what the new CIM standard specifies.<br>
Sidebar: From a naming perspective, Microsoft was pretty much screwed with the new cmdlets&rsquo; names, no matter what they called them. &ldquo;Cim&rdquo; is a terrible part of the noun. After all, the &ldquo;old WMI&rdquo; was compliant with the CIM of its day, but it didn&rsquo;t get to be called CIM. The new cmdlets don&rsquo;t use any technology called &ldquo;Cim,&rdquo; they&rsquo;re merely compliant with the newest CIM standards. Maybe they should have been called something like Get-Wmi2Instance, or Invoke-NewWmiMethod, but that wasn&rsquo;t going to make anyone happy, either. So, Cim it is.</p><h2 id="omi" class="ps-heading">OMI<a class="ps-heading-anchor" href="#omi" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Now, at some point, folks noticed that implementing a full WMI/DCOM/RPC stack wasn&rsquo;t ever going to happen on anything but Windows. It was too big, too &ldquo;heavy,&rdquo; and frankly too outdated by the time anyone noticed. But there was a big desire to have all this CIM-flavored stuff running elsewhere, like on routers, switches, Linux boxes, you name it. So Microsoft wrote Open Management Instrumentation, or OMI. This is basically a CIM-compliant server that speaks WS-MAN, just like the &ldquo;new WMI.&rdquo; But it&rsquo;s really teeny-tiny, taking up just a few megabytes of storage and a wee amount of RAM. That makes it suitable for running on devices with constrained compute capacity, like routers and switches and whatnot. Microsoft open-sourced their OMI server code, making it a good reference item that other people could adopt, build on, and implement.</p><h2 id="under-the-hood-provider-apis" class="ps-heading">Under the Hood: Provider APIs<a class="ps-heading-anchor" href="#under-the-hood-provider-apis" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Time to dig under the hood a bit. &ldquo;Old WMI&rdquo; got its information from something called the WMI Repository. The Repository, in turn, was populated by many different WMI Providers. These Providers are written in native code (e.g., C++) and only run on Windows. They&rsquo;re what create the classes - Win32_OperatingSystem, Win32_BIOS, and so on - that we IT ops people are used to querying.<br>
As Microsoft started looking at OMI, and at updated WMI to the newer CIM standards, they realized these old-school Providers weren&rsquo;t hot stuff. First, they were kinda hard to write, which didn&rsquo;t encourage developers to jump on board. They were also kinda huge, relatively speaking, making them less suitable for constrained environments like routers and switches.<br>
So Microsoft came up with a new Application Programming Interface (API) for writing providers, calling it simply Management Instrumentation, or MI. MI providers are easier to write, and a lot smaller. MI providers, at an API level, work under the &ldquo;new WMI&rdquo; as well as under OMI. So if you&rsquo;re getting a router hooked up to all this CIM stuff, you&rsquo;re going to implement the teeny OMI server, and underneath it you&rsquo;re going to write one or more MI providers to provide information to the OMI server. MI providers don&rsquo;t necessarily need a repository, meaning they provide information &ldquo;live&rdquo; to the server component. That helps save storage space.<br>
MI providers are also written in native code, which is nice because lots of developers who work with low-level system stuff greatly prefer native code. The client and server APIs are (on Windows, at least) available in native or managed (.NET) versions, so both kinds of developers get access. Providers, though, are always native code.<br>
As an IT ops person, you&rsquo;ll probably never care what kind of provider you&rsquo;re using. The &ldquo;new WMI&rdquo; on Windows supports both old-style WMI Providers and new-style MI Providers, so developers can pick and choose. Also, Microsoft doesn&rsquo;t need to go re-do all the work they already did writing providers for &ldquo;old WMI,&rdquo; because &ldquo;new WMI&rdquo; can continue to use it.</p><h2 id="powershell-cmdlets" class="ps-heading">PowerShell Cmdlets<a class="ps-heading-anchor" href="#powershell-cmdlets" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>When you&rsquo;re using Get-CimInstance in PowerShell, by default you&rsquo;re using &ldquo;new WMI,&rdquo; meaning you&rsquo;re talking WS-MAN to the remote machine. Those commands also have the ability to talk DCOM/RPC, mainly for backward compatibility with machines that either aren&rsquo;t running WMF3 or later, or that haven&rsquo;t enabled WinRM (remember, WinRM is what &ldquo;listens&rdquo; for the incoming WS-MAN traffic).</p><h2 id="client-api-differences-this-matters" class="ps-heading">Client API Differences: This Matters<a class="ps-heading-anchor" href="#client-api-differences-this-matters" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>It&rsquo;s massively important that you understand the inherent differences between DCOM/RPC and WS-MAN. Under DCOM, you were basically connected to a &ldquo;live&rdquo; object on the remote machine. That meant you could get a WMI instance, execute methods, change properties in some cases, and generally treat it as functioning code. The RPC protocol was designed for that kind of continuous back-and-forth, although it wasn&rsquo;t terribly network- or memory-efficient, because of the &ldquo;live connection&rdquo; concept. WS-MAN, on the other hand, is basically like talking to a web server. Heck, it uses HTTP, even. So when you run Get-CimInstance, your data is generated on the remote machine, serialized into XML, transmitted back in an HTTP stream, and then deserialized into objects on your computer. Those aren&rsquo;t &ldquo;live&rdquo; objects; they&rsquo;re not &ldquo;connected&rdquo; to anything. That&rsquo;s why they don&rsquo;t have methods. To execute a method, you have to send another WS-MAN request to the machine, which will execute the method and send you any results - which is what Invoke-CimMethod does. The entire relationship between you and the remote machine is essentially stateless, just like the relationship between a web browser and a web server. So your coding technique has to change a bit as you move from &ldquo;old WMI&rdquo; to &ldquo;new WMI.&rdquo; The good news is that the new, web-style approach is a lot lighter-touch on the server, requiring less network and memory, so it becomes a lot more scalable.</p><h2 id="versions" class="ps-heading">Versions<a class="ps-heading-anchor" href="#versions" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Anything running WMF3 or later (Win2008R2 and later, Win7 and later) has &ldquo;new WMI.&rdquo; Microsoft continues to include &ldquo;old WMI&rdquo; for backward compatibility, although on newer versions of Windows (I&rsquo;m playing with Win2012R2), the ports for DCOM/RPC may not be open, while the ports for WS-MAN are, by default. So we&rsquo;re clearly moving forward.</p><h2 id="enabling-winrm-cim-remoting-new-wmi" class="ps-heading">Enabling WinRM CIM Remoting New WMI<a class="ps-heading-anchor" href="#enabling-winrm-cim-remoting-new-wmi" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Oh, and as a complete side note, a LOT of us in the industry will say stuff like &ldquo;enable PowerShell Remoting&rdquo; when we refer to enabling WS-MAN. Technically, that&rsquo;s not accurate. Enabling Remoting, if you do it right, enables WinRM, and enables WinRM to pass traffic to PowerShell. It&rsquo;ll also enable most of the other cool stuff we use WS-MAN for, including PowerShell Workflow, the &ldquo;new WMI&rdquo; communications for CIM cmdlets, and so on. But you could also enable the &ldquo;new WMI&rdquo; stuff without also turning on PowerShell Remoting. At the end of the day, though, turning on Remoting is just the Right Thing To Do, so why not make life easy and turn it all on at once?</p><h2 id="summary" class="ps-heading">Summary<a class="ps-heading-anchor" href="#summary" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>OLD WMI: Uses DCOM/RPC. Uses old-style native code providers and a repository. Available only on Windows. More or less deprecated, meaning it&rsquo;s not a focus area for further improvement or development. You&rsquo;re connected to &ldquo;live&rdquo; objects and can play with them.<br>
NEW WMI: Uses WS-MAN (via WinRM service). Supports old-style native code providers and a repository, as well as new-style MI providers. Available only on Windows. The way forward. If something can talk to &ldquo;NEW WMI&rdquo; it should be able to talk to OMI, also. You&rsquo;re not connected to &ldquo;live&rdquo; objects, and have an essentially stateless relationship with the remote machine.<br>
OMI: Uses WS-MAN (OMI code includes the protocol stack). Supports only new-style MI providers. Available on any implementing platform. Also the way forward. If something can talk to OMI, it should be able to talk to &ldquo;NEW WMI&rdquo; also.<br>
CIM: Defines the standard. Created by DMTF. Early versions were implemented as &ldquo;OLD WMI&rdquo; by Microsoft, newest version implemented both in &ldquo;NEW WMI&rdquo; and OMI by Microsoft and others.<br>
And if you prefer summaries by layer:<br>
SERVER (or, the bit that serves up the info, which could technically be a client device like a laptop) uses PROVIDERS (either old-style WMI, new-style MI, or both) to generate management information. If the SERVER is a non-Windows device, it would run OMI and only support new-style MI providers.<br>
CLIENT (the machine doing the querying) uses either old-style WMI (DCOM/RPC) or new-style (WS-MAN) to send requests to SERVER and to receive the results. CLIENT doesn&rsquo;t care what API was used to write the providers running on the server, because the server makes the information all look the same. If CLIENT queries a SERVER that only supports WS-MAN, then CLIENT must obviously use WS-MAN.<br>
Hope that helps.</p>
]]></content:encoded></item><item><title>Charlotte PowerShell User Group meeting for May</title><link>https://powershell.org/articles/2015-04-24-charlotte-powershell-user-group-meeting-for-may/</link><guid>https://powershell.org/articles/2015-04-24-charlotte-powershell-user-group-meeting-for-may/</guid><pubDate>Fri, 24 Apr 2015 14:01:21 +0000</pubDate><description>&lt;p&gt;The Charlotte PowerShell User Group had a great meeting in late April with a special guest presenter, Lee Holmes. Due to this occurrence and scheduling conflicts for the month of May, our regularly scheduled meeting will not occur. Stay tuned for information about our next meeting which will occur on our normal day (1st Thursday of every month), June 4th.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The Charlotte PowerShell User Group had a great meeting in late April with a special guest presenter, Lee Holmes. Due to this occurrence and scheduling conflicts for the month of May, our regularly scheduled meeting will not occur. Stay tuned for information about our next meeting which will occur on our normal day (1st Thursday of every month), June 4th.</p>
]]></content:encoded></item><item><title>Observations from our PowerShell Summit VERIFIED EFFECTIVE Exam</title><link>https://powershell.org/articles/2015-04-23-observations-from-our-powershell-summit-verified-effective-exam/</link><guid>https://powershell.org/articles/2015-04-23-observations-from-our-powershell-summit-verified-effective-exam/</guid><pubDate>Thu, 23 Apr 2015 14:24:29 +0000</pubDate><description>&lt;p&gt;We offered our first in-person, proctored VERIFIED EFFECTIVE exam at PowerShell Summit in April 2015, located in Charlotte, NC. While the exam is not intended as a diagnostic or learning tool, there are definitely some observations I can share from glancing through some of the submissions so far.&lt;br&gt;
First, the exam isn&amp;rsquo;t easy. 31 people signed up to take it (our room capacity; more would have if we&amp;rsquo;d had space), and only 12 turned in submissions. Of those, fewer than 5 are probably going to pass by the end of the grading process.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We offered our first in-person, proctored VERIFIED EFFECTIVE exam at PowerShell Summit in April 2015, located in Charlotte, NC. While the exam is not intended as a diagnostic or learning tool, there are definitely some observations I can share from glancing through some of the submissions so far.<br>
First, the exam isn&rsquo;t easy. 31 people signed up to take it (our room capacity; more would have if we&rsquo;d had space), and only 12 turned in submissions. Of those, fewer than 5 are probably going to pass by the end of the grading process.</p><ul><li>If you don&rsquo;t know what <strong>[CmdletBinding(SupportsShouldProcess=$True)]</strong> does, then you shouldn&rsquo;t be using it. It should never be used in a cmdlet that merely queries information and doesn&rsquo;t make changes to the system. It isn&rsquo;t boilerplate that should be included in every function, and it has nothing to do with the PROCESS script block.</li><li>If you don&rsquo;t understand <strong>ValueFromPipeline</strong> and **ValueFromPipelineByPropertyName, **then you need to learn.</li><li>If you&rsquo;re using aliases like<strong>%</strong> in a function, you&rsquo;re not creating a readable, maintainable script. Avoid aliases, especially ones that don&rsquo;t immediately communicate the task being completed. <strong>Dir</strong> might be acceptable; <strong>?</strong> not so much.</li><li>If you&rsquo;re not neatly indenting your constructs, your script is not going to be readable.</li><li>Creating a parameter that accepts a limited set of values (say, &ldquo;foo&rdquo; and &ldquo;bar&rdquo;) doesn&rsquo;t create internal variables with those names (e.g., $foo and $bar). Don&rsquo;t confuse parameter names with their values.</li></ul><p>In the end analysis, there&rsquo;s a difference between being able to hack out a working script, and being able to create a professional, maintainable tool that complies with PowerShell&rsquo;s native practices and patterns. If you&rsquo;re to the point where you&rsquo;re able to hack out a working script, take a next step by reading something like <em>The Community Book of PowerShell Practices</em> (available for free), or solidify your skills and understanding through a book like (gratuitous plug) _Learn PowerShell Toolmaking in a Month of Lunches. _<br>
Most of the non-passing submissions we&rsquo;re seeing have simple mistakes - for example, including a static computer name in a verbose message, rather than inserting the name of the currently-processing computer. Or creating a CIMSession, but then not using it (forcing a later command to spin up a second session). In other instances, we saw poor practices (like globally and unnecessarily setting $ErrorActionPreference, suggesting a lack of understanding about the more specific -ErrorAction). There was also a few instances where a lack of attention to details - or perhaps simply running out of time - was a problem, such as failing to define a needed parameter, or defining a ValidateSet() with incorrect values.<br>
We&rsquo;re going to be removing one of our VERIFIED EFFECTIVE exam scenarios from production use, and turning that into an &ldquo;example scenario&rdquo; that you can use to self-assess your toolmaking skills. Look for that in the next few weeks. We&rsquo;ll continue offering in-person proctored exams at PowerShell Summit, with Europe 2015 in Stockholm being our next go. In 2016, look for us to expand the program with more capacity (so more people can sit the exam), and for us to eventually offer a DSC-related exam.<br>
In the meantime, anyone with a VERIFIED EFFECTIVE certificate has indeed completed a challenging, practical exam that shows they are definitely <em>effective</em> toolmakers, capable of building professional-grade tools that are consistent with PowerShell&rsquo;s native use patterns. Thus far, fewer than 20 certificates have been earned.</p>
]]></content:encoded></item><item><title>Painlessly Get Data from PowerShell to Excel</title><link>https://powershell.org/articles/2015-04-21-painlessly-get-data-from-powershell-to-excel/</link><guid>https://powershell.org/articles/2015-04-21-painlessly-get-data-from-powershell-to-excel/</guid><pubDate>Tue, 21 Apr 2015 12:08:54 +0000</pubDate><description>&lt;p&gt;Doug Finke has &lt;a href="http://www.dougfinke.com/blog/index.php/2015/04/20/painlessly-get-data-from-powershell-to-excel/"&gt;written an awesome article&lt;/a&gt; - complete with a module! - to help get data into Excel spreadsheets.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Doug Finke has<a href="http://www.dougfinke.com/blog/index.php/2015/04/20/painlessly-get-data-from-powershell-to-excel/">written an awesome article</a> - complete with a module! - to help get data into Excel spreadsheets.</p>
]]></content:encoded></item><item><title>PowerShell Summit – North America Launches!</title><link>https://powershell.org/articles/2015-04-20-powershell-summit-north-america-launches/</link><guid>https://powershell.org/articles/2015-04-20-powershell-summit-north-america-launches/</guid><pubDate>Mon, 20 Apr 2015 22:49:06 +0000</pubDate><description>&lt;p&gt;The PowerShell community descended on Charlotte, North Carolina for the third annual PowerShell Summit - North America this week!  Enthusiasts, MVPs, community leaders, and the PowerShell product team came to discuss the latest and greatest ongoings in the PowerShell world.&lt;br&gt;
The festivities kicked off in downtown Charlotte at the Ri Ra Irish Pub this last Sunday.  New network connections were made and old friends reunited over fine brews in the Victorian-style public house before getting a good nights&amp;rsquo; rest before the three day summit.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The PowerShell community descended on Charlotte, North Carolina for the third annual PowerShell Summit - North America this week!  Enthusiasts, MVPs, community leaders, and the PowerShell product team came to discuss the latest and greatest ongoings in the PowerShell world.<br>
The festivities kicked off in downtown Charlotte at the Ri Ra Irish Pub this last Sunday.  New network connections were made and old friends reunited over fine brews in the Victorian-style public house before getting a good nights&rsquo; rest before the three day summit.</p><p>Monday started off with an exciting lineup of speakers to discuss some of the hottest community topics including Desired State Configuration, automated code testing with Pester, and working with Azure.  Some great announcements were made by the product team as well, including:</p><ul><li>The release of Windows Management Framework 5.0 on April 30th.  This release will be available downlevel for Windows 7 and Server 2008.</li><li>PowerShell Package Manager announced as the official name of OneGet.</li><li>The release of<a href="https://visualstudiogallery.msdn.microsoft.com/c9eb3ba8-0c59-4944-9a62-6eee37294597">PowerShell Tools for Visual Studio</a>, available now for download.</li></ul><p>A big congratulations to PowerShell MVP and PowerShell.org board member Dave Wyatt, who&rsquo;s works on Pester will be making it&rsquo;s way into the next build of Windows Server!<br>
Take a look at our latest videos from the summit on<a href="https://www.youtube.com/user/powershellorg/videos">YouTube</a>, and follow the excitement at<a href="https://twitter.com/search?q=%23powershell&amp;src=typd">#PowerShell on Twitter</a>!</p>
]]></content:encoded></item><item><title>Microsoft Publishes DSC Resource Kit in GitHub</title><link>https://powershell.org/articles/2015-04-16-microsoft-publishes-dsc-resource-kit-in-github/</link><guid>https://powershell.org/articles/2015-04-16-microsoft-publishes-dsc-resource-kit-in-github/</guid><pubDate>Thu, 16 Apr 2015 11:47:50 +0000</pubDate><description>&lt;p&gt;When Microsoft first released the DSC Resource Kit (in &lt;a href="https://gallery.technet.microsoft.com/scriptcenter/DSC-Resource-Kit-All-c449312d"&gt;Wave 10&lt;/a&gt; as of this writing), they opened the door to community contributions. Our own &lt;a href="https://github.com/powershellorg"&gt;PowerShell.org GitHub repo&lt;/a&gt; consists partly of DSC resource that used Microsoft&amp;rsquo;s code as a baseline, and then corrected problems or expanded capabilities.&lt;br&gt;
What we never had was a way for Microsoft to circle back, pick up those enhancements, and include them as part of an official future Resource Kit Wave. Now, we do.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>When Microsoft first released the DSC Resource Kit (in<a href="https://gallery.technet.microsoft.com/scriptcenter/DSC-Resource-Kit-All-c449312d">Wave 10</a> as of this writing), they opened the door to community contributions. Our own<a href="https://github.com/powershellorg">PowerShell.org GitHub repo</a> consists partly of DSC resource that used Microsoft&rsquo;s code as a baseline, and then corrected problems or expanded capabilities.<br>
What we never had was a way for Microsoft to circle back, pick up those enhancements, and include them as part of an official future Resource Kit Wave. Now, we do.</p><p>Microsoft has moved the entire DSC Resource Kit to an<a href="https://github.com/PowerShell/DscResources">open GitHub repo</a>. They&rsquo;ve also included some<a href="https://github.com/PowerShell/DscResources/blob/master/CONTRIBUTING.md">basic guidelines for potential contributors</a>. This now allows anyone to jump in, make corrections, or potentially even expand capabilities, knowing that their work has a chance of being reviewed and included in the &ldquo;official&rdquo; repository. That means we have a shot at having One True Version of these modules, which anyone can find and use, rather than scattered versions that inherited from the originals, but were harder for the general public to find.<br>
As of this writing, there are over 45 DSC resources you can download, check out, modify, and submit changes for - as well as using them in your environment. Thank you, Microsoft!</p>]]></content:encoded></item><item><title>PowerShell Summit Europe VENUE CHANGE</title><link>https://powershell.org/articles/2015-04-10-powershell-summit-europe-venue-change/</link><guid>https://powershell.org/articles/2015-04-10-powershell-summit-europe-venue-change/</guid><pubDate>Fri, 10 Apr 2015 14:43:52 +0000</pubDate><description>&lt;p&gt;We&amp;rsquo;re announcing a venue change for PowerShell Summit Europe 2015. Although we&amp;rsquo;re very appreciative to Microsoft for offering the use of their office in Kista, our registration velocity warrants a larger venue, and gives us the opportunity for a more central location.&lt;br&gt;
Dates are not changed. We will be at the &lt;a href="http://www.scandichotels.se/Hotels/Sverige/Stockholm/Scandic-Klara/#.VSfgrlwtaq4"&gt;Scandic Klara hotel&lt;/a&gt;, which is near to the &lt;a href="http://htlhotels.com/hotels/kungsgatan/"&gt;HTL Kungsgaten&lt;/a&gt;, both of which has sleeping room available as of this writing. Both are as close as we can get to Stockholm Central station, and both are near a tram line.&lt;br&gt;
We are recommending that attendees **reserve sleeping rooms immediately. **A government congress at the waterfront convention center has made room inventory tight. Our &lt;a href="https://eventmgr.azurewebsites.net/event/home/PSEU15"&gt;registration website&lt;/a&gt; has been updated with the additional attendee capacity.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We&rsquo;re announcing a venue change for PowerShell Summit Europe 2015. Although we&rsquo;re very appreciative to Microsoft for offering the use of their office in Kista, our registration velocity warrants a larger venue, and gives us the opportunity for a more central location.<br>
Dates are not changed. We will be at the<a href="http://www.scandichotels.se/Hotels/Sverige/Stockholm/Scandic-Klara/#.VSfgrlwtaq4">Scandic Klara hotel</a>, which is near to the<a href="http://htlhotels.com/hotels/kungsgatan/">HTL Kungsgaten</a>, both of which has sleeping room available as of this writing. Both are as close as we can get to Stockholm Central station, and both are near a tram line.<br>
We are recommending that attendees **reserve sleeping rooms immediately. **A government congress at the waterfront convention center has made room inventory tight. Our<a href="https://eventmgr.azurewebsites.net/event/home/PSEU15">registration website</a> has been updated with the additional attendee capacity.</p>
]]></content:encoded></item><item><title>A Quick PowerShell Summit Europe Update (spread the word!)</title><link>https://powershell.org/articles/2015-04-07-a-quick-powershell-summit-europe-update-spread-the-word/</link><guid>https://powershell.org/articles/2015-04-07-a-quick-powershell-summit-europe-update-spread-the-word/</guid><pubDate>Tue, 07 Apr 2015 14:52:16 +0000</pubDate><description>&lt;p&gt;First: Because e-mail these days is actually unreliable, what with spam filters and all, please know that we&amp;rsquo;re relying on you to keep yourself informed on Summit updates. Following the &lt;a href="https://powershell.org/forums/forum/powershell-summit/"&gt;Summit category on PowerShell.org&lt;/a&gt;, and watching the &lt;a href="http://twitter.com/pshsummit"&gt;@PSHSummit Twitter account&lt;/a&gt;, are the reliable means of doing so.&lt;br&gt;
&lt;strong&gt;First:&lt;/strong&gt; Summit Europe is happening. There was some confusion because a draft blog post from a month ago got resurrected somehow, but the Summit is &lt;strong&gt;on.&lt;/strong&gt;&lt;br&gt;
**Second: **We&amp;rsquo;re almost sold out. I think we literally have 2 or 3 seats left. There was a rush over this past weekend.&lt;br&gt;
**Third: **We&amp;rsquo;re exploring other venues in Stockholm and Kista, which would afford us more room. I expect to have this pinned down no later than mid-May. The dates will not change, and the Kista area will probably not change. But &lt;strong&gt;pay attention&lt;/strong&gt; so you&amp;rsquo;re not going to the wrong building. Watching the Summit category and @PSHSummit Twitter page is vital, especially closer-in.&lt;br&gt;
**Fourth: **Hotel inventory in central Stockholm is dicey because there&amp;rsquo;s some giant conference at the waterfront conference center. There are rooms available just outside the central area, as well as in Kista. So long as you&amp;rsquo;re close to a tram line or Metro stop, you&amp;rsquo;re good to go - the Metro will be able to get you to whatever venue we select (we&amp;rsquo;re ensuring that).&lt;br&gt;
**Fifth: **That is all. Have a good week :).&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>First: Because e-mail these days is actually unreliable, what with spam filters and all, please know that we&rsquo;re relying on you to keep yourself informed on Summit updates. Following the<a href="https://powershell.org/forums/forum/powershell-summit/">Summit category on PowerShell.org</a>, and watching the<a href="http://twitter.com/pshsummit">@PSHSummit Twitter account</a>, are the reliable means of doing so.<br><strong>First:</strong> Summit Europe is happening. There was some confusion because a draft blog post from a month ago got resurrected somehow, but the Summit is <strong>on.</strong><br>
**Second: **We&rsquo;re almost sold out. I think we literally have 2 or 3 seats left. There was a rush over this past weekend.<br>
**Third: **We&rsquo;re exploring other venues in Stockholm and Kista, which would afford us more room. I expect to have this pinned down no later than mid-May. The dates will not change, and the Kista area will probably not change. But <strong>pay attention</strong> so you&rsquo;re not going to the wrong building. Watching the Summit category and @PSHSummit Twitter page is vital, especially closer-in.<br>
**Fourth: **Hotel inventory in central Stockholm is dicey because there&rsquo;s some giant conference at the waterfront conference center. There are rooms available just outside the central area, as well as in Kista. So long as you&rsquo;re close to a tram line or Metro stop, you&rsquo;re good to go - the Metro will be able to get you to whatever venue we select (we&rsquo;re ensuring that).<br>
**Fifth: **That is all. Have a good week :).</p>
]]></content:encoded></item><item><title>NJ PowerShell Users Group Meet: Presenter Jeffrey Hicks – Microsoft MVP</title><link>https://powershell.org/articles/2015-04-06-nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp/</link><guid>https://powershell.org/articles/2015-04-06-nj-powershell-users-group-meet-presenter-jeffrey-hicks-microsoft-mvp/</guid><pubDate>Mon, 06 Apr 2015 16:54:14 +0000</pubDate><description>&lt;p&gt;The NJ PowerShell User Group is having a meetup on Tuesday, April 28th from 6:00 - 8:00 PM.  The first half hour will be for socializing, pizza, and playing pool at our coffee bar. &lt;/p&gt;
&lt;p&gt;Agenda:&lt;/p&gt;
&lt;p&gt;                6:00 – 6:30: Pizza and socializing&lt;/p&gt;
&lt;p&gt;                6:30 – 7:30: Presentation&lt;/p&gt;
&lt;p&gt;                7:30 - 8:00: Q &amp;amp; A&lt;/p&gt;
&lt;p&gt;Please note that the Webex meeting will start at 6:00 PM, but the actual presentation won&amp;rsquo;t start until 6:30. In-Person a ttendees must register, print out their EventBrite ticket, and present it at the door.  Walk-ins will not be permitted.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The NJ PowerShell User Group is having a meetup on Tuesday, April 28th from 6:00 - 8:00 PM.  The first half hour will be for socializing, pizza, and playing pool at our coffee bar. </p><p>Agenda:</p><p>                6:00 – 6:30: Pizza and socializing</p><p>                6:30 – 7:30: Presentation</p><p>                7:30 - 8:00: Q &amp; A</p><p>Please note that the Webex meeting will start at 6:00 PM, but the actual presentation won&rsquo;t start until 6:30. In-Person a ttendees must register, print out their EventBrite ticket, and present it at the door.  Walk-ins will not be permitted.</p><p><img src="http://njpowershell.org/wp-content/uploads/2015/04/EventBritelogo.png" alt="Eventbrite"> <a href="http://www.eventbrite.com/e/nj-powershell-users-group-meet-april-28th-presenter-jeffrey-hicks-tickets-16466847785">Eventbrite Registration Page</a> 
A Webex meeting link will be emailed to Eventbrite on-line registrants prior to the event.</p><p><strong>Presenter</strong>: Jeffrey Hicks (in-person)</p><p>**Presentation: **
On the Job: Putting PowerShell Scheduled Jobs to Work for You. So you know how to use PowerShell and how it can make your job easier to do. But why should you have to be sitting at your desk to run a PowerShell script or command? Why not combine the simplicity of a PowerShell script with the ease of use of a scheduled task! PowerShell MVP and author Jeff Hicks will guide you through the process of setting up and using PowerShell scheduled jobs, including a few potential gotchas. By the end of the session you should know enough to be able to schedule the boring right out of your job.</p><p>**Bio: **
Jeffery Hicks is an IT veteran with over 25 years of experience, much of it spent as an IT infrastructure consultant specializing in Microsoft server technologies with an emphasis in automation and efficiency. He is a multi-year recipient of the Microsoft MVP Award in Windows PowerShell. He works today as an independent author, trainer and consultant. Jeff has written for numerous online sites and print publications, is a contributing editor at Petri.com (<a href="http://www.petri.com">http://www.petri.com</a>), and a frequent speaker at technology conferences and user groups. His latest book is<a href="http://www.amazon.com/PowerShell-Depth-Don-Jones/dp/1617292184/"> PowerShell In Depth: An Administrator&rsquo;s Guide 2nd Ed</a>.</p><p>Twitter:<a href="https://twitter.com/jeffhicks">@JeffHicks</a></p><p><a href="https://twitter.com/jeffhicks"><img src="http://njpowershell.org/wp-content/uploads/2015/04/JeffHicks-150x150.jpeg" alt="Jeff Hicks"/>   <a href="http://www.amazon.com/PowerShell-Depth-Don-Jones/dp/1617292184/"><img src="http://njpowershell.org/wp-content/uploads/2015/04/PowerShellInAction2nd-150x150.jpg" alt="PowerShell In Depth 2nd Ed."/></p><p>Coffee Bar, Pool Table, and XBox</p><p><img src="https://cdn.evbuc.com/eventlogos/111855199/eventbritecoffeebar.png" alt="Coffee Bar"/><p>Conference Room</p><p><img src="https://cdn.evbuc.com/eventlogos/111855199/eventbriteconferenceroom.png" alt="Conference Room"/>
]]></content:encoded></item><item><title>Omaha PSUG March Meeting Slides &amp; Video Now Available</title><link>https://powershell.org/articles/2015-04-02-omaha-psug-march-meeting-slides-video-now-available/</link><guid>https://powershell.org/articles/2015-04-02-omaha-psug-march-meeting-slides-video-now-available/</guid><pubDate>Thu, 02 Apr 2015 13:08:21 +0000</pubDate><description>&lt;p&gt;Trond Hindenes presented on Real Life SMA this month.  Boe Prox was able to get this presentation recorded and it is now on YouTube.&lt;br&gt;
The slides Trond used in his presentation are &lt;a href="https://onedrive.live.com/redir?resid=4bfe4a6675a48c91%21120"&gt;here&lt;/a&gt;.  The YouTube video is &lt;a href="https://youtu.be/eLKZ0GWAO10"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Trond Hindenes presented on Real Life SMA this month.  Boe Prox was able to get this presentation recorded and it is now on YouTube.<br>
The slides Trond used in his presentation are<a href="https://onedrive.live.com/redir?resid=4bfe4a6675a48c91%21120">here</a>.  The YouTube video is<a href="https://youtu.be/eLKZ0GWAO10">here</a>.</p>
]]></content:encoded></item><item><title>Special Charlotte PowerShell Group meeting on 4/22 featuring Lee Holmes</title><link>https://powershell.org/articles/2015-03-26-special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes/</link><guid>https://powershell.org/articles/2015-03-26-special-charlotte-powershell-group-meeting-on-422-featuring-lee-holmes/</guid><pubDate>Thu, 26 Mar 2015 22:41:03 +0000</pubDate><description>&lt;p&gt;Charlotte hackers, our regularly scheduled meeting on April 2nd will not be occurring. Instead we will have our monthly meeting on April 22nd. Can you hear the drum roll in the distance? It will continue to build to a crescendo as April 22nd approaches. Lee Holmes will be speaking at the meeting.&lt;/p&gt;
&lt;p&gt;In this highly interactive session, Principle PowerShell developer Lee Holmes shares some of his favorite PowerShell tips and tricks. Attendees are encouraged to share their favorite PowerShell tricks as well, and so the session should be both fun and educational.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Charlotte hackers, our regularly scheduled meeting on April 2nd will not be occurring. Instead we will have our monthly meeting on April 22nd. Can you hear the drum roll in the distance? It will continue to build to a crescendo as April 22nd approaches. Lee Holmes will be speaking at the meeting.</p><p>In this highly interactive session, Principle PowerShell developer Lee Holmes shares some of his favorite PowerShell tips and tricks. Attendees are encouraged to share their favorite PowerShell tricks as well, and so the session should be both fun and educational.</p><p>This is a remarkably unique opportunity to interact with one of the cornerstone developers of PowerShell. We expect a large turnout given the proximity to the PowerShell Summit, so we are requiring everyone to RSVP this time around.</p><p>In addition, we&rsquo;re giving Charlotte PowerShell Group members first crack at the reservations. Ed Wilson will be promoting this event heavily on his blog starting March 30, and it will likely be promoted as part of the PowerShell summit marketing as well. My point is - the seats will go fast. Get yours while you can.</p><p>Everyone wanting to attend this event will need to sign-up and join the Charlotte PowerShell User Group on MeetUp. Click on over and save your spot.</p><p><a href="http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/221424922/" title="http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/221424922/">http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/221424922/</a></p><p>We look forward to seeing everyone and enjoying a great meeting with Lee.</p>
]]></content:encoded></item><item><title>Home Labs for the IT pro</title><link>https://powershell.org/articles/2015-03-25-home-labs-for-the-it-pro/</link><guid>https://powershell.org/articles/2015-03-25-home-labs-for-the-it-pro/</guid><pubDate>Wed, 25 Mar 2015 15:34:48 +0000</pubDate><description>&lt;p&gt;Every IT pro needs a lab. It’s not just the fact that we all have a little mad scientist in us, it’s a playground for experimentation and learning. By “lab” I do not mean a formal test or dev environment, but a much more informal setting that typically goes before the “dev” part gets started. This lab need not be expensive. A little creative repurposing and virtualization will go a long way towards getting started with a home lab.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Every IT pro needs a lab. It’s not just the fact that we all have a little mad scientist in us, it’s a playground for experimentation and learning. By “lab” I do not mean a formal test or dev environment, but a much more informal setting that typically goes before the “dev” part gets started. This lab need not be expensive. A little creative repurposing and virtualization will go a long way towards getting started with a home lab.</p><ol><li>Hardware- Obviously you have to have a computer.<ul><li>The least expensive is the system you already have. When you bought it did you buy a high end Core i7 with lots of ram for gaming or just future proofing? If so then you’re done! Windows 8.1 or Windows 10 preview do a great job of Hyper-V hosting. Of course you may need more hard drive space, but then again drives are relatively cheap these days. The system I use is a 3 year old Dell XPS with a Core i7 and 6GB of Ram and an added 1TB SATA drive. Hardware cost = zero. Of course, I want to add more ram and disk but for now it gets along. I run 3-4 windows core servers at a time, but more than 4 causes the system to go into disk thrash mode pretty seriously due to RAM overuse.</li><li>The next best option takes up more space but can potentially be even cheaper in a strictly monetary sense. How does your company dispose of old outdated equipment? Can you score 5-10 laptops or a server or two? What about old Ethernet switches? That plus $50 at Walmart for some shelving and you have your own network in the basement to play with.</li><li>Finally if you have an extra $600 -800 you can get a dedicated PC bare-bones kit with a Core i7, 16+ GB of ram and a 2-3 TB hard drive.</li></ul></li></ol><ul><li><p>Software- If you are learning Linux then you’re in luck here as the cost is pretty much free. However in the Windows PowerShell lab, we need Windows! The approach to this is pretty much dependent on the cash you want to spend and the approach you took to solve the hardware problem. If you are using option a) then you don’t need a ‘host’ OS as you already have an OS. Microsoft offers free demo versions for download, and although they are time locked, these VMs aren’t going to usually live long enough to expire. If you already have a MSDN subscription from work, then you already have access to server OS downloads.</p></li><li><p>Networking- Obviously you have an internet connection. Beyond that, if your home is like mine, there are a dozen or so devices connected to the home LAN. Gaming consoles, televisions, DVRs, etc. that anyone else in the house may want to use while you are using your lab equipment. I strongly recommend that you keep the “lab” separate from your home network. If you are going the basement shelves of equipment route, you’ll certainly need some Ethernet switches and perhaps a router or firewall to keep the “lab” network separate. If you are going the more virtual route, you can do as I did and install a Linux router on a VM to act as firewall/gateway from the “virtual” subnet to the “real” LAN. I used VyOS (<a href="http://www.vyos.net">http://www.vyos.net</a>), which is nice since you can simply follow the directions on their site to do a basic setup. This keeps lab services in the virtual space where they belong.</p></li><li><p>Time- I know we are all busy, but seriously make the time. Getting this set up takes literally a couple of hours depending on your internet connection. Once it’s set, then you can squeeze in a little here and there and make surprising strides in your learning. Get up an hour earlier and play in the lab a bit while drinking coffee. Stay up an hour later and work on the lab after the family is in bed. Dedicate two or three lunch hours a week. You’ll be amazed how much faster you can learn things when you can just “try it and see what happens” with no fear of breaking something important. After all you built it- you can rebuild it!</p></li></ul><p>So now that we have all the parts together, what specifically do we need to build?  Since in most instances, we’ll be building this in a virtual space, let’s focus on that one. Those of you building a lab physically may have to fill in some blanks to match up with your physical setup but the concepts are the same.<br>
I start off with the most basic: the network. Servers are much more interesting when they can talk to each other some right? In Hyper-V Manager make two virtual switches, one is linked to your host machine’s NIC and therefore to the rest of your LAN and presumably the internet. The second one is an Internal Only type. These should be on separate subnets to keep the routing simple. I like to use a 10.x.x.x/24 network so that I have lots of room to play around with subnets and software based networking.<br>
Once we have those two networks, we need a router. As I mentioned before, I use VyOS installed on a VM with two NICS, one on the internal LabNet switch and on the external “HomeLan” switch.<br>
Next it’s time to start standing up servers. This can be done one of two ways; manually or via Desired State Configuration.   If you are like me, and just getting started with DSC, I recommend a mixed approach. Get your Domain Controller going and a Windows 8.1 or later client installed on your LabNet.  Now you have a stable network and can start playing around with DSC. I have a standard build of a configured router, DC, Windows 10 client, and a DSC server saved to a 1 TB USB drive as a backup. That way no matter how badly I hose up the lab, I can get back to a minimum stable configuration quickly and easily.  On the DSC server I keep a couple of copies of configurations for web servers, video servers, Windows 10 desktops, whatever it is that I’m playing with that week.<br>
The only thing I haven’t been able to really introduce test wise is Apple products since I’m running in a PC environment and there is no legal way to virtualize a Mac on hardware that isn’t Apple. Of course with a little twiddling of the router configuration and by introducing a VLAN on my wireless router I’m sure I could incorporate external wireless devices like a MacBook. However, that violates the premise of keeping the “Mad Scientist Stuff” in an isolated virtual space.<br>
Obviously there wasn’t much PowerShell in this discussion, and equally obviously, much of this you can do from a PowerShell prompt or with DSC. Unfortunately in order to get your skills to that level, the lab has to come first.</p>
]]></content:encoded></item><item><title>March Omaha PowerShell User Group Meeting</title><link>https://powershell.org/articles/2015-03-11-march-omaha-powershell-user-group-meeting/</link><guid>https://powershell.org/articles/2015-03-11-march-omaha-powershell-user-group-meeting/</guid><pubDate>Wed, 11 Mar 2015 12:52:14 +0000</pubDate><description>&lt;p&gt;This month we have several exciting things going on!  First, Trond Hindenes will be joining us via Lync from the great country of Norway for a presentation on Service Management Automation (SMA).  Trond is a Senior Consultant at Crayon who spends most of his non-snowboarding time working on Microsoft System Center, PowerShell, Active Directory, Virtualization and Microsoft Azure. You can find him on&lt;a href="https://twitter.com/trondhindenes"&gt;Twitter&lt;/a&gt; and on his website &lt;a href="http://hindenes.com/trondsworking/"&gt;Trond’s Working!&lt;/a&gt;&lt;br&gt;
Second, the first 30 minutes of this meeting will be used to announce the “official” formation of an Omaha System Center Users Group and to give attendees time to network with each other and talk to Matt, Kelly and Zac about the formation of the user group (if they are interested in learning more about it).  If you are interested in learning more about the Omaha Sytems Center User Group before the meeting you can find them on &lt;a href="http://twitter.com/omahascug%20"&gt;Twitter&lt;/a&gt; or you can email them &lt;a href="mailto:omahascug@outlook.com"&gt;omahascug@outlook.com&lt;/a&gt; .&lt;br&gt;
We will attempt to record Trond’s presentation using Lync but no promises :).&lt;br&gt;
&lt;a href="http://www.eventbrite.com/e/omaha-powershell-user-group-march-meeting-tickets-16120181898"&gt;Event Registration is here&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>This month we have several exciting things going on!  First, Trond Hindenes will be joining us via Lync from the great country of Norway for a presentation on Service Management Automation (SMA).  Trond is a Senior Consultant at Crayon who spends most of his non-snowboarding time working on Microsoft System Center, PowerShell, Active Directory, Virtualization and Microsoft Azure. You can find him on<a href="https://twitter.com/trondhindenes">Twitter</a> and on his website<a href="http://hindenes.com/trondsworking/">Trond’s Working!</a><br>
Second, the first 30 minutes of this meeting will be used to announce the “official” formation of an Omaha System Center Users Group and to give attendees time to network with each other and talk to Matt, Kelly and Zac about the formation of the user group (if they are interested in learning more about it).  If you are interested in learning more about the Omaha Sytems Center User Group before the meeting you can find them on<a href="http://twitter.com/omahascug%20">Twitter</a> or you can email them <a href="mailto:omahascug@outlook.com">omahascug@outlook.com</a> .<br>
We will attempt to record Trond’s presentation using Lync but no promises :).<br><a href="http://www.eventbrite.com/e/omaha-powershell-user-group-march-meeting-tickets-16120181898">Event Registration is here</a>.</p>
]]></content:encoded></item><item><title>PhillyPoSH 03/05/2015 meeting summary and presentation materials</title><link>https://powershell.org/articles/2015-03-10-phillyposh-03052015-meeting-summary-and-presentation-materials/</link><guid>https://powershell.org/articles/2015-03-10-phillyposh-03052015-meeting-summary-and-presentation-materials/</guid><pubDate>Wed, 11 Mar 2015 01:18:19 +0000</pubDate><description>&lt;p&gt;&lt;a href="https://twitter.com/OutOfOrder2day"&gt;Derek Murawsky&lt;/a&gt; gave an excellent presentation entitled “Introducing Chocolatey”. &lt;a href="https://github.com/PhillyPoSH/2015-03-Derek-Murawsky-Chocolatey-"&gt;A copy of his demo script and presentation&lt;/a&gt; are available here at our &lt;a href="https://github.com/PhillyPoSH"&gt;GitHub site&lt;/a&gt;. &lt;a href="https://www.youtube.com/watch?v=LqyHyoa_F1c"&gt;A recording of this meeting&lt;/a&gt; has been posted to our &lt;a href="https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg"&gt;YouTube channel&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><a href="https://twitter.com/OutOfOrder2day">Derek Murawsky</a> gave an excellent presentation entitled “Introducing Chocolatey”.<a href="https://github.com/PhillyPoSH/2015-03-Derek-Murawsky-Chocolatey-">A copy of his demo script and presentation</a> are available here at our<a href="https://github.com/PhillyPoSH">GitHub site</a>.<a href="https://www.youtube.com/watch?v=LqyHyoa_F1c">A recording of this meeting</a> has been posted to our<a href="https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg">YouTube channel</a>.</p>
]]></content:encoded></item><item><title>The fastest Powershell #1 : Count all users in Active Directory domain</title><link>https://powershell.org/articles/2015-03-06-the-fastest-powershell-2-count-all-users-in-active-directory-domain/</link><guid>https://powershell.org/articles/2015-03-06-the-fastest-powershell-2-count-all-users-in-active-directory-domain/</guid><pubDate>Sat, 07 Mar 2015 00:47:42 +0000</pubDate><description>&lt;p&gt;&lt;strong&gt;Updated :&lt;/strong&gt; October 01, 2015&lt;br&gt;
**
Question
**: What is the fastest solution to count all the users in Active Directory domain?&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;**
Answer
**: To answer this question, I will compare 17 different commands in a domain with 75 000 users.&lt;/p&gt;
&lt;p&gt;`[System.GC]::WaitForPendingFinalizers()
[System.GC]::Collect()
Set-Location -Path &amp;lsquo;C:\demo&amp;rsquo;
Add-Type -AssemblyName System.DirectoryServices.Protocols
Import-Module -Name .\S.DS.P.psd1
Add-PSSnapin -Name &amp;lsquo;Quest.ActiveRoles.ADManagement&amp;rsquo;
$searcher = [adsisearcher]&amp;rsquo;(&amp;amp;(objectclass=user)(objectcategory=person))'
$searcher.SearchRoot = &amp;lsquo;LDAP://DC=domain,DC=com&amp;rsquo;
$searcher.PageSize = 1000
$searcher.PropertiesToLoad.AddRange((&amp;lsquo;samaccountname&amp;rsquo;))
function Get-QueryResult
{
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$true)]
[int]$Id
)
switch ($id)
{
1 { ( Get-ADUser -Filter &amp;lsquo;objectClass -eq &amp;ldquo;user&amp;rdquo; -and objectCategory -eq &amp;ldquo;person&amp;rdquo;&amp;rsquo; -SearchBase &amp;lsquo;DC=domain,DC=com&amp;rsquo; -Properties SamAccountName).SamAccountName }
2 { ( Get-ADUser -LDAPFilter &amp;lsquo;(&amp;amp;(objectclass=user)(objectcategory=person))&amp;rsquo; -SearchBase &amp;lsquo;DC=domain,DC=com&amp;rsquo; -Properties SamAccountName).SamAccountName }
3 { ( Get-ADObject -Filter &amp;lsquo;objectCategory -eq &amp;ldquo;person&amp;rdquo; -and objectClass -eq &amp;ldquo;user&amp;rdquo;&amp;rsquo; -SearchBase &amp;lsquo;DC=domain,DC=com&amp;rsquo; -Properties SamAccountName).SamAccountName }
4 { ( Get-ADObject -LDAPFilter &amp;lsquo;(&amp;amp;(objectclass=user)(objectcategory=person))&amp;rsquo; -SearchBase &amp;lsquo;DC=domain,DC=com&amp;rsquo; -Properties SamAccountName).SamAccountName }
5 { ( Get-ADObject -LDAPFilter &amp;lsquo;sAMAccountType=805306368&amp;rsquo; -SearchBase &amp;lsquo;DC=domain,DC=com&amp;rsquo; -Properties SamAccountName).SamAccountName }
6 { ( Get-QADUser -SearchRoot &amp;lsquo;DC=domain,DC=com&amp;rsquo; -DontUseDefaultIncludedProperties -IncludedProperties SamAccountName -SizeLimit 0).SamAccountName }
7 { ( $searcher.FindAll() ) }
8 { (Find-LdapObject -SearchFilter:&amp;rsquo;(&amp;amp;(objectclass=user)(objectcategory=person))&amp;rsquo; -SearchBase:&amp;lsquo;DC=domain,DC=com&amp;rsquo; -LdapServer:&amp;rsquo;&amp;rsquo; -PageSize 1000 -PropertiesToLoad:@(&amp;lsquo;sAMAccountName&amp;rsquo;)) }
9 { (Find-LdapObject -SearchFilter:&amp;lsquo;sAMAccountType=805306368&amp;rsquo; -SearchBase:&amp;lsquo;DC=domain,DC=com&amp;rsquo; -LdapServer:&amp;rsquo;&amp;rsquo; -PageSize 1000 -PropertiesToLoad:@(&amp;lsquo;sAMAccountName&amp;rsquo;)) }
10 { (Find-LdapObject -SearchFilter:&amp;rsquo;(&amp;amp;(objectclass=user)(objectcategory=person))&amp;rsquo; -SearchBase:&amp;lsquo;DC=domain,DC=com&amp;rsquo; -LdapServer:&amp;rsquo;&amp;rsquo; -PageSize 1000) }
11 { (Find-LdapObject -SearchFilter:&amp;lsquo;sAMAccountType=805306368&amp;rsquo; -SearchBase:&amp;lsquo;DC=domain,DC=com&amp;rsquo; -LdapServer:&amp;rsquo;&amp;rsquo; -PageSize 1000) }
12 { (dsquery user -o samid &amp;lsquo;DC=domain,DC=com&amp;rsquo; -limit 0) }
13 { (dsquery * -filter &amp;lsquo;(&amp;amp;(objectclass=user)(objectcategory=person))&amp;rsquo; -attr samAccountName -attrsonly -limit 0) }
14 { (dsquery * -filter &amp;lsquo;sAMAccountType=805306368&amp;rsquo; -attr samAccountName -attrsonly -limit 0) }
15 { ([regex]::match((.\AdFind.exe -b &amp;lsquo;DC=domain,DC=com&amp;rsquo; -f &amp;lsquo;(&amp;amp;(objectclass=user)(objectcategory=person))&amp;rsquo; -c),&amp;rsquo;\d{5}&amp;rsquo;).value) 2&amp;gt; $null }
16 { ([regex]::match((.\AdFind.exe -b &amp;lsquo;DC=domain,DC=com&amp;rsquo; -f &amp;lsquo;sAMAccountType=805306368&amp;rsquo; -c),&amp;rsquo;\d{5}&amp;rsquo;).value) 2&amp;gt; $null }
17 { ([regex]::match((.\AdFind.exe -b &amp;lsquo;DC=domain,DC=com&amp;rsquo; -sc adobjcnt:user -c),&amp;rsquo;\d{5}&amp;rsquo;).value) 2&amp;gt; $null }
}
}&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><strong>Updated :</strong> October 01, 2015<br>
**
Question
**: What is the fastest solution to count all the users in Active Directory domain?</p><hr><p>**
Answer
**: To answer this question, I will compare 17 different commands in a domain with 75 000 users.</p><p>`[System.GC]::WaitForPendingFinalizers()
[System.GC]::Collect()
Set-Location -Path &lsquo;C:\demo&rsquo;
Add-Type -AssemblyName System.DirectoryServices.Protocols
Import-Module -Name .\S.DS.P.psd1
Add-PSSnapin -Name &lsquo;Quest.ActiveRoles.ADManagement&rsquo;
$searcher = [adsisearcher]&rsquo;(&amp;(objectclass=user)(objectcategory=person))'
$searcher.SearchRoot = &lsquo;LDAP://DC=domain,DC=com&rsquo;
$searcher.PageSize = 1000
$searcher.PropertiesToLoad.AddRange((&lsquo;samaccountname&rsquo;))
function Get-QueryResult
{
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$true)]
[int]$Id
)
switch ($id)
{
1 { ( Get-ADUser -Filter &lsquo;objectClass -eq &ldquo;user&rdquo; -and objectCategory -eq &ldquo;person&rdquo;&rsquo; -SearchBase &lsquo;DC=domain,DC=com&rsquo; -Properties SamAccountName).SamAccountName }
2 { ( Get-ADUser -LDAPFilter &lsquo;(&amp;(objectclass=user)(objectcategory=person))&rsquo; -SearchBase &lsquo;DC=domain,DC=com&rsquo; -Properties SamAccountName).SamAccountName }
3 { ( Get-ADObject -Filter &lsquo;objectCategory -eq &ldquo;person&rdquo; -and objectClass -eq &ldquo;user&rdquo;&rsquo; -SearchBase &lsquo;DC=domain,DC=com&rsquo; -Properties SamAccountName).SamAccountName }
4 { ( Get-ADObject -LDAPFilter &lsquo;(&amp;(objectclass=user)(objectcategory=person))&rsquo; -SearchBase &lsquo;DC=domain,DC=com&rsquo; -Properties SamAccountName).SamAccountName }
5 { ( Get-ADObject -LDAPFilter &lsquo;sAMAccountType=805306368&rsquo; -SearchBase &lsquo;DC=domain,DC=com&rsquo; -Properties SamAccountName).SamAccountName }
6 { ( Get-QADUser -SearchRoot &lsquo;DC=domain,DC=com&rsquo; -DontUseDefaultIncludedProperties -IncludedProperties SamAccountName -SizeLimit 0).SamAccountName }
7 { ( $searcher.FindAll() ) }
8 { (Find-LdapObject -SearchFilter:&rsquo;(&amp;(objectclass=user)(objectcategory=person))&rsquo; -SearchBase:&lsquo;DC=domain,DC=com&rsquo; -LdapServer:&rsquo;&rsquo; -PageSize 1000 -PropertiesToLoad:@(&lsquo;sAMAccountName&rsquo;)) }
9 { (Find-LdapObject -SearchFilter:&lsquo;sAMAccountType=805306368&rsquo; -SearchBase:&lsquo;DC=domain,DC=com&rsquo; -LdapServer:&rsquo;&rsquo; -PageSize 1000 -PropertiesToLoad:@(&lsquo;sAMAccountName&rsquo;)) }
10 { (Find-LdapObject -SearchFilter:&rsquo;(&amp;(objectclass=user)(objectcategory=person))&rsquo; -SearchBase:&lsquo;DC=domain,DC=com&rsquo; -LdapServer:&rsquo;&rsquo; -PageSize 1000) }
11 { (Find-LdapObject -SearchFilter:&lsquo;sAMAccountType=805306368&rsquo; -SearchBase:&lsquo;DC=domain,DC=com&rsquo; -LdapServer:&rsquo;&rsquo; -PageSize 1000) }
12 { (dsquery user -o samid &lsquo;DC=domain,DC=com&rsquo; -limit 0) }
13 { (dsquery * -filter &lsquo;(&amp;(objectclass=user)(objectcategory=person))&rsquo; -attr samAccountName -attrsonly -limit 0) }
14 { (dsquery * -filter &lsquo;sAMAccountType=805306368&rsquo; -attr samAccountName -attrsonly -limit 0) }
15 { ([regex]::match((.\AdFind.exe -b &lsquo;DC=domain,DC=com&rsquo; -f &lsquo;(&amp;(objectclass=user)(objectcategory=person))&rsquo; -c),&rsquo;\d{5}&rsquo;).value) 2&gt; $null }
16 { ([regex]::match((.\AdFind.exe -b &lsquo;DC=domain,DC=com&rsquo; -f &lsquo;sAMAccountType=805306368&rsquo; -c),&rsquo;\d{5}&rsquo;).value) 2&gt; $null }
17 { ([regex]::match((.\AdFind.exe -b &lsquo;DC=domain,DC=com&rsquo; -sc adobjcnt:user -c),&rsquo;\d{5}&rsquo;).value) 2&gt; $null }
}
}</p><h1 id="check" class="ps-heading">Check<a class="ps-heading-anchor" href="#check" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>for ($i = 1; $i -le 17; $i++)
{
if ($i -ge 15)
{
$count = Get-QueryResult -Id $i
}
else
{
$count = (Get-QueryResult -Id $i | Measure-Object).Count
}
[PSCustomObject]@{
Query = $i
Count = $count
}
}</p><h1 id="measure" class="ps-heading">Measure<a class="ps-heading-anchor" href="#measure" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>for ($i = 1; $i -le 17; $i++)
{
New-Variable -Name &ldquo;query$i&rdquo; -Value $(&rsquo;{0:N2}&rsquo; -f (Measure-Command -Expression { Get-QueryResult -ID $i }).TotalSeconds)
}
[PSObject]@{
&lsquo;Get-ADUser -Filter objectClass and objectCategory&rsquo; = $query1
&lsquo;Get-ADUser -LDAPFilter objectclass objectcategory&rsquo; = $query2
&lsquo;Get-ADObject -Filter objectClass and objectCategory&rsquo; = $query3
&lsquo;Get-ADObject -LDAPFilter objectclass objectcategory&rsquo; = $query4
&lsquo;Get-ADObject -LDAPFilter sAMAccountType=805306368&rsquo; = $query5
&lsquo;Quest&rsquo; = $query6
&lsquo;[adsisearcher]&rsquo; = $query7
&lsquo;Find-LdapObject objectClass and objectCategory PropertiesToLoad&rsquo; = $query8
&lsquo;Find-LdapObject sAMAccountType=805306368 PropertiesToLoad&rsquo; = $query9
&lsquo;Find-LdapObject objectClass and objectCategory&rsquo; = $query10
&lsquo;Find-LdapObject sAMAccountType=805306368&rsquo; = $query11
&lsquo;dsquery user -o samid&rsquo; = $query12
&lsquo;dsquery objectClass and objectCategory&rsquo; = $query13
&lsquo;dsquery sAMAccountType=805306368&rsquo; = $query14
&lsquo;adfind objectClass and objectCategory&rsquo; = $query15
&lsquo;adfind sAMAccountType=805306368&rsquo; = $query16
&lsquo;adfind -sc adobjcnt:user&rsquo; = $query17
}.GetEnumerator() | Sort-Object -Property Value | Select-Object -Property @{
Name = &lsquo;Query&rsquo;
Expression = {$<em>.Name}
}, @{
Name = &lsquo;TotalSeconds&rsquo;
Expression = {[double]$</em>.Value}
} | Sort-Object -Property TotalSeconds | Format-Table -AutoSize
`First, I check that all these commands return the same value:<br><a href="http://bit.ly/2bNwpXl">http://bit.ly/2bNwpXl</a><br>
Result:<br><a href="http://bit.ly/2bGT9pK">http://bit.ly/2bGT9pK</a></p><dl><dt><strong>Conclusion</strong></dt><dd>In this scenario, the fastest was :</dd></dl><p><code>AdFind.exe -b 'DC=domain,DC=com' -f 'sAMAccountType=805306368' -c</code><strong>Links</strong> :<br>
Download AdFind (adfind.exe)<br><a href="http://www.joeware.net/freetools/tools/adfind/">http://www.joeware.net/freetools/tools/adfind/</a><br>
Download System.DirectoryServices.Protocols module (S.DS.P.psm1)<br><a href="https://gallery.technet.microsoft.com/scriptcenter/Using-SystemDirectoryServic-0adf7ef5">https://gallery.technet.microsoft.com/scriptcenter/Using-SystemDirectoryServic-0adf7ef5</a><br>
Download QAD cmdlets (Get-QADUser)<br><a href="http://software.dell.com/products/activeroles-server/powershell.aspx">http://software.dell.com/products/activeroles-server/powershell.aspx</a><br>
All these tools in one file :<br><a href="http://bit.ly/2bnCRVk">http://bit.ly/2bnCRVk</a><br><strong>Note</strong> : If you have a faster solution, feel free to comment below so I can update my article.</p><hr><p>**
Real-world example
**:<br>
Couting the total numbers of users in Active Directory can be useful in some cases.<br>
You could need this information to generate statistics or reports, or maybe you just want to monitor the number of accounts created / removed on regular basis.</p><hr>
]]></content:encoded></item><item><title>Charlotte PowerShell User Group Meeting–3/5/2015</title><link>https://powershell.org/articles/2015-02-27-charlotte-powershell-user-group-meeting352015/</link><guid>https://powershell.org/articles/2015-02-27-charlotte-powershell-user-group-meeting352015/</guid><pubDate>Fri, 27 Feb 2015 18:52:15 +0000</pubDate><description>&lt;p&gt;We will be bringing you a presentation by Jason Walker, @AutomationJason, at our next meeting. Jason will be discussing the Anatomy of a DSC Resource. The session will dive into the anatomy of a DSC resource and will provide an understanding of what it takes to develop your own DSC resources.&lt;/p&gt;
&lt;p&gt;Food and drinks will be provided. Everyone is welcome. Please RSVP on the &lt;a href="http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/216116072/"&gt;MeetUp&lt;/a&gt; event page so we can plan food accordingly.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We will be bringing you a presentation by Jason Walker, @AutomationJason, at our next meeting. Jason will be discussing the Anatomy of a DSC Resource. The session will dive into the anatomy of a DSC resource and will provide an understanding of what it takes to develop your own DSC resources.</p><p>Food and drinks will be provided. Everyone is welcome. Please RSVP on the<a href="http://www.meetup.com/Charlotte-PowerShell-Users-Group/events/216116072/">MeetUp</a> event page so we can plan food accordingly.</p>
]]></content:encoded></item><item><title>PowerShell Summit Europe Registration</title><link>https://powershell.org/articles/2015-02-20-powershell-summit-europe-registration/</link><guid>https://powershell.org/articles/2015-02-20-powershell-summit-europe-registration/</guid><pubDate>Fri, 20 Feb 2015 14:35:03 +0000</pubDate><description>&lt;p&gt;Registration for PowerShell Summit Europe will commence on February 27th, 2015 at roughly 12:01am server time (I believe the server is in a Pacific time Azure datacenter). We will be limited to roughly 100 attendees.&lt;br&gt;
I want everyone to understand the basic rules of engagement for this. Setting up and running this event involves significant financial risk. While in this case the event venue, a Microsoft office in Kista (near Stockholm), Sweden, isn&amp;rsquo;t charging us huge fees and requiring us to commit to hotel rooms and the like, there is still risk. _Most of that risk is not borne by PowerShell.org, _but for the most part by myself, personally. Our speakers also commit to covering their own travel expenses (something we&amp;rsquo;re hoping to offset this year). In addition, PowerShell team members are taking &lt;em&gt;time away from the product&lt;/em&gt; to attend, which is a huge logistical commitment because it&amp;rsquo;s such a relatively small team.&lt;br&gt;
For the Europe 2014 event, we had very poor registration numbers almost until the last minute. We also had to work very hard to drum up topic submissions from European speakers. Those two facts worry us a lot, because it suggests that there isn&amp;rsquo;t a strong and engaged community interested in this event. If that&amp;rsquo;s the case, we don&amp;rsquo;t want to barge in and run the event at all. As a result, we&amp;rsquo;re going to be taking a pretty risk-averse approach this time, and I wanted to be up-front and forthright about it.&lt;br&gt;
So: We&amp;rsquo;re going to evaluate the registration numbers and velocity in mid-April. By then, we need to see at least 20-30 registrations. (We usually achieve that in the first week of registrations for the North American event.) If we&amp;rsquo;re not hitting that level, then &lt;strong&gt;the event is subject to cancellation&lt;/strong&gt; (and everyone will naturally get a full and complete refund).&lt;br&gt;
Also know that, should we make it past that point, registration &lt;strong&gt;will end by August 15th 2015&lt;/strong&gt; or when we fill the available space, whichever comes first. In other words, last-minute registration won&amp;rsquo;t be a thing.&lt;br&gt;
The success of this event **depends on the European members of the overall PowerShell community. **
You
need to help get the word out. We aren&amp;rsquo;t going to be advertising, soliciting Microsoft&amp;rsquo;s help, or other techniques. This isn&amp;rsquo;t a commercial conference; it&amp;rsquo;s being done &lt;em&gt;by&lt;/em&gt; the community and &lt;em&gt;for&lt;/em&gt; the community - and if the community can&amp;rsquo;t make it happen, then it won&amp;rsquo;t happen.&lt;br&gt;
Our agenda will be going online shortly, and you should head to &lt;a href="http://PowerShellSummit.org"&gt;http://PowerShellSummit.org&lt;/a&gt; to find the registration links (after reading the introductory material, click &amp;ldquo;Europe 2015&amp;rdquo; for details). We&amp;rsquo;ll get it all posted and ready for February 27th - it won&amp;rsquo;t be live until then. **Help us get the word out. **Tell co-workers. Use Twitter, Google+, and Facebook. Attend user group meetings and spread the word. We&amp;rsquo;ve got about 6 weeks to get 20-30 people signed up to make sure we&amp;rsquo;re covering base expenses and making this happen.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Registration for PowerShell Summit Europe will commence on February 27th, 2015 at roughly 12:01am server time (I believe the server is in a Pacific time Azure datacenter). We will be limited to roughly 100 attendees.<br>
I want everyone to understand the basic rules of engagement for this. Setting up and running this event involves significant financial risk. While in this case the event venue, a Microsoft office in Kista (near Stockholm), Sweden, isn&rsquo;t charging us huge fees and requiring us to commit to hotel rooms and the like, there is still risk. _Most of that risk is not borne by PowerShell.org, _but for the most part by myself, personally. Our speakers also commit to covering their own travel expenses (something we&rsquo;re hoping to offset this year). In addition, PowerShell team members are taking <em>time away from the product</em> to attend, which is a huge logistical commitment because it&rsquo;s such a relatively small team.<br>
For the Europe 2014 event, we had very poor registration numbers almost until the last minute. We also had to work very hard to drum up topic submissions from European speakers. Those two facts worry us a lot, because it suggests that there isn&rsquo;t a strong and engaged community interested in this event. If that&rsquo;s the case, we don&rsquo;t want to barge in and run the event at all. As a result, we&rsquo;re going to be taking a pretty risk-averse approach this time, and I wanted to be up-front and forthright about it.<br>
So: We&rsquo;re going to evaluate the registration numbers and velocity in mid-April. By then, we need to see at least 20-30 registrations. (We usually achieve that in the first week of registrations for the North American event.) If we&rsquo;re not hitting that level, then <strong>the event is subject to cancellation</strong> (and everyone will naturally get a full and complete refund).<br>
Also know that, should we make it past that point, registration <strong>will end by August 15th 2015</strong> or when we fill the available space, whichever comes first. In other words, last-minute registration won&rsquo;t be a thing.<br>
The success of this event **depends on the European members of the overall PowerShell community. **
You
need to help get the word out. We aren&rsquo;t going to be advertising, soliciting Microsoft&rsquo;s help, or other techniques. This isn&rsquo;t a commercial conference; it&rsquo;s being done <em>by</em> the community and <em>for</em> the community - and if the community can&rsquo;t make it happen, then it won&rsquo;t happen.<br>
Our agenda will be going online shortly, and you should head to<a href="http://PowerShellSummit.org">http://PowerShellSummit.org</a> to find the registration links (after reading the introductory material, click &ldquo;Europe 2015&rdquo; for details). We&rsquo;ll get it all posted and ready for February 27th - it won&rsquo;t be live until then. **Help us get the word out. **Tell co-workers. Use Twitter, Google+, and Facebook. Attend user group meetings and spread the word. We&rsquo;ve got about 6 weeks to get 20-30 people signed up to make sure we&rsquo;re covering base expenses and making this happen.</p>
]]></content:encoded></item><item><title>NJ PowerShell UG Meeting March 5th: Presenter Adam Bertram</title><link>https://powershell.org/articles/2015-02-19-nj-powershell-ug-meeting-march-5th-presenter-adam-bertram/</link><guid>https://powershell.org/articles/2015-02-19-nj-powershell-ug-meeting-march-5th-presenter-adam-bertram/</guid><pubDate>Thu, 19 Feb 2015 18:59:59 +0000</pubDate><description>&lt;p&gt;The NJ PowerShell User Group is having a meetup on Thursday, March 6th from 6:00 - 8:00 PM.  The first half hour will be for socializing, pizza, and playing pool at our coffee bar. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Registration&lt;/strong&gt;: &lt;a href="http://www.eventbrite.com/e/nj-powershell-ug-meeting-march-5th-presenter-adam-bertram-tickets-15834592693"&gt;EventBrite&lt;/a&gt;  You must register to attend in person.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agenda&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;                6:00 – 6:30: Pizza and socializing&lt;/p&gt;
&lt;p&gt;                6:30 – 7:30: Presentation&lt;/p&gt;
&lt;p&gt;                7:30 - 8:00: Q &amp;amp; A&lt;/p&gt;
&lt;p&gt;Please note that the Webex meeting will start at 6:00 PM, but the actual presentation won&amp;rsquo;t start until 6:30&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The NJ PowerShell User Group is having a meetup on Thursday, March 6th from 6:00 - 8:00 PM.  The first half hour will be for socializing, pizza, and playing pool at our coffee bar. </p><p><strong>Registration</strong>:<a href="http://www.eventbrite.com/e/nj-powershell-ug-meeting-march-5th-presenter-adam-bertram-tickets-15834592693">EventBrite</a>  You must register to attend in person.</p><p><strong>Agenda</strong>:</p><p>                6:00 – 6:30: Pizza and socializing</p><p>                6:30 – 7:30: Presentation</p><p>                7:30 - 8:00: Q &amp; A</p><p>Please note that the Webex meeting will start at 6:00 PM, but the actual presentation won&rsquo;t start until 6:30</p><p>. 
In-Person a</p><p>ttendees must register, print out their EventBrite ticket, and present it at the door.  Walk-ins will not be permitted.</p><p><strong>Presenter</strong>: Adam Bertram</p><p>**Bio: **
Adam has been in the IT industry since 1998 and has mostly focused his career on Microsoft technologies.  He&rsquo;s a child of autoexec.bat and batch menus, graduated to VBscript 10 years ago and made his way to Powershell 3 years ago.  Adam&rsquo;s passion is breaking complicated problems down and developing creative solutions using Powershell.  Due to his experience with Microsoft&rsquo;s Configuration Manager he&rsquo;s been known to write a lot of scripts around software management.</p><p><strong>Presentation Description:</strong></p><p>Managing Software Installs with Powershell</p><p>If you&rsquo;ve ever tried to script a software install or uninstall to a lot of different applications you&rsquo;ll know how hard it can be. Every piece of software seems to work in a different manner. This talk will go over a Powershell module I&rsquo;ve created that allows me to easily find, install and uninstall MSIs, InstallShield and other EXE installers. It also has the ability to perform various cleanup routines and perform many other functions necessary for the software to work as you would expect.</p><p>Twitter:<a href="https://twitter.com/adbertram">@adbertram</a></p><p> <a href="http://njpowershell.org/wp-content/uploads/2015/02/AdamBertram.png"><img src="http://njpowershell.org/wp-content/uploads/2015/02/AdamBertram-150x150.png" alt="AdamBertram"/> </p><p>Coffee Bar, Pool Table, and XBox</p><p><img src="https://cdn.evbuc.com/eventlogos/111855199/eventbritecoffeebar.png" alt="Coffee Bar"/><p>Conference Room</p><p><img src="https://cdn.evbuc.com/eventlogos/111855199/eventbriteconferenceroom.png" alt="Conference Room"/>
]]></content:encoded></item><item><title>Design the Next Scripting Games</title><link>https://powershell.org/articles/2015-02-09-design-the-next-scripting-games/</link><guid>https://powershell.org/articles/2015-02-09-design-the-next-scripting-games/</guid><pubDate>Mon, 09 Feb 2015 15:03:49 +0000</pubDate><description>&lt;p&gt;We have some folks working on the next Scripting Games&amp;hellip; but we want some feedback from the community to make sure we&amp;rsquo;re offering something of value.&lt;br&gt;
The current plan is to run a series of events, with both Beginner and Intermediate tracks. There will be no &amp;ldquo;advanced&amp;rdquo; track; the feeling is that, if you&amp;rsquo;re advanced, you should be helping out by judging ;). Events will be constructed as a combination of puzzles and real-world tasks, meaning some things will simply test your PowerShell skills, while others will test them in a more production-applicable way.&lt;br&gt;
What we need from the community is some sense of what you want to get from the Games. However, before you reply, understand what is NOT on the table: &lt;strong&gt;we will not be running an event where every entry gets personal commentary or feedback from an expert judge.&lt;/strong&gt; It simply isn&amp;rsquo;t practical - everyone doing the judging has a full-time job, and offering personal feedback just isn&amp;rsquo;t feasible.&lt;br&gt;
What COULD be on the table is offering a numeric score from a judge, based on the completeness of your entry and what the judge thinks of it. However, if it&amp;rsquo;s a low score, you&amp;rsquo;re not going to be told why (&amp;ldquo;no commentary,&amp;rdquo; see above). So we&amp;rsquo;re not sure that numeric scores are useful.&lt;br&gt;
One proposal has been to post the events, and have judges select both good ones and less-good ones to write about. In other words, provide commentary on the outstanding entries, but not EVERY entry. Individual entries wouldn&amp;rsquo;t receive a score, but you could certainly compare what you did to the outstanding ones that did receive commentary. The idea here is to give you a task on which to test your skills, and to provide some educational feedback on some representative entries. The fact is that, in any given task, we tend to see a lot of similar-looking entries anyway, so hopefully taking some of them and commenting (both positively and constructively) will help everyone &amp;ldquo;judge&amp;rdquo; their own entries and improve their skills.&lt;br&gt;
After trying numerous approaches to the Games over the past years, and after listening closely to people&amp;rsquo;s feedback, we&amp;rsquo;re trying to come up with something that is both useful and do-able.&lt;br&gt;
What do you think of that proposal? Or, would you offer another proposal for us to build the Games around? Keep in mind - any proposal that suggests &amp;ldquo;expert commentary on every entry&amp;rdquo; will simply have to be turned down outright. After major discussion, we simply can&amp;rsquo;t commit to it. We&amp;rsquo;ll leave this open for the month of February 2015 - &lt;a href="https://powershell.org/forums/topic/the-next-scripting-games-your-thoughts/"&gt;discuss away&lt;/a&gt;!&lt;br&gt;
&lt;a href="https://powershell.org/forums/topic/the-next-scripting-games-your-thoughts/"&gt;Add to the discussion in the Forums&lt;/a&gt;. Login required; not accepting comments on this post.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We have some folks working on the next Scripting Games&hellip; but we want some feedback from the community to make sure we&rsquo;re offering something of value.<br>
The current plan is to run a series of events, with both Beginner and Intermediate tracks. There will be no &ldquo;advanced&rdquo; track; the feeling is that, if you&rsquo;re advanced, you should be helping out by judging ;). Events will be constructed as a combination of puzzles and real-world tasks, meaning some things will simply test your PowerShell skills, while others will test them in a more production-applicable way.<br>
What we need from the community is some sense of what you want to get from the Games. However, before you reply, understand what is NOT on the table:<strong>we will not be running an event where every entry gets personal commentary or feedback from an expert judge.</strong> It simply isn&rsquo;t practical - everyone doing the judging has a full-time job, and offering personal feedback just isn&rsquo;t feasible.<br>
What COULD be on the table is offering a numeric score from a judge, based on the completeness of your entry and what the judge thinks of it. However, if it&rsquo;s a low score, you&rsquo;re not going to be told why (&ldquo;no commentary,&rdquo; see above). So we&rsquo;re not sure that numeric scores are useful.<br>
One proposal has been to post the events, and have judges select both good ones and less-good ones to write about. In other words, provide commentary on the outstanding entries, but not EVERY entry. Individual entries wouldn&rsquo;t receive a score, but you could certainly compare what you did to the outstanding ones that did receive commentary. The idea here is to give you a task on which to test your skills, and to provide some educational feedback on some representative entries. The fact is that, in any given task, we tend to see a lot of similar-looking entries anyway, so hopefully taking some of them and commenting (both positively and constructively) will help everyone &ldquo;judge&rdquo; their own entries and improve their skills.<br>
After trying numerous approaches to the Games over the past years, and after listening closely to people&rsquo;s feedback, we&rsquo;re trying to come up with something that is both useful and do-able.<br>
What do you think of that proposal? Or, would you offer another proposal for us to build the Games around? Keep in mind - any proposal that suggests &ldquo;expert commentary on every entry&rdquo; will simply have to be turned down outright. After major discussion, we simply can&rsquo;t commit to it. We&rsquo;ll leave this open for the month of February 2015 -<a href="https://powershell.org/forums/topic/the-next-scripting-games-your-thoughts/">discuss away</a>!<br><a href="https://powershell.org/forums/topic/the-next-scripting-games-your-thoughts/">Add to the discussion in the Forums</a>. Login required; not accepting comments on this post.</p>
]]></content:encoded></item><item><title>Charlotte PowerShell User Group 2/5/2014</title><link>https://powershell.org/articles/2015-01-26-charlotte-powershell-user-group-252014/</link><guid>https://powershell.org/articles/2015-01-26-charlotte-powershell-user-group-252014/</guid><pubDate>Mon, 26 Jan 2015 17:23:23 +0000</pubDate><description>&lt;p&gt;It has been quite a busy past couple of months and we have not had our monthly get-together. We are working to get back on track and will start in February. This month, I will be discussing IIS and PowerShell at our meeting. For those of you that do not know me, I am an IIS MVP and a PowerShell hack. I would like to tailor the discussion, demos, and examples to address specific questions or needs that the members have. You can also check out my powershell specific blogs &lt;a href="http://terrid.me/tag/powershell/"&gt;here&lt;/a&gt;. Feel free to tweet to @owterri with any content requests that you have.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>It has been quite a busy past couple of months and we have not had our monthly get-together. We are working to get back on track and will start in February. This month, I will be discussing IIS and PowerShell at our meeting. For those of you that do not know me, I am an IIS MVP and a PowerShell hack. I would like to tailor the discussion, demos, and examples to address specific questions or needs that the members have. You can also check out my powershell specific blogs<a href="http://terrid.me/tag/powershell/">here</a>. Feel free to tweet to @owterri with any content requests that you have.</p><p>Look forward to seeing you in a couple of weeks.</p>
]]></content:encoded></item><item><title>PowerShell.org Free eBook Transition</title><link>https://powershell.org/articles/2015-01-25-powershell-org-free-ebook-transition/</link><guid>https://powershell.org/articles/2015-01-25-powershell-org-free-ebook-transition/</guid><pubDate>Sun, 25 Jan 2015 13:02:48 +0000</pubDate><description>&lt;p&gt;Over the past few weeks, &lt;a href="https://twitter.com/salisbury_matt"&gt;Matt Penny&lt;/a&gt; has been busy moving our free eBooks into &lt;a href="http://penflip.com/powershellorg"&gt;their new home on Penflip&lt;/a&gt;. Code, when available, is located in our &lt;a href="http://github.com/powershellorg/ebooks"&gt;GitHub repo&lt;/a&gt;, and modules will &lt;a href="http://powershellgallery.com"&gt;soon be available in the PowerShell Gallery&lt;/a&gt; for downloading via Install-Module.&lt;br&gt;
Penflip is a Markdown-based editing system backed by GitHub. This means anyone can contribute corrections, additional material, and so on - which will make it easier to maintain these great books over time. You can download ebooks directly from Penflip in a variety of e-book formats. We&amp;rsquo;re now focused on electronic formats, rather than traditional page-based layout, although PDF is still an available download option if you want to make a hardcopy.&lt;br&gt;
The conversion from Word to Markdown was challenging and largely manual, so if you run across formatting problems (especially with code), we absolutely appreciate your help in fixing those. Simply &amp;ldquo;branch&amp;rdquo; the book, creating your own copy of the project. Make corrections, and then submit those back to the master branch. Approvals are manual, so give us a few days to review what you&amp;rsquo;ve done and merge it into the master.&lt;br&gt;
Massive thanks to Matt for all the long hours making this conversion happen, and to the folks who&amp;rsquo;ve submitted cover art for the new books.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Over the past few weeks,<a href="https://twitter.com/salisbury_matt">Matt Penny</a> has been busy moving our free eBooks into<a href="http://penflip.com/powershellorg">their new home on Penflip</a>. Code, when available, is located in our<a href="http://github.com/powershellorg/ebooks">GitHub repo</a>, and modules will<a href="http://powershellgallery.com">soon be available in the PowerShell Gallery</a> for downloading via Install-Module.<br>
Penflip is a Markdown-based editing system backed by GitHub. This means anyone can contribute corrections, additional material, and so on - which will make it easier to maintain these great books over time. You can download ebooks directly from Penflip in a variety of e-book formats. We&rsquo;re now focused on electronic formats, rather than traditional page-based layout, although PDF is still an available download option if you want to make a hardcopy.<br>
The conversion from Word to Markdown was challenging and largely manual, so if you run across formatting problems (especially with code), we absolutely appreciate your help in fixing those. Simply &ldquo;branch&rdquo; the book, creating your own copy of the project. Make corrections, and then submit those back to the master branch. Approvals are manual, so give us a few days to review what you&rsquo;ve done and merge it into the master.<br>
Massive thanks to Matt for all the long hours making this conversion happen, and to the folks who&rsquo;ve submitted cover art for the new books.</p>
]]></content:encoded></item><item><title>PowerShell Summit NA 2015 Agenda changes</title><link>https://powershell.org/articles/2015-01-18-powershell-summit-na-2015-agenda-changes/</link><guid>https://powershell.org/articles/2015-01-18-powershell-summit-na-2015-agenda-changes/</guid><pubDate>Sun, 18 Jan 2015 16:15:59 +0000</pubDate><description>&lt;p&gt;We’ve had to make some minor changes to the Summit agenda – the revised schedule is shown on the event web site - &lt;a href="http://eventmgr.azurewebsites.net/event/home/PSNA15" title="http://eventmgr.azurewebsites.net/event/home/PSNA15"&gt;
http://eventmgr.azurewebsites.net/event/home/PSNA15
&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We’ve had to make some minor changes to the Summit agenda – the revised schedule is shown on the event web site -<a href="http://eventmgr.azurewebsites.net/event/home/PSNA15" title="http://eventmgr.azurewebsites.net/event/home/PSNA15">
http://eventmgr.azurewebsites.net/event/home/PSNA15</a></p>
]]></content:encoded></item><item><title>Our eBook Transition – and Your Chance to Contribute!</title><link>https://powershell.org/articles/2015-01-17-our-ebook-transition-and-your-chance-to-contribute/</link><guid>https://powershell.org/articles/2015-01-17-our-ebook-transition-and-your-chance-to-contribute/</guid><pubDate>Sat, 17 Jan 2015 16:26:37 +0000</pubDate><description>&lt;p&gt;We&amp;rsquo;re in the process of migrating our free ebook collection over to Penflip, an online, Git-based collaborative authoring and publishing tool. Matt Penny has taken the lead in converting our Word documents to the Markdown syntax used by Penflip, and as &lt;a href="https://powershell.org/ebooks/"&gt;you can see on our ebooks page&lt;/a&gt;, most of the titles now have an initial version in Penflip.&lt;br&gt;
One neat thing about Penflip is that anyone can register for a free account, fork one of our projects, and make their own modifications. You can then submit your changes back to the master branch, so we can incorporate your changes into the ebook. This will make it easy for everyone in the community to suggest new content, offer corrections, and so on. &lt;strong&gt;I encourage you to help out -&lt;/strong&gt; right now, you may simply notice some flaws from the semi-automated and fully hellish Markdown conversion, and we&amp;rsquo;d love your assistance in correcting those.&lt;br&gt;
Penflip also supports on-demand downloads of each ebook in a variety of common formats, including EPUB, PDF, and more. That means you&amp;rsquo;ll always be able to grab the latest version of your favorite ebook. We&amp;rsquo;ve not yet migrated the source code that goes with some of the ebooks; the plan is to move those into our GitHub repo over the next week.&lt;br&gt;
Penflip will be enabling the next generation of our ebooks, including a massive new DSC title I plan to begin working on in 2015.&lt;br&gt;
&lt;strong&gt;Thanks for any help you can&lt;/strong&gt; &lt;strong&gt;provide&lt;/strong&gt;, and I hope you continue to find the ebooks helpful!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We&rsquo;re in the process of migrating our free ebook collection over to Penflip, an online, Git-based collaborative authoring and publishing tool. Matt Penny has taken the lead in converting our Word documents to the Markdown syntax used by Penflip, and as<a href="https://powershell.org/ebooks/">you can see on our ebooks page</a>, most of the titles now have an initial version in Penflip.<br>
One neat thing about Penflip is that anyone can register for a free account, fork one of our projects, and make their own modifications. You can then submit your changes back to the master branch, so we can incorporate your changes into the ebook. This will make it easy for everyone in the community to suggest new content, offer corrections, and so on. <strong>I encourage you to help out -</strong> right now, you may simply notice some flaws from the semi-automated and fully hellish Markdown conversion, and we&rsquo;d love your assistance in correcting those.<br>
Penflip also supports on-demand downloads of each ebook in a variety of common formats, including EPUB, PDF, and more. That means you&rsquo;ll always be able to grab the latest version of your favorite ebook. We&rsquo;ve not yet migrated the source code that goes with some of the ebooks; the plan is to move those into our GitHub repo over the next week.<br>
Penflip will be enabling the next generation of our ebooks, including a massive new DSC title I plan to begin working on in 2015.<br><strong>Thanks for any help you can</strong><strong>provide</strong>, and I hope you continue to find the ebooks helpful!</p>
]]></content:encoded></item><item><title>PhillyPoSH 01/08/2015 meeting summary and presentation materials</title><link>https://powershell.org/articles/2015-01-13-phillyposh-01082015-meeting-summary-and-presentation-materials/</link><guid>https://powershell.org/articles/2015-01-13-phillyposh-01082015-meeting-summary-and-presentation-materials/</guid><pubDate>Wed, 14 Jan 2015 02:12:41 +0000</pubDate><description>&lt;p&gt;&lt;a href="http://mellositmusings.com/"&gt;John Mello&lt;/a&gt; gave a presentation entitled “The ForEach and Where methods in Powershell v4 ”. &lt;a href="https://github.com/PhillyPoSH/2015-01"&gt;A copy of his demo script and presentation&lt;/a&gt; are available here at our &lt;a href="https://github.com/PhillyPoSH"&gt;GitHub site&lt;/a&gt;. &lt;a href="http://youtu.be/vc2Ukz2N9WQ"&gt;A recording of this meeting&lt;/a&gt; has been posted to our &lt;a href="https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg"&gt;YouTube channel&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><a href="http://mellositmusings.com/">John Mello</a> gave a presentation entitled “The ForEach and Where methods in Powershell v4 ”.<a href="https://github.com/PhillyPoSH/2015-01">A copy of his demo script and presentation</a> are available here at our<a href="https://github.com/PhillyPoSH">GitHub site</a>.<a href="http://youtu.be/vc2Ukz2N9WQ">A recording of this meeting</a> has been posted to our<a href="https://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg">YouTube channel</a>.</p>
]]></content:encoded></item><item><title>Let's Make a PowerShell Job Interview Quiz. C'mon and Help.</title><link>https://powershell.org/articles/2015-01-06-lets-make-a-powershell-job-interview-quiz-cmon-and-help/</link><guid>https://powershell.org/articles/2015-01-06-lets-make-a-powershell-job-interview-quiz-cmon-and-help/</guid><pubDate>Tue, 06 Jan 2015 23:51:30 +0000</pubDate><description>&lt;p&gt;The folks at &lt;a href="http://smarterer.com"&gt;Smarterer&lt;/a&gt; have agreed to let us - that&amp;rsquo;s all of us, as in &amp;ldquo;The PowerShell Community&amp;rdquo; - build a sort of &amp;ldquo;exam&amp;rdquo; for people to prove their PowerShell Proficiency. And I need your help to do it!&lt;br&gt;
&lt;strong&gt;Step 1&lt;/strong&gt;, you need to be pretty decent with PowerShell yourself. Not Level 12 Guru Level, mind you, but you should be working with it daily. &lt;a href="http://manning.com/jones6/"&gt;Most of this book&lt;/a&gt; should make sense to you.&lt;br&gt;
&lt;strong&gt;Step 2&lt;/strong&gt;, you need to download my Quiz Question Writing Guide (It&amp;rsquo;s all of 1 page) and Topic List. &lt;a href="https://powershell.org/wp-content/uploads/2015/01/PowerShell-Quiz-Guidelines.docx"&gt;PowerShell Quiz Guidelines&lt;/a&gt; is the download. Go on, I&amp;rsquo;ll wait.&lt;br&gt;
**Step 3, **you need to sign up, using your e-mail address, and let me know you&amp;rsquo;re interested in helping. What you&amp;rsquo;re volunteering to do is, over the course of February 2015, write at least 20 questions. That&amp;rsquo;s about 2 questions per category. You&amp;rsquo;re also agreeing to help peer-review the questions other folks write, so we can spot the stinkers. 
Signups are due by January 20th 2015
.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The folks at<a href="http://smarterer.com">Smarterer</a> have agreed to let us - that&rsquo;s all of us, as in &ldquo;The PowerShell Community&rdquo; - build a sort of &ldquo;exam&rdquo; for people to prove their PowerShell Proficiency. And I need your help to do it!<br><strong>Step 1</strong>, you need to be pretty decent with PowerShell yourself. Not Level 12 Guru Level, mind you, but you should be working with it daily.<a href="http://manning.com/jones6/">Most of this book</a> should make sense to you.<br><strong>Step 2</strong>, you need to download my Quiz Question Writing Guide (It&rsquo;s all of 1 page) and Topic List. <a href="https://powershell.org/wp-content/uploads/2015/01/PowerShell-Quiz-Guidelines.docx">PowerShell Quiz Guidelines</a> is the download. Go on, I&rsquo;ll wait.<br>
**Step 3, **you need to sign up, using your e-mail address, and let me know you&rsquo;re interested in helping. What you&rsquo;re volunteering to do is, over the course of February 2015, write at least 20 questions. That&rsquo;s about 2 questions per category. You&rsquo;re also agreeing to help peer-review the questions other folks write, so we can spot the stinkers. 
Signups are due by January 20th 2015
.</p><p><a href="http://674004.polldaddy.com/s/help-create-a-powershell-quiz">Go here to register!</a></p><p>**BTW, **20 questions total is only about 1 per day. You could totally do 5 per day if you made an effort. Think about PowerShell questions you&rsquo;d ask during a job interview, to tell if someone knew their stuff or was merely a poser. _We cannot have too many good questions. _<br>
**Now for the good news there are prizes! **<a href="http://pluralsight.com">Pluralsight</a> is offering a prizes to the top net question contributors (&ldquo;net contributor&rdquo; means the number of questions you write that survive peer review and are accepted by the Quiz Captain).</p><ul><li>1st place: $200 Amazon gift card and 6 months of access to the entire Pluralsight library</li><li>2nd place: $100 Amazon gift card and 3 months of access to the entire Pluralsight library</li><li>3rd place: $50 Amazon gift card and 1 month of access to the entire Pluralsight library</li></ul><p><strong>We&rsquo;re also looking for a Quiz Captain</strong>, so when you register, indicate if you&rsquo;re willing to take on that role. There&rsquo;s only one, and you&rsquo;re exempt from the prize (that&rsquo;s what you get for stepping up). You&rsquo;re in charge of final acceptance on all questions that go into the final pool - not so much for technical accuracy, but for being well-written.<br><strong>Disclosures:</strong> You&rsquo;ll be using an online authoring tool called Flock, which means your registration e-mail address (which you provide) will be provided to Smarterer, so they can load you into the tool and send you an access invite via e-mail. Your e-mail will also be used to contact you about the project, and regarding any prizes you may earn.<br>
**WHY? **Well, the idea is that we&rsquo;re all getting to a point where we&rsquo;ll need to hire PowerShell sk1llz. Rather than us all concocting our own job interviews, this&rsquo;ll act as a kind of central, crowdsourced job interview you could direct a job candidate to. Yes, some of you will also ask for a more in-depth interview, perhaps offering a coding challenge or something - that&rsquo;s awesome. <em>This</em> is just the first stage you could use. The exam will be available free of charge to anyone who wants to take it, anytime, ever. And it can be updated and evolved as the technology, and our business needs, evolve.</p>
]]></content:encoded></item><item><title>eBook Cover Contest</title><link>https://powershell.org/articles/2015-01-06-ebook-cover-contest/</link><guid>https://powershell.org/articles/2015-01-06-ebook-cover-contest/</guid><pubDate>Tue, 06 Jan 2015 18:55:11 +0000</pubDate><description>&lt;p&gt;Fancy yourself a graphics person? Just like to doodle?&lt;br&gt;
We&amp;rsquo;re holding a contest to create new covers for our various &lt;a href="https://powershell.org/ebooks/"&gt;ebooks&lt;/a&gt;. Winners will receive absolutely nothing, other than a cover credit within the text (hey, we&amp;rsquo;ll also give you a full set of the ebooks for free, what the heck).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Covers must include the book title, and should include the PowerShell.org logo. The logo is below.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t include author names in the artwork. Authors are credit on the book&amp;rsquo;s &amp;ldquo;About&amp;rdquo; page.&lt;/li&gt;
&lt;li&gt;Images must be 8.5&amp;quot; wide by 11&amp;quot; high, preferably at 300dpi, in PNG or JPG format (&lt;a href="https://www.penflip.com/Penflip/help/blob/master/publishing/cover.md"&gt;see these specifications&lt;/a&gt; if you need that sizing in pixels).&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t include art, photos, or any other elements that you yanked off the Internet, including Microsoft imagery, unless you can provide us with written permission from the copyright holder to use it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can submit a series for all the books, or just covers for the book or books you like best.&lt;br&gt;
Be serious. Have fun. Whatever! Send submissions via e-mail to Admin, right here at PowerShell.org. We&amp;rsquo;ll let you submit until the **end of January 2015, **and we&amp;rsquo;ll pick the best selections we have at the time.&lt;br&gt;
&lt;a href="https://powershell.org/wp-content/uploads/2015/01/metro-logo.png"&gt;&lt;img src="https://powershell.org/wp-content/uploads/2015/01/metro-logo.png" alt="metro-logo"&gt;&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Fancy yourself a graphics person? Just like to doodle?<br>
We&rsquo;re holding a contest to create new covers for our various<a href="https://powershell.org/ebooks/">ebooks</a>. Winners will receive absolutely nothing, other than a cover credit within the text (hey, we&rsquo;ll also give you a full set of the ebooks for free, what the heck).</p><ul><li>Covers must include the book title, and should include the PowerShell.org logo. The logo is below.</li><li>Don&rsquo;t include author names in the artwork. Authors are credit on the book&rsquo;s &ldquo;About&rdquo; page.</li><li>Images must be 8.5" wide by 11" high, preferably at 300dpi, in PNG or JPG format (<a href="https://www.penflip.com/Penflip/help/blob/master/publishing/cover.md">see these specifications</a> if you need that sizing in pixels).</li><li>Don&rsquo;t include art, photos, or any other elements that you yanked off the Internet, including Microsoft imagery, unless you can provide us with written permission from the copyright holder to use it.</li></ul><p>You can submit a series for all the books, or just covers for the book or books you like best.<br>
Be serious. Have fun. Whatever! Send submissions via e-mail to Admin, right here at PowerShell.org. We&rsquo;ll let you submit until the **end of January 2015, **and we&rsquo;ll pick the best selections we have at the time.<br><a href="https://powershell.org/wp-content/uploads/2015/01/metro-logo.png"><img src="https://powershell.org/wp-content/uploads/2015/01/metro-logo.png" alt="metro-logo"/></p>
]]></content:encoded></item><item><title>PowerShell Summit Europe 2015–topic submissions</title><link>https://powershell.org/articles/2015-01-06-powershell-summit-europe-2015-topic-submissions/</link><guid>https://powershell.org/articles/2015-01-06-powershell-summit-europe-2015-topic-submissions/</guid><pubDate>Tue, 06 Jan 2015 09:02:42 +0000</pubDate><description>&lt;p&gt;Topic submissions for the PowerShell Summit Europe are still open. If you want to be considered as a speaker please submit your topic very soon.&lt;br&gt;
At the moment there aren’t enough submissions to enable us to put on a quality event. The 2014 European Summit was an excellent event with many good sessions – now is the time to submit your sessions. We need your sessions.&lt;br&gt;
We have a policy of accepting sessions from new speakers as well as established experts. It’s not who you are but the quality of the session that counts.&lt;br&gt;
Details on how to submit session proposals are available here&lt;br&gt;
&lt;a href="https://powershell.org/2014/11/24/call-for-presentations-for-powershell-summit-europe-2015/" title="https://powershell.org/2014/11/24/call-for-presentations-for-powershell-summit-europe-2015/"&gt;
https://powershell.org/2014/11/24/call-for-presentations-for-powershell-summit-europe-2015/
&lt;/a&gt;&lt;br&gt;
Please submit your proposals soon as we can’t run the European PowerShell Summit without them! As a note, we are confirmed for Stockholm (or within a a short subway ride of Stockholm) for the timeframe indicated, although we don&amp;rsquo;t have the exact venue yet. It&amp;rsquo;s important that we get sessions lined up soon, so that we can begin general registration.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Topic submissions for the PowerShell Summit Europe are still open. If you want to be considered as a speaker please submit your topic very soon.<br>
At the moment there aren’t enough submissions to enable us to put on a quality event. The 2014 European Summit was an excellent event with many good sessions – now is the time to submit your sessions. We need your sessions.<br>
We have a policy of accepting sessions from new speakers as well as established experts. It’s not who you are but the quality of the session that counts.<br>
Details on how to submit session proposals are available here<br><a href="https://powershell.org/2014/11/24/call-for-presentations-for-powershell-summit-europe-2015/" title="https://powershell.org/2014/11/24/call-for-presentations-for-powershell-summit-europe-2015/">
https://powershell.org/2014/11/24/call-for-presentations-for-powershell-summit-europe-2015/</a><br>
Please submit your proposals soon as we can’t run the European PowerShell Summit without them! As a note, we are confirmed for Stockholm (or within a a short subway ride of Stockholm) for the timeframe indicated, although we don&rsquo;t have the exact venue yet. It&rsquo;s important that we get sessions lined up soon, so that we can begin general registration.</p>
]]></content:encoded></item></channel></rss>