&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 2016 on PowerShell.org - Welcome Automaters!</title><link>https://powershell.org/articles/2016/</link><description>Recent content in Articles from 2016 on PowerShell.org - Welcome Automaters!</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://powershell.org/articles/2016/index.xml" rel="self" type="application/rss+xml"/><item><title>UPDATE / Tug: The Open-Source DSC Pull Server</title><link>https://powershell.org/articles/2016-12-19-update-tug-the-open-source-dsc-pull-server/</link><guid>https://powershell.org/articles/2016-12-19-update-tug-the-open-source-dsc-pull-server/</guid><pubDate>Mon, 19 Dec 2016 17:25:49 +0000</pubDate><description>&lt;p&gt;If you haven&amp;rsquo;t taken a look at &lt;a href="https://github.com/powershellorg/tug"&gt;Tug&lt;/a&gt;, now&amp;rsquo;s a great time. Eugene Bekker has been doing a ton of heavy lifting, taking my .NET Core proof-of-concept code and turning it into a formal ASP.NET MVC project.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>If you haven&rsquo;t taken a look at<a href="https://github.com/powershellorg/tug">Tug</a>, now&rsquo;s a great time. Eugene Bekker has been doing a ton of heavy lifting, taking my .NET Core proof-of-concept code and turning it into a formal ASP.NET MVC project.</p><p>Tug is nominally cross-platform. Basically, it&rsquo;s n ASP.NET Core application that can run under any Web server that supports ASP.NET Core, which includes Windows, Windows Nano Server, and even Linux. Tug knows the DSC protocol, so it receives requests from Local Configuration Managers (LCMs) on DSC target nodes.<br>
Tug has no &ldquo;brains&rdquo; to deal with those request, though. Instead, it implements a provider layer, and calls upon a provider to deal with requests. A very simple provider is currently implemented, which runs PowerShell commands in response to LCM requests. So, short story, if you can write a PowerShell advance function, you can make your pull server behave in whatever way you want. Store data in SQL Server, if you like, for example.<br>
Because of some hitches in .NET Core 1.0, that run-PowerShell-commands trick doesn&rsquo;t work well. so to do that you really have to target full .NET, which limits you to running Pull server on Windows Server or Windows Server Core. That should be fine for most folks.<br>
But you can also write Tug providers in full .NET - meaning you can use (say) EF Framework to manipulate target node data.<br>
Presently, Tug doesn&rsquo;t implement the Report Server functionality - it&rsquo;s stubbed out, and that&rsquo;s coming next. And if you&rsquo;re thinking, &ldquo;will Tug be able to ____,&rdquo; the answer is, &ldquo;yes - if you write a provider layer that lets it do ____, which can include writing PowerShell commands (functions) that do ____.&rdquo; Tug isn&rsquo;t intended to lock you into one operational mode. Do you want to store client data in SQL Server, and assemble MOFs on-the-fly? You can program Tug to do that. Do you want to store everything in XML files? You an program Tug to do that. Want to use client certificate authentication for nodes? You can program Tug to do that. Because everyone wants something a little different from their Pull server, Tug&rsquo;s designed to let you code up whatever model you prefer.<br>
Tug&rsquo;s an open-source project on GitHub, licensed under MIT, which means you can use it for whatever you want. We&rsquo;ve got a<a href="https://github.com/PowerShellOrg/tug/blob/master/TODO.md">brainstorming document</a> with ideas, and if you&rsquo;d like to contribute, that&rsquo;s a place to start. **And please, contribute. **If you can&rsquo;t, but you follow someone in the community who might be able to, please draw their attention to the project.</p>]]></content:encoded></item><item><title>The Key to Understanding PowerShell – on Windows or Linux</title><link>https://powershell.org/articles/2016-12-15-the-key-to-understanding-powershell-on-windows-or-linux/</link><guid>https://powershell.org/articles/2016-12-15-the-key-to-understanding-powershell-on-windows-or-linux/</guid><pubDate>Thu, 15 Dec 2016 15:22:12 +0000</pubDate><description>&lt;p&gt;I&amp;rsquo;ve listened to a few of my Windows-friendly compatriots attempting to explain PowerShell to their Linux colleagues, and it hasn&amp;rsquo;t always gone well. The problem, I think, is that a lot of Windows folks don&amp;rsquo;t actually know why PowerShell exists in the first place. Let me explain.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I&rsquo;ve listened to a few of my Windows-friendly compatriots attempting to explain PowerShell to their Linux colleagues, and it hasn&rsquo;t always gone well. The problem, I think, is that a lot of Windows folks don&rsquo;t actually know why PowerShell exists in the first place. Let me explain.</p><p>PowerShell _does not exist to automate administrative tasks. _Re-read that a few times until it really sinks in. You see, you start going at the Linux guys with this &ldquo;automation&rdquo; argument, and they&rsquo;re all like, &ldquo;yeah, man, we&rsquo;ve had that for always.&rdquo; The existence of PowerShell on Linux makes no sense if the point of PowerShell is simply automation. In fact, PowerShell <em>as an automation mechanism</em> also _makes no sense on Windows. _Keep in mind that all PowerShell does is built on WMI/CIM and .NET Framework; there was nothing stopping you from using those things in the first place. You didn&rsquo;t <em>need</em> PowerShell.<br>
The point of PowerShell is that .NET Framework is a terrible surface for systems administrators. Getting anything done correctly in .NET requires you to <em>write an application</em> of some size, compile it, and run it. .NET wasn&rsquo;t designed with ad-hoc, system-level &ldquo;scripting&rdquo; in mind; it&rsquo;s an application development framework. An empty .NET project starts with dozens of lines of code and configuration; that&rsquo;s the bare minimum to even start writing code. For admins, it&rsquo;s too much. Heck, it&rsquo;s sometimes too much for _developers, _which is why some of them like PowerShell as a &ldquo;.NET immediate window&rdquo; so much - they can just bang out a one-liner, hit Enter, and get results.<br>
I&rsquo;ll argue that all operating systems rely on APIs for command-and-control. If you want to tell Windows to shut down, you need an API to do it. In modern times, that API comes via WMI/CIM or .NET, for the most part. In Linux, if you want to configure Apache to listen to a different port, you need an API. That API comes in the form of a text file. I&rsquo;ll also argue that, from a systems administration perspective, all APIs suck. In Windows, you&rsquo;re forced to learn this vast and complex .NET Framework, which is only marginally consistent within itself, and which requires a (relative) ton of code to make do anything. In Linux, you&rsquo;re forced to learn regular expressions and text parsing, along with a bunch of poorly-interconnected command-line tools that have improbable names invented by Dungeons &amp; Dragons geeks in the 1960s and 1970s. &ldquo;Grep,&rdquo; as an API for systems administration, was never a good idea - it&rsquo;s just what got the job done when your main configuration surface was a bunch of text files.<br>
The <em><strong>entire point of PowerShell</strong></em> is nothing more, nor less, than to wrap a more-consistent, <em>administrator-friendly</em> API around those other sucky APIs. PowerShell is an abstraction layer, and that&rsquo;s it. Do you know how to conquer up a ServiceController reference in .NET, and ask it to restart a surface? Me neither, nor do I care to learn - I&rsquo;ll just run Restart-Service, which does all that under the hood. Do you know how to pull a daemon list on Linux, retrieve just the httpd daemon, and restart it? You might, but I don&rsquo;t, and I don&rsquo;t care to learn that either - I&rsquo;ll run Restart-Daemon (which will exist someday, I swear it).<br>
On Windows, PowerShell doesn&rsquo;t replace .NET. We all know that. It makes .NET easier for an admin to use in the context of administration. On Linux, PowerShell doesn&rsquo;t replace grepsedawk and all the text files - it simply makes them easier, and more consistent, to use for administration. The point of PowerShell is that it allows us to deal in deterministic data structures (objects) without having to be text-parsing experts. It wraps poorly designed underlying APIs into something with a consistent, admin-focused surface. That&rsquo;s it.<br>
PowerShell does not posit that, on Linux, grepsedawk is a bad idea. PowerShell simply suggests that those tools, and their friends, are a lot harder to learn and use than they should be. PowerShell&rsquo;s value-add is not automation - you can do that without PowerShell. PowerShell&rsquo;s value-add is _better productivity as you automate, _and that&rsquo;s something anyone should be able to wrap their minds around.</p>]]></content:encoded></item><item><title>PowerShell Gotchas</title><link>https://powershell.org/articles/2016-12-05-powershell-gotchas/</link><guid>https://powershell.org/articles/2016-12-05-powershell-gotchas/</guid><pubDate>Mon, 05 Dec 2016 00:28:59 +0000</pubDate><description>&lt;p&gt;You can certainly find a number of articles around that present PowerShell pitfalls that can easily trip you up if you are not careful. I took a different approach in my three-part series, &lt;em&gt;A Plethora of PowerShell Pitfalls&lt;/em&gt;.&lt;br&gt;
The first two parts are presented in quiz format, together covering the top 10 &amp;ldquo;gotchas&amp;rdquo;. They will help you test your awareness to see if you even realized the danger and did not know you&amp;rsquo;ve been skirting those traps for awhile. After you&amp;rsquo;ve had an opportunity to consider the conundrums presented, I then go into detailed explanations for why they happen and how to fix them.&lt;br&gt;
The third and final part is a compendium of all the common &amp;ldquo;gotchas&amp;rdquo; that I put together after reviewing all the other lists out there. The more than 35 entries in the list cover, I believe, a good 98% of the issues you would likely encounter. Yes, there are more esoteric pitfalls as well, but I ran out of web page&amp;hellip; 🙂&lt;br&gt;
Part 1: &lt;a href="https://www.simple-talk.com/sysadmin/powershell/a-plethora-of-powershell-pitfalls/"&gt;Pesky Parameter Problems&lt;/a&gt;&lt;br&gt;
Part 2: &lt;a href="https://www.simple-talk.com/sysadmin/powershell/a-plethora-of-powershell-pitfalls-part-2/"&gt;A Portion of Potential Puzzles&lt;/a&gt;&lt;br&gt;
Part 3: &lt;a href="https://www.simple-talk.com/sysadmin/powershell/the-poster-of-the-plethora-of-powershell-pitfalls/"&gt;The Compendium&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>You can certainly find a number of articles around that present PowerShell pitfalls that can easily trip you up if you are not careful. I took a different approach in my three-part series,<em>A Plethora of PowerShell Pitfalls</em>.<br>
The first two parts are presented in quiz format, together covering the top 10 &ldquo;gotchas&rdquo;. They will help you test your awareness to see if you even realized the danger and did not know you&rsquo;ve been skirting those traps for awhile. After you&rsquo;ve had an opportunity to consider the conundrums presented, I then go into detailed explanations for why they happen and how to fix them.<br>
The third and final part is a compendium of all the common &ldquo;gotchas&rdquo; that I put together after reviewing all the other lists out there. The more than 35 entries in the list cover, I believe, a good 98% of the issues you would likely encounter. Yes, there are more esoteric pitfalls as well, but I ran out of web page&hellip; 🙂<br>
Part 1:<a href="https://www.simple-talk.com/sysadmin/powershell/a-plethora-of-powershell-pitfalls/">Pesky Parameter Problems</a><br>
Part 2:<a href="https://www.simple-talk.com/sysadmin/powershell/a-plethora-of-powershell-pitfalls-part-2/">A Portion of Potential Puzzles</a><br>
Part 3:<a href="https://www.simple-talk.com/sysadmin/powershell/the-poster-of-the-plethora-of-powershell-pitfalls/">The Compendium</a></p>
]]></content:encoded></item><item><title>The Flavors of Windows Containers</title><link>https://powershell.org/articles/2016-11-01-the-flavors-of-windows-containers/</link><guid>https://powershell.org/articles/2016-11-01-the-flavors-of-windows-containers/</guid><pubDate>Tue, 01 Nov 2016 16:59:01 +0000</pubDate><description>&lt;p&gt;I had a wonderful conversation with some team members around Windows Containers generally, and they had some very cool analogies that I don&amp;rsquo;t think have been publicized enough. There&amp;rsquo;s some good technical detail, too, which I think is worth understanding as we move into this brave new world of containerization.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I had a wonderful conversation with some team members around Windows Containers generally, and they had some very cool analogies that I don&rsquo;t think have been publicized enough. There&rsquo;s some good technical detail, too, which I think is worth understanding as we move into this brave new world of containerization.</p><p>First, let&rsquo;s just quickly review our oldest kind of &ldquo;container,&rdquo; the virtual machine. I&rsquo;m going to generalize a bit here, so that what I&rsquo;m writing is true for any kind of VM. Essentially, a virtual machine is a very rigidly scoped process. The host computer, via software known as a hypervisor, emulates all of the services that a real, physical computer would provide. The hypervisor pretends to be a network card, a BIOS, a CPU, RAM, and so on. Upon that virtual hardware runs a normal off-the-shelf operating system, which in turn runs whatever software you want. Now, that description is true of an old-time virtualization situation. In reality, modern hypervisors take a variety of approaches to help improve the performance of that situation. For example, CPUs are rarely _emulated, _per se; instead, the hypervisor manages thread scheduling on the physical CPUs, and more or less exposes them directly to the VM. Kinda; I&rsquo;m simplifying a bit. Hyper-V also uses <em>synthetic</em> hardware versus <em>emulated</em> hardware for many devices, which again reduces overhead and improves performance.<br>
Now let&rsquo;s move on to containers, which - for the purposes of a simple explanation - can be a Linux container or a Windows Server container. Notice that I&rsquo;m not using the word &ldquo;Docker,&rdquo; here, because Docker is a container <em>management</em> solution, really, and can manage both Linux containers and Windows containers. A container is not a virtual machine, in any way, shape, or form. There&rsquo;s no emulated or synthesized hardware. Instead, a container is just a normal application running as a normal process. In the operating system&rsquo;s process list, this application is essentially marked &ldquo;this is a container.&rdquo; That special &ldquo;marker&rdquo; causes some bits of the operating system to behave a little differently. For example, when the application asks the OS to write to a file on disk, or (on Windows) to a registry key, the OS &ldquo;intercepts&rdquo; that call and instead writes the data to an area that belongs just to that application. Any read requests first check that private area, so the application gets the data it expects. Read requests that can&rsquo;t be fulfilled by the private area are directed back to the &ldquo;main&rdquo; file system (or registry, or whatever), so the application &ldquo;believes&rdquo; it is running all by itself on a full computer. The practical upshot of this is that the application can&rsquo;t change anything in the &ldquo;common&rdquo; OS, although the application doesn&rsquo;t realize that. Deleting the container removes everything the application has done. Honestly, this technique - in the form of read/write filters - has been around _forever. _Virtuozzo has been doing this in hosted environments for years, Windows Embedded had similar filtering functionality, and even Microsoft App-V works on largely similar principles. The difference with containers is that the filtering happens at the kernel level of the OS, so it&rsquo;s much more efficient and managed.<br>
But it isn&rsquo;t foolproof. Containers do not represent an impenetrable barrier between processes, meaning it&rsquo;s possible for one application to access another&rsquo;s data, potentially hog processing resources, etc. So in cases where you&rsquo;re dealing with super-sensitive data (for example), containers might not be acceptable.<br>
Thus, Microsoft&rsquo;s &ldquo;Hyper-V Container,&rdquo; which sits somewhere between a full VM and a zero-VM container. Basically a Hyper-V Container <em>is</em> a virtual machine, just like the Hyper-V VMs you know and love. The difference is that, when you ask Windows to spin up one of these containers, it inserts a trimmed-down version of the Windows OS and kernel. Many of the API calls within the container are handled instead by the host OS. The result is a &ldquo;lighter&rdquo; VM that imposes a bit less overhead, especially given Hyper-Vs use of synthesized hardware. But <em>data</em> remains _within _the VM, imposing the rigid boundary around the VM that we&rsquo;re used to. One VM cannot access the contents of another (except via well-defined channels like file sharing or other port-based communications), and so you get a more managed security barrier. You also get faster spin-up time - not as fast as a &ldquo;normal&rdquo; container, but faster than a &ldquo;normal&rdquo; VM.<br>
It&rsquo;s worth understanding all of these different execution models. None of them are always right or wrong; they&rsquo;re all tools in an increasingly varied tool belt, allowing us to right-size our execution environment to the task at hand.</p>]]></content:encoded></item><item><title>Registration is now open</title><link>https://powershell.org/articles/2016-11-01-registration-is-now-open/</link><guid>https://powershell.org/articles/2016-11-01-registration-is-now-open/</guid><pubDate>Tue, 01 Nov 2016 11:30:36 +0000</pubDate><description>&lt;p&gt;Registration for the 2017 PowerShell and DevOps Global Summit is now open.  Click on Summit and follow the links to register&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Registration for the 2017 PowerShell and DevOps Global Summit is now open.  Click on Summit and follow the links to register</p>
]]></content:encoded></item><item><title>PowerShell &amp; DevOps Global Summit 2017 agenda</title><link>https://powershell.org/articles/2016-10-25-powershell-devops-global-summit-2017-agenda/</link><guid>https://powershell.org/articles/2016-10-25-powershell-devops-global-summit-2017-agenda/</guid><pubDate>Tue, 25 Oct 2016 10:00:07 +0000</pubDate><description>&lt;p&gt;The agenda for next year&amp;rsquo;s Summit is almost complete - we&amp;rsquo;ve notified all speakers as to whether their sessions have been accepted or not. If you haven&amp;rsquo;t received your notification please check your spam/junk mail.&lt;br&gt;
We have a small number of sessions yet to publish - mainly around possible focus groups on the Wednesday afternoon.&lt;br&gt;
To view the agenda go to the Summit event site - from &lt;a href="https://powershell.org/summit/"&gt;https://powershell.org/summit/&lt;/a&gt; click on the Brochure and registration link.&lt;br&gt;
Registration opens 1 November 2016.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The agenda for next year&rsquo;s Summit is almost complete - we&rsquo;ve notified all speakers as to whether their sessions have been accepted or not. If you haven&rsquo;t received your notification please check your spam/junk mail.<br>
We have a small number of sessions yet to publish - mainly around possible focus groups on the Wednesday afternoon.<br>
To view the agenda go to the Summit event site - from<a href="https://powershell.org/summit/">https://powershell.org/summit/</a> click on the Brochure and registration link.<br>
Registration opens 1 November 2016.</p>
]]></content:encoded></item><item><title>Re-Subscribe to New Forums Topic Notifications</title><link>https://powershell.org/articles/2016-10-20-re-subscribe-to-new-forums-topic-notifications/</link><guid>https://powershell.org/articles/2016-10-20-re-subscribe-to-new-forums-topic-notifications/</guid><pubDate>Thu, 20 Oct 2016 23:00:43 +0000</pubDate><description>&lt;p&gt;Hello, PowerShellers!&lt;br&gt;
During our migration and some of the inevitable database resets involved, many of you who were receiving notifications for new forums topics no longer are. You&amp;rsquo;ll need to re-subscribe.&lt;br&gt;
To do so, simply visit the Forums page, click through to the forum(s) of your choice, and poke the &amp;ldquo;Subscribe&amp;rdquo; link that&amp;rsquo;s towards the upper-left-ish of the page. If all you see is an &amp;ldquo;Unsubscribe&amp;rdquo; link, then you&amp;rsquo;re already good to go.&lt;br&gt;
Thanks again for everyone who routinely jumps in to offer friendly, helpful advice in the forums!!!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Hello, PowerShellers!<br>
During our migration and some of the inevitable database resets involved, many of you who were receiving notifications for new forums topics no longer are. You&rsquo;ll need to re-subscribe.<br>
To do so, simply visit the Forums page, click through to the forum(s) of your choice, and poke the &ldquo;Subscribe&rdquo; link that&rsquo;s towards the upper-left-ish of the page. If all you see is an &ldquo;Unsubscribe&rdquo; link, then you&rsquo;re already good to go.<br>
Thanks again for everyone who routinely jumps in to offer friendly, helpful advice in the forums!!!</p>
]]></content:encoded></item><item><title>Pitfalls of the Pipeline</title><link>https://powershell.org/articles/2016-10-18-pitfalls-of-the-pipeline/</link><guid>https://powershell.org/articles/2016-10-18-pitfalls-of-the-pipeline/</guid><pubDate>Tue, 18 Oct 2016 21:43:10 +0000</pubDate><description>&lt;p&gt;Pipelining is an important concept in PowerShell. Though the idea did not originate with PowerShell (you can find it used decades earlier in Unix, for example), PowerShell does provide the unique advantage of being able to pipeline not just text, but first-class .NET objects.&lt;br&gt;
Pipelining has several advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It helps to conserve memory resources. Say you want to modify text in a huge file. Without a pipeline you might read the huge file into memory, modify the appropriate lines, and write the file back out to disk. If it is large enough you might not even have enough memory to read the whole thing.&lt;/li&gt;
&lt;li&gt;It can substantially improve &lt;em&gt;actual&lt;/em&gt; performance. Commands in a pipeline are run concurrently-even if you have only a single processor, because when one process blocks, for example, while reading a large chunk of your file, then another process in the pipeline can do a unit of work in the meantime.&lt;/li&gt;
&lt;li&gt;It can have a significant effect on your end-user experience, enhancing the &lt;em&gt;perceived&lt;/em&gt; performance dramatically. If your end-user executes a sequence of commands that takes 60 seconds, then until 60 seconds has elapsed he/she would see nothing without pipelining, whereas output could start appearing almost immediately with pipelining.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PowerShell provides a variety of techniques for using pipelining but it is all to easy to do it wrong, so you think you are pipelining but in fact you are not. In my article &lt;a href="https://www.simple-talk.com/sysadmin/powershell/ins-and-outs-of-the-powershell-pipeline/"&gt;Ins and Outs of the PowerShell Pipeline&lt;/a&gt;, I discuss the most common things that can trip you up with implementing pipelining and how to avoid them.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Pipelining is an important concept in PowerShell. Though the idea did not originate with PowerShell (you can find it used decades earlier in Unix, for example), PowerShell does provide the unique advantage of being able to pipeline not just text, but first-class .NET objects.<br>
Pipelining has several advantages:</p><ul><li>It helps to conserve memory resources. Say you want to modify text in a huge file. Without a pipeline you might read the huge file into memory, modify the appropriate lines, and write the file back out to disk. If it is large enough you might not even have enough memory to read the whole thing.</li><li>It can substantially improve<em>actual</em> performance. Commands in a pipeline are run concurrently-even if you have only a single processor, because when one process blocks, for example, while reading a large chunk of your file, then another process in the pipeline can do a unit of work in the meantime.</li><li>It can have a significant effect on your end-user experience, enhancing the<em>perceived</em> performance dramatically. If your end-user executes a sequence of commands that takes 60 seconds, then until 60 seconds has elapsed he/she would see nothing without pipelining, whereas output could start appearing almost immediately with pipelining.</li></ul><p>PowerShell provides a variety of techniques for using pipelining but it is all to easy to do it wrong, so you think you are pipelining but in fact you are not. In my article<a href="https://www.simple-talk.com/sysadmin/powershell/ins-and-outs-of-the-powershell-pipeline/">Ins and Outs of the PowerShell Pipeline</a>, I discuss the most common things that can trip you up with implementing pipelining and how to avoid them.</p>
]]></content:encoded></item><item><title>PowerShell + DevOps Global Summit 2017: Session Acceptance</title><link>https://powershell.org/articles/2016-10-18-powershell-devops-global-summit-2017-session-acceptance/</link><guid>https://powershell.org/articles/2016-10-18-powershell-devops-global-summit-2017-session-acceptance/</guid><pubDate>Tue, 18 Oct 2016 17:53:20 +0000</pubDate><description>&lt;p&gt;We&amp;rsquo;re in the process of emailing speaker invitations to those whose sessions were accepted for the 2017 agenda. **Please check your email and promptly follow the instructions to complete registration. **&lt;br&gt;
In the event that a speaker is unable to confirm their invitation in time, we will move on to other speakers and sessions - that&amp;rsquo;s why, if you haven&amp;rsquo;t presently received an invitation, you still might. Once we&amp;rsquo;ve confirmed everyone, we&amp;rsquo;ll send out notices to any speakers who were not selected, so that you&amp;rsquo;re in the loop. We do appreciate your patience as we work through this process.&lt;br&gt;
Registration will open November 1st, and a &lt;strong&gt;draft&lt;/strong&gt; brochure is available at &lt;a href="http://PowerShellSummit.org"&gt;http://PowerShellSummit.org&lt;/a&gt;. This brochure does include session highlights that may not have been confirmed, so they&amp;rsquo;re still subject to change. The Registration link at PowerShellSummit.org will show you the current confirmed agenda.&lt;br&gt;
For speakers who were regretfully declined, you&amp;rsquo;ll be able to register on November 1st. In the event we have a late speaker dropout - which happens - we may contact you about jumping in as a speaker after all, at which time we&amp;rsquo;ll sort out the finances if you&amp;rsquo;ve paid for your registration, typically offering a full refund of your registration fee.&lt;br&gt;
You&amp;rsquo;ll notice that Summit has become a full 4-day event - we&amp;rsquo;re unsure, at this point, if 3-day passes will be offered or not. We won&amp;rsquo;t make that decision until February 2017, assuming any space remains by that point. So we hope you&amp;rsquo;ll consider joining us for the full 4-day event, including new hands-on experiences on Sunday, a wider variety of deep-dive half-day sessions on Sunday, attendee-driven &amp;ldquo;Side Sessions&amp;rdquo; on Tuesday and Wednesday, and an amazing lineup for Monday.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We&rsquo;re in the process of emailing speaker invitations to those whose sessions were accepted for the 2017 agenda. **Please check your email and promptly follow the instructions to complete registration. **<br>
In the event that a speaker is unable to confirm their invitation in time, we will move on to other speakers and sessions - that&rsquo;s why, if you haven&rsquo;t presently received an invitation, you still might. Once we&rsquo;ve confirmed everyone, we&rsquo;ll send out notices to any speakers who were not selected, so that you&rsquo;re in the loop. We do appreciate your patience as we work through this process.<br>
Registration will open November 1st, and a <strong>draft</strong> brochure is available at<a href="http://PowerShellSummit.org">http://PowerShellSummit.org</a>. This brochure does include session highlights that may not have been confirmed, so they&rsquo;re still subject to change. The Registration link at PowerShellSummit.org will show you the current confirmed agenda.<br>
For speakers who were regretfully declined, you&rsquo;ll be able to register on November 1st. In the event we have a late speaker dropout - which happens - we may contact you about jumping in as a speaker after all, at which time we&rsquo;ll sort out the finances if you&rsquo;ve paid for your registration, typically offering a full refund of your registration fee.<br>
You&rsquo;ll notice that Summit has become a full 4-day event - we&rsquo;re unsure, at this point, if 3-day passes will be offered or not. We won&rsquo;t make that decision until February 2017, assuming any space remains by that point. So we hope you&rsquo;ll consider joining us for the full 4-day event, including new hands-on experiences on Sunday, a wider variety of deep-dive half-day sessions on Sunday, attendee-driven &ldquo;Side Sessions&rdquo; on Tuesday and Wednesday, and an amazing lineup for Monday.</p>
]]></content:encoded></item><item><title>Be an Azure Consultant for PowerShell.org!</title><link>https://powershell.org/articles/2016-10-14-be-an-azure-consultant-for-powershell-org/</link><guid>https://powershell.org/articles/2016-10-14-be-an-azure-consultant-for-powershell-org/</guid><pubDate>Fri, 14 Oct 2016 22:14:54 +0000</pubDate><description>&lt;p&gt;So, after our nearly-2-day outage, which was due to a still-not-fully-explained Apache fail, we&amp;rsquo;re looking to make some changes. We need to migrate PowerShell.org to a different Azure subscription anyway, so this is a good time to change the kind of service we&amp;rsquo;re using.&lt;br&gt;
First, using Azure is non-negotiable. If your expert opinion is to use something else, please just don&amp;rsquo;t ;). **Update: **This might be changing. AWS could be an option.&lt;br&gt;
Second, our current environment is a classic VM running CentOS 6 (yeah, it&amp;rsquo;s old), WordPress, and MySQL. WordPress and MySQL are also non-negotiable, this isn&amp;rsquo;t about switching CMSs or anything. We use VaultPress for to-the-minute backups, but their restore process is a beast and has never been easy or reliable.&lt;br&gt;
What we WANT is the ability to more or less push a button and re-deploy the entire site from backup, ideally automated through some OMS trigger that senses when the site has crashed.&lt;br&gt;
Now, some caveats.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>So, after our nearly-2-day outage, which was due to a still-not-fully-explained Apache fail, we&rsquo;re looking to make some changes. We need to migrate PowerShell.org to a different Azure subscription anyway, so this is a good time to change the kind of service we&rsquo;re using.<br>
First, using Azure is non-negotiable. If your expert opinion is to use something else, please just don&rsquo;t ;). **Update: **This might be changing. AWS could be an option.<br>
Second, our current environment is a classic VM running CentOS 6 (yeah, it&rsquo;s old), WordPress, and MySQL. WordPress and MySQL are also non-negotiable, this isn&rsquo;t about switching CMSs or anything. We use VaultPress for to-the-minute backups, but their restore process is a beast and has never been easy or reliable.<br>
What we WANT is the ability to more or less push a button and re-deploy the entire site from backup, ideally automated through some OMS trigger that senses when the site has crashed.<br>
Now, some caveats.</p><ul><li>Our budget is $200/mo. We take about 150k-200k visitors per month, and WordPress is a reasonably demanding piece of software. We have about 500MB in files and about 300MB (currently) in data, and we grow about 75-ish MB a year.</li><li>We would ideally like the data backups to be distinct from the site itself. That is, if we could simply kill an old server and deploy a new one, and then drop the data onto it (all automatically), that&rsquo;d be ideal. This is distinct from simply backing up an entire VM image, since the OS, files, and data would all be one chunk.</li><li>It&rsquo;d be lovely if, instead of having to patch and upgrade the OS, we can just kill the current server, deploy a new one with all the new hotness in versions, and drop the data on it.</li><li>The more of this that lives in Azure (e.g., Backups), the more likely - we feel - we&rsquo;ll be able to automate this entire kill-and-deploy process in OMS or something.</li></ul><p>Staying on Linux is fine. It also isn&rsquo;t a pre-req. WordPress (and MySQL, since WordPress doesn&rsquo;t play well with much else) are the main requirements. We&rsquo;d like to be on a modern (6+) version of PHP, as well.<br>
**Update: **So, let me outline the kind of thing we&rsquo;re thinking. So far we&rsquo;ve gotten a lot of suggestions on which OS to use, or which DB to use, and that wasn&rsquo;t really the question so much as the architecture. For example:</p><ol><li>Run a small, on-demand staging instance where patches (WordPress and plugins) are applied to the site. The site&rsquo;s folder is under Git, and after applying updates and testing, we push to a private (because configs contain passwords) GitHub repo. This instance isn&rsquo;t backed up - the important bits are in GitHub.</li><li>Use ____ to deploy the actual instance(s) that people will use. This deployment is a la Elastic Beanstalk, where you just push a base OS image and it sucks down your GitHub repo to populate the files of the site. Again, not backed up - GitHub is the backup.</li><li>Except for the WordPress Uploads folder, which you redirect to another, simpler instance that serves these as static files. This is a bit complex, because WordPress needs file-based access to this for uploading, while it also needs to be exposed as a web server for downloading. Simple backups to ensure we have copies of the files handy, and we don&rsquo;t need to retain a backup history because there&rsquo;s no code that could break and need to be rolled back.</li><li>Data lives on a distinct hosted RDBMS. That&rsquo;s probably MySQL, as it&rsquo;s what&rsquo;s supported with WordPress. We&rsquo;re aware of Namiproject, but unless that&rsquo;s moving in lockstep with the base WP releases and is 100% guaranteed to work with all the plugins we need&hellip;. The RDBMS is backed up separately.</li></ol><p>A concern with #4 in Azure is that they only offer this (for MySQL) through ClearDb, and I&rsquo;ve seen latency and persistency problems. I&rsquo;m ideally wanting everything hosted in one datacenter/region to reduce that problem. And I&rsquo;m aware of Namiproject, but we have something a bit more complex than a stock WP install, so someone&rsquo;s going to have to <em>convince</em> me that SQL Server&rsquo;s a safe choice.<br>
So&hellip; any suggestions for a full-stack? Please, be serious and complete - if your suggestion is, &ldquo;just run VMs,&rdquo; that&rsquo;s not helpful and it&rsquo;ll likely be deleted. But if you&rsquo;ve got ideas for a mix of services that you think will do the job - by all means, please, speak up!</p>
]]></content:encoded></item><item><title>Apologies for the delay</title><link>https://powershell.org/articles/2016-10-13-apologies-for-the-delay/</link><guid>https://powershell.org/articles/2016-10-13-apologies-for-the-delay/</guid><pubDate>Thu, 13 Oct 2016 12:35:22 +0000</pubDate><description>&lt;p&gt;Due to unforeseen circumstances we&amp;rsquo;re a bit late getting out notifications of the sessions accepted for the 2017 Summit.&lt;br&gt;
Apologies to everyone who submitted sessions.&lt;br&gt;
We hope to have the notifications out in the next few days&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Due to unforeseen circumstances we&rsquo;re a bit late getting out notifications of the sessions accepted for the 2017 Summit.<br>
Apologies to everyone who submitted sessions.<br>
We hope to have the notifications out in the next few days</p>
]]></content:encoded></item><item><title>No "Easy" Button for Configuration Management</title><link>https://powershell.org/articles/2016-10-12-no-easy-button-for-configuration-management/</link><guid>https://powershell.org/articles/2016-10-12-no-easy-button-for-configuration-management/</guid><pubDate>Wed, 12 Oct 2016 00:18:44 +0000</pubDate><description>&lt;p&gt;A discussion in one of my Slack channels caught my eye today around someone’s reflections in a github repo regarding DSC. The posted comment that introduced the link was titled “DSC from a newbie perspective”, and I thought “Oh? I’m a newbie too, I wonder if we’re thinking the same things.”&lt;br&gt;
A little history is probably needed on my “newbie” status with DSC. I went to the Tech Mentor conference in March, where I spent most of my time in sessions learning DSC. I was hooked, but knew I needed much more in-depth training to make it something that would be useful to me in the real world. So I set a goal of learning DSC in depth about 4 months, so that I could attend DevOps Camp in August, and be able to converse intelligently about DSC, Configuration Management, and DevOps in general. And with some help from friend and mentor Jason Helmick along with blood, sweat, tears, and 10-15 extra hours a week spent on just DSC, I made it to DevOps Camp and managed to follow along and join in the discussions.&lt;br&gt;
I’ve got about 6 months of DSC experience under my belt at this point, but I still consider myself a “newbie” in the grand scheme, so I fell hook, line, and sinker to go check out the comments here:&lt;br&gt;
&lt;a href="https://github.com/18F/azure-sandbox/blob/master/dsc/README-dsc.md"&gt;https://github.com/18F/azure-sandbox/blob/master/dsc/README-dsc.md&lt;/a&gt;&lt;br&gt;
I’m not an expert in Chef, so I won’t comment on the comparisons between the two. But while two weeks may be long enough to do a quick comparison between a product you know something about (in his case, Chef) and a product you are vetting against it (DSC), it isn’t nearly enough time to come to a conclusion like “DSC is too immature to even consider as a stopgap”.&lt;br&gt;
Reading on, the reasons for liking/hating DSC seem to be the reasons for hating/liking Chef. Not wanting others to need to deal with learning Ruby was mentioned as a plus for DSC.  But it also seems like the poster wanted or expected DSC to be easy so that folks didn’t have to learn Chef, and was disappointed that it wasn’t.&lt;br&gt;
There’s no “easy” button - if there really were an easy button for automation and configuration management, we’d have all the resources ever wanted neatly packaged and consumable, but the building of the platform and the tooling surrounding the platform takes time, people, and effort. So build and submit a High Quality Resource Module, or fork and fix some of the “awful error tracking”.  Some of these comments and feedback are really quite legit – but the points that need to be made and worked on are lost under the lamenting that DSC doesn’t have an Easy button.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>A discussion in one of my Slack channels caught my eye today around someone’s reflections in a github repo regarding DSC. The posted comment that introduced the link was titled “DSC from a newbie perspective”, and I thought “Oh? I’m a newbie too, I wonder if we’re thinking the same things.”<br>
A little history is probably needed on my “newbie” status with DSC. I went to the Tech Mentor conference in March, where I spent most of my time in sessions learning DSC. I was hooked, but knew I needed much more in-depth training to make it something that would be useful to me in the real world. So I set a goal of learning DSC in depth about 4 months, so that I could attend DevOps Camp in August, and be able to converse intelligently about DSC, Configuration Management, and DevOps in general. And with some help from friend and mentor Jason Helmick along with blood, sweat, tears, and 10-15 extra hours a week spent on just DSC, I made it to DevOps Camp and managed to follow along and join in the discussions.<br>
I’ve got about 6 months of DSC experience under my belt at this point, but I still consider myself a “newbie” in the grand scheme, so I fell hook, line, and sinker to go check out the comments here:<br><a href="https://github.com/18F/azure-sandbox/blob/master/dsc/README-dsc.md">https://github.com/18F/azure-sandbox/blob/master/dsc/README-dsc.md</a><br>
I’m not an expert in Chef, so I won’t comment on the comparisons between the two. But while two weeks may be long enough to do a quick comparison between a product you know something about (in his case, Chef) and a product you are vetting against it (DSC), it isn’t nearly enough time to come to a conclusion like “DSC is too immature to even consider as a stopgap”.<br>
Reading on, the reasons for liking/hating DSC seem to be the reasons for hating/liking Chef. Not wanting others to need to deal with learning Ruby was mentioned as a plus for DSC.  But it also seems like the poster wanted or expected DSC to be easy so that folks didn’t have to learn Chef, and was disappointed that it wasn’t.<br>
There’s no “easy” button - if there really were an easy button for automation and configuration management, we’d have all the resources ever wanted neatly packaged and consumable, but the building of the platform and the tooling surrounding the platform takes time, people, and effort. So build and submit a High Quality Resource Module, or fork and fix some of the “awful error tracking”.  Some of these comments and feedback are really quite legit – but the points that need to be made and worked on are lost under the lamenting that DSC doesn’t have an Easy button.</p>
]]></content:encoded></item><item><title>DSC ConfigurationData Blocks in a World of Cattle</title><link>https://powershell.org/articles/2016-10-11-dsc-configurationdata-blocks-in-a-world-of-cattle/</link><guid>https://powershell.org/articles/2016-10-11-dsc-configurationdata-blocks-in-a-world-of-cattle/</guid><pubDate>Tue, 11 Oct 2016 21:01:59 +0000</pubDate><description>&lt;p&gt;As you may know, Jeffrey Snover and I have, for some time, been on a &amp;ldquo;servers are cattle, not pets&amp;rdquo; kick. Meaning, servers shouldn&amp;rsquo;t be special, individualized snowflakes. They should be, in many regards, appliances. One dies, you eat it and make another. They don&amp;rsquo;t have names - that you know of. They don&amp;rsquo;t have IP addresses - that you know of. Oh, I mean, they &lt;em&gt;have&lt;/em&gt; them, but you don&amp;rsquo;t know them and don&amp;rsquo;t care.&lt;br&gt;
Anyway, one thing that came up in a recent conversation related to DSC&amp;rsquo;s ConfigurationData blocks. Have a &lt;a href="https://msdn.microsoft.com/en-us/powershell/dsc/configdata"&gt;look at the MSDN documentation&lt;/a&gt; and tell me what you see.&lt;br&gt;
Go on, I&amp;rsquo;ll wait.&lt;br&gt;
You see **NodeName. **But damnit, if servers are cattle and cattle don&amp;rsquo;t have (known) names, what the dude is NodeName all about?&lt;br&gt;
Well, for one, it was a poor choice on the team&amp;rsquo;s part. I&amp;rsquo;d have called it - and this is giving away the punchline - **NodeRole. **Imagine that your &amp;ldquo;NodeName&amp;rdquo; was &amp;ldquo;SalesAppWebServerRole.&amp;rdquo; When you run your configuration script, you get a MOF named SalesAppWebServerRole.mof, right? Which you then checksum and load onto a pull server. And when you&amp;rsquo;re spinning up a new server to host that role, you tell its LCM to grab the ConfigurationName &amp;ldquo;SalesAppWebServerRole.&amp;rdquo;&lt;br&gt;
The server, when spinning up, makes up a name for itself. Charming, right? Cows think they have names. Sweet. Don&amp;rsquo;t care. It gets an IP address for itself, partially from DHCP of course, and partially by making up the other necessary IPv6 stuff (oh, and IPv6 is a thing now, so get on board).&lt;br&gt;
Then, presumably, it runs to the pull server, grabs the MOF, and starts a consistency check. During which, presumably, _it registers some known name with DNS or load balancer or something. _Now you know it&amp;rsquo;s &amp;ldquo;name!&amp;rdquo; Or the name you want to call it by, at least. Also presumably, your load balancer knows to remove or suspend the entry if the host stops responding, and to periodically scavenge stale records (remember, the node&amp;rsquo;s own LCM will make sure its entry gets put back, on the next consistency check run). So if the node dies and you spin up a new one, the rest of the affected infrastructure - DNS, load balancers, what have you - clean themselves up automatically (and DSC could be involved in that process, too).&lt;br&gt;
Anyway&amp;hellip; the point is that ConfigurationData blocks can absolutely be used for cattle farms, not just for pet shops. &amp;ldquo;NodeName&amp;rdquo; is a misleading setting, but if you think of it as a role, which could be applied to multiple actual machines, then it makes a lot more sense that way.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>As you may know, Jeffrey Snover and I have, for some time, been on a &ldquo;servers are cattle, not pets&rdquo; kick. Meaning, servers shouldn&rsquo;t be special, individualized snowflakes. They should be, in many regards, appliances. One dies, you eat it and make another. They don&rsquo;t have names - that you know of. They don&rsquo;t have IP addresses - that you know of. Oh, I mean, they <em>have</em> them, but you don&rsquo;t know them and don&rsquo;t care.<br>
Anyway, one thing that came up in a recent conversation related to DSC&rsquo;s ConfigurationData blocks. Have a<a href="https://msdn.microsoft.com/en-us/powershell/dsc/configdata">look at the MSDN documentation</a> and tell me what you see.<br>
Go on, I&rsquo;ll wait.<br>
You see **NodeName. **But damnit, if servers are cattle and cattle don&rsquo;t have (known) names, what the dude is NodeName all about?<br>
Well, for one, it was a poor choice on the team&rsquo;s part. I&rsquo;d have called it - and this is giving away the punchline - **NodeRole. **Imagine that your &ldquo;NodeName&rdquo; was &ldquo;SalesAppWebServerRole.&rdquo; When you run your configuration script, you get a MOF named SalesAppWebServerRole.mof, right? Which you then checksum and load onto a pull server. And when you&rsquo;re spinning up a new server to host that role, you tell its LCM to grab the ConfigurationName &ldquo;SalesAppWebServerRole.&rdquo;<br>
The server, when spinning up, makes up a name for itself. Charming, right? Cows think they have names. Sweet. Don&rsquo;t care. It gets an IP address for itself, partially from DHCP of course, and partially by making up the other necessary IPv6 stuff (oh, and IPv6 is a thing now, so get on board).<br>
Then, presumably, it runs to the pull server, grabs the MOF, and starts a consistency check. During which, presumably, _it registers some known name with DNS or load balancer or something. _Now you know it&rsquo;s &ldquo;name!&rdquo; Or the name you want to call it by, at least. Also presumably, your load balancer knows to remove or suspend the entry if the host stops responding, and to periodically scavenge stale records (remember, the node&rsquo;s own LCM will make sure its entry gets put back, on the next consistency check run). So if the node dies and you spin up a new one, the rest of the affected infrastructure - DNS, load balancers, what have you - clean themselves up automatically (and DSC could be involved in that process, too).<br>
Anyway&hellip; the point is that ConfigurationData blocks can absolutely be used for cattle farms, not just for pet shops. &ldquo;NodeName&rdquo; is a misleading setting, but if you think of it as a role, which could be applied to multiple actual machines, then it makes a lot more sense that way.</p>
]]></content:encoded></item><item><title>A Practical Guide for Using Regex in PowerShell</title><link>https://powershell.org/articles/2016-10-04-a-practical-guide-for-using-regex-in-powershell/</link><guid>https://powershell.org/articles/2016-10-04-a-practical-guide-for-using-regex-in-powershell/</guid><pubDate>Tue, 04 Oct 2016 00:49:59 +0000</pubDate><description>&lt;p&gt;Regular Expressions is often referred to as wizardry or magic and for that reason I stayed away from it for most of my career. I used it only when I had to and most of the time just reused examples that I found online. There&amp;rsquo;s nothing wrong with that of course, but I never took the time to learn it. I thought it was reserved for the elite. Turns out that it&amp;rsquo;s not that complicated and that I had been using it for years without knowing it.&lt;br&gt;
In an effort to shorten the learning curve for others and to show you the value of learning regular expression I&amp;rsquo;ve written a blog post titled &lt;a href="http://duffney.io/APracticalGuideforUsingRegexinPowerShell"&gt;A Practical Guide for Using Regex in PowerShell&lt;/a&gt;. It will walk you through how to use regular expression in PowerShell and gives you a glimpse into how powerful regular expression is.&lt;br&gt;
Below is an example of how to use regular expression to extract a user&amp;rsquo;s name from their distinguished name in Active Directory. To learn more check out this &lt;a href="http://duffney.io/APracticalGuideforUsingRegexinPowerShell"&gt;blog post&lt;/a&gt;.&lt;br&gt;
&lt;img src="https://powershell.org/wp-content/uploads/2016/10/matches-1.png" alt="matches"&gt;&lt;br&gt;
Topics Covered&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Regular Expressions is often referred to as wizardry or magic and for that reason I stayed away from it for most of my career. I used it only when I had to and most of the time just reused examples that I found online. There&rsquo;s nothing wrong with that of course, but I never took the time to learn it. I thought it was reserved for the elite. Turns out that it&rsquo;s not that complicated and that I had been using it for years without knowing it.<br>
In an effort to shorten the learning curve for others and to show you the value of learning regular expression I&rsquo;ve written a blog post titled <a href="http://duffney.io/APracticalGuideforUsingRegexinPowerShell">A Practical Guide for Using Regex in PowerShell</a>. It will walk you through how to use regular expression in PowerShell and gives you a glimpse into how powerful regular expression is.<br>
Below is an example of how to use regular expression to extract a user&rsquo;s name from their distinguished name in Active Directory. To learn more check out this<a href="http://duffney.io/APracticalGuideforUsingRegexinPowerShell">blog post</a>.<br><img src="https://powershell.org/wp-content/uploads/2016/10/matches-1.png" alt="matches"><br>
Topics Covered</p><ul><li>-match operator</li><li>-match operator with regular expression metacharacters</li><li>-notmatch with where-object</li><li>-replace operator</li><li>-split operator</li><li>Select-String</li><li>Switch Statements</li><li>Regex Object</li></ul>
]]></content:encoded></item><item><title>Call for topics – Summit closed but European conference open</title><link>https://powershell.org/articles/2016-10-03-call-for-topics-summit-closed-but-european-conference-open/</link><guid>https://powershell.org/articles/2016-10-03-call-for-topics-summit-closed-but-european-conference-open/</guid><pubDate>Mon, 03 Oct 2016 08:57:49 +0000</pubDate><description>&lt;p&gt;The deadline for the submission of proposals for the 2017 has passed. We are NOT taking any new submissions. if you’ve been in communication regarding a submission thats fine its still under consideration and I’ll be in touch.&lt;/p&gt;
&lt;p&gt;On the positive side the call for speakers for the European PowerShell conference has opened - &lt;a href="http://www.powertheshell.com/psconfeu/"&gt;http://www.powertheshell.com/psconfeu/&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The deadline for the submission of proposals for the 2017 has passed. We are NOT taking any new submissions. if you’ve been in communication regarding a submission thats fine its still under consideration and I’ll be in touch.</p><p>On the positive side the call for speakers for the European PowerShell conference has opened -<a href="http://www.powertheshell.com/psconfeu/">http://www.powertheshell.com/psconfeu/</a></p>
]]></content:encoded></item><item><title>Recap of DuPSUG PowerShell Saturday 2016</title><link>https://powershell.org/articles/2016-09-27-recap-of-dupsug-powershell-saturday-2016/</link><guid>https://powershell.org/articles/2016-09-27-recap-of-dupsug-powershell-saturday-2016/</guid><pubDate>Tue, 27 Sep 2016 07:28:04 +0000</pubDate><description>&lt;p&gt;Last weekend we hosted our second PowerShell Saturday, this time the event was hosted by IPsoft in Amsterdam. During this event members of the Dutch PowerShell User Group gathered together to view a number of presentations and to engage in lively discussions on the various new developments in the PowerShell world.&lt;br&gt;
For more information about PowerShell Saturday, the Dutch PowerShell User Group or the slides and code used in the presentations please head over to the recap blog post here:&lt;br&gt;
&lt;a href="http://www.jaapbrasser.com/recap-of-dutch-powershell-saturday-september-2016/"&gt;Recap of Dutch PowerShell Saturday September 2016&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Last weekend we hosted our second PowerShell Saturday, this time the event was hosted by IPsoft in Amsterdam. During this event members of the Dutch PowerShell User Group gathered together to view a number of presentations and to engage in lively discussions on the various new developments in the PowerShell world.<br>
For more information about PowerShell Saturday, the Dutch PowerShell User Group or the slides and code used in the presentations please head over to the recap blog post here:<br><a href="http://www.jaapbrasser.com/recap-of-dutch-powershell-saturday-september-2016/">Recap of Dutch PowerShell Saturday September 2016</a></p>
]]></content:encoded></item><item><title>PowerShell Happenings at Ignite 2016</title><link>https://powershell.org/articles/2016-09-22-powershell-happenings-at-ignite-2016/</link><guid>https://powershell.org/articles/2016-09-22-powershell-happenings-at-ignite-2016/</guid><pubDate>Thu, 22 Sep 2016 15:27:46 +0000</pubDate><description>&lt;p&gt;With Ignite fast-approaching, here&amp;rsquo;s what&amp;rsquo;s up - and this is intended to be a &amp;ldquo;community post,&amp;rdquo; meaning I&amp;rsquo;d love it if you could add your own PowerShell At Ignite notes in the comments, including sessions you&amp;rsquo;re looking forward to!&lt;br&gt;
On **Sunday evening, **while not officially a PowerShell event, a lot of PowerShell glitterati will be at &lt;a href="https://twitter.com/thekrewe?lang=en"&gt;The Krewe&amp;rsquo;s&lt;/a&gt; annual gathering from 8pm.&lt;br&gt;
On **Monday evening, **the Atlanta PowerShell User Group is kindly hosting a &lt;a href="https://www.meetup.com/Atlanta-PowerShell-Users-Group/events/233394410/"&gt;meet-and-greet&lt;/a&gt; with myself, Jeff Hicks, and Jason Helmick. We promise to be educational; registration required (but free).&lt;br&gt;
&lt;strong&gt;Tuesday evening&lt;/strong&gt; is the PowerShell Community Happy Hour (from 4-7; &lt;a href="https://www.eventbrite.com/e/powershell-community-happy-hour-2016-tickets-26667369821"&gt;tickets required)&lt;/a&gt;, including many of the in-attendance team members, most of the PowerShell.org Board, and a bunch of super Shell enthusiasts. We&amp;rsquo;ll have PowerShell.org and The DevOps Collective laptop stickers!&lt;br&gt;
**Wednesday, **I&amp;rsquo;m looking forward to &lt;a href="https://myignite.microsoft.com/sessions/3112"&gt;PowerShell Unplugged&lt;/a&gt; with Jeffrey Snover and I, from 9 to 9:45am. This is nearly always hilarious and fun. Then, from 10-10:30, Jeffrey, Jason Helmick, and I will be signing books and handing out laptop stickers at the Ignite Bookstore. Finally, from 11-11:30, I&amp;rsquo;ll be signing FREE! books at the &lt;a href="http://conversationalgeek.com/"&gt;Conversational Geek&lt;/a&gt; booth (#571) (who have some &lt;a href="https://twitter.com/convgeek"&gt;amazing scavenger hunt prizes&lt;/a&gt;).&lt;br&gt;
And of course, please stop by the &lt;a href="http://pluralsight.com"&gt;Pluralsight&lt;/a&gt; booth to say hi, pick up some swag, register your company for a free pilot subscription, and whatnot.&lt;br&gt;
So&amp;hellip; what&amp;rsquo;re YOU looking forward to next week?&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>With Ignite fast-approaching, here&rsquo;s what&rsquo;s up - and this is intended to be a &ldquo;community post,&rdquo; meaning I&rsquo;d love it if you could add your own PowerShell At Ignite notes in the comments, including sessions you&rsquo;re looking forward to!<br>
On **Sunday evening, **while not officially a PowerShell event, a lot of PowerShell glitterati will be at<a href="https://twitter.com/thekrewe?lang=en">The Krewe&rsquo;s</a> annual gathering from 8pm.<br>
On **Monday evening, **the Atlanta PowerShell User Group is kindly hosting a<a href="https://www.meetup.com/Atlanta-PowerShell-Users-Group/events/233394410/">meet-and-greet</a> with myself, Jeff Hicks, and Jason Helmick. We promise to be educational; registration required (but free).<br><strong>Tuesday evening</strong> is the PowerShell Community Happy Hour (from 4-7;<a href="https://www.eventbrite.com/e/powershell-community-happy-hour-2016-tickets-26667369821">tickets required)</a>, including many of the in-attendance team members, most of the PowerShell.org Board, and a bunch of super Shell enthusiasts. We&rsquo;ll have PowerShell.org and The DevOps Collective laptop stickers!<br>
**Wednesday, **I&rsquo;m looking forward to<a href="https://myignite.microsoft.com/sessions/3112">PowerShell Unplugged</a> with Jeffrey Snover and I, from 9 to 9:45am. This is nearly always hilarious and fun. Then, from 10-10:30, Jeffrey, Jason Helmick, and I will be signing books and handing out laptop stickers at the Ignite Bookstore. Finally, from 11-11:30, I&rsquo;ll be signing FREE! books at the<a href="http://conversationalgeek.com/">Conversational Geek</a> booth (#571) (who have some<a href="https://twitter.com/convgeek">amazing scavenger hunt prizes</a>).<br>
And of course, please stop by the<a href="http://pluralsight.com">Pluralsight</a> booth to say hi, pick up some swag, register your company for a free pilot subscription, and whatnot.<br>
So&hellip; what&rsquo;re YOU looking forward to next week?</p>
]]></content:encoded></item><item><title>Changing of the Guard at PowerShell.org</title><link>https://powershell.org/articles/2016-09-22-changing-of-the-guard-at-powershell-org/</link><guid>https://powershell.org/articles/2016-09-22-changing-of-the-guard-at-powershell-org/</guid><pubDate>Thu, 22 Sep 2016 14:47:30 +0000</pubDate><description>&lt;p&gt;It&amp;rsquo;s a bit of a sad day at The DevOps Collective, which is the nonprofit that runs PowerShell.org. One of our Board of Directors members, Dave Wyatt, will be stepping down from his Director position this week. He wants to focus on his personal life a bit more, although he&amp;rsquo;s still going to be responsible for our public Build Service, and he&amp;rsquo;s going to continue contributing to the Pester project, so the community isn&amp;rsquo;t losing him entirely. Dave&amp;rsquo;s been a huge help, and a huge inspiration, at PowerShell.org, and he&amp;rsquo;ll be greatly missed.&lt;br&gt;
But our sadness is balanced by some happy news, too, as PowerShell.org Webmaster Will Anderson has agreed to fill Dave&amp;rsquo;s seat. Will has brought a great enthusiasm to our team of volunteers, is also a PowerShell MVP, and also resides in Canada. Will&amp;rsquo;s responsible for most of the photography you&amp;rsquo;ll see in the upcoming PowerShell + DevOps Global Summit 2017 brochure, and he&amp;rsquo;s been a great help in keeping PowerShell.org&amp;rsquo;s website up and running.&lt;br&gt;
So please join me in wishing our outgoing Director all the best, and in welcoming Will to the Board!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>It&rsquo;s a bit of a sad day at The DevOps Collective, which is the nonprofit that runs PowerShell.org. One of our Board of Directors members, Dave Wyatt, will be stepping down from his Director position this week. He wants to focus on his personal life a bit more, although he&rsquo;s still going to be responsible for our public Build Service, and he&rsquo;s going to continue contributing to the Pester project, so the community isn&rsquo;t losing him entirely. Dave&rsquo;s been a huge help, and a huge inspiration, at PowerShell.org, and he&rsquo;ll be greatly missed.<br>
But our sadness is balanced by some happy news, too, as PowerShell.org Webmaster Will Anderson has agreed to fill Dave&rsquo;s seat. Will has brought a great enthusiasm to our team of volunteers, is also a PowerShell MVP, and also resides in Canada. Will&rsquo;s responsible for most of the photography you&rsquo;ll see in the upcoming PowerShell + DevOps Global Summit 2017 brochure, and he&rsquo;s been a great help in keeping PowerShell.org&rsquo;s website up and running.<br>
So please join me in wishing our outgoing Director all the best, and in welcoming Will to the Board!</p>
]]></content:encoded></item><item><title>PowerShell + DevOps Global Summit 2017 Preview</title><link>https://powershell.org/articles/2016-09-19-powershell-devops-global-summit-2017-preview/</link><guid>https://powershell.org/articles/2016-09-19-powershell-devops-global-summit-2017-preview/</guid><pubDate>Mon, 19 Sep 2016 19:55:14 +0000</pubDate><description>&lt;p&gt;As a quick reminder, our &lt;a href="https://powershell.org/2016/09/06/nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/"&gt;Call for Topics is still open&lt;/a&gt; for a few more days! Summ. Summit is very much intended to be a kind of mega-user group, not a &amp;ldquo;conference,&amp;rdquo; so don&amp;rsquo;t assume all the &amp;ldquo;professional&amp;rdquo; speakers have taken up all the speaking slots. We want &lt;strong&gt;you&lt;/strong&gt; to participate!&lt;br&gt;
In the meantime, while we&amp;rsquo;re waiting on the content committee to select topics and before registration opens in early November, I wanted to offer a peek at what we&amp;rsquo;re planning.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>As a quick reminder, our<a href="https://powershell.org/2016/09/06/nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/">Call for Topics is still open</a> for a few more days! Summ. Summit is very much intended to be a kind of mega-user group, not a &ldquo;conference,&rdquo; so don&rsquo;t assume all the &ldquo;professional&rdquo; speakers have taken up all the speaking slots. We want <strong>you</strong> to participate!<br>
In the meantime, while we&rsquo;re waiting on the content committee to select topics and before registration opens in early November, I wanted to offer a peek at what we&rsquo;re planning.</p><h2 id="deep-dive-day" class="ps-heading">Deep Dive Day<a class="ps-heading-anchor" href="#deep-dive-day" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Sunday is now a formal &ldquo;full day&rdquo; of Summit, rather than a &ldquo;pre-con&rdquo; day. That means we&rsquo;ll be presenting both Intermediate and Advanced content, including an opportunity for you to dig into the new open-source PowerShell GitHub repo, learn about the layout of the code, review what the community&rsquo;s been up to with that code, and more. Sunday will also offer two Lab opportunities, one for Advanced Functions and one for DSC Resources. You&rsquo;ll be able to wander in at will, and share some of <em>your work</em> with a domain expert, who&rsquo;ll offer critique and advice. We&rsquo;ll also have some pre-done scenarios, in case you&rsquo;d like to try your hand and test your skills. The full four-day pass is expected to cost $1500, and will be the first opened for registration in November (3-day is expected to be $950 or $975, and will open in January or February).</p><h2 id="all-together-now" class="ps-heading">All Together Now<a class="ps-heading-anchor" href="#all-together-now" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Monday (the first day you can attend on a 3-day pass) will feature an opening keynote by myself, a full session with ShellFather Jeffrey Snover, an update on PowerShell from team leaders, and our now-famous Lightning Demos from various developers on the team. We&rsquo;ll finish the day with a grand reception, where you can mix and mingle with everyone you&rsquo;ve seen, and enjoy some quality food and beverages.</p><h2 id="breakout" class="ps-heading">Breakout!<a class="ps-heading-anchor" href="#breakout" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>All day Tuesday, as well as Wednesday morning, we&rsquo;ll feature our usual 45-minute breakout sessions on a huge variety of deep topics. We&rsquo;ll be covering DSC, pull servers, JEA, best practices, security, and SO much more, including sessions delivered by members of the PowerShell product team. We&rsquo;ve got a full three tracks - more than last year! - of content planned.</p><h2 id="par-ti-ci-pa-tion" class="ps-heading">Par-ti-ci-pa-tion<a class="ps-heading-anchor" href="#par-ti-ci-pa-tion" 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 noticed that Wednesday afternoons can drag a bit - so after lunch, we&rsquo;re going to roll out some great snacks and drinks. Wednesday afternoon will get more interactive, with a variety of Community Lightning Demos (sign up on site with the moderator), panel discussions, focus groups, and more.</p><h2 id="on-the-air" class="ps-heading">On The Air<a class="ps-heading-anchor" href="#on-the-air" 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 expanded and refined our session recording capabilities, and you can expect better audio, as well as screen-capture recordings for every session (barring technical difficulties), something we haven&rsquo;t been previously able to do with this much content. All sessions are made available on YouTube within a couple of weeks of the event&rsquo;s conclusion (we do not live-stream, and we won&rsquo;t be posting sessions instantly each day).</p><h2 id="networking" class="ps-heading">Networking<a class="ps-heading-anchor" href="#networking" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>It ain&rsquo;t just for routers and switches - Summit remains dedicated to providing plenty of face time with your fellow PowerShell and DevOps enthusiasts. We&rsquo;ll offer additional evening fun (anyone interested in a trip to the Microsoft Museum one evening? We&rsquo;re looking into it), side rooms for breakout conversations, and of course we encourage everyone to <em>participate</em> in breakout sessions by offering comments and asking questions.</p><h2 id="extra-bits" class="ps-heading">Extra Bits<a class="ps-heading-anchor" href="#extra-bits" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>2017 will be the Fifth Anniversary of Summit, and so we&rsquo;re bringing along some extra swag and collectible opportunities. If you attended in 2016, bring your 1-inch button to wear around your badge lanyard and show your alumni status (we&rsquo;ll have 2017 buttons, too). Some merchandise will only be available as an advance purchase, so watch PowerShell.org for details; other merch might be available on-site, but in very limited quantities, so be sure to get that 4-day pass!</p><h2 id="mark-your-calendars" class="ps-heading">Mark Your Calendars<a class="ps-heading-anchor" href="#mark-your-calendars" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Sunday-Wednesday passes will open for registration the first week of November, 2016; we expect Monday-Wednesday passes to become available in January or February. As always, registration is limited to about 200 attendees (plus our speakers and the product team members), so _don&rsquo;t delay. _Because registrations are nonrefundable, we do not maintain a waitlist, and we fully expect to sell out - as we have every year.</p>
]]></content:encoded></item><item><title>Nearing Last Call for PowerShell Summit Topic Proposals (+ Topic Ideas!)</title><link>https://powershell.org/articles/2016-09-06-nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/</link><guid>https://powershell.org/articles/2016-09-06-nearing-last-call-for-powershell-summit-topic-proposals-topic-ideas/</guid><pubDate>Tue, 06 Sep 2016 14:04:52 +0000</pubDate><description>&lt;p&gt;Remember that our &lt;a href="https://powershell.org/2016/08/01/powershell-and-devops-global-summit-2017-call-for-topics/"&gt;Call for Topics is still open&lt;/a&gt; until the end of September, if you&amp;rsquo;d like to submit. And, from our Summit Alumni Slack channel, here are a few things people said they&amp;rsquo;d like to see&amp;hellip;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I would love to see a session on what it takes to build a PKI infrastructure in support of PowerShell operations ( stuff liked passing creds with DSC ) - this is something glossed over all the time as if it is not a big deal but I think it can be quite challenging for a lot of people to implement.&lt;/li&gt;
&lt;li&gt;Writing for Performance: Tips and Tricks to Write Faster Code&lt;/li&gt;
&lt;li&gt;Compiled cmdlets - how to create them and why you might want to (this got a &lt;strong&gt;lot&lt;/strong&gt; of thumbs-up)&lt;/li&gt;
&lt;li&gt;Open source PowerShell hackathon.  Either one multi-hour (2, 3, 4?) window where people can break into groups and work on some open source PowerShell extension, or two sessions, one at the beginning of the event and one at the end.  The one at the beginning the presenters/organizers provide a set of possible project ideas to work on, and people interested can sign up/vote for projects which creates groups.  The one at the end gives groups an opportunity to share/demo what they produced.  Having a room where people can gather to work on it would be cool.  These don&amp;rsquo;t have to be big projects.  They could be small things, like knocking off one or more issues for an open source project.  The end goal is to have a pull request submitted or a new project posted in GitHub or a new module submitted in the Gallery. _Now, to be clear, this isn&amp;rsquo;t a session - but you can definitely propose it. We have some longer time slots on Wednesday for panels, and this might be something you could do then. _&lt;/li&gt;
&lt;li&gt;examples of real world DSC usage - that was a comment I heard from a number of folks this year&lt;/li&gt;
&lt;li&gt;Practical Pipelines. ( Illustrate that release pipelines aren&amp;rsquo;t just for DevOps-practicing shops, or public-facing software )&lt;/li&gt;
&lt;li&gt;Build plans (and tools, like psake)&lt;/li&gt;
&lt;li&gt;Module design best practices (lots of thumbs-up on this one)&lt;/li&gt;
&lt;li&gt;Working with Open Source Projects (as a Contributor)&lt;/li&gt;
&lt;li&gt;Working with Open Source Projects (as a Maintainer)&lt;/li&gt;
&lt;li&gt;Applying Agile Software Development Methodologies to PowerShell&lt;/li&gt;
&lt;li&gt;Using for . (assumption: someone writes the equivalent of inspec wrapped around Pester)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And if you read the above carefully, you&amp;rsquo;ll notice that **we do also have some space for afternoon panels on Wednesday - so if there&amp;rsquo;s a group discussion you&amp;rsquo;d like to lead, propose it! **Just be clear in the description you submit that you&amp;rsquo;re proposing a panel. It&amp;rsquo;ll be up to you to recruit panel members, which you can do on-site. We&amp;rsquo;ll announce panels in need of panelists and direct them to you.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Remember that our<a href="https://powershell.org/2016/08/01/powershell-and-devops-global-summit-2017-call-for-topics/">Call for Topics is still open</a> until the end of September, if you&rsquo;d like to submit. And, from our Summit Alumni Slack channel, here are a few things people said they&rsquo;d like to see&hellip;</p><ul><li>I would love to see a session on what it takes to build a PKI infrastructure in support of PowerShell operations ( stuff liked passing creds with DSC ) - this is something glossed over all the time as if it is not a big deal but I think it can be quite challenging for a lot of people to implement.</li><li>Writing for Performance: Tips and Tricks to Write Faster Code</li><li>Compiled cmdlets - how to create them and why you might want to (this got a <strong>lot</strong> of thumbs-up)</li><li>Open source PowerShell hackathon.  Either one multi-hour (2, 3, 4?) window where people can break into groups and work on some open source PowerShell extension, or two sessions, one at the beginning of the event and one at the end.  The one at the beginning the presenters/organizers provide a set of possible project ideas to work on, and people interested can sign up/vote for projects which creates groups.  The one at the end gives groups an opportunity to share/demo what they produced.  Having a room where people can gather to work on it would be cool.  These don&rsquo;t have to be big projects.  They could be small things, like knocking off one or more issues for an open source project.  The end goal is to have a pull request submitted or a new project posted in GitHub or a new module submitted in the Gallery. _Now, to be clear, this isn&rsquo;t a session - but you can definitely propose it. We have some longer time slots on Wednesday for panels, and this might be something you could do then. _</li><li>examples of real world DSC usage - that was a comment I heard from a number of folks this year</li><li>Practical Pipelines. ( Illustrate that release pipelines aren&rsquo;t just for DevOps-practicing shops, or public-facing software )</li><li>Build plans (and tools, like psake)</li><li>Module design best practices (lots of thumbs-up on this one)</li><li>Working with Open Source Projects (as a Contributor)</li><li>Working with Open Source Projects (as a Maintainer)</li><li>Applying Agile Software Development Methodologies to PowerShell</li><li>Using for . (assumption: someone writes the equivalent of inspec wrapped around Pester)</li></ul><p>And if you read the above carefully, you&rsquo;ll notice that **we do also have some space for afternoon panels on Wednesday - so if there&rsquo;s a group discussion you&rsquo;d like to lead, propose it! **Just be clear in the description you submit that you&rsquo;re proposing a panel. It&rsquo;ll be up to you to recruit panel members, which you can do on-site. We&rsquo;ll announce panels in need of panelists and direct them to you.</p>
]]></content:encoded></item><item><title>Unit Testing is “Pestering” the Hell Out Of Me</title><link>https://powershell.org/articles/2016-09-02-unit-testing-is-pestering-the-hell-out-of-me/</link><guid>https://powershell.org/articles/2016-09-02-unit-testing-is-pestering-the-hell-out-of-me/</guid><pubDate>Fri, 02 Sep 2016 17:31:14 +0000</pubDate><description>&lt;p&gt;About a week or two before Devops Camp, the attendees were asked how much experience they had using Pester, because another attendee was preparing a discussion on Pester and wanted to gauge the other attendees’ comfort level. Learning Pester had been on my to-do list for a while, but I had procrastinated on it for far longer than I intended. I answered “Beginner” - although “complete and utter newbie” would have been more accurate - and I vowed to spend some quality time looking at Pester before arriving at camp.&lt;br&gt;
There are some really great resources out there devoted to Pester, from beginner to intermediate to way-over-my-head. I read articles and watched videos. And I understood, in a conceptual kind of way, how to use Pester. Describe, Context, It, Mock, Assert-MockCalled – I understood what these things were used for. The examples made sense. I was ready to move on to trying it myself. But here is where I stumbled and recovered, and I would like your feedback and opinions on my discoveries.&lt;br&gt;
I took a piece of code I was currently working on and decided that a small function in that code was the perfect function to attempt my first unit test on. I mean, it was the tiniest little function - 7 lines of code! What could possibly be easier? Right?&lt;br&gt;
Boy, was I wrong. The struggle IS real.&lt;br&gt;
In a nutshell, my function really is 7 lines – an If/Else statement and a For-loop – and inside each is an external call to an Active Directory cmdlet. Those would definitely need to be mocked. After all, we know or assume that Set-ADAccountControl and Set-ADObject do what they are supposed to. I was stumped at where to even start because after mocking these external calls – there isn’t actually anything left to the code!&lt;br&gt;
Even after a wise person told me that “This probably isn’t a great example of a “Pester 101” example”, I was still determined to figure out how to write a Pester test to test this function, but I needed to set aside my thoughts of “I can’t figure out how to write a Pester test for this” and instead, start with “Figure out how to write a unit test for this.” My brain freeze wasn’t about Pester – it was about unit testing. What do I need to test? My next step was to do some reading up on general unit testing concepts.&lt;br&gt;
I’m not opposed to buying a book on testing concepts, but I wanted some quick answers and not a research project just to get me started. I turned to “Dr. Google” and I found some useful definitions, both formal and informal, on what unit testing really is. But it wasn’t until I found a comment buried deep in a StackExchange forum post that I realized what my next steps were.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>About a week or two before Devops Camp, the attendees were asked how much experience they had using Pester, because another attendee was preparing a discussion on Pester and wanted to gauge the other attendees’ comfort level. Learning Pester had been on my to-do list for a while, but I had procrastinated on it for far longer than I intended. I answered “Beginner” - although “complete and utter newbie” would have been more accurate - and I vowed to spend some quality time looking at Pester before arriving at camp.<br>
There are some really great resources out there devoted to Pester, from beginner to intermediate to way-over-my-head. I read articles and watched videos. And I understood, in a conceptual kind of way, how to use Pester. Describe, Context, It, Mock, Assert-MockCalled – I understood what these things were used for. The examples made sense. I was ready to move on to trying it myself. But here is where I stumbled and recovered, and I would like your feedback and opinions on my discoveries.<br>
I took a piece of code I was currently working on and decided that a small function in that code was the perfect function to attempt my first unit test on. I mean, it was the tiniest little function - 7 lines of code! What could possibly be easier? Right?<br>
Boy, was I wrong. The struggle IS real.<br>
In a nutshell, my function really is 7 lines – an If/Else statement and a For-loop – and inside each is an external call to an Active Directory cmdlet. Those would definitely need to be mocked. After all, we know or assume that Set-ADAccountControl and Set-ADObject do what they are supposed to. I was stumped at where to even start because after mocking these external calls – there isn’t actually anything left to the code!<br>
Even after a wise person told me that “This probably isn’t a great example of a “Pester 101” example”, I was still determined to figure out how to write a Pester test to test this function, but I needed to set aside my thoughts of “I can’t figure out how to write a Pester test for this” and instead, start with “Figure out how to write a unit test for this.” My brain freeze wasn’t about Pester – it was about unit testing. What do I need to test? My next step was to do some reading up on general unit testing concepts.<br>
I’m not opposed to buying a book on testing concepts, but I wanted some quick answers and not a research project just to get me started. I turned to “Dr. Google” and I found some useful definitions, both formal and informal, on what unit testing really is. But it wasn’t until I found a comment buried deep in a StackExchange forum post that I realized what my next steps were.</p><p><strong>Red-Green-Refactor-Repeat</strong><br><strong>Red:</strong> Write a test that fails.<br><strong>Green:</strong> Write the simplest code that makes the test pass. For the first pass, don’t handle edge cases, just enough to make the test pass.<br><strong>Refactor:</strong> Clean up the code and optimize if necessary. Make sure the test still passes.<br><strong>Repeat:</strong> Now think about handling those edge cases and repeat the previous steps with tests, then code, to handle them.<br>
The entire thread can be found here and the detailed explanation of the Red-Green-Refactor-Repeat concept in the comments is definitely worth a read:<br><a href="http://programmers.stackexchange.com/questions/750/what-should-you-test-with-unit-tests">http://programmers.stackexchange.com/questions/750/what-should-you-test-with-unit-tests</a></p><p>When I started thinking about writing this article, I knew that I was struggling with the concept of unit testing and I had planned to include the code that I was looking to test as part of the blog. After doing the reading to try to wrap my brain around the concepts, I changed my approach. I’ve decided to scrap the original version of this code and try to use the above approach to re-develop the function instead. I plan to blog about my journey through this process in a future post.<br>
Until then, I’d like to initiate a dialog with you, the readers: How do you approach unit testing? What is your thought process? What do you feel is important or not important to include in a unit test?</p>
]]></content:encoded></item><item><title>Ultimate PowerShell Prompt Customization and Git Setup Guide</title><link>https://powershell.org/articles/2016-08-26-ultimate-powershell-prompt-customization-and-git-setup-guide/</link><guid>https://powershell.org/articles/2016-08-26-ultimate-powershell-prompt-customization-and-git-setup-guide/</guid><pubDate>Fri, 26 Aug 2016 05:25:27 +0000</pubDate><description>&lt;p&gt;Do you spend hours a day in PowerShell? Switching back and forth between PowerShell windows getting you down? Have you ever wanted &amp;ldquo;Quake&amp;rdquo; mode for your terminal?&lt;br&gt;
If we are going to spend so much time in PowerShell, we may as well make it pretty.&lt;br&gt;
&lt;img src="https://hodgkins.io/images/posts/windows_git/sexy_powershell_prompt.png" alt=""&gt;&lt;br&gt;
Check out the &lt;a href="https://hodgkins.io/ultimate-powershell-prompt-and-git-setup"&gt;Ultimate PowerShell Prompt Customization and Git Setup Guide&lt;/a&gt; for how to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install and customize ConEmu&lt;/li&gt;
&lt;li&gt;Enable Quake Mode for your terminal&lt;/li&gt;
&lt;li&gt;Setup your PowerShell Profile&lt;/li&gt;
&lt;li&gt;Install and use Posh-Git&lt;/li&gt;
&lt;li&gt;Generate and use SSH Keys with GitHub&lt;/li&gt;
&lt;li&gt;Squash Git commits&lt;/li&gt;
&lt;/ul&gt;</description><content:encoded>&lt;![CDATA[<p>Do you spend hours a day in PowerShell? Switching back and forth between PowerShell windows getting you down? Have you ever wanted &ldquo;Quake&rdquo; mode for your terminal?<br>
If we are going to spend so much time in PowerShell, we may as well make it pretty.<br><img src="https://hodgkins.io/images/posts/windows_git/sexy_powershell_prompt.png" alt=""><br>
Check out the <a href="https://hodgkins.io/ultimate-powershell-prompt-and-git-setup">Ultimate PowerShell Prompt Customization and Git Setup Guide</a> for how to:</p><ul><li>Install and customize ConEmu</li><li>Enable Quake Mode for your terminal</li><li>Setup your PowerShell Profile</li><li>Install and use Posh-Git</li><li>Generate and use SSH Keys with GitHub</li><li>Squash Git commits</li></ul>
]]></content:encoded></item><item><title>Here's Another Reason to Contribute</title><link>https://powershell.org/articles/2016-08-24-heres-another-reason-to-contribute/</link><guid>https://powershell.org/articles/2016-08-24-heres-another-reason-to-contribute/</guid><pubDate>Wed, 24 Aug 2016 11:30:14 +0000</pubDate><description>&lt;p&gt;&lt;a href="http://Http://twitter.com/thejasonhelmick"&gt;Jason Helmick&lt;/a&gt; and I were talking last night, and we got onto the topic of expertise and respect. Kind of, &amp;ldquo;once someone really gets to that expert level, and they surpass their teacher in knowledge, you really respect them.&amp;rdquo; I disagreed, and said, &amp;ldquo;no, I respect them the minute they start contributing to the world, and helping others.&amp;rdquo;&lt;br&gt;
We all, at some stage, get &amp;ldquo;outsider syndrome,&amp;rdquo; where we think everyone else is so much smarter than us, that we&amp;rsquo;ve nothing of value to contribute. But that&amp;rsquo;s never true. First of all, there&amp;rsquo;s this thing called a &amp;ldquo;birth rate,&amp;rdquo; meaning there&amp;rsquo;s always new people coming into the field. Second, no matter what your level of expertise, you&amp;rsquo;re &lt;em&gt;in it, right then.&lt;/em&gt; &amp;ldquo;Experts&amp;rdquo; too often forget what it was like to be a beginner; a beginner &lt;em&gt;knows,&lt;/em&gt; and can often relate things that another beginner can understand more readily.&lt;br&gt;
Take this &lt;a href="https://powershell.org/2016/08/23/microsoft-did-what/"&gt;wonderful post by Missy&lt;/a&gt; Januszco. Missy probably doesn&amp;rsquo;t consider herself an expert, although she certainly held her own at my recent DevOps Camp. And she certainly wasn&amp;rsquo;t the only one writing about open-source, cross-platform PowerShell Core that week. But she did it from a unique perspective, one that a lot of her readers can probably take a lot from. And she &lt;em&gt;did it -&lt;/em&gt; instead of just talking vaguely about giving back someday, she just did, and did it well.&lt;br&gt;
PowerShell.org isn&amp;rsquo;t a curated newsfeed for a select few; its &lt;em&gt;yours&lt;/em&gt;. So if you don&amp;rsquo;t have your own place to publish and share, email webmaster@ and let us set you up to write. Whenever you solve some problem, conquer some gotcha, or have a perspective on the latest PowerShell news, share. You &lt;strong&gt;definitely&lt;/strong&gt; have something to offer.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><a href="http://Http://twitter.com/thejasonhelmick">Jason Helmick</a> and I were talking last night, and we got onto the topic of expertise and respect. Kind of, &ldquo;once someone really gets to that expert level, and they surpass their teacher in knowledge, you really respect them.&rdquo; I disagreed, and said, &ldquo;no, I respect them the minute they start contributing to the world, and helping others.&rdquo;<br>
We all, at some stage, get &ldquo;outsider syndrome,&rdquo; where we think everyone else is so much smarter than us, that we&rsquo;ve nothing of value to contribute. But that&rsquo;s never true. First of all, there&rsquo;s this thing called a &ldquo;birth rate,&rdquo; meaning there&rsquo;s always new people coming into the field. Second, no matter what your level of expertise, you&rsquo;re<em>in it, right then.</em> &ldquo;Experts&rdquo; too often forget what it was like to be a beginner; a beginner<em>knows,</em> and can often relate things that another beginner can understand more readily.<br>
Take this<a href="https://powershell.org/2016/08/23/microsoft-did-what/">wonderful post by Missy</a> Januszco. Missy probably doesn&rsquo;t consider herself an expert, although she certainly held her own at my recent DevOps Camp. And she certainly wasn&rsquo;t the only one writing about open-source, cross-platform PowerShell Core that week. But she did it from a unique perspective, one that a lot of her readers can probably take a lot from. And she<em>did it -</em> instead of just talking vaguely about giving back someday, she just did, and did it well.<br>
PowerShell.org isn&rsquo;t a curated newsfeed for a select few; its<em>yours</em>. So if you don&rsquo;t have your own place to publish and share, email webmaster@ and let us set you up to write. Whenever you solve some problem, conquer some gotcha, or have a perspective on the latest PowerShell news, share. You<strong>definitely</strong> have something to offer.</p>
]]></content:encoded></item><item><title>Microsoft did WHAT?</title><link>https://powershell.org/articles/2016-08-23-microsoft-did-what/</link><guid>https://powershell.org/articles/2016-08-23-microsoft-did-what/</guid><pubDate>Tue, 23 Aug 2016 01:51:05 +0000</pubDate><description>&lt;p&gt;Unless you’ve been living under a rock for the last couple of days, you already know that Microsoft announced last Thursday that the shell/scripting language formerly known as “Windows Powershell” is now supported on Linux and MacOS and that Powershell has been open-sourced. And for days, thoughts of “how can I use this?” or “I wonder if ‘x’ will be supported” have been flying through the minds of every system architect as we internally grapple with the possibilities of what could be, while at the same time trying to understand Microsoft’s motivation for this radical change.&lt;br&gt;
Only the change isn’t so surprising if you think about the changes that Microsoft has been making leading up to this announcement. Separating Powershell Desktop Edition and Core Edition in WMF 5.1. Announcing SQL Server on Linux – after all, IT professionals are going to need a way to administer that SQL instance and it isn’t going to be through a GUI. Supporting Powershell on Linux seemed like a logical next step.&lt;br&gt;
But it is likely just a step along the road to heterogeneous system management. Microsoft Technical Fellow and Powershell inventor Jeffrey Snover isn’t at all secretive over the fact that the vision is built upon Microsoft’s Operations Management Suite (OMS), a suite of automation and management tools that needs to be able to configure, control, manage, monitor, and self-heal a workload that runs anywhere and on any operating system.&lt;br&gt;
From the perspective of a system architect that isn’t typically on the bleeding edge of technology, I am still extremely excited over this announcement. Why? The possibilities seem endless. For one, applications that run on either Windows or Linux or a combination of the two can now be configured by the same language, or maybe even the same set of well-designed scripts. Second, the possibility of using Desired State Configuration (DSC), or third-party tooling such as Chef or Puppet in conjunction with DSC, means I can keep *all* servers in compliance with their configurations using the same tooling. Third, what Devops engineer wouldn’t love having spent a few years learning a scripting language like Powershell only to have its reach extended to other platforms? This change invariably makes us more valuable to the company by being able to take on additional management responsibilities by using the skills we already have. It can then lead to even more cross-platform learnings and opportunities. I definitely plan to learn more about Linux and how I can help build cross-platform tools. If you have similar interests, here are some great resources to get you started!&lt;br&gt;
&lt;a href="https://www.pluralsight.com/courses/essential-tools-red-hat-enterprise-linux"&gt;https://www.pluralsight.com/courses/essential-tools-red-hat-enterprise-linux&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.pluralsight.com/courses/linux-networking-advanced-lfce"&gt;https://www.pluralsight.com/courses/linux-networking-advanced-lfce&lt;/a&gt;&lt;br&gt;
I haven’t even scratched the surface of thinking about all of the ways I want to take advantage of Powershell on Linux, and I have lots of exploring to do to find out what can or can’t be done – but the energy of the entire Powershell community over these changes certainly carries over to me as well. I’m excited to find out what is possible, to build what may not have been possible, and to contribute back to the Powershell community. So kudos to you, “new Microsoft”, for energizing the entire community of Powershell enthusiasts. I can’t wait to see what’s next.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Unless you’ve been living under a rock for the last couple of days, you already know that Microsoft announced last Thursday that the shell/scripting language formerly known as “Windows Powershell” is now supported on Linux and MacOS and that Powershell has been open-sourced. And for days, thoughts of “how can I use this?” or “I wonder if ‘x’ will be supported” have been flying through the minds of every system architect as we internally grapple with the possibilities of what could be, while at the same time trying to understand Microsoft’s motivation for this radical change.<br>
Only the change isn’t so surprising if you think about the changes that Microsoft has been making leading up to this announcement. Separating Powershell Desktop Edition and Core Edition in WMF 5.1. Announcing SQL Server on Linux – after all, IT professionals are going to need a way to administer that SQL instance and it isn’t going to be through a GUI. Supporting Powershell on Linux seemed like a logical next step.<br>
But it is likely just a step along the road to heterogeneous system management. Microsoft Technical Fellow and Powershell inventor Jeffrey Snover isn’t at all secretive over the fact that the vision is built upon Microsoft’s Operations Management Suite (OMS), a suite of automation and management tools that needs to be able to configure, control, manage, monitor, and self-heal a workload that runs anywhere and on any operating system.<br>
From the perspective of a system architect that isn’t typically on the bleeding edge of technology, I am still extremely excited over this announcement. Why? The possibilities seem endless. For one, applications that run on either Windows or Linux or a combination of the two can now be configured by the same language, or maybe even the same set of well-designed scripts. Second, the possibility of using Desired State Configuration (DSC), or third-party tooling such as Chef or Puppet in conjunction with DSC, means I can keep *all* servers in compliance with their configurations using the same tooling. Third, what Devops engineer wouldn’t love having spent a few years learning a scripting language like Powershell only to have its reach extended to other platforms? This change invariably makes us more valuable to the company by being able to take on additional management responsibilities by using the skills we already have. It can then lead to even more cross-platform learnings and opportunities. I definitely plan to learn more about Linux and how I can help build cross-platform tools. If you have similar interests, here are some great resources to get you started!<br><a href="https://www.pluralsight.com/courses/essential-tools-red-hat-enterprise-linux">https://www.pluralsight.com/courses/essential-tools-red-hat-enterprise-linux</a><br><a href="https://www.pluralsight.com/courses/linux-networking-advanced-lfce">https://www.pluralsight.com/courses/linux-networking-advanced-lfce</a><br>
I haven’t even scratched the surface of thinking about all of the ways I want to take advantage of Powershell on Linux, and I have lots of exploring to do to find out what can or can’t be done – but the energy of the entire Powershell community over these changes certainly carries over to me as well. I’m excited to find out what is possible, to build what may not have been possible, and to contribute back to the Powershell community. So kudos to you, “new Microsoft”, for energizing the entire community of Powershell enthusiasts. I can’t wait to see what’s next.</p>
]]></content:encoded></item><item><title>Why "Objects," Remoting, and Consistency are Such a Big Deal in PowerShell</title><link>https://powershell.org/articles/2016-08-22-why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell/</link><guid>https://powershell.org/articles/2016-08-22-why-objects-remoting-and-consistency-are-such-a-big-deal-in-powershell/</guid><pubDate>Mon, 22 Aug 2016 20:39:49 +0000</pubDate><description>&lt;p&gt;As PowerShell begins to move into a cross-platform world, it&amp;rsquo;s important to really understand &amp;ldquo;why PowerShell.&amp;rdquo; What is it, exactly, that sets PowerShell apart? Notice that I do not mean, &amp;ldquo;what makes it better,&amp;rdquo; because &amp;ldquo;better&amp;rdquo; is something you&amp;rsquo;ll have to decide on your own. I just want to look at what makes it _different. _&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>As PowerShell begins to move into a cross-platform world, it&rsquo;s important to really understand &ldquo;why PowerShell.&rdquo; What is it, exactly, that sets PowerShell apart? Notice that I do not mean, &ldquo;what makes it better,&rdquo; because &ldquo;better&rdquo; is something you&rsquo;ll have to decide on your own. I just want to look at what makes it _different. _</p><h2 id="its-the-objects" class="ps-heading">It&rsquo;s the Objects<a class="ps-heading-anchor" href="#its-the-objects" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Folks often say that Linux is a text-based OS, whereas Windows is an object-based OS. That&rsquo;s a convenient simplification, but it isn&rsquo;t exactly accurate. And to understand why PowerShell is different, you need to understand the <em>actual</em> differences - and how Linux and Windows have actually come closer together over the years.<br>
*nix - including Unix, macOS, and Linux - is based on very old concepts. &ldquo;Old&rdquo; isn&rsquo;t &ldquo;bad&rdquo; at all; much of Linux&rsquo; current flexibility comes from these old concepts. Core to the Unix ethos is the fact that OS configurations come from text files. There&rsquo;s no Registry, there&rsquo;s no database, it&rsquo;s just text files. Kinda like, um, Windows was, back in the old days, with .ini files (and where do you think the idea for those came from). Text files are super-easy to view, search, modify, and so on. Heck, when I wrote my first Point of Sale system, it was largely text-based, because text files were super-easy for us to troubleshoot remotely, compared to a complex ISAM table structure.<br>
Windows, on the other hand, is an API-based operating system. When you want to query an OS configuration element, you don&rsquo;t just look in a text file - you run code, and query an API. When you need to make a change, you don&rsquo;t just change a text file and hup a daemon - you run code, and submit your changes to an API.<br>
When you need to pass data from one hunk of code to another, you need to have an agreed-upon structure for that data, so that the code on both ends understands the data. These structures are called _objects. _Traditionally, Unix didn&rsquo;t really have structured data. The file format used by Apache for its configuration was different from the format used by Iptables. Which is totally fine, by the way, because those two things never need to talk to each other. But when you start considering all the things the OS can do - users, file permissions, groups, ports, you name it - you started to end up with a lot of different formats. Indeed, the main reason that Unix had (has?) a reputation for being a complex OS to administer is largely because all of its data is scattered hither and yon, and all in different formats.<br>
That&rsquo;s been changing, though. You&rsquo;re starting to see more and more new projects pop up that rely on <em>structured</em> configuration data, often using JavaScript Object Notation (JSON), although in other cases something like XML. This is a big deal for *nix administration. Why?<br>
Traditionally, re-using the output of a Unix command was complex. Output was pure text, sent to your console via the stdout &ldquo;channel.&rdquo; Commands typically formatted their output for human eyeball consumption, so if you wanted to send that output instead to another command, you had to do a lot of text parsing. &ldquo;Skip the first two rows of output, and then for each remaining row, go over 32 columns and grab 5 columns worth of text.&rdquo; Or, &ldquo;skip the first row, and then in each subsequent row, look for text matching this [regex] and return only the matching text.&rdquo; Unix admins tend to <em>own</em> regular expressions for this reason.<br>
But the problem with all that is that your workflow, and your tooling, becomes very version-bound. Nobody can ever improve tools like <strong>ps</strong>, because so many scripts rely on the output being exactly as it is today. Instead, you create entire new versions of those tools - which people then take dependencies on, and which can then never change, unless they provide some backward-compatibility switches to force old-version output. The end result is a highly fragmented landscape of tooling, a very high learning curve for incoming administrators, and a high amount of overhead in automating business processes.<br>
When you code a command-line utility in 1973, it&rsquo;s easy to imagine it&rsquo;ll never need to change. On the other hand, when you start building APIs in the 1990s, it&rsquo;s much more obvious that change will be constant. By passing objects - structured data - between themselves, APIs provide a kind of inbuilt forward-compatibility. If v1 of an API outputs objects that have 10 properties, v2 can easily add five more without breaking anything downstream. Anything consuming those objects won&rsquo;t care if there&rsquo;s extra data, so long as the data it was expecting is all there. Object-based data doesn&rsquo;t have any sense of &ldquo;ordering,&rdquo; so it doesn&rsquo;t matter if the &ldquo;first&rdquo; property is Name or if the &ldquo;first&rdquo; property is Size. Consumers refer to properties by name, not by position, and the magic of the API itself makes it all match up.<br>
Objects also lend themselves to hierarchies of data. A computer object can have a Drives property, which can be a collection of Drive objects, which can have a Files property, which is a collection of File objects, and so on. Structured data like XML and JSON handle these hierarchies with ease, as do object-oriented APIs; textual output - which is essentially a flat-file at best - doesn&rsquo;t.<br>
So what sets PowerShell apart from other shells is the fact that its commands pass objects from one to another. When you reach the end of a &ldquo;chain,&rdquo; or pipeline, of commands, the shell takes what&rsquo;s left and generates textual output suitable for human eyeball consumption. So you get the advantages of a text-based command - easy to read output - and the advantages of working with an API. For example, in PowerShell for Linux, Microsoft ships a command that wraps around the Cron feature. Cron is configured from a text file; Microsoft&rsquo;s command &ldquo;understands&rdquo; the text file format, and turns it into objects. That means nobody will ever have to grep/sed/awk that text file again - instead, you can deal with structured data. That&rsquo;s a really good example of taking something PowerShell is good at - objects - and applying it to something Linux is really good at - Cron. It&rsquo;s not forcing Cron to look like the Windows Task Scheduler in any way; it&rsquo;s simply applying a new shell paradigm to an already-solid OS component.<br>
This concept of a shell passing objects - again, just structured data - was unique enough that Microsoft was<a href="http://appft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&amp;Sect2=HITOFF&amp;d=PG01&amp;p=1&amp;u=%2Fnetahtml%2FPTO%2Fsrchnum.html&amp;r=1&amp;f=G&amp;l=50&amp;s1=%2220050091201%22.PGNR.&amp;OS=DN/20050091201&amp;RS=DN/20050091201">granted a patent</a> for it (the patent also includes other innovations).</p><h2 id="remoting" class="ps-heading">Remoting<a class="ps-heading-anchor" href="#remoting" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The parent also touches on _remoting, _which was equally innovative. Yes, I know that Unix has <em>forever</em> had the ability to log into a remote machine, first using things like Telnet, later SSH, and even later still more things. But that&rsquo;s _remote logon, _and it&rsquo;s not Remoting.<br>
With remote logon, you&rsquo;re essentially turning your local computer into a dumb terminal for a remote computer, a concept literally as old as computers themselves. It&rsquo;s a 1:1 connection, and it was fine when a given company didn&rsquo;t have more than a few machines. But modern, cloud-based architecture involves <em>thousands</em> of machines, and 1:1 doesn&rsquo;t cut it. Remoting enables 1:many connections - &ldquo;here is a command; go tell these 1200 computers to run it individually, using their own local resources, and then send me the results - as objects.&rdquo; Going forward, PowerShell can use either WS-MAN or SSH as the low-level transport for that conversation, but the protocol isn&rsquo;t important. It&rsquo;s the idea of running one command _locally, _piping that output to another command _which runs remotely, _and then taking <em>that</em> output and piping it to yet more commands that run _locally. _This mixing-and-matching of computing resources and runtime locations is _huge. _</p><h2 id="consistency" class="ps-heading">Consistency<a class="ps-heading-anchor" href="#consistency" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>And finally, the one argument that&rsquo;s the toughest to make. Plenty of *nix admins, and plenty of old-school MS-DOS command-line admins, take great pride in their mastery of obscure command-line syntax. It sets them apart from lesser humans, provides a veneer of job security, and proves their dominance of their field.<br>
Unfortunately, it&rsquo;s bad for the planet.<br>
Look, maybe your country is in fine economic shape (_ahem, _Norway), but here in the United States we have a fairly precarious hold on Biggest Economy in the World. We aren&rsquo;t a manufacturing powerhouse. We basically have two experts: information technology and Hollywood, and we&rsquo;re sometimes sorry about the latter. But for our economy to thrive in this century, we need all hands on deck when it comes to IT. That means a high barrier of entry, and the need to memorize arbitrary and obscure syntax, ain&rsquo;t gonna cut it. Computing is hard enough without making it artificially more obscure through syntax.</p><p><code>chmod ugo+rwx sample.sh</code>Yeah, see, that&rsquo;s too hard to teach a 12-year-old.</p><p><code>Set-FilePermission -FileName sample.sh -Permissions Read,Write,Execute -Principal User,Group,Others -Action Add</code>See, you still need to know <em>what&rsquo;s going on</em> in both cases, but the syntax is much easier to read and understand without having to look it up. The command syntax becomes less obscure, and more self-documenting. More maintainable. Obviously, this is just a bogus example, but it illustrates the <em>pattern</em> of PowerShell - meaningful command names, meaningful parameter names, and meaningful parameter value enumerations. And I use <em>meaningful</em> in the correct way, as in, &ldquo;full of meaning.&rdquo;<br>
PowerShell still allows for a shorthand syntax, if you&rsquo;re just in a hurry -</p><p><code>sfp sample.sh -p r,w,x -for u,g,o -a add</code>- but you&rsquo;re not forced into it, and it&rsquo;s easier to figure out what those things mean (again, this is a bogus example meant to show the shell&rsquo;s syntax pattern, not an actual run-able command).</p><h2 id="so-thats-the-big-deal" class="ps-heading">So&hellip; that&rsquo;s the big deal<a class="ps-heading-anchor" href="#so-thats-the-big-deal" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>And so that&rsquo;s what makes PowerShell _different. _It&rsquo;s not going to obviate Bash on Linux anytime soon, although it&rsquo;s happy to let you run your same old text-based commands, and even integrate their output as best it can into its object-based pipeline. But at least now, anyone approaching PowerShell for the first time can understand _what makes it different, _and decide for themselves if they think that&rsquo;s worth an investment to learn to use PowerShell well.</p>]]></content:encoded></item><item><title>Create Custom Monitors with PowerShell</title><link>https://powershell.org/articles/2016-08-21-create-custom-monitors-with-powershell/</link><guid>https://powershell.org/articles/2016-08-21-create-custom-monitors-with-powershell/</guid><pubDate>Sun, 21 Aug 2016 23:44:53 +0000</pubDate><description>&lt;p&gt;Sometimes, as a developer, you want to be be able to keep track of free space on a drive, the size of a log, the load on your CPU, the number of users logged in, etc. With PowerShell, it is typically just a matter of finding the right cmdlet amidst the large (and rapidly growing) pool of cmdlets provided by Microsoft and by third parties. Then you just run &lt;em&gt;Get-Foo&lt;/em&gt; to check details about the &lt;em&gt;foo&lt;/em&gt; resource. And then you come back 5 minutes later and run it again because you want to see how it changes over time.&lt;br&gt;
But wouldn&amp;rsquo;t it be nice if you could just have it run automatically at regular intervals in a separate window that you could just keep in the corner of your screen? Well, I found the barebones of just such a utility sometime ago (authored by Marc van Orsouw,  aka ‘thePowerShellGuy’). His original post is no longer available, but I expanded upon his code and, over time, added features, bug fixes, and enhancements, making it more useful and more user-friendly. Here are a few screenshots of the Monitor Factory in action.&lt;br&gt;
&lt;em&gt;Monitor the size of a database&lt;/em&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Sometimes, as a developer, you want to be be able to keep track of free space on a drive, the size of a log, the load on your CPU, the number of users logged in, etc. With PowerShell, it is typically just a matter of finding the right cmdlet amidst the large (and rapidly growing) pool of cmdlets provided by Microsoft and by third parties. Then you just run<em>Get-Foo</em> to check details about the<em>foo</em> resource. And then you come back 5 minutes later and run it again because you want to see how it changes over time.<br>
But wouldn&rsquo;t it be nice if you could just have it run automatically at regular intervals in a separate window that you could just keep in the corner of your screen? Well, I found the barebones of just such a utility sometime ago (authored by Marc van Orsouw,  aka ‘thePowerShellGuy’). His original post is no longer available, but I expanded upon his code and, over time, added features, bug fixes, and enhancements, making it more useful and more user-friendly. Here are a few screenshots of the Monitor Factory in action.<br><em>Monitor the size of a database</em></p><p><code>Start-Monitor -AsJob {</code>Invoke-Sqlcmd &lsquo;DBCC SQLPERF(logspace)&rsquo; |<code>Select-Object 'Database Name','Log Size (MB)','Log Space Used (%)',HasErrors</code>}
`<img src="https://powershell.org/wp-content/uploads/2016/08/monitor-db-size-1.jpg" alt="Database Size Monitor"><br><em>Monitor drives on a system</em><br><img src="https://powershell.org/wp-content/uploads/2016/08/monitor-file-size-1.jpg" alt="Drive Capacity Monitor"><br><em>Monitor longest running DB queries</em><br><img src="https://powershell.org/wp-content/uploads/2016/08/monitor-queries-1.jpg" alt="Long-runnning DB Query Monitor"><br><a href="https://www.simple-talk.com/sysadmin/powershell/build-your-own-resource-monitor-in-a-jiffy/">Build Your Own Resource Monitor in a Jiffy</a> reveals how quick and easy it is to get started with the Monitor Factory.</p>
]]></content:encoded></item><item><title>Why PowerShell on Linux is Such an Accomplishment</title><link>https://powershell.org/articles/2016-08-19-why-powershell-on-linux-is-such-an-accomplishment/</link><guid>https://powershell.org/articles/2016-08-19-why-powershell-on-linux-is-such-an-accomplishment/</guid><pubDate>Fri, 19 Aug 2016 15:36:08 +0000</pubDate><description>&lt;p&gt;Yesterday, Microsoft &lt;a href="https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/"&gt;announced&lt;/a&gt; that Windows PowerShell - which I suppose we&amp;rsquo;ll just call &amp;ldquo;PowerShell,&amp;rdquo; now - has been open-sourced, with PowerShell Core builds being made available for various Linux distros as well as macOS.&lt;br&gt;
This is a big deal, but not exactly for the reasons you might think.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Yesterday, Microsoft<a href="https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/">announced</a> that Windows PowerShell - which I suppose we&rsquo;ll just call &ldquo;PowerShell,&rdquo; now - has been open-sourced, with PowerShell Core builds being made available for various Linux distros as well as macOS.<br>
This is a big deal, but not exactly for the reasons you might think.</p><h2 id="that-net-shell-guy" class="ps-heading">That .NET Shell Guy<a class="ps-heading-anchor" href="#that-net-shell-guy" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>PowerShell&rsquo;s genesis goes back to 2002 - and even earlier, really - when Jeffrey Snover wrote &ldquo;<a href="https://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;cad=rja&amp;uact=8&amp;ved=0ahUKEwiRtrzc1M3OAhVD7GMKHVe8Cz4QFggcMAA&amp;url=https%3A%2F%2Fwww.gitbook.com%2Fbook%2Fdevopscollective%2Fthe-monad-manifesto-annotated%2Fdetails&amp;usg=AFQjCNEi5p7CeZIrvKWKovnnBb7zLpyCGw&amp;bvm=bv.129759880,d.cGc">The Monad Manifesto</a>.&rdquo; He was trying to take a top-down approach to solving a long-standing problem with Windows administration, one that VBScript and other approaches had failed to fully address.<br>
Problem was, Snover was proposing an administrative shell, and scripting language, _built on top of the .NET Framework. _That&rsquo;s not inherently a bad thing; tens of thousands of line-of-business applications have been written in .NET, and along with Java, it&rsquo;s probably one of the most popular business software frameworks on the planet. Thing is, Snover was suggesting this at a time when .NET Framework-based projects were failing left and right <em>inside</em> Microsoft. This was in the &ldquo;Longhorn&rdquo; timeframe, when projects like WinFS - touted as the very basis of a new generation of Windows - had epically failed to deliver. Microsoft wound up<a href="http://www.theregister.co.uk/2005/05/26/dotnet_longhorn/">&ldquo;decoupling&rdquo; Longhorn from .NET</a>, and now there&rsquo;s this loudmouth running around trying to build a <em>shell</em> on it?<br>
I won&rsquo;t say that Jeffrey was a pariah internally for a period of time, but he certainly had his battles to fight.<br>
And he won.</p><h2 id="the-powershell-era" class="ps-heading">The PowerShell Era<a class="ps-heading-anchor" href="#the-powershell-era" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Launching in 2006, PowerShell 1.0 was in many ways the &ldquo;minimal viable product&rdquo; the team could have shipped. Notably, it lacked Remoting, something which would hold PowerShell back until 2.0 shipped a couple of years later. But Snover and his team, with 1.0, still accomplished the near-unimaginable: they convinced the Exchange Server team to go all-in, and build an almost model implementation of how to use PowerShell for administration. Exchange Server 2007 built its very GUI on top of PowerShell, just as Snover had imagined in his Manifesto. It&rsquo;s perhaps hard to imagine, a decade later, how incredible an accomplishment this was for Microsoft. Exchange Server was very much the flagship product of the time. Pretty much everyone bought Exchange Server, and to make this big a flip was a big deal.<br>
To be sure. the Exchange Server team wasn&rsquo;t without their worries. In fact, the team hedged its bets in a big way. Rather than instrumenting the server directly in PowerShell, the team built an entire abstraction layer, and wrote PowerShell commands _to that. _That way, they reasoned, if this &ldquo;.NET Shell thing&rdquo; was a flop, they could rip it out and replace it with something else, and do so fairly quickly.<br>
PowerShell wasn&rsquo;t a flop.</p><h2 id="in-lockstep-with-the-vision" class="ps-heading">In Lockstep with the Vision<a class="ps-heading-anchor" href="#in-lockstep-with-the-vision" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Few realize it, but every version of PowerShell up to, and including, 4.0 were created in lockstep with the original Manifesto. While each version introduced a bevy of new features, the &ldquo;headline&rdquo; feature in each was taken straight from the Manifesto:</p><ol><li>A composable command-line shell and scripting language</li><li>Remoting</li><li>Workflow</li><li>Desired State Configuration</li></ol><p>Snover and the Windows Management Framework (WMF) team - of which PowerShell and its supporting technologies are a part - kept marching firmly in the direction he&rsquo;d outlined. And that&rsquo;s not to in any way suggest it was a one-man show. Luminaries like Bruce Payette, who led much of the core language development, helped make PowerShell accessible to newcomers and familiar-feeling to programming pros. Guys like Lee Holmes not only helpd move development forward, but more recently gave the shell a stronger security focus. Dozens of unseen and unsung heroes helped make sure PowerShell was meeting the needs of its audience (I&rsquo;m reminded by one exercise at a Microsoft MVP Summit, where MVPs helped reproduce and categorize filed bugs so that the team could start working through them, and another incident where Program Manager Dan Harman read through <em>hundreds</em> of suggestions in Microsoft Connect to help bring as many of them to life as possible). There are team members who&rsquo;ve been with the product for a decade, something that&rsquo;s nigh unheard-of in Microsoft.</p><h2 id="the-role-of-community" class="ps-heading">The Role of Community<a class="ps-heading-anchor" href="#the-role-of-community" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>The team knew at the outset that PowerShell <em>would</em> flop if people weren&rsquo;t using it, and becoming passionate about it. Numerous team members began to engage with the community on a regular basis to help that community come to life. The PowerShell MVPs - honestly, one of the most engaged and critical groups of MVPs within the MVP program - encouraged people to learn the shell, poke at it, and complain about any shortcomings they ran across. This vocal community made a serious impact. An early build of PowerShell 3.0 included a ReadMe file listing some 80-odd new features and changes, _along with the names of the people who&rsquo;d suggested them. _Snover himself remains a regular conference guest. Payette and Holmes wrote bestselling books. Numerous team members appeared at Microsoft TechEd and Ignite.<br>
And the team supported independent community efforts whenever possible. Managers like Kenneth Hansen, Angel Calvo, Erin Chapple, and more made sure community leaders had access to answers and resources when they needed them (scarce as those resources could be, at times), and the entire team worked to give as much of their time as possible to helping the independent community thrive. Sites like PowerShell.org and PowerShellMagazine.com,  the PowerScripting Podcast, and conferences like PowerShell Conference Asia, PowerShell Conference Europe, and the PowerShell + DevOps Global Summit would have been impossible without the generous support the team gave.<br>
And that community thrived. Perhaps the biggest &ldquo;wins&rdquo; came with Advanced Functions (affectionately called &ldquo;script cmdlets&rdquo;) and Desired State Configuration, where we no longer had to rely on Microsoft to provide us with the tools we needed, but could instead code them up ourselves.<br>
And<em>that</em> was a turning point.</p><h2 id="baby-open-source-steps" class="ps-heading">Baby Open Source Steps<a class="ps-heading-anchor" href="#baby-open-source-steps" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Understand that open source had long been the enemy at Microsoft. The company&rsquo;s attempts to fight back against Linux and establish a Windows-only datacenter created a culture that deeply distrusted open source, and in many ways regarded it as the opposite of what Microsoft was all about. But <em>many</em> within Microsoft regarded open source as a way to better provide customers with what they actually needed, and a way to empower customers to create their own solutions, rather than relying entirely on what Redmond could produce.<br>
The PowerShell team&rsquo;s first step into open source was to simply release the Desired State Configuration Resource Kit on GitHub. It wasn&rsquo;t a big step, as the Kit modules were all script anyway, making the source &ldquo;open&rdquo; kind of by default. That happened at almost the same time the company released an open-source (!) Local Configuration Manager implementation for Linux (!!). Satya was in charge now, after all, and he&rsquo;d made it clear that _Microsoft Loves Linux. _<br>
Not long after, Desired State Configuration&rsquo;s documentation was open-sourced (!!!) as a set of Markdown (!!!!) documents, allowing anyone to contribute and make corrections. That was quickly followed by <em>all</em> the PowerShell core documentation being open-sourced (!!!!!). Haters gonna hate, of course, and Microsoft was quickly accused by some as simply &ldquo;taking advantage&rdquo; of the community for &ldquo;free bug testing and documentation writing.&rdquo; Which, of course, is the <em>whole point</em> of the OSS movement. Customers were now _empowered. _We didn&rsquo;t have to wait for Microsoft to fix a typo, or file an expensive support incident. We could fork, fix, and submit a PR.<br>
Snover made it clear as far back as 2014 that the open-sourcing of PowerShell itself was &ldquo;inevitable,&rdquo; although he could never comment on a timeline. The blocker, he felt, was that .NET itself - which PowerShell runs on - was closed-source, making an open-source PowerShell fairly useless.</p><h2 id="the-dominoes-begin-to-fall" class="ps-heading">The Dominoes Begin to Fall<a class="ps-heading-anchor" href="#the-dominoes-begin-to-fall" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Of course, Microsoft recently open-sourced .NET Core, bringing it - and things like ASP.NET Core - to Linux and Mac. Suddenly, Snover&rsquo;s &ldquo;blocker&rdquo; wasn&rsquo;t a block. Well, kind of. PowerShell needed a lot more than .NET Core.<br>
Except for _PowerShell Core, _which was designed to run on the extremely stripped-down Nano Server version of Windows Server 2016. PowerShell Core ran on .NET Core. .NET Core was open-sourced.<br>
And so, yesterday, PowerShell itself followed into the world of open source. It&rsquo;s<a href="http://github.com/powershell/powershell">hosted on GitHub</a>, for pity&rsquo;s sake, which is about the most non-old-school-Microsoft thing I can imagine. And the first pull requests have already been submitted.<br>
But I want you to look back at where PowerShell has been these past 10+ years. It began as a simple document, and nearly didn&rsquo;t live, thanks to the negative internal feelings on .NET at the time. But it <em>did</em> live, thanks in part to a strong vision, and in part to a passionate team of designers and developers who knew their &ldquo;.NET shell&rdquo; would make a difference. Today, PowerShell is deeply embedded into nearly every Microsoft business product, and is becoming more so every day. All of this happened in about the same time it took VBScript to become widely accepted by administrators - but PowerShell, in that time, has come <em>leagues</em> further.</p><h2 id="sure-but-on-linux" class="ps-heading">Sure&hellip; but on<em>Linux</em>???<a class="ps-heading-anchor" href="#sure-but-on-linux" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Of course, none of the forgoing in any way explains why PowerShell on Linux (or macOS) makes any sense. These operating systems are inherently text-based, and their existing shells have been getting the job done for decades. So why PowerShell? Why now?<br>
First, I think it&rsquo;s telling that PowerShell on *nix (which includes, for me, macOS, based as it is on BSD) is _respectful. _On Windows, we have Unix-like aliases - ps, ls, and the like - which run PowerShell-equivalent commands. Not on *nix. Run <strong>ps</strong> and you&rsquo;ll get the same <strong>ps</strong> you&rsquo;ve always run; ditto with ls, man, and all the others. PowerShell isn&rsquo;t here to trample the commands you know. But it <em>can</em> integrate those commands into its pipeline, feeding them objects-as-text, and consuming the text they output. &ldquo;Objects&rdquo; simply being a defined data structure, many familiar Linux command-line compositions can be done more easily and in a more readable sense in PowerShell, since text manipulation is less critical. Command-lines become less fragile, too, since these data structures can remain the same even when the underlying command is updated. Leading up to the release of PowerShell on *nix, I had the opportunity to work with many die-hard Linux admins who, once they agreed to keep an open mind, started to really appreciate what PowerShell could do for them.<br>
And don&rsquo;t forget that _Microsoft Loves Linux. _Having a single shell experience, and cross-platform shell connectivity, makes it easier to run Windows and Linux _together. _It&rsquo;ll make it easier to manage Linux in Microsoft&rsquo;s Azure cloud. It gives us, the IT community, _options, _where before we didn&rsquo;t have any.<br>
And I think, tellingly, PowerShell on *nix represents a sea change at Microsoft. You&rsquo;re no longer being asked to buy into a single-stack solution. Microsoft&rsquo;s happy to let you mix and match as needed. Most importantly, they think you&rsquo;ll use their products - like PowerShell - because _they&rsquo;re the best tool for the job. <em>In other words, Microsoft&rsquo;s willing to <em>compete,</em> and have you use their products because you choose to, not because you&rsquo;ve been locked into them.</em> _That&rsquo;s a wonderful thing. There&rsquo;s the implied risk of losing the competition, but it&rsquo;s a risk Old Microsoft has tried to mitigate and remove as much as possible. Now, we have the option to use Office wherever we want - not tied to Windows. PowerShell is no longer tied exclusively to Windows. We&rsquo;re seeing that attitude work both ways, too, with Bash on Windows, SSH on Windows, and more. These products can <em>compete</em> for your attention, and that will make them<em>all</em> better products in the long run.<br>
So congratulations to Jeffrey Snover, to all the members of the Windows Management Framework team, and to Microsoft itself. And congratulations to PowerShell itself - and to the global community that brought us to this inevitable new beginning.</p>]]></content:encoded></item><item><title>FAQ: PowerShell on Linux/Mac</title><link>https://powershell.org/articles/2016-08-18-faq-powershell-on-linuxmac/</link><guid>https://powershell.org/articles/2016-08-18-faq-powershell-on-linuxmac/</guid><pubDate>Thu, 18 Aug 2016 21:02:51 +0000</pubDate><description>&lt;p&gt;&lt;em&gt;Be sure to check back often, as we&amp;rsquo;ll add to this.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="so-does-this-mean-ill-be-able-to-run-add-your-favorite-module-name-here-on-linuxmac" class="ps-heading"&gt;So does this mean I&amp;rsquo;ll be able to run [add your favorite module name here] on Linux/Mac?&lt;a class="ps-heading-anchor" href="#so-does-this-mean-ill-be-able-to-run-add-your-favorite-module-name-here-on-linuxmac" 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;Likely not. PowerShell on Linux/Mac is, at present, &amp;ldquo;PowerShell Core,&amp;rdquo; which is a subset of the total &lt;em&gt;Windows&lt;/em&gt; PowerShell product. Similar situation to PowerShell on Nano. So any module that requires something outside Core, won&amp;rsquo;t run.&lt;br&gt;
And further, most modules have dependencies on underlying technologies in Windows. The SMBShare module, for example, depends on CIM classes that only exist on Windows.&lt;br&gt;
So many add-in modules _won&amp;rsquo;t, _in fact work on Linux - because they&amp;rsquo;re designed to manage Windows machines. Over time, I&amp;rsquo;m sure we&amp;rsquo;ll see modules that only run on Linux and/or Mac, because they&amp;rsquo;re tied to dependencies on those operating systems.&lt;br&gt;
Ideally, of course, you can always remote to the OS of your choice and run whatever commands it has. And from &lt;a href="http://www.theregister.co.uk/2016/08/18/microsoft_brings_powershell_to_linux_and_mac_publishes_as_open_source/"&gt;The Register&lt;/a&gt;:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><em>Be sure to check back often, as we&rsquo;ll add to this.</em></p><h2 id="so-does-this-mean-ill-be-able-to-run-add-your-favorite-module-name-here-on-linuxmac" class="ps-heading">So does this mean I&rsquo;ll be able to run [add your favorite module name here] on Linux/Mac?<a class="ps-heading-anchor" href="#so-does-this-mean-ill-be-able-to-run-add-your-favorite-module-name-here-on-linuxmac" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Likely not. PowerShell on Linux/Mac is, at present, &ldquo;PowerShell Core,&rdquo; which is a subset of the total <em>Windows</em> PowerShell product. Similar situation to PowerShell on Nano. So any module that requires something outside Core, won&rsquo;t run.<br>
And further, most modules have dependencies on underlying technologies in Windows. The SMBShare module, for example, depends on CIM classes that only exist on Windows.<br>
So many add-in modules _won&rsquo;t, _in fact work on Linux - because they&rsquo;re designed to manage Windows machines. Over time, I&rsquo;m sure we&rsquo;ll see modules that only run on Linux and/or Mac, because they&rsquo;re tied to dependencies on those operating systems.<br>
Ideally, of course, you can always remote to the OS of your choice and run whatever commands it has. And from<a href="http://www.theregister.co.uk/2016/08/18/microsoft_brings_powershell_to_linux_and_mac_publishes_as_open_source/">The Register</a>:</p><blockquote><p>Vendors with PowerShell libraries for their products will be able to port them to the new Core version, and early examples are AWS (Amazon Web Services) and VMware. Steve Roberts, AWS Software Development Engineer, has shown the AWS Tools for PowerShell running on a Mac; and VMware&rsquo;s Alan Renouf has done a similar demonstration using vSphere PowerCLI. &ldquo;We’ve got commands that will manage every aspect of vCenter administration already,&rdquo; said Renouf.</p></blockquote><h2 id="snovers-blog-post-mentioned-remoting-over-ssh-so-does-that-mean-i-can-remote-into-any-linux-box" class="ps-heading">Snover&rsquo;s blog post mentioned Remoting over SSH. So does that mean I can Remote into any Linux box?<a class="ps-heading-anchor" href="#snovers-blog-post-mentioned-remoting-over-ssh-so-does-that-mean-i-can-remote-into-any-linux-box" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>No, not exactly. It&rsquo;s worth understanding, first, how the existing Remoting over WS-MAN works. In Remoting, you type or compose a command on one node. It is packaged into XML, and transmitted as text over the WS-MAN protocol. The receiving node unpackages it, runs the command, and <em>serializes</em> the resulting objects into XML. That XML is sent back, again over WS-MAN (which is based on HTTP), to the originating node. The originating node _deserializes _the XML to recreate the original objects.<br>
Remoting over SSH will work exactly the same way, except that SSH will be used to transmit the XML text back and forth, rather than WS-MAN. This isn&rsquo;t the same as a simple SSH session where you&rsquo;re just sending keystrokes to the remote machine. A &ldquo;plain&rdquo; Linux machine&rsquo;s SSH daemon wouldn&rsquo;t know what to do with the XML-packaged traffic used by Remoting. Remoting over SSH will require both nodes to be running PowerShell. SSH isn&rsquo;t the end-game, here; it&rsquo;s merely being used to get text from one place to another. This isn&rsquo;t &ldquo;PowerShell SSH-ing into a remote machine,&rdquo; either. PowerShell isn&rsquo;t an SSH client or server, in that sense.<br>
Microsoft has already said they plan to release an SSH server and client for Windows. <em>That</em> will get you the plain-Jane SSH interactive sessions that you&rsquo;re used to. SSH, in that scenario, works a lot like encrypted Telnet (it&rsquo;s based on Telnet, after all, as is nearly every other Internet protocol). You press a letter on your keyboard, and it&rsquo;s sent to the remote machine, which then echoes it back to you, so the letter also appears on your local console. When you hit enter to run a command, the text output is sent to your console. &ldquo;Plain&rdquo; SSH is a purely text-based thing - while PowerShell&rsquo;s strengths come from its use of objects, rather than text.<br>
So it&rsquo;s important to differentiate, in your mind, &ldquo;using SSH the way I&rsquo;m used to&rdquo; and &ldquo;Remoting using SSH as a text transport.&rdquo; There&rsquo;s actually precedent for what Remoting is doing: SCP. SCP encodes binary files as a text stream (vaguely like SMTP does), and uses SSH to transmit that text. It&rsquo;s then decoded into the original binary on the other end. But although SCP <em>uses</em> SSH under the hood, we certainly don&rsquo;t think of it as &ldquo;using SSH&rdquo; the way we do when we have an interactive SSH login on a remote box.</p>
]]></content:encoded></item><item><title>PowerShell is Open Sourced</title><link>https://powershell.org/articles/2016-08-18-powershell-is-open-sourced/</link><guid>https://powershell.org/articles/2016-08-18-powershell-is-open-sourced/</guid><pubDate>Thu, 18 Aug 2016 16:05:46 +0000</pubDate><description>&lt;p&gt;For those of you that have been at PowerShell Summits over the last few years you’ll have heard Jeffrey Snover state that he wanted to take PowerShell to other platforms.&lt;/p&gt;
&lt;p&gt;Now its happened&lt;/p&gt;
&lt;p&gt;Jeffrey has announced that an ALPHA release of PowerShell is now available for Linux and Mac.  Currently available for Ubuntu, Centos, Red Hat and Mac OS X with more to come&lt;/p&gt;
&lt;p&gt;The announcement is at&lt;/p&gt;
&lt;p&gt;&lt;a href="https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/"&gt;https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also see PowerShell blog&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>For those of you that have been at PowerShell Summits over the last few years you’ll have heard Jeffrey Snover state that he wanted to take PowerShell to other platforms.</p><p>Now its happened</p><p>Jeffrey has announced that an ALPHA release of PowerShell is now available for Linux and Mac.  Currently available for Ubuntu, Centos, Red Hat and Mac OS X with more to come</p><p>The announcement is at</p><p><a href="https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/">https://azure.microsoft.com/en-us/blog/powershell-is-open-sourced-and-is-available-on-linux/</a></p><p>Also see PowerShell blog</p><p><a href="https://blogs.msdn.microsoft.com/powershell/2016/08/18/powershell-on-linux-and-open-source-2/">https://blogs.msdn.microsoft.com/powershell/2016/08/18/powershell-on-linux-and-open-source-2/</a></p><p>Some  points to note:</p><p>ISE isn’t available as part of the alphas release but VSCode is available for Linux and Mac giving an consistent editor across the platforms</p><p>PowerShell remoting will be extended to use Open SSH as well as WSMAN</p><p>Planned enhancements include:</p><p>Additional Linux Distros covered – parity with .NET Core.</p><p>Writing Cmdlets in Python and other languages</p><p>PSRP over OpenSSH</p><p>WSMan based remoting to downlevel versions of Windows and WSMan based PSRP on Linux.</p><p>Editor Services and auto-generated GUI</p><p>Unix-style wildcard expansion</p><p>Increasing test code coverage for Windows and Linux editions</p><p>Continue increasing cmdlet coverage for Linux and Windows</p><p>REMEMBER this an ALPHA release – there’s still a lot to do and its a open source project so community effort is required</p><p>Enjoy</p>
]]></content:encoded></item><item><title>A date with PowerShell</title><link>https://powershell.org/articles/2016-08-11-a-date-with-powershell/</link><guid>https://powershell.org/articles/2016-08-11-a-date-with-powershell/</guid><pubDate>Thu, 11 Aug 2016 20:42:40 +0000</pubDate><description>&lt;p&gt;At the beginning of July, we welcomed our 3rd son into the world. As days past my wife and I would say, &amp;ldquo;wow, he&amp;rsquo;s 11 days old. Can you believe it?!&amp;rdquo;. I&amp;rsquo;m sure parents out there are relating to this!&lt;br&gt;
This gave me an idea for a fun script that would get your age in years, months and days, tell you how many days until your birthday and your star sign.&lt;br&gt;
I wanted date of birth passed to the function as &amp;lsquo;dd/MM/yy&amp;rsquo;. To keep to this format, I’m using the &amp;lsquo;ValidatePattern&amp;rsquo; Advanced Parameter with a Regular Expression (Regex). The regular expression, &amp;ldquo;^(0[1-9]|[12]\d|3[01])/(0[1-9]|1[0-2])/(\d{2})$&amp;rdquo;, will only allow a date in the format of 01/01/16, for example.&lt;br&gt;
Briefly, here is regex syntax I used in some of the expression:&lt;br&gt;
^ Start of string&lt;br&gt;
( .. ) Capturing group&lt;br&gt;
(0[1-9] Match two digits that make up the day. This accepts numbers from 01 to 09&lt;br&gt;
| Acts like a Boolean OR.&lt;br&gt;
/d match any digital character&lt;br&gt;
[12] match any character in the set&lt;br&gt;
/ used to divide the date numbers&lt;br&gt;
{2} Exactly two times&lt;br&gt;
$ End of string&lt;br&gt;
Now that my function parameter variable $Bday has a date, its passed to get-date to be converted from a string to a date. The date in variable $cDate will look like this, &amp;lsquo;01 January 2016 00:00:00&amp;rsquo;. The next line in the code will use todays date and subtract the date passed in $cDate variable. The $diff variable will contain the following data which we will use to get our age in years, months and days:&lt;br&gt;
Days : 212&lt;br&gt;
Hours : 12&lt;br&gt;
Minutes : 40&lt;br&gt;
Seconds : 20&lt;br&gt;
Milliseconds : 533&lt;br&gt;
Ticks : 183624205335135&lt;br&gt;
TotalDays : 212.528015434184&lt;br&gt;
TotalHours : 5100.67237042042&lt;br&gt;
TotalMinutes : 306040.342225225&lt;br&gt;
TotalSeconds : 18362420.5335135&lt;br&gt;
TotalMilliseconds : 18362420533.5135&lt;br&gt;
I&amp;rsquo;ve contained this first part in our Begin block. The Process block does the main code.&lt;br&gt;
Now I need to get my age in Years, Months and Days. This is where the [math] data type is used. I&amp;rsquo;m using the &amp;lsquo;Truncate&amp;rsquo; property as I don&amp;rsquo;t want to do anything fancy like round up my numbers. Adding the .typename of Days to my $diff variable and dividing by $daysInYear variable I can get my age in years.&lt;br&gt;
The next two, months and days required a tweak to the algorithm.&lt;br&gt;
I ended up using a maths term called a &amp;lsquo;Mod&amp;rsquo;. Now I’m not talking about youth culture and style in the sixties (Mods and rockers anyone ??), but the Modulus Math Operator. Basically the Modulus Operator returns the remainder when the first number is divided by the second. So for example:&lt;br&gt;
1 mod 3 = 1 (or 1 % 3 = 1)&lt;br&gt;
2 mod 3 = 2&lt;br&gt;
3 mod 3 = 0&lt;br&gt;
4 mod 3 = 1&lt;br&gt;
The operator sign used is % for Modulus. Not to be confused for the alias of foreach in PowerShell. For days in a month, I used the average of 30.&lt;br&gt;
I thought it would be fun to add the star sign as well. I was after something that could tell me, &amp;ldquo;is this date in this date range?&amp;rdquo;. One of the properties of &amp;lsquo;get-date&amp;rsquo; is DayOfYear.&lt;br&gt;
Finding if a number is in a range is pretty straight forward, For example:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>At the beginning of July, we welcomed our 3rd son into the world. As days past my wife and I would say, &ldquo;wow, he&rsquo;s 11 days old. Can you believe it?!&rdquo;. I&rsquo;m sure parents out there are relating to this!<br>
This gave me an idea for a fun script that would get your age in years, months and days, tell you how many days until your birthday and your star sign.<br>
I wanted date of birth passed to the function as &lsquo;dd/MM/yy&rsquo;. To keep to this format, I’m using the &lsquo;ValidatePattern&rsquo; Advanced Parameter with a Regular Expression (Regex). The regular expression, &ldquo;^(0[1-9]|[12]\d|3[01])/(0[1-9]|1[0-2])/(\d{2})$&rdquo;, will only allow a date in the format of 01/01/16, for example.<br>
Briefly, here is regex syntax I used in some of the expression:<br>
^ Start of string<br>
( .. ) Capturing group<br>
(0[1-9] Match two digits that make up the day. This accepts numbers from 01 to 09<br>
| Acts like a Boolean OR.<br>
/d match any digital character<br>
[12] match any character in the set<br>
/ used to divide the date numbers<br>
{2} Exactly two times<br>
$ End of string<br>
Now that my function parameter variable $Bday has a date, its passed to get-date to be converted from a string to a date. The date in variable $cDate will look like this, &lsquo;01 January 2016 00:00:00&rsquo;. The next line in the code will use todays date and subtract the date passed in $cDate variable. The $diff variable will contain the following data which we will use to get our age in years, months and days:<br>
Days : 212<br>
Hours : 12<br>
Minutes : 40<br>
Seconds : 20<br>
Milliseconds : 533<br>
Ticks : 183624205335135<br>
TotalDays : 212.528015434184<br>
TotalHours : 5100.67237042042<br>
TotalMinutes : 306040.342225225<br>
TotalSeconds : 18362420.5335135<br>
TotalMilliseconds : 18362420533.5135<br>
I&rsquo;ve contained this first part in our Begin block. The Process block does the main code.<br>
Now I need to get my age in Years, Months and Days. This is where the [math] data type is used. I&rsquo;m using the &lsquo;Truncate&rsquo; property as I don&rsquo;t want to do anything fancy like round up my numbers. Adding the .typename of Days to my $diff variable and dividing by $daysInYear variable I can get my age in years.<br>
The next two, months and days required a tweak to the algorithm.<br>
I ended up using a maths term called a &lsquo;Mod&rsquo;. Now I’m not talking about youth culture and style in the sixties (Mods and rockers anyone ??), but the Modulus Math Operator. Basically the Modulus Operator returns the remainder when the first number is divided by the second. So for example:<br>
1 mod 3 = 1 (or 1 % 3 = 1)<br>
2 mod 3 = 2<br>
3 mod 3 = 0<br>
4 mod 3 = 1<br>
The operator sign used is % for Modulus. Not to be confused for the alias of foreach in PowerShell. For days in a month, I used the average of 30.<br>
I thought it would be fun to add the star sign as well. I was after something that could tell me, &ldquo;is this date in this date range?&rdquo;. One of the properties of &lsquo;get-date&rsquo; is DayOfYear.<br>
Finding if a number is in a range is pretty straight forward, For example:</p><p><code>5 -in 1..10</code>Which gives a Boolean result.<br>
Now if I convert my date ranges into days of the year then I can match the day of the year I was born against the ranges of days for star signs. I&rsquo;ve used a switch statement to check against multiple conditions. Within a scriptblock I’ve asked if the value I’m passing is &lsquo;in&rsquo; the array of dates for each star sign. The match will return the star sign and is held in the $starSign variable.<br>
The Final part of the process block is to work out how many days until your next birthday. By capturing the current date, formatting the date of birth by removing the year born, adding the current year and finally subtract the amended date of birth against the current date. Phew!<br>
This will leave a number of days until your next birthday. The &lsquo;if&rsquo; statement is added if your birthday has already happened at the time of the code, it simply reverses the sum to give a positive number.<br>
The end block displays the three captured results to the host.<br>
I hope you have enjoyed this post and can see the many options possible for dates in PowerShell.<br>
Feel free to download the script from my GitHub<a href="https://github.com/Gbeer7/Get-Age.git">https://github.com/Gbeer7/Get-Age.git</a></p><p><code>function Get-age { param( [Parameter(Mandatory=$true, HelpMessage="Date must be written as dd/mm/yy", Position=0)] [ValidatePattern("^(0[1-9]|[12]\d|3[01])/(0[1-9]|1[0-2])/(\d{2})$")] [string]$Bday ) Begin { # use 'get-date' to convert '$Bday' Variable $cDate = (get-date -Date $Bday) # from today's date subtract birth date $diff = (Get-Date).Subtract($cDate) } Process { # Work out Years, months and days [int]$daysInYear = '365' [int]$averageMonth = '30' # years $totalYears = [math]::Truncate( $($diff.Days) / $daysInYear ) $totalMonths = [math]::Truncate( $($diff.Days) % $daysInYear / $averageMonth ) # days $remainingDays = [math]::Truncate( $($diff.Days) % $daysInYear % $averageMonth ) # Your star sign $thisYear = (get-date).Year $starSign = switch ($cDate.DayOfYear) { { $_ -in @( ((get-date 22/12/$thisYear).DayOfYear)..365; 0..((get-date 19/01/$thisYear).DayOfYear) ) } { "Capricorn" } { $_ -in @( ((get-date 20/01/$thisYear).DayOfYear)..((get-date 18/02/$thisYear).DayOfYear) ) } { "Aquarius" } { $_ -in @( ((get-date 19/02/$thisYear).DayOfYear)..((get-date 20/03/$thisYear).DayOfYear) ) } { "Pisces" } { $_ -in @( ((get-date 21/03/$thisYear).DayOfYear)..((get-date 19/04/$thisYear).DayOfYear) ) } { "Aries" } { $_ -in @( ((get-date 20/04/$thisYear).DayOfYear)..((get-date 20/05/$thisYear).DayOfYear) ) } { "Taurus" } { $_ -in @( ((get-date 21/05/$thisYear).DayOfYear)..((get-date 20/06/$thisYear).DayOfYear) ) } { "Gemini" } { $_ -in @( ((get-date 21/06/$thisYear).DayOfYear)..((get-date 22/07/$thisYear).DayOfYear) ) } { "Cancer" } { $_ -in @( ((get-date 23/07/$thisYear).DayOfYear)..((get-date 22/08/$thisYear).DayOfYear) ) } { "Leo" } { $_ -in @( ((get-date 23/08/$thisYear).DayOfYear)..((get-date 22/09/$thisYear).DayOfYear) ) } { "Virgo" } { $_ -in @( ((get-date 23/09/$thisYear).DayOfYear)..((get-date 22/10/$thisYear).DayOfYear) ) } { "Libra" } { $_ -in @( ((get-date 23/10/$thisYear).DayOfYear)..((get-date 21/11/$thisYear).DayOfYear) ) } { "Scorpio" } { $_ -in @( ((get-date 22/10/$thisYear).DayOfYear)..((get-date 21/12/$thisYear).DayOfYear) ) } { "Sagittarius" } } # Work out how many days until birthday $now = [DateTime]::Now $dm = get-date $Bday -UFormat "%m/%d/" $Days = [Datetime]($dm + $now.Year) – $Now # If birthday has happened this year change sum if (!($Days -ge 0)) { $Days = $now - [Datetime]($dm + $now.Year) } } End { # display "</code>nYou are {0} year(s), {1} month(s) and {2} day(s)" -f $totalYears, $totalMonths, $remainingDays
&ldquo;Your Star sign is: " + $starSign
# and&hellip;
if ($cDate.Year -eq (get-date).Year) {
&ldquo;You have another $($daysInYear - $diff.Days) days until your birthday&rdquo; # If you are under 1 years old
} else {
&ldquo;You have another $($Days.days) days until your birthday&rdquo; # over the age of 1
}
}
}# Function End
`</p>
]]></content:encoded></item><item><title>What are your "known problems" (solved) in DSC?</title><link>https://powershell.org/articles/2016-08-08-what-are-your-known-problems-solved-in-dsc/</link><guid>https://powershell.org/articles/2016-08-08-what-are-your-known-problems-solved-in-dsc/</guid><pubDate>Mon, 08 Aug 2016 19:32:02 +0000</pubDate><description>&lt;p&gt;I&amp;rsquo;m collecting a list of known problems in DSC v5 _that have been solved. _Like the infamous &amp;ldquo;MI RESULT 12&amp;rdquo; error that could happen if you upgraded from prerelease v5 to production preview. I&amp;rsquo;m going to document these in &amp;ldquo;The DSC Book,&amp;rdquo; including in its free sample version, to help preserve these things in one place.&lt;br&gt;
Again - these need to be &lt;em&gt;solved&lt;/em&gt; problems. Just drop as much description as you can into a comment here, and feel free to link to the fix, or to a discussion thread on the problem.&lt;br&gt;
And please - pass this around. If you&amp;rsquo;ve never had a chance to contribute to &amp;ldquo;the community&amp;rdquo; before, now&amp;rsquo;s a great time. Even if it&amp;rsquo;s a problem that you know doesn&amp;rsquo;t exist in the &lt;em&gt;current&lt;/em&gt; v5 release, let&amp;rsquo;s please just document its former existence.&lt;br&gt;
Thanks!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I&rsquo;m collecting a list of known problems in DSC v5 _that have been solved. _Like the infamous &ldquo;MI RESULT 12&rdquo; error that could happen if you upgraded from prerelease v5 to production preview. I&rsquo;m going to document these in &ldquo;The DSC Book,&rdquo; including in its free sample version, to help preserve these things in one place.<br>
Again - these need to be <em>solved</em> problems. Just drop as much description as you can into a comment here, and feel free to link to the fix, or to a discussion thread on the problem.<br>
And please - pass this around. If you&rsquo;ve never had a chance to contribute to &ldquo;the community&rdquo; before, now&rsquo;s a great time. Even if it&rsquo;s a problem that you know doesn&rsquo;t exist in the <em>current</em> v5 release, let&rsquo;s please just document its former existence.<br>
Thanks!</p>
]]></content:encoded></item><item><title>PowerShell and DevOps Global Summit 2017: Call for Topics</title><link>https://powershell.org/articles/2016-08-01-powershell-and-devops-global-summit-2017-call-for-topics/</link><guid>https://powershell.org/articles/2016-08-01-powershell-and-devops-global-summit-2017-call-for-topics/</guid><pubDate>Mon, 01 Aug 2016 11:09:22 +0000</pubDate><description>&lt;p&gt;The PowerShell and DevOps Global Summit is the number one conference where PowerShell enthusiasts gather and learn from each other in fast-paced, knowledge packed presentations. PowerShell, and DevOps, experts from all over the world including MVP’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.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also the place to explore and further your knowledge of DevOps principles and practices in a Windows environment. It&amp;rsquo;s a place to make new connections, learn new techniques, and offer something to your peers and colleagues. If you want to share your PowerShell or DevOps expertise, then this is your official call to submit presentations for selection!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The PowerShell and DevOps Global Summit is the number one conference where PowerShell enthusiasts gather and learn from each other in fast-paced, knowledge packed presentations. PowerShell, and DevOps, experts from all over the world including MVP’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.</p><p>It&rsquo;s also the place to explore and further your knowledge of DevOps principles and practices in a Windows environment. It&rsquo;s a place to make new connections, learn new techniques, and offer something to your peers and colleagues. If you want to share your PowerShell or DevOps expertise, then this is your official call to submit presentations for selection!</p><p>The PowerShell and DevOps Global Summit 2017 will be returning to the Meydenbauer center, Bellevue WA on 9-12 April 2017.</p><h2 id="topic-areas-what-we-are-looking-for" class="ps-heading"><strong>TOPIC AREAS– What we are looking for</strong><a class="ps-heading-anchor" href="#topic-areas-what-we-are-looking-for" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>We are looking for presentations in a number of areas. The bulk of our sessions follow our now traditional 45-minute format. These sessions cover a wide aspect of PowerShell and DevOps expertise. Your proposed session should fit into one of the following areas:</p><ul><li>PowerShell Internals – A deep look into the inside workings of PowerShell and practical solutions that are built from them. These presentations are typically more directed to the PowerShell development community that is building extensions and solutions relating to PowerShell.</li><li>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.</li><li>DevOps in Practice – A deep dive into putting the DevOps principles into practice. PowerShell may be a part of DevOps in your organization or you may be using other tools. Presentations should focus on what you’re doing and how you’re doing it.</li></ul><p>We are open to presentations across the entire ecosystem that has been built around PowerShell or the various DevOps tools. 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 third party products.</p><p>New topics will be preferred over the recycling of older topics – look to see what’s new in PowerShell 5.0 and use the questions on PowerShell.org to spot areas that could supply a good session for the Summit. However, we are still open to sessions on ‘older’ topics that address areas of great confusion or uncertainty.</p><p>We have a very limited number agenda slots available for double length sessions. These are reserved for experienced speakers that are delving into depths of a topic. Recent Summit’s have had sessions on security, containers on Windows, Azure automation and PowerShell based screen scraping. Please contact us –<a href="mailto:summit@powershell.org">summit@powershell.org</a> – with your idea before spending too much time developing such a session.</p><p>On Sunday 9 April we will have six 3 hour sessions available. These should cover either foundational topics that will either bring attendees up to speed in a particular area or be a very deep dive into an advanced topic. Again, these are reserved for experienced speakers so please contact us –<a href="mailto:summit@powershell.org">summit@powershell.org</a> – with your idea before spending too much time developing such a session.</p><p>Also on Sunday we’re looking to present half day workshops – Function review and DSC Resource review. Bring your code and get expert analysis and feedback together with help solving your problems in these areas. We’re looking for PowerShell and DSC experts to run these sessions. Please contact us –<a href="mailto:summit@powershell.org">summit@powershell.org</a> – if you could run such a session.</p><h2 id="what-kind-of-sessions-get-selected" class="ps-heading">** What kind of sessions get selected?**<a class="ps-heading-anchor" href="#what-kind-of-sessions-get-selected" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>We’re looking for sessions that go beyond – way beyond – ‘beginner’.  This is an ‘experts’ level conference and we expect the session to reflect that.<br>
If you want to see examples of the depth we’re looking for use the recordings on the PowerShell.org Youtube channel from last year’s PowerShell and DevOps Global Summit as a guide.</p><p>We look for an abstract that’s compelling and makes us want 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.</p><p>We want to see the code. Don’t just talk about it – this is a PowerShell summit not a PowerPoint Summit. If your session isn’t predominately demonstrations its probably not right for the Summit.</p><p>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.
AIM HIGH, VERY HIGH.</p><p>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.</p><p>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>If you are going to be presenting about a module you’ve created don’t just show it in use. Show the code! Show how you solved the problem! What issues did you have and how did you do to overcome them?</p><p>You are more likely to be accepted as a speaker if you have multiple sessions we can accept. We have a very limited speaker budget and to maximize value to attendees we need to keep our costs down. We can do this if speakers present multiple sessions. They don’t have to be on the same topic – its better if they aren’t.</p><p>To give you some ideas we’ve conducted a survey of topics potential attendees would like to see covered:</p><ul><li>DevOps tools and practices</li><li>DevOps on Windows</li><li>Source control</li><li>Testing – pester, OVF, TDD etc.</li><li>Metrics and measurements in DevOps</li><li>PowerShell next generation</li><li>JEA</li><li>Exchange web services</li><li>System Center – SCSM, SCCM</li><li>PowerShell + SQL Server</li><li>Software Inventory logging</li><li>More DSC – specially to enable WinOps</li></ul><p>If you have any doubts about the suitability of a particular session, please contact us -<a href="mailto:summit@powershell.org">summit@powershell.org</a> – we’re always happy to discuss proposed sessions.</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 NOT 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>Internet connectivity is available in the conference center but bandwidth is limited. If you rely on connecting to the cloud for your sessions then consider recording any demonstrations as a contingency.</p><h2 id="how-to-submit-abstracts-of-presentations" class="ps-heading"><strong>How to submit abstracts of presentations</strong><a class="ps-heading-anchor" href="#how-to-submit-abstracts-of-presentations" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Presentations will be 45-minutes in length and the submission should include the following:</p><ul><li>Presentation Title</li><li>Presentation abstract – a description of the presentation and the topics covered. 250 words or less and suitable for marketing.</li></ul><p>Go to<a href="https://www.eventloom.com/event/register/summit2017/Speaker?preregister=1">https://www.eventloom.com/event/register/summit2017/Speaker?preregister=1</a>. Notice that you&rsquo;ll get a certificate error if you don&rsquo;t use the &ldquo;www&rdquo; at the front.</p><p>This is the only valid URL for pre-registration. Provide and confirm your e-mail address, name and other required details. You’re creating a new account, even if you’ve attended past Summit events.</p><p><strong>DO NOT ATTEMPT TO REGISTER FOR THE SUMMIT AS AN ATTENDEE AT THIS STAGE – WE WILL BE OPENING REGISTRATION IN NOVEMBER 2016. ANY NON-SPEAKER REGISTRATIONS WILL BE DELETED AT THAT TIME.</strong></p><ul><li>Click Abstracts on the top menu</li><li>Click SUBMIT ABSTRACT</li><li>Enter Title and Description.</li><li>Click SUBMIT</li><li>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.</li></ul><p>To return to the site at a later time, go to<a href="https://www.eventloom.com/event/login/summit2017">https://www.eventloom.com/event/login/summit2017</a>
Click Log In. You can then re-visit Abstracts.</p><p>Note that you must set your abstract status to Ready for Review 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.</p><h2 id="presentation-submission-deadline--when-you-should-send-it-by" class="ps-heading"><strong>Presentation submission deadline – When you should send it by</strong><a class="ps-heading-anchor" href="#presentation-submission-deadline--when-you-should-send-it-by" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><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 Sunday 2 October 2016. This is a hard deadline – NO sessions will be accepted after this date.</p><h2 id="when-you-will-know-youve-been-selected" class="ps-heading"><strong>When you will know you’ve been selected</strong><a class="ps-heading-anchor" href="#when-you-will-know-youve-been-selected" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><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 Monday 10 October 2016.</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 23 October 2016 so that we have a completed agenda in time for attendee registration.</p><p>We will notify all potential speakers by 23 October 2016 if their sessions haven’t been accepted.</p><p>Speakers, with accepted sessions, will be given free admission to the event, including attendance at all official Summit activities. Speakers may not bring guests to the day sessions or evening events. We have a limited budget, and the number of speakers selected will be governed by that budget.</p><p>All speakers will receive a stipend of $400 per session (more for the longer Sunday sessions) to assist with travelling and accommodation expenses.</p><p>Pre-registering as a speaker does not guarantee you a place at the event. 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 23 October 2016, 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 2016 and through 3 March 2017, 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, Tuesday 1 November 2016.</p><p>We look forward to your submissions and your help in making PowerShell and DevOps Global Summit 2017 the most valuable IT/Dev conference of the year building on and surpassing the previous Summits!</p>
]]></content:encoded></item><item><title>Deploying Modules to the PowerShell Gallery</title><link>https://powershell.org/articles/2016-07-27-deploying-modules-to-the-powershell-gallery/</link><guid>https://powershell.org/articles/2016-07-27-deploying-modules-to-the-powershell-gallery/</guid><pubDate>Wed, 27 Jul 2016 00:38:35 +0000</pubDate><description>&lt;p&gt;So! We&amp;rsquo;ve talked about &lt;a href="https://powershell.org/continuous-integration-continuous-delivery-and-psdeploy/"&gt;continuous integration and deployment with PSDeploy&lt;/a&gt;, the &lt;a href="https://powershell.org/abstraction-and-configuration-data/"&gt;importance of abstraction&lt;/a&gt;, and a bit on &lt;a href="https://powershell.org/writing-and-publishing-powershell-modules/"&gt;how and why to write and publish PowerShell modules&lt;/a&gt;.&lt;br&gt;
It&amp;rsquo;s time to combine these ingredients with a quick, real-world walk through on &lt;em&gt;automatically publishing your PowerShell modules to the PowerShell Gallery&lt;/em&gt;.  If you want a full run-down showing how to deploy PSDeploy with PSDeploy, &lt;a href="http://ramblingcookiemonster.github.io/PSDeploy-Inception/"&gt;hit the link&lt;/a&gt;; otherwise, we&amp;rsquo;ll pick up the &lt;a href="https://github.com/RamblingCookieMonster/PSStackExchange/tree/db1277453374cb16684b35cf93a8f5c97288c41f/PSStackExchange"&gt;PSStackExchange module&lt;/a&gt; where we left off, and drop in some continuous integration and deployment goodness!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>So! We&rsquo;ve talked about<a href="https://powershell.org/continuous-integration-continuous-delivery-and-psdeploy/">continuous integration and deployment with PSDeploy</a>, the<a href="https://powershell.org/abstraction-and-configuration-data/">importance of abstraction</a>, and a bit on<a href="https://powershell.org/writing-and-publishing-powershell-modules/">how and why to write and publish PowerShell modules</a>.<br>
It&rsquo;s time to combine these ingredients with a quick, real-world walk through on<em>automatically publishing your PowerShell modules to the PowerShell Gallery</em>.  If you want a full run-down showing how to deploy PSDeploy with PSDeploy,<a href="http://ramblingcookiemonster.github.io/PSDeploy-Inception/">hit the link</a>; otherwise, we&rsquo;ll pick up the<a href="https://github.com/RamblingCookieMonster/PSStackExchange/tree/db1277453374cb16684b35cf93a8f5c97288c41f/PSStackExchange">PSStackExchange module</a> where we left off, and drop in some continuous integration and deployment goodness!</p><h3 id="is-everything-in-order" class="ps-heading">Is everything in order?<a class="ps-heading-anchor" href="#is-everything-in-order" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>First things first, what do we already have?</p><ul><li>A GitHub account, with a repo containing<a href="https://github.com/RamblingCookieMonster/PSStackExchange/tree/db1277453374cb16684b35cf93a8f5c97288c41f">a PowerShell module</a></li><li>A<a href="https://www.powershellgallery.com/">PowerShell Gallery</a> account (<a href="https://www.powershellgallery.com/users/account/LogOn?returnUrl=%2F">register an existing Microsoft account</a>)</li><li>Our<a href="https://www.powershellgallery.com/account">PowerShell Gallery API Key</a></li></ul><p>That&rsquo;s about it!  This is all you need to start automatically publishing to the PowerShell Gallery.</p><h3 id="manual-steps" class="ps-heading">Manual steps<a class="ps-heading-anchor" href="#manual-steps" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>There&rsquo;s one manual step to take - we&rsquo;ll use AppVeyor&rsquo;s<a href="https://www.appveyor.com/docs/build-configuration#secure-variables">secure variables</a> feature to encrypt our PowerShell Gallery API key under our AppVeyor account.<br>
Chris Wahl has<a href="http://wahlnetwork.com/2016/07/19/encrypting-environmental-variables-with-appveyor/">a quick hit with instructions</a>.  Long story short? Click your AppVeyor account drop down, Encrypt data.  Paste in your API key and Encrypt!  Copy out the resulting encrypted value.<br>
Okay, now what do we do with it?</p><h3 id="drop-in-the-scaffolding" class="ps-heading">Drop in the scaffolding!<a class="ps-heading-anchor" href="#drop-in-the-scaffolding" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>We&rsquo;re going to download four files and substitute in our encrypted data.  You could use the code below with a few substitutions to add automated deployments to your PowerShell modules:</p><p>`# Create a folder, clone PSStackExchange, browse to that repo</p><h1 id="substitute-in-values-for-your-own-module-as-desired" class="ps-heading">Substitute in values for your own module as desired<a class="ps-heading-anchor" href="#substitute-in-values-for-your-own-module-as-desired" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>$Repo = &lsquo;C:\sc\PSStackExchange'
mkdir C:\sc
cd C:\sc
git clone<a href="https://github.com/RamblingCookieMonster/PSStackExchange.git">https://github.com/RamblingCookieMonster/PSStackExchange.git</a>
cd $Repo</p><h1 id="were-in-the-repo-download-4-scaffolding-files" class="ps-heading">We&rsquo;re in the repo! Download 4 scaffolding files:<a class="ps-heading-anchor" href="#were-in-the-repo-download-4-scaffolding-files" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>$wc = New-Object System.Net.WebClient
&lsquo;<a href="https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/appveyor.yml'">https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/appveyor.yml'</a>,
&lsquo;<a href="https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/build.ps1'">https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/build.ps1'</a>,
&lsquo;<a href="https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/psake.ps1'">https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/psake.ps1'</a>,
&lsquo;<a href="https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/deploy.psdeploy.ps1'">https://raw.githubusercontent.com/RamblingCookieMonster/PSDeploy/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/deploy.psdeploy.ps1'</a> |
ForEach-Object {
$File = Join-Path $Repo ($_ -split &ldquo;/&rdquo;)[-1]
$wc.DownloadFile( $_, $File )
}</p><h1 id="replace-my-encrypted-nugetapikey-with-yours" class="ps-heading">Replace my encrypted NuGetApiKey with yours!<a class="ps-heading-anchor" href="#replace-my-encrypted-nugetapikey-with-yours" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>$YourKey = &lsquo;SomeEncryptedKeyFromAppVeyor&rsquo; # &laquo;&laquo;&laquo; Replace this with your encrypted data from AppVeyor &laquo;&laquo;&laquo;
$AppVeyorPath = Join-Path $Repo appveyor.yml
$AppVeyorContent = Get-Content $AppVeyorPath -Raw
Set-Content $AppVeyorPath -Value $AppVeyorContent.replace(&lsquo;secure: oqMFzG8F65K5l572V7VzlZIWU7xnSYDLtSXECJAAURrXe8M2+BAp9vHLT+1h1lR0&rsquo;, &ldquo;secure: $YourKey&rdquo;)</p><h1 id="commit-your-changes-push-them-to-github-and-youre-good-to-go" class="ps-heading">Commit your changes, push them to GitHub, and you&rsquo;re good to go!<a class="ps-heading-anchor" href="#commit-your-changes-push-them-to-github-and-youre-good-to-go" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>`I made these changes, pushed to GitHub with !Deploy in my commit message, and voila!  AppVeyor<a href="https://ci.appveyor.com/project/RamblingCookieMonster/psstackexchange/build/1.0.4">ran the build</a>, and PSStackExchange<a href="https://www.powershellgallery.com/packages/PSStackExchange/1.0.3">was updated</a> in the gallery!</p><h3 id="wait-what-does-this-all-mean" class="ps-heading">Wait, what does this all mean?<a class="ps-heading-anchor" href="#wait-what-does-this-all-mean" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>So! Every time I make a change to PSStackExchange going forward, I have the option to say<em>!Deploy</em> anywhere in my commit message.  When that happens, my changes run through Pester tests in AppVeyor, and are automatically pushed to the PowerShell Gallery in the unlikely event that I didn&rsquo;t make a mistake.</p><ul><li>Someone submits a bug report and I have a fix to add?  Automatically !Deploy</li><li>Someone submits a pull request with an awesome new feature?  Automatically !Deploy</li><li>I discover I&rsquo;ve made a terrible mistake and need to re-write something?  Automatically !Deploy</li><li>I&rsquo;m literally too lazy to run a single command, with a key I could serialize using the DPAPI?  !Deploy</li></ul><p>Okay, to be fair, this pipeline borrows from the PowerShell team and<a href="http://psdeploy.readthedocs.io/en/latest/Example-AppVeyorModule-Deployment/">deploys developer builds to AppVeyor</a> regardless of whether you say !Deploy.<br>
More specifically:</p><ul><li>AppVeyor reads the<a href="https://github.com/RamblingCookieMonster/PSDeploy/blob/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/appveyor.yml">appveyor.yml</a>, which tells it to run the build.ps1</li><li>The<a href="https://github.com/RamblingCookieMonster/PSDeploy/blob/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/build.ps1">build.ps1</a> downloads a few modules, sets some build variables, and runs psake.ps1</li><li><a href="https://github.com/RamblingCookieMonster/PSDeploy/blob/8b83d7a4e068b08be3293281b3d2c88c9ccd8c16/psake.ps1">Psake.ps1</a> includes our steps to test via Pester, build via BuildHelpers (bump the module version, etc.), and deploy via PSDeploy</li><li><a href="https://github.com/RamblingCookieMonster/PSDeploy/blob/master/deploy.psdeploy.ps1">Deploy.psdeploy.ps1</a> tells PSDeploy what to deploy, and includes some gates - for example, only deploy the master branch to the PowerShell gallery</li></ul><p>That&rsquo;s about it!</p><h3 id="takeaways" class="ps-heading">Takeaways<a class="ps-heading-anchor" href="#takeaways" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>Three quick takeaways:<br>
(1) Each of the components in this pipeline, and the pipeline itself are open source:  <a href="https://github.com/psake/psake">psake</a>,<a href="https://github.com/pester/Pester">Pester</a>,<a href="https://github.com/RamblingCookieMonster/PSDeploy/">PSDeploy</a>, and<a href="https://github.com/RamblingCookieMonster/BuildHelpers">BuildHelpers</a>.  Feel free to contribute ideas, bug reports, tests, documentation, code, and the like.<br>
(2) It goes without saying, but do consider writing modules,<a href="http://www.themacro.com/articles/2016/05/why-the-best-give-away/">open sourcing</a> them, and publishing them to the PowerShell Gallery - ideally automatically with something like the process we just walked through!<br>
(3) This is a great way to get your feet wet with<a href="http://aka.ms/trpm">release pipelines</a> for infrastructure.  You might have different tests, and you might deploy systems and services rather than modules, but ultimately:</p><ul><li>You&rsquo;re pushing changes to source control</li><li>You have a build system that watches this, and&hellip;<ul><li>Runs a suite of tests</li><li>Perhaps &ldquo;builds&rdquo; some artifacts you need</li><li>Pushes out your changes.  Perhaps to production</li></ul></li></ul><p>Cheers!</p>
]]></content:encoded></item><item><title>Every pithy witticism begins with quotation marks</title><link>https://powershell.org/articles/2016-07-23-every-pithy-witticism-begins-with-quotation-marks/</link><guid>https://powershell.org/articles/2016-07-23-every-pithy-witticism-begins-with-quotation-marks/</guid><pubDate>Sat, 23 Jul 2016 22:56:52 +0000</pubDate><description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;To be or not to be&amp;rdquo;.&lt;/strong&gt; Without getting into a debate over whether Shakespeare was musing about being a logician, suffice to say that in writing prose, the rules of &lt;em&gt;when&lt;/em&gt; and &lt;em&gt;how&lt;/em&gt; to use quotation marks are relatively clear. In PowerShell, not so much. Sure, there is an &lt;a href="https://technet.microsoft.com/en-us/library/hh847740.aspx"&gt;about_Quoting_Rules&lt;/a&gt; documentation page, and that is a good place to start, but that barely covers half the topic. It assumes you need quotes and then helps you appreciate some of the factors to consider when choosing single quotes or double quotes.&lt;br&gt;
But do you &lt;em&gt;need&lt;/em&gt; quotes? Remember PowerShell is a shell/command language so &amp;ldquo;obviously&amp;rdquo; you can do things like this:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><strong>&ldquo;To be or not to be&rdquo;.</strong> Without getting into a debate over whether Shakespeare was musing about being a logician, suffice to say that in writing prose, the rules of<em>when</em> and<em>how</em> to use quotation marks are relatively clear. In PowerShell, not so much. Sure, there is an<a href="https://technet.microsoft.com/en-us/library/hh847740.aspx">about_Quoting_Rules</a> documentation page, and that is a good place to start, but that barely covers half the topic. It assumes you need quotes and then helps you appreciate some of the factors to consider when choosing single quotes or double quotes.<br>
But do you<em>need</em> quotes? Remember PowerShell is a shell/command language so &ldquo;obviously&rdquo; you can do things like this:</p><p><code>PS&gt; Delete-Item C:\tmp\foobar.txt PS&gt; Get-ChildItem *.log PS&gt; Get-Process svchost, conhost, powershell</code>It would certainly be cumbersome if you needed to quote each of those arguments, so PowerShell was designed well, in that respect.<br>
But what if you ran the same commands just slightly differently?</p><p><code>PS&gt; "C:\tmp\foobar.txt" | Delete-Item PS&gt; "*.log" | Get-ChildItem</code>Here you<em>must</em> use quotation marks or you will suffer the wrath of a terminating error from the PowerShell host most certainly!<br>
Those are just a couple of the many examples I consider in<a href="https://www.simple-talk.com/sysadmin/powershell/when-to-quote-in-powershell/">When to Quote in PowerShell</a>. Accompanying the full article, I also included a wallchart that condenses all the article&rsquo;s salient points into a single-page reference. Here&rsquo;s a fragment of the wallchart:<br><img src="https://powershell.org/wp-content/uploads/2016/07/quoting_thumbnail-300x198.png" alt="Guide to PowerShell Quoting wall chart"><br>
Read the article and download the wallchart<a href="https://www.simple-talk.com/sysadmin/powershell/when-to-quote-in-powershell/">here</a>.</p>
]]></content:encoded></item><item><title>MSPSUG July 12th Virtual Meeting: Exploring SQLPS, the SQL Server PowerShell Module</title><link>https://powershell.org/articles/2016-07-11-mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/</link><guid>https://powershell.org/articles/2016-07-11-mspsug-july-12th-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/</guid><pubDate>Mon, 11 Jul 2016 18:21:52 +0000</pubDate><description>&lt;p&gt;Join the Mississippi PowerShell User Group virtually on Tuesday, July 12th 2016 at 8:30pm Central Time when &lt;a href="https://twitter.com/Mike_Fal"&gt;Mike Fal&lt;/a&gt; will be presenting “&lt;em&gt;&lt;strong&gt;Exploring SQLPS, the SQL Server PowerShell Module&lt;/strong&gt;&lt;/em&gt;”.&lt;br&gt;
A big hurdle for using PowerShell and SQL Server together is the SQLPS module. Both old and new users of PowerShell don’t completely understand its capabilities. In this session, we’ll talk about the cmdlets you may not know about, tricks to save time using the provider, and even a few gotchas on how the provider works that can save you some time and energy. When we’re finished, you will have a deeper understanding of how you can use SQL Server and PowerShell together.&lt;br&gt;
Visit the &lt;a href="http://mspsug.com/2016/07/11/mspsug-july-2016-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/"&gt;Mississippi PowerShell User Group&lt;/a&gt; website to learn more about Mike and to find out more details about this month’s meeting.&lt;br&gt;
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 “&lt;a href="http://mspsug.com/attendee-info/"&gt;Attendee Info&lt;/a&gt;” section.&lt;br&gt;
Register via &lt;a href="http://mspsug.eventbrite.com/"&gt;EventBrite&lt;/a&gt; to receive the URL for this meeting.&lt;br&gt;
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.&lt;br&gt;
µ&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join the Mississippi PowerShell User Group virtually on Tuesday, July 12th 2016 at 8:30pm Central Time when<a href="https://twitter.com/Mike_Fal">Mike Fal</a> will be presenting “<em><strong>Exploring SQLPS, the SQL Server PowerShell Module</strong></em>”.<br>
A big hurdle for using PowerShell and SQL Server together is the SQLPS module. Both old and new users of PowerShell don’t completely understand its capabilities. In this session, we’ll talk about the cmdlets you may not know about, tricks to save time using the provider, and even a few gotchas on how the provider works that can save you some time and energy. When we’re finished, you will have a deeper understanding of how you can use SQL Server and PowerShell together.<br>
Visit the<a href="http://mspsug.com/2016/07/11/mspsug-july-2016-virtual-meeting-exploring-sqlps-the-sql-server-powershell-module/">Mississippi PowerShell User Group</a> website to learn more about Mike and to find out more details about this month’s meeting.<br>
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.<br>
Register via<a href="http://mspsug.eventbrite.com/">EventBrite</a> to receive the URL for this meeting.<br>
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.<br>
µ</p>
]]></content:encoded></item><item><title>Finding PowerShell Sessions At Conferences and Events</title><link>https://powershell.org/articles/2016-07-01-finding-powershell-sessions-at-conferences-and-events/</link><guid>https://powershell.org/articles/2016-07-01-finding-powershell-sessions-at-conferences-and-events/</guid><pubDate>Fri, 01 Jul 2016 13:20:03 +0000</pubDate><description>&lt;h3 id="the-current-state" class="ps-heading"&gt;The Current State&lt;a class="ps-heading-anchor" href="#the-current-state" 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;/h3&gt;
&lt;p&gt;So! If you visit the &lt;a href="https://powershell.org/events/"&gt;PowerShell.org events&lt;/a&gt; page, you&amp;rsquo;ll find a bevy of PowerShell-focused events, from local PowerShell user groups to global PowerShell conferences.&lt;br&gt;
What you won&amp;rsquo;t find, yet, is a list of PowerShell related sessions at the many other conferences and user groups you might consider attending.&lt;br&gt;
Maybe you&amp;rsquo;d like to find PowerShell oriented sessions at non-PowerShell user groups and mini conferences like SQL Saturdays, VMUGs, Azure User Groups, Security BSides, DevOpsDays, etc.  These are great small events that can build your knowledge, help you meet local folks in a particular field, and often provide provide you with some free food.&lt;br&gt;
Beyond these, there are plenty of summits and conferences that have a strong PowerShell track, or even just a handful of awesome PowerShell sessions, that might be worth knowing about. LISA, DerbyCon, MMS, WinOps, TechMentor, and many more.&lt;br&gt;
How do you find these events?  There isn&amp;rsquo;t a solid option today, but hopefully we can change that.  Before we go further though, why is this even helpful?&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<h3 id="the-current-state" class="ps-heading">The Current State<a class="ps-heading-anchor" href="#the-current-state" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>So! If you visit the<a href="https://powershell.org/events/">PowerShell.org events</a> page, you&rsquo;ll find a bevy of PowerShell-focused events, from local PowerShell user groups to global PowerShell conferences.<br>
What you won&rsquo;t find, yet, is a list of PowerShell related sessions at the many other conferences and user groups you might consider attending.<br>
Maybe you&rsquo;d like to find PowerShell oriented sessions at non-PowerShell user groups and mini conferences like SQL Saturdays, VMUGs, Azure User Groups, Security BSides, DevOpsDays, etc.  These are great small events that can build your knowledge, help you meet local folks in a particular field, and often provide provide you with some free food.<br>
Beyond these, there are plenty of summits and conferences that have a strong PowerShell track, or even just a handful of awesome PowerShell sessions, that might be worth knowing about. LISA, DerbyCon, MMS, WinOps, TechMentor, and many more.<br>
How do you find these events?  There isn&rsquo;t a solid option today, but hopefully we can change that.  Before we go further though, why is this even helpful?</p><h3 id="why" class="ps-heading">Why?<a class="ps-heading-anchor" href="#why" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>This might be silly, but I tend to gravitate towards PowerShell oriented sessions at non-PowerShell-focused events.  If someone is using PowerShell to work with a particular technology, chances are they will be good folks to learn from.<br>
On top of this, your local user group leaders would have details on folks they could potentially ping and enlist for an in-person session, or even just an informal geek dinner.<br>
Finally, it might help you find events worth attending.  If you want a comprehensive list of tech conferences and events, there isn&rsquo;t really a solid directory, let alone one what will help you find PowerShell oriented sessions.</p><h3 id="what-can-i-do" class="ps-heading">What Can I Do?<a class="ps-heading-anchor" href="#what-can-i-do" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>If you think this would be worthwhile, you can help make it happen!<br>
Are you giving a PowerShell oriented session?  Is it on PowerShell.org&rsquo;s event page? Go ahead and<a href="https://powershell.org/events/submit-event/">add it</a>! Try to keep in line with their policy of including nonprofit, not-for-profit, or otherwise noncommercial events, but thankfully most tech events fit the bill.<br>
Here&rsquo;s a quick example:</p><ul><li><em>Event Name</em>: Event Name: Session title</li><li><em>When</em>: Specific start and stop time for the one session</li><li><em>Where</em>: Address for the event</li><li><em>Details</em>: Abstract for the session, ideally mentioning who will be presenting</li></ul><p>Once you&rsquo;ve filled it out, it might <a href="https://powershell.org/events/lisa16-release-pipelines-in-microsoft-ecosystems/">look like this</a>.<br>
If you know of a session that isn&rsquo;t listed, feel free to pester the presenter and to point them at this post - the earlier they get it on the calendar, the better!  If you have the session details and can&rsquo;t get in touch with the presenter, feel free to add the session yourself.<br>
Cheers!</p>
]]></content:encoded></item><item><title>To ping or not to ping..The PowerShell way</title><link>https://powershell.org/articles/2016-06-27-to-ping-or-not-to-ping-the-powershell-way/</link><guid>https://powershell.org/articles/2016-06-27-to-ping-or-not-to-ping-the-powershell-way/</guid><pubDate>Mon, 27 Jun 2016 20:29:29 +0000</pubDate><description>&lt;p&gt;As this is my first blog here, here’s a bit about me. I’m a current lead SCCM Admin in the UK, and have found this great enjoyment for PowerShell in the last 18 months. I’ve started my own blog, &lt;a href="http://www.get-configmgr-content.co.uk/"&gt;http://www.get-configmgr-content.co.uk/&lt;/a&gt;, to share my passion. The chance to blog on Powershell.org was too exciting not to do!&lt;br&gt;
The inspiration for this blog came from a forum post on Powershell.org that I helped contributed on. The question asked was, how to display the name of failed ping, i.e. $computer is offline.&lt;br&gt;
There were some great responses, the one I most liked which I slightly amended into a function was:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>As this is my first blog here, here’s a bit about me. I’m a current lead SCCM Admin in the UK, and have found this great enjoyment for PowerShell in the last 18 months. I’ve started my own blog,<a href="http://www.get-configmgr-content.co.uk/">http://www.get-configmgr-content.co.uk/</a>, to share my passion. The chance to blog on Powershell.org was too exciting not to do!<br>
The inspiration for this blog came from a forum post on Powershell.org that I helped contributed on. The question asked was, how to display the name of failed ping, i.e. $computer is offline.<br>
There were some great responses, the one I most liked which I slightly amended into a function was:</p><p><code>function test-ping { $args | % {[pscustomobject]@{online = test-connection $_ -Count 1 -quiet;computername = $_}} }</code>The simplicity and power is brilliant. (Credit to Dan Potter!)<br>
I expanded on this and came up with a way to use the results in several different ways. All this by the power of advanced functions.<br>
I have two advanced functions &lsquo;ValueFromPipeline&rsquo; and &lsquo;ValidateSet&rsquo; in this script:</p><ol><li><strong>&lsquo;ValueFromPipeline&rsquo;</strong> gives the capability to pass more than one object to our script. Perfect for passing one or many devices.<br>
Other than the message &ldquo;Online: PC1&rdquo;, I wanted to be able to use the ping status to pass to another cmdlet, collate all online or offline devices and display the results in a table.</li><li>Using<strong>&lsquo;ValidateSet&rsquo;</strong> I could define my options, &ldquo;Online&rdquo;,&ldquo;Offline&rdquo; and &ldquo;ObjectTable&rdquo;. But by not setting the parameter to mandatory, you don’t have to use the additional options.<br>
To continue using the ping response, I needed to hold them somewhere. I did this by creating an empty array in the Begin block and append each ping response to it.<br>
Regardless of what option I choose, if any, the below block of code will always run:</li></ol><p><code>$device| foreach { if (Test-Connection $_ -Count 1 -Quiet) { if(-not($GetObject)){write-host -ForegroundColor green "Online: $_ "} $Hash = $Hash += @{Online="$_"} }else{ if(-not($GetObject)){write-host -ForegroundColor Red "Offline: $_ "} $Hash = $Hash += @{Offline="$_"} } }</code>Devices in the variable, $device, will each be &lsquo;pinged&rsquo; then passed through a &lsquo;if&rsquo; statement depending on offline or online status and get added into the $hash array variable.<br><strong>DISCLAIMER:</strong> I should apologies to Don here for killing the puppies with write-host. I wanted to just push out some colored output to the host only!<br>
Before I go any further, let me briefly explain how I am &lsquo;pinging&rsquo; the devices. I am using the cmdlet &lsquo;Test-Connection&rsquo;. The synopsis on &lsquo;get-help&rsquo; for test-connection states, &lsquo;Sends ICMP echo request packets (&ldquo;pings&rdquo;) to one or more computers.&rsquo; A nice feature of this cmdlet is the &lsquo;-quiet&rsquo; syntax. This is cool as it gives a Boolean result (True or False) of the &lsquo;ping&rsquo; status. By adding a &lsquo;-count&rsquo; as well I can limit the number of times I request a connection check. Now I can pass as many devices through the pipeline to my function and get an online or offline message pretty quickly.<br>
The second half of the script only runs if you add the &lsquo;$getObject&rsquo; option from the function. The use of the &lsquo;validateSet&rsquo; allows me to make sure the three options I defined are used only.<br>
The data collected in the $hash array variable is passed through a foreach statement and creates customobjects. The final part is use of a &lsquo;Switch&rsquo;. Depending on what was chosen in the $getObject parameter is the output at the end of the script.<br>
The advantage to this switch is I can pass all the online PC&rsquo;s to something else via the pipeline. For example, an AD group or a deployment collection:</p><p><code>'PC1','PC2' | Get-PingStatus -GetObject Online | # pass to another cmdlet</code>Capture the &lsquo;online&rsquo; PC&rsquo;s to a variable and use:</p><p><code>$Online = 'PC1','PC2' | Get-PingStatus -GetObject Online</code>Or if you need to report back a list of PC&rsquo;s which are either on or offline in an object group:</p><p>`&lsquo;PC1&rsquo;,&lsquo;PC2&rsquo;, &lsquo;PC3&rsquo;,&lsquo;PC4 | Get-PingStatus -GetObject objectTable
DeviceName Online offline</p><hr><p>pc4 Online
pc1 Offline
pc2 Offline
pc3 Offline
`Again this script has great flexibility in how you pass the device objects.<br>
Say you have a list of PC&rsquo;s in a txt for CSV file, you can use Get-content and pipe it to Get-PingStatus:</p><p><code>get-content pcs.csv | Get-PingStatus</code>NOTE:<br>
The use of the $Global: variable allowed me to use $Global:Objects once the script has complete. Just something I thought could be useful. The $Script: variable would have worked fine should I not want to use the variable outside the script.<br>
I hope you&rsquo;ve enjoyed my blog and I welcome any comments. I&rsquo;ve posted the script on GitHub should you wish to download.<br><a href="https://github.com/Gbeer7/GetPingStatus.git">https://github.com/Gbeer7/GetPingStatus.git</a><br>
The full script:</p><p><code>Function Get-PingStatus { param( [Parameter(ValueFromPipeline=$true)] [string]$device, [validateSet("Online","Offline","ObjectTable")] [String]$getObject ) begin{ $hash = @() } process{ $device| foreach { if (Test-Connection $_ -Count 1 -Quiet) { if(-not($GetObject)){write-host -ForegroundColor green "Online: $_ "} $Hash = $Hash += @{Online="$_"} }else{ if(-not($GetObject)){write-host -ForegroundColor Red "Offline: $_ "} $Hash = $Hash += @{Offline="$_"} } } } end { if($GetObject) { $Global:Objects = $Hash | foreach { [PSCustomObject]@{ DeviceName = $_.Values| foreach { "$_" } Online = $_.Keys| where {$_ -eq "Online"} offline = $_.Keys| where {$_ -eq "Offline"} } } Switch -Exact ($GetObject) { 'Online' { $Global:Objects| where 'online'| select -ExpandProperty DeviceName } 'Offline' { $Global:Objects| where 'offline'| select -ExpandProperty DeviceName } 'ObjectTable' { return $Global:Objects } } } } }</code></p>
]]></content:encoded></item><item><title>Here's What You've Missed at PowerShell.org (and what's coming)</title><link>https://powershell.org/articles/2016-06-24-heres-what-youve-missed-at-powershell-org-and-whats-coming/</link><guid>https://powershell.org/articles/2016-06-24-heres-what-youve-missed-at-powershell-org-and-whats-coming/</guid><pubDate>Fri, 24 Jun 2016 17:19:59 +0000</pubDate><description>&lt;p&gt;We&amp;rsquo;ve been making a ton of improvements at PowerShell.org&amp;hellip; if you haven&amp;rsquo;t visited in a while, it might be worth a stop by.&lt;br&gt;
**First, **if you&amp;rsquo;re hitting any of the links below and getting a 404, the most common culprit seems to be an over-zealous corporate proxy cache. Try clearing it, or doing a Shift+Reload in your browser. Confirm by visiting from a non-proxied network, like at home.&lt;br&gt;
Our &lt;a href="https://powershell.org/learning/"&gt;eBooks&lt;/a&gt; page has a bunch of new content, and our books are now available in PDF, MOBI, and EPUB from two providers (LeanPub and GitBook). You can also read books online in HTML.&lt;br&gt;
Site members now have an extensive profile that you can complete, and doing so is one step on our short &lt;a href="https://powershell.org/mission/welcome-aboard/"&gt;Welcome Aboard! mission&lt;/a&gt; that will earn you a new &amp;ldquo;Welcome!&amp;rdquo; badge on the site. It&amp;rsquo;s one of many new &lt;a href="https://powershell.org/achievements/"&gt;achievements you can earn&lt;/a&gt; for participating in the community in a variety of ways.&lt;br&gt;
And have you seen our new &lt;a href="https://powershell.org/learning/"&gt;videos&lt;/a&gt;? In addition to tons of YouTube videos that include workshops, tutorials, and Summit recordings, we also have started new short-subject, structured learning series - entire courses that even award a certificate of completion when you&amp;rsquo;re done!&lt;br&gt;
But there&amp;rsquo;s much more we can do to help you connect with community, so we&amp;rsquo;re taking a quick survey. Here&amp;rsquo;s some of what we can enable:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We&rsquo;ve been making a ton of improvements at PowerShell.org&hellip; if you haven&rsquo;t visited in a while, it might be worth a stop by.<br>
**First, **if you&rsquo;re hitting any of the links below and getting a 404, the most common culprit seems to be an over-zealous corporate proxy cache. Try clearing it, or doing a Shift+Reload in your browser. Confirm by visiting from a non-proxied network, like at home.<br>
Our<a href="/learning/">eBooks</a> page has a bunch of new content, and our books are now available in PDF, MOBI, and EPUB from two providers (LeanPub and GitBook). You can also read books online in HTML.<br>
Site members now have an extensive profile that you can complete, and doing so is one step on our short<a href="https://powershell.org/mission/welcome-aboard/">Welcome Aboard! mission</a> that will earn you a new &ldquo;Welcome!&rdquo; badge on the site. It&rsquo;s one of many new<a href="https://powershell.org/achievements/">achievements you can earn</a> for participating in the community in a variety of ways.<br>
And have you seen our new<a href="/learning/">videos</a>? In addition to tons of YouTube videos that include workshops, tutorials, and Summit recordings, we also have started new short-subject, structured learning series - entire courses that even award a certificate of completion when you&rsquo;re done!<br>
But there&rsquo;s much more we can do to help you connect with community, so we&rsquo;re taking a quick survey. Here&rsquo;s some of what we can enable:</p><ul><li>**Friend Connections. **Kinda like Facebook, enabling you to track on-site activity of the people you &ldquo;follow.&rdquo;</li><li>**Private Messages. **Just what it says - everyone would have a mailbox inside PowerShell.org.</li><li>**Activity Streams. **Similar to a Twitter or Facebook feed, a way of seeing site activity (with its own RSS). Threaded comments, @mentions, and email notifications, too.</li><li>**User Groups. **The ability to create in-site groups with their own discussion forum, activity stream, and shared content.</li><li>**REST API. **A way of communicating with WordPress via REST calls, to retrieve or check content.</li></ul><p><a href="http://674004.polldaddy.com/s/powershell-org-features">Visit the survey to let us know</a> which ones you&rsquo;d want, or don&rsquo;t care about.<br>
And drop a comment below if there&rsquo;s something else you&rsquo;d like to see or share!</p>
]]></content:encoded></item><item><title>High-Level: Designing Your PowerShell Command Set</title><link>https://powershell.org/articles/2016-06-20-high-level-designing-your-powershell-command-set/</link><guid>https://powershell.org/articles/2016-06-20-high-level-designing-your-powershell-command-set/</guid><pubDate>Mon, 20 Jun 2016 10:27:41 +0000</pubDate><description>&lt;p&gt;So you&amp;rsquo;ve decided to write a bunch of commands to help automate the administration of ____. Awesome! Let&amp;rsquo;s try and make sure you get off on the right path, with this high-level overview of command design.&lt;/p&gt;
&lt;h2 id="start-with-an-inventory" class="ps-heading"&gt;Start with an inventory&lt;a class="ps-heading-anchor" href="#start-with-an-inventory" 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;You&amp;rsquo;ll need to start by deciding _what commands to write, _and an inventory is often the best way to begin. Start by inventorying your nouns. For example, suppose you&amp;rsquo;re writing a command set for some internal order-management system. You probably have nouns like Customer, Employee, Order, OrderItem, CustomerAddress, and so on. Write &amp;rsquo;em all down in an Excel spreadsheet, one noun per row.&lt;br&gt;
Then inventory your verbs. For each noun, what can you do with it? For example, you can probably create orders, so a New-Order command will be needed. Make a &amp;ldquo;New&amp;rdquo; column in your spreadsheet, and put an &amp;ldquo;X&amp;rdquo; in the row next to the Order noun. However, you probably can&amp;rsquo;t &lt;em&gt;remove&lt;/em&gt; an order from the system, so although your spreadsheet might have a &amp;ldquo;Remove&amp;rdquo; column to cover things like Remove-Employee, that column won&amp;rsquo;t get an &amp;ldquo;X&amp;rdquo; in the Order row. Orders might be voidable, though, so what&amp;rsquo;s a good verb for that? &lt;a href="https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).aspx"&gt;https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).aspx&lt;/a&gt; has the official verb list, but there&amp;rsquo;s no &amp;ldquo;Void&amp;rdquo; or &amp;ldquo;Cancel&amp;rdquo; that seems appropriate. Don&amp;rsquo;t go making up new verbs!!! Instead, it might be that Set-Order could be the answer, enabling approved changes to orders, including cancelling them (but retaining the record).&lt;br&gt;
Finally, pick a prefix for your nouns. If your order system is named &amp;ldquo;Order Awesomeness,&amp;rdquo; then maybe OAwe is a good noun prefix, as in Set-OAweOrder. The prefix will help keep your command names from bumping up against other people&amp;rsquo;s, so making sure that noun prefix is pretty unique&amp;hellip; is pretty important.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>So you&rsquo;ve decided to write a bunch of commands to help automate the administration of ____. Awesome! Let&rsquo;s try and make sure you get off on the right path, with this high-level overview of command design.</p><h2 id="start-with-an-inventory" class="ps-heading">Start with an inventory<a class="ps-heading-anchor" href="#start-with-an-inventory" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>You&rsquo;ll need to start by deciding _what commands to write, _and an inventory is often the best way to begin. Start by inventorying your nouns. For example, suppose you&rsquo;re writing a command set for some internal order-management system. You probably have nouns like Customer, Employee, Order, OrderItem, CustomerAddress, and so on. Write &rsquo;em all down in an Excel spreadsheet, one noun per row.<br>
Then inventory your verbs. For each noun, what can you do with it? For example, you can probably create orders, so a New-Order command will be needed. Make a &ldquo;New&rdquo; column in your spreadsheet, and put an &ldquo;X&rdquo; in the row next to the Order noun. However, you probably can&rsquo;t <em>remove</em> an order from the system, so although your spreadsheet might have a &ldquo;Remove&rdquo; column to cover things like Remove-Employee, that column won&rsquo;t get an &ldquo;X&rdquo; in the Order row. Orders might be voidable, though, so what&rsquo;s a good verb for that? <a href="https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).aspx">https://msdn.microsoft.com/en-us/library/ms714428(v=vs.85).aspx</a> has the official verb list, but there&rsquo;s no &ldquo;Void&rdquo; or &ldquo;Cancel&rdquo; that seems appropriate. Don&rsquo;t go making up new verbs!!! Instead, it might be that Set-Order could be the answer, enabling approved changes to orders, including cancelling them (but retaining the record).<br>
Finally, pick a prefix for your nouns. If your order system is named &ldquo;Order Awesomeness,&rdquo; then maybe OAwe is a good noun prefix, as in Set-OAweOrder. The prefix will help keep your command names from bumping up against other people&rsquo;s, so making sure that noun prefix is pretty unique&hellip; is pretty important.</p><h2 id="design-individual-commands" class="ps-heading">Design individual commands<a class="ps-heading-anchor" href="#design-individual-commands" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Now it&rsquo;s time to start designing individual commands. This is usually a kind of iterative process, meaning you&rsquo;ll go back and change your mind, expand, and so on a few times before you&rsquo;re done.<br>
Start by <em>writing examples of how each command will be used</em> to accomplish whatever tasks you&rsquo;ll be accomplishing. Save these examples, too - they should become examples in your commands&rsquo; help files. Write as many examples as possible, covering as many situations and needs as you can think of. Enlist users to help.<br>
As you write the examples, try to pay attention to the following:</p><ul><li>Parameter names should be consistent across the commands. If order objects have an ID, and you need to be able to specify it, then it should be something like -OrderId every time. Don&rsquo;t use -OrderId on some commands and -Id on thers. Also pay attention to what the underlying software objects&rsquo; property names are. For example, if customer names are exposed through a CustNameFirst and CustNameLast property, consider using those as corresponding parameter names, or at least as parameter name aliases.</li><li>Start thinking about which parameters are going to be mandatory.</li><li>Give some thought to different ways that commands might be used, and start denoting those as different parameter sets.</li></ul><p>This kind of example-based specification will help you think through how you want the commands to work, and it may highlight cases where you need more commands, where commands may need to be combined, and so on.</p><h2 id="sketch-out-your-help-files" class="ps-heading">Sketch out your help files<a class="ps-heading-anchor" href="#sketch-out-your-help-files" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Believe it or not, it&rsquo;s not a bad idea to start drafting out your help files at this point. Define parameter sets, parameters, and examples. Briefly describe what each parameter is for - you can always make the language nicer and more formal later, so just a brief draft should work at this point. This kind of forces you to think through how your commands will work, and how other people will end up approaching them. It also gives you a good start on writing documentation! &ldquo;Documentation as specification&rdquo; helps a lot of people write specs that can end up being repurposed as docs, killing two birds with one stone.</p><h2 id="define-expected-results" class="ps-heading">Define expected results<a class="ps-heading-anchor" href="#define-expected-results" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Go back to your examples, and provide some examples of the results you&rsquo;d expect to see if you actually ran those commands as shown in your examples. This helps you to start defining the tests that you&rsquo;ll run against your code. &ldquo;For this command, we should get this output&rdquo; is exactly what testing is all about. &ldquo;This command should generate this error, this command should do this,&rdquo; and so on.</p><h2 id="start-coding" class="ps-heading">Start coding<a class="ps-heading-anchor" href="#start-coding" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>With some good design work out of the way, you can start coding. Not just your commands, mind you, but also the Pester tests you&rsquo;ll use to validate those commands. Code &rsquo;em at the same time, if you like, and use those tests in unit testing as you work.</p>
]]></content:encoded></item><item><title>Help Me Test SSL on PowerShell.org</title><link>https://powershell.org/articles/2016-06-13-help-me-test-ssl-on-powershell-org/</link><guid>https://powershell.org/articles/2016-06-13-help-me-test-ssl-on-powershell-org/</guid><pubDate>Mon, 13 Jun 2016 14:02:17 +0000</pubDate><description>&lt;p&gt;I&amp;rsquo;d appreciate your help in testing HTTPS/SSL here on PowerShell.org. Right now, it&amp;rsquo;s &amp;ldquo;voluntary,&amp;rdquo; meaning you have to explicitly ask for &lt;a href="https://powershell.org"&gt;https://powershell.org&lt;/a&gt;. If you have any problems, please note them in a comment on this article.&lt;br&gt;
Some notes and known problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Most pages will not show the &amp;ldquo;lock&amp;rdquo; address bar icon in your browser, because we&amp;rsquo;re delivering mixed content. For example, the site logo is being hardcoded as http:// by some Javascript in our theme, which I need to sort out.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Your&lt;/em&gt; connection will be to CloudFlare, which is who issued the certificate you&amp;rsquo;ll see. We&amp;rsquo;ve also SSL&amp;rsquo;d the traffic between them and our server using a DigiCert SSL certificate. We&amp;rsquo;re also going to enable client certificate authentication, so our server will only deliver content to CloudFlare, which then delivers it to you. That&amp;rsquo;s ahead.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I &lt;em&gt;think&lt;/em&gt; we can solve the mixed-content problem by forcing HTTPS, which is easy, but I want to make sure it&amp;rsquo;s otherwise working before taking that step. We already have a WordPress plugin in place that&amp;rsquo;s rewriting http:// or https:// with just // in URLs, but there&amp;rsquo;re a couple of places where that plugin isn&amp;rsquo;t able to help, and that&amp;rsquo;s why we&amp;rsquo;re delivering mixed content still.&lt;br&gt;
I&amp;rsquo;ll point out that this is &lt;em&gt;mainly&lt;/em&gt; a bonus-points project; because almost everyone logs into the site using an external account, we don&amp;rsquo;t store many passwords (and thus don&amp;rsquo;t transmit them in the clear or otherwise). We don&amp;rsquo;t store or transmit any other personally identifiable information. Still, SSL has some other benefits, and it shouldn&amp;rsquo;t &lt;em&gt;hurt&lt;/em&gt; to have it on, so we&amp;rsquo;re giving it a shot.&lt;br&gt;
Thanks!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I&rsquo;d appreciate your help in testing HTTPS/SSL here on PowerShell.org. Right now, it&rsquo;s &ldquo;voluntary,&rdquo; meaning you have to explicitly ask for<a href="https://powershell.org">https://powershell.org</a>. If you have any problems, please note them in a comment on this article.<br>
Some notes and known problems:</p><ul><li>Most pages will not show the &ldquo;lock&rdquo; address bar icon in your browser, because we&rsquo;re delivering mixed content. For example, the site logo is being hardcoded as http:// by some Javascript in our theme, which I need to sort out.</li><li><em>Your</em> connection will be to CloudFlare, which is who issued the certificate you&rsquo;ll see. We&rsquo;ve also SSL&rsquo;d the traffic between them and our server using a DigiCert SSL certificate. We&rsquo;re also going to enable client certificate authentication, so our server will only deliver content to CloudFlare, which then delivers it to you. That&rsquo;s ahead.</li></ul><p>I<em>think</em> we can solve the mixed-content problem by forcing HTTPS, which is easy, but I want to make sure it&rsquo;s otherwise working before taking that step. We already have a WordPress plugin in place that&rsquo;s rewriting http:// or https:// with just // in URLs, but there&rsquo;re a couple of places where that plugin isn&rsquo;t able to help, and that&rsquo;s why we&rsquo;re delivering mixed content still.<br>
I&rsquo;ll point out that this is <em>mainly</em> a bonus-points project; because almost everyone logs into the site using an external account, we don&rsquo;t store many passwords (and thus don&rsquo;t transmit them in the clear or otherwise). We don&rsquo;t store or transmit any other personally identifiable information. Still, SSL has some other benefits, and it shouldn&rsquo;t <em>hurt</em> to have it on, so we&rsquo;re giving it a shot.<br>
Thanks!</p><h2 id="updates-15-june-2016" class="ps-heading">UPDATES 15 June 2016<a class="ps-heading-anchor" href="#updates-15-june-2016" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><ul><li>The Lock icon in browser address bars should be working; we&rsquo;ve fixed the mixed-content issues I&rsquo;ve found.</li><li>We&rsquo;re forcing HTTPS.</li><li>We use CloudFlare; you&rsquo;re getting SSL from you to them, and they&rsquo;re getting (forced) SSL from them to us.</li><li>We&rsquo;re getting an &ldquo;A&rdquo; from SSLLabs and SecurityHeaders.io - thanks for that suggestion, Paal. CloudFlare doesn&rsquo;t let us implement <em>every</em> security header yet, but we&rsquo;ve got most of the recommended ones.</li></ul>
]]></content:encoded></item><item><title>Complete Guide to PowerShell Punctuation</title><link>https://powershell.org/articles/2016-06-11-complete-guide-to-powershell-punctuation/</link><guid>https://powershell.org/articles/2016-06-11-complete-guide-to-powershell-punctuation/</guid><pubDate>Sat, 11 Jun 2016 22:57:55 +0000</pubDate><description>&lt;p&gt;Quick as you can, can you explain what each of these different parentheses-, brace-, and bracket-laden expressions does?&lt;/p&gt;
&lt;p&gt;&lt;code&gt;${save-items} ${C:tmp.txt} $($x=1;$y=2;$x;$y) (1,2,3 -join '*') (8 + 4)/2 $hashTable.ContainsKey($x) @(1) @{abc='hello'} {param($color=&amp;quot;red&amp;quot;); &amp;quot;color=$color&amp;quot;} $hash['blue'] [Regex]::Escape($x) [int]&amp;quot;5.2&amp;quot; &lt;/code&gt;When you&amp;rsquo;re reading someone else&amp;rsquo;s PowerShell code, you will come across many of these constructs, and more. And you know how challenging it can be to search for punctuation on the web (symbolhound.com not withstanding) !&lt;br&gt;
That is why I put together a reference chart containing all of PowerShell&amp;rsquo;s symbology on one page. making it much easier when you need to look up a PowerShell symbol as you read code&amp;ndash;or to browse for the right construct when you are writing code.&lt;br&gt;
&lt;img src="https://powershell.org/wp-content/uploads/2016/06/punctuation_thumbnail-300x152.png" alt="PowerShell Punctuation wall chart"&gt;&lt;br&gt;
Download the &lt;strong&gt;Complete Guide to PowerShell Punctuation&lt;/strong&gt; wallchart from &lt;a href="https://www.simple-talk.com/sysadmin/powershell/the-complete-guide-to-powershell-punctuation/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Quick as you can, can you explain what each of these different parentheses-, brace-, and bracket-laden expressions does?</p><p><code>${save-items} ${C:tmp.txt} $($x=1;$y=2;$x;$y) (1,2,3 -join '*') (8 + 4)/2 $hashTable.ContainsKey($x) @(1) @{abc='hello'} {param($color="red"); "color=$color"} $hash['blue'] [Regex]::Escape($x) [int]"5.2"</code>When you&rsquo;re reading someone else&rsquo;s PowerShell code, you will come across many of these constructs, and more. And you know how challenging it can be to search for punctuation on the web (symbolhound.com not withstanding) !<br>
That is why I put together a reference chart containing all of PowerShell&rsquo;s symbology on one page. making it much easier when you need to look up a PowerShell symbol as you read code&ndash;or to browse for the right construct when you are writing code.<br><img src="https://powershell.org/wp-content/uploads/2016/06/punctuation_thumbnail-300x152.png" alt="PowerShell Punctuation wall chart"><br>
Download the<strong>Complete Guide to PowerShell Punctuation</strong> wallchart from<a href="https://www.simple-talk.com/sysadmin/powershell/the-complete-guide-to-powershell-punctuation/">here</a>.</p>
]]></content:encoded></item><item><title>MSPSUG June 14th Virtual Meeting: Pester the Tester PowerShell Bugs Beware!</title><link>https://powershell.org/articles/2016-06-10-mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware/</link><guid>https://powershell.org/articles/2016-06-10-mspsug-june-14th-virtual-meeting-pester-the-tester-powershell-bugs-beware/</guid><pubDate>Fri, 10 Jun 2016 15:47:52 +0000</pubDate><description>&lt;p&gt;Join the Mississippi PowerShell User Group virtually on Tuesday, June 14th 2016 at 8:30pm Central Time when Microsoft MVP &lt;a href="https://twitter.com/arcanecode"&gt;Robert Cain&lt;/a&gt; will be presenting “&lt;strong&gt;&lt;em&gt;Pester the Tester: PowerShell Bugs Beware!&lt;/em&gt;&lt;/strong&gt;”.&lt;br&gt;
So you’ve been developing PowerShell for a while, or perhaps you’re taking over maintenance of an existing set of scripts. It would be great to get extra confidence in your scripts through testing, but how? You’re in luck, there’s a new module in town, Pester!&lt;br&gt;
Pester is a friendly testing framework designed for testing your PowerShell scripts and modules. In this session you’ll be introduced to Pester. You’ll see how to use Pester to uncover bugs, as well as using it for test driven development. Make your own PowerShell more robust through the use of Pester. Kill those PowerShell bugs, dead!&lt;br&gt;
Visit the &lt;a href="http://mspsug.com/2016/05/31/mspsug-june-2016-virtual-meeting-pester-the-tester-powershell-bugs-beware/"&gt;Mississippi PowerShell User Group&lt;/a&gt; website to learn more about Robert and to find out more details about this month’s meeting.&lt;br&gt;
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 “&lt;a href="http://mspsug.com/attendee-info/"&gt;Attendee Info&lt;/a&gt;” section.&lt;br&gt;
Register via &lt;a href="http://mspsug.eventbrite.com/"&gt;EventBrite&lt;/a&gt; to receive the URL for this meeting.&lt;br&gt;
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.&lt;br&gt;
µ&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join the Mississippi PowerShell User Group virtually on Tuesday, June 14th 2016 at 8:30pm Central Time when Microsoft MVP<a href="https://twitter.com/arcanecode">Robert Cain</a> will be presenting “<strong><em>Pester the Tester: PowerShell Bugs Beware!</em></strong>”.<br>
So you’ve been developing PowerShell for a while, or perhaps you’re taking over maintenance of an existing set of scripts. It would be great to get extra confidence in your scripts through testing, but how? You’re in luck, there’s a new module in town, Pester!<br>
Pester is a friendly testing framework designed for testing your PowerShell scripts and modules. In this session you’ll be introduced to Pester. You’ll see how to use Pester to uncover bugs, as well as using it for test driven development. Make your own PowerShell more robust through the use of Pester. Kill those PowerShell bugs, dead!<br>
Visit the<a href="http://mspsug.com/2016/05/31/mspsug-june-2016-virtual-meeting-pester-the-tester-powershell-bugs-beware/">Mississippi PowerShell User Group</a> website to learn more about Robert and to find out more details about this month’s meeting.<br>
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.<br>
Register via<a href="http://mspsug.eventbrite.com/">EventBrite</a> to receive the URL for this meeting.<br>
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.<br>
µ</p>
]]></content:encoded></item><item><title>5 Tips for Writing DSC Resources in PowerShell 5</title><link>https://powershell.org/articles/2016-06-09-5-tips-for-writing-dsc-resources-in-powershell-5/</link><guid>https://powershell.org/articles/2016-06-09-5-tips-for-writing-dsc-resources-in-powershell-5/</guid><pubDate>Thu, 09 Jun 2016 18:44:00 +0000</pubDate><description>&lt;p&gt;PowerShell 5 brought class based DSC Resources, which majorly simplifies the process of writing custom DSC resources.&lt;br&gt;
During my time working on some custom resources, I developed some tips a long the way which should save you some time and pain during your DSC journey.&lt;br&gt;
The tips cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Structuring your class based DSC Resources&lt;/li&gt;
&lt;li&gt;Making it easier to get IntelliSense based on your DSC resources without constantly copying them into the module path&lt;/li&gt;
&lt;li&gt;Using PowerShell ISE IntelliSense when writing DSC configuration&lt;/li&gt;
&lt;li&gt;Troubleshooting resources which aren&amp;rsquo;t being exposed correctly from your DSC Module&lt;/li&gt;
&lt;li&gt;Testing classed based resources with Pester&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Head over to &lt;a href="https://hodgkins.io/five-tips-for-writing-dsc-resources-in-powershell-version-5"&gt;https://hodgkins.io/five-tips-for-writing-dsc-resources-in-powershell-version-5&lt;/a&gt; to take a look at the tips.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>PowerShell 5 brought class based DSC Resources, which majorly simplifies the process of writing custom DSC resources.<br>
During my time working on some custom resources, I developed some tips a long the way which should save you some time and pain during your DSC journey.<br>
The tips cover:</p><ul><li>Structuring your class based DSC Resources</li><li>Making it easier to get IntelliSense based on your DSC resources without constantly copying them into the module path</li><li>Using PowerShell ISE IntelliSense when writing DSC configuration</li><li>Troubleshooting resources which aren&rsquo;t being exposed correctly from your DSC Module</li><li>Testing classed based resources with Pester</li></ul><p>Head over to <a href="https://hodgkins.io/five-tips-for-writing-dsc-resources-in-powershell-version-5">https://hodgkins.io/five-tips-for-writing-dsc-resources-in-powershell-version-5</a> to take a look at the tips.</p>
]]></content:encoded></item><item><title>My DevOps (DSC) Camp Detailed Agenda</title><link>https://powershell.org/articles/2016-06-06-my-devops-dsc-camp-detailed-agenda/</link><guid>https://powershell.org/articles/2016-06-06-my-devops-dsc-camp-detailed-agenda/</guid><pubDate>Mon, 06 Jun 2016 19:59:59 +0000</pubDate><description>&lt;p&gt;If you&amp;rsquo;re deep into DSC and delving into DevOps, then my summer &amp;ldquo;Camp&amp;rdquo; event is probably meant for you - and now there&amp;rsquo;s a detailed agenda, overall agenda, and full event brochure. This is a really limited event - under 20, including product team participants, and we&amp;rsquo;re down to just a few seats left.&lt;/p&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="https://donjones.com/2016/06/06/devops-and-dsc-camp-detailed-agenda/"&gt;DevOps and DSC Camp Detailed Agenda&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description><content:encoded>&lt;![CDATA[<p>If you&rsquo;re deep into DSC and delving into DevOps, then my summer &ldquo;Camp&rdquo; event is probably meant for you - and now there&rsquo;s a detailed agenda, overall agenda, and full event brochure. This is a really limited event - under 20, including product team participants, and we&rsquo;re down to just a few seats left.</p><blockquote/><blockquote><p><a href="https://donjones.com/2016/06/06/devops-and-dsc-camp-detailed-agenda/">DevOps and DSC Camp Detailed Agenda</a></p></blockquote>]]></content:encoded></item><item><title>Request for Topics</title><link>https://powershell.org/articles/2016-06-06-request-for-topics/</link><guid>https://powershell.org/articles/2016-06-06-request-for-topics/</guid><pubDate>Mon, 06 Jun 2016 09:33:30 +0000</pubDate><description>&lt;p&gt;Putting on an event like the PowerShell and DevOps Global Summit involves a lot of planning. We started the planning process for the 2017 Summit BEFORE the 2016 Summit started!&lt;/p&gt;
&lt;p&gt;We have to work so far in advance that we’re taking guesses at the topics that will be of high interest next April – remember that we fix the agenda 6 months before the actual Summit.&lt;/p&gt;
&lt;p&gt;Part of the process of creating the agenda is that we publish a ‘Call for Proposals’ where we ask potential speakers to submit session proposals. We then use those proposals as the basis of the agenda. Session proposals can be taken as they are or we may suggest changes to the speaker to ensure a more cohesive agenda.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Putting on an event like the PowerShell and DevOps Global Summit involves a lot of planning. We started the planning process for the 2017 Summit BEFORE the 2016 Summit started!</p><p>We have to work so far in advance that we’re taking guesses at the topics that will be of high interest next April – remember that we fix the agenda 6 months before the actual Summit.</p><p>Part of the process of creating the agenda is that we publish a ‘Call for Proposals’ where we ask potential speakers to submit session proposals. We then use those proposals as the basis of the agenda. Session proposals can be taken as they are or we may suggest changes to the speaker to ensure a more cohesive agenda.</p><p>Our aim in all of this is to provide relevant, high-level sessions that will keep the Summit as a ‘must attend’ event for the PowerShell community.</p><p>This year we’re asking for your help.</p><p>We’d like you to suggest topic areas that you’d like to see at the Summit. This is NOT a call for specific session proposals (that will come in August) or a request for particular speakers to talk about a topic but a request for topics. For instance:</p><ul><li/></ul><p>We had some feedback from attendees at the 2016 Summit that a deep session on remoting would be of interest.</p><ul><li/></ul><p>The last few Summits we’ve had a lot of material on DSC – is it too much or do you want more in specific areas?</p><ul><li/></ul><p>Security is a highly important topic – do you want more? Is there a particular security aspect that should be covered?</p><ul><li/></ul><p>PowerShell is a very broad topic – are there areas such as Workflows, Jobs, Events, Remoting, CIM, Package Management where you’d like more?</p><ul><li/></ul><p>DevOps is another broad area -do you want sessions on dealing with specific technologies such as Chef, Puppet, Octopus, Source Control and anything else that enables your DevOps processes?</p><p>This list isn’t meant to be exhaustive – just a number of suggestions to start you thinking about the subject areas you’d like to see at the Summit.</p><p>We’ll summarise the topic areas that are requested in the information supplied to potential speakers in the Call for Proposals document.</p><p>Please use the comment facility to reply. If you need to supply further information you can use the standard Summit email address of Summit at PowerShell dot org.</p><p>The PowerShell Summit has become a premier event in the calendar of the PowerShell community. This is your opportunity to help shape next year’s Summit into the event you want to see.</p><p>Thank you.</p>
]]></content:encoded></item><item><title>Slack and PowerShell</title><link>https://powershell.org/articles/2016-05-24-slack-and-powershell/</link><guid>https://powershell.org/articles/2016-05-24-slack-and-powershell/</guid><pubDate>Tue, 24 May 2016 12:51:46 +0000</pubDate><description>&lt;p&gt;Having a platform that enables &lt;a href="https://www.youtube.com/watch?v=F8Vfoz7GeHw"&gt;ChatOps&lt;/a&gt; can be a game changer.  You can quickly see changes, alerts, build status, discussions, emergency chats, and more, all in a single, searchable interface.  If you can sift through the gifs.&lt;br&gt;
Bots are a hot topic these days, and and it&amp;rsquo;s well worth checking out Matt Hodgkins bit &lt;a href="https://hodgkins.io/chatops-on-windows-with-hubot-and-powershell"&gt;on integrating PowerShell with Hubot&lt;/a&gt;.  Bots are a great alternative to trying to spin up a web front end for PowerShell.&lt;br&gt;
On top of bots, systems like Slack often offer a &lt;a href="https://slack.com/apps"&gt;wealth of integrations&lt;/a&gt;, allowing you to hook into systems like Nagios, PagerDuty, GitHub, Trello, and many others.&lt;br&gt;
Occasionally, you might have something that doesn&amp;rsquo;t integrate natively.  Maybe you want to integrate Slack messages into your SCOM command notification channel, your CI/CD build process, orchestration system, configuration management systems, or even ad hoc scripts.&lt;br&gt;
If you&amp;rsquo;re using Slack, check out the &lt;a href="https://api.slack.com/methods"&gt;Slack API methods&lt;/a&gt;, or &lt;a href="https://api.slack.com/incoming-webhooks"&gt;an incoming webhook&lt;/a&gt;.  With the API in particular, you can do some handy stuff!&lt;br&gt;
If you like the idea of re-usable tools and abstraction, check out &lt;a href="http://ramblingcookiemonster.github.io/PSSlack/"&gt;PSSlack&lt;/a&gt;, a PowerShell module that we&amp;rsquo;re starting to build out, which can simplify sending messages, searching messages, and more.&lt;br&gt;
&lt;a href="http://ramblingcookiemonster.github.io/PSSlack/"&gt;&lt;img src="https://powershell.org/wp-content/uploads/2016/05/pslack.png" alt="pslack"&gt;&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Having a platform that enables<a href="https://www.youtube.com/watch?v=F8Vfoz7GeHw">ChatOps</a> can be a game changer.  You can quickly see changes, alerts, build status, discussions, emergency chats, and more, all in a single, searchable interface.  If you can sift through the gifs.<br>
Bots are a hot topic these days, and and it&rsquo;s well worth checking out Matt Hodgkins bit<a href="https://hodgkins.io/chatops-on-windows-with-hubot-and-powershell">on integrating PowerShell with Hubot</a>.  Bots are a great alternative to trying to spin up a web front end for PowerShell.<br>
On top of bots, systems like Slack often offer a<a href="https://slack.com/apps">wealth of integrations</a>, allowing you to hook into systems like Nagios, PagerDuty, GitHub, Trello, and many others.<br>
Occasionally, you might have something that doesn&rsquo;t integrate natively.  Maybe you want to integrate Slack messages into your SCOM command notification channel, your CI/CD build process, orchestration system, configuration management systems, or even ad hoc scripts.<br>
If you&rsquo;re using Slack, check out the<a href="https://api.slack.com/methods">Slack API methods</a>, or<a href="https://api.slack.com/incoming-webhooks">an incoming webhook</a>.  With the API in particular, you can do some handy stuff!<br>
If you like the idea of re-usable tools and abstraction, check out<a href="http://ramblingcookiemonster.github.io/PSSlack/">PSSlack</a>, a PowerShell module that we&rsquo;re starting to build out, which can simplify sending messages, searching messages, and more.<br><a href="http://ramblingcookiemonster.github.io/PSSlack/"><img src="https://powershell.org/wp-content/uploads/2016/05/pslack.png" alt="pslack"/></p>
]]></content:encoded></item><item><title>Practical PowerShell Unit-Testing</title><link>https://powershell.org/articles/2016-05-22-practical-powershell-unit-testing/</link><guid>https://powershell.org/articles/2016-05-22-practical-powershell-unit-testing/</guid><pubDate>Sun, 22 May 2016 20:44:14 +0000</pubDate><description>&lt;p&gt;By the time you are using PowerShell to automate an increasing amount of your system administration, database maintenance, or application-lifecycle work, you will likely come to the realization that PowerShell is indeed a first-class programming language and, as such, you need to treat it as such. That is, you need to do development in PowerShell just as you would with other languages, and in particular to increase robustness and decrease maintenance cost with &lt;strong&gt;unit tests&lt;/strong&gt; and&amp;ndash;dare I say&amp;ndash;&lt;strong&gt;test-driven development&lt;/strong&gt; (TDD). I put together several articles on getting started with unit tests and TDD in PowerShell using &lt;a href="https://github.com/pester/Pester"&gt;Pester&lt;/a&gt;, the leading test framework for PowerShell. This series introduces you to Pester and provides what I like to call &amp;ldquo;tips from the trenches&amp;rdquo; on using it most effectively, along with a gentle prodding towards a TDD style.&lt;br&gt;
Part 1: &lt;a href="http://www.simple-talk.com/sysadmin/powershell/practical-powershell-unit-testing-getting-started/"&gt;Getting Started with the Pester Framework&lt;/a&gt;&lt;br&gt;
Starting with the ubiquitous &amp;ldquo;Hello, World&amp;rdquo;, this introduces Pester, showing how to execute tests, how to start writing tests, and the anatomy of a test.&lt;br&gt;
Part 2: &lt;a href="http://www.simple-talk.com/sysadmin/powershell/practical-powershell-unit-testing-mock-objects/"&gt;Mock Objects and Parameterized Test Cases&lt;/a&gt;&lt;br&gt;
To be able to create true unit tests, you need to be able to isolate your functions and modules to be able to focus on the component under test; mocks provide great support for doing that. Another topic of &amp;ldquo;power&amp;rdquo; unit tests is making them parameterizable, i.e. being able to run several scenarios through a single test simply by providing different inputs.&lt;br&gt;
Part 3: &lt;a href="http://www.simple-talk.com/sysadmin/powershell/practical-powershell-unit-testing-checking-program-flow/"&gt;Validating Data and Call History&lt;/a&gt;&lt;br&gt;
The final part of this series provides a &amp;ldquo;how-to&amp;rdquo; for several other key parts of Pester: how to validate data, how to determine if something was called appropriately, and how to address a particular challenge with Pester, validating arrays. I&amp;rsquo;ve included a library for array validation to supplement Pester.&lt;br&gt;
For a more general treatment of unit tests, I refer you to Roy Osherove&amp;rsquo;s canonical text on the subject, &lt;a href="http://artofunittesting.com/"&gt;The Art of Unit Testing&lt;/a&gt;.&lt;br&gt;
&lt;img src="https://images.duckduckgo.com/iu/?u=http%3A%2F%2Fcoding-in.net%2Fblog%2Fwp-content%2Fuploads%2FArtOf%C2%B5UnitTesting.jpg&amp;amp;f=1" alt="&amp;hellip; you wanted to know about Unit Testing in .NET | Coding in .NET"&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>By the time you are using PowerShell to automate an increasing amount of your system administration, database maintenance, or application-lifecycle work, you will likely come to the realization that PowerShell is indeed a first-class programming language and, as such, you need to treat it as such. That is, you need to do development in PowerShell just as you would with other languages, and in particular to increase robustness and decrease maintenance cost with<strong>unit tests</strong> and&ndash;dare I say&ndash;<strong>test-driven development</strong> (TDD). I put together several articles on getting started with unit tests and TDD in PowerShell using<a href="https://github.com/pester/Pester">Pester</a>, the leading test framework for PowerShell. This series introduces you to Pester and provides what I like to call &ldquo;tips from the trenches&rdquo; on using it most effectively, along with a gentle prodding towards a TDD style.<br>
Part 1:<a href="http://www.simple-talk.com/sysadmin/powershell/practical-powershell-unit-testing-getting-started/">Getting Started with the Pester Framework</a><br>
Starting with the ubiquitous &ldquo;Hello, World&rdquo;, this introduces Pester, showing how to execute tests, how to start writing tests, and the anatomy of a test.<br>
Part 2:<a href="http://www.simple-talk.com/sysadmin/powershell/practical-powershell-unit-testing-mock-objects/">Mock Objects and Parameterized Test Cases</a><br>
To be able to create true unit tests, you need to be able to isolate your functions and modules to be able to focus on the component under test; mocks provide great support for doing that. Another topic of &ldquo;power&rdquo; unit tests is making them parameterizable, i.e. being able to run several scenarios through a single test simply by providing different inputs.<br>
Part 3:<a href="http://www.simple-talk.com/sysadmin/powershell/practical-powershell-unit-testing-checking-program-flow/">Validating Data and Call History</a><br>
The final part of this series provides a &ldquo;how-to&rdquo; for several other key parts of Pester: how to validate data, how to determine if something was called appropriately, and how to address a particular challenge with Pester, validating arrays. I&rsquo;ve included a library for array validation to supplement Pester.<br>
For a more general treatment of unit tests, I refer you to Roy Osherove&rsquo;s canonical text on the subject,<a href="http://artofunittesting.com/">The Art of Unit Testing</a>.<br><img src="https://images.duckduckgo.com/iu/?u=http%3A%2F%2Fcoding-in.net%2Fblog%2Fwp-content%2Fuploads%2FArtOf%C2%B5UnitTesting.jpg&amp;f=1" alt="&hellip; you wanted to know about Unit Testing in .NET | Coding in .NET"/>
]]></content:encoded></item><item><title>Getting complex – More line breaks in Powershell</title><link>https://powershell.org/articles/2016-05-21-getting-complex-more-line-breaks-in-powershell/</link><guid>https://powershell.org/articles/2016-05-21-getting-complex-more-line-breaks-in-powershell/</guid><pubDate>Sat, 21 May 2016 20:09:16 +0000</pubDate><description>&lt;p&gt;This is a follow up to Jacob Moran&amp;rsquo;s article &lt;a href="https://powershell.org/2016/04/20/keeping-it-simple-line-breaks-in-powershell/"&gt;Keeping it simple - Line breaks in PowerShell&lt;/a&gt;.&lt;br&gt;
I am strongly in the pro backtick camp, but I won&amp;rsquo;t get into that debate here. Instead, I&amp;rsquo;ll cover more of the common ground between the two camps.&lt;br&gt;
In addition to after a pipe, there are many, many more places where you can put in a line break without a backtick and without breaking your code.&lt;br&gt;
As a rule of thumb, any spot where the syntax unambiguously must be followed by something more, you can break the line.&lt;br&gt;
As an extreme example, this:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>This is a follow up to Jacob Moran&rsquo;s article<a href="https://powershell.org/2016/04/20/keeping-it-simple-line-breaks-in-powershell/">Keeping it simple - Line breaks in PowerShell</a>.<br>
I am strongly in the pro backtick camp, but I won&rsquo;t get into that debate here. Instead, I&rsquo;ll cover more of the common ground between the two camps.<br>
In addition to after a pipe, there are many, many more places where you can put in a line break without a backtick and without breaking your code.<br>
As a rule of thumb, any spot where the syntax unambiguously must be followed by something more, you can break the line.<br>
As an extreme example, this:</p><p>$A</p><p>=</p><p>1</p><p>,</p><p>1</p><ul><li/></ul><p>1</p><p>,</p><p>3</p><p>$B</p><p>=
 @( 
&ldquo;a&rdquo;</p><p>,</p><p>&ldquo;b&rdquo;</p><p>,</p><p>&ldquo;c&rdquo;
 )
If ( 
$A</p><p>[</p><p>2</p><p>]</p><p>.
ToString() 
-eq</p><p>$B</p><p>[</p><p>2</p><p>]</p><p>.
Length 
-or
 (
Get-Date
)
.
Date
.
DayOfWeek 
-eq</p><h1 id="name" class="ps-heading">&lsquo;Tuesday&rsquo;
 ) { 
[pscustomobject]
@{ 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></h1><p>&ldquo;x&rdquo;
 } }</p><p>Can be written like this:</p><p>$A</p><p>=</p><p>1</p><p>,</p><p>1</p><ul><li/></ul><p>1</p><p>,</p><p>3</p><p>$B</p><p>=
 @(</p><p>&ldquo;a&rdquo;</p><p>&ldquo;b&rdquo;</p><p>&ldquo;c&rdquo;</p><p>)</p><p>If
 (</p><p>$A</p><p>[</p><p>2</p><p>]</p><p>.</p><p>ToString(
) 
-eq</p><p>$B</p><p>[</p><p>2</p><p>]</p><p>.</p><p>Length 
-or</p><p>(</p><p>Get-Date</p><p>)
.</p><p>Date
.</p><p>DayOfWeek 
-eq</p><p>&lsquo;Tuesday&rsquo;</p><p>)
{</p><h1 id="name-1" class="ps-heading">[
pscustomobject]
@{
Name <a class="ps-heading-anchor" href="#name-1" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>&ldquo;x&rdquo;</p><p>}
}</p><p>That example is, of course, silly.<br>
But combine judicious use of the line break with appropriate horizontal whitespace, and you can turn this:</p><p>If
 ( 
$SourceFile1</p><p>.
Length 
/</p><p>1Gb</p><p>-gt</p><p>$MaxSizeGB</p><p>-and
 ( 
$SourceFile1</p><p>.
FullName 
-like</p><p>&ldquo;*\Accounting*&rdquo;</p><p>-or</p><p>$SourceFile1</p><p>.
FullName 
-like</p><p>&ldquo;*\Finance*&rdquo;
 ) )
{</p><p>$Destination</p><p>=</p><p>$SourceFile1</p><p>.
FullName
.
Replace( 
$SourceShare</p><p>,</p><p>$DestinationShare
 )
.
Replace( 
&lsquo;\Accounting'</p><p>,</p><p>&lsquo;\ACC'
 )
.
Replace( 
&lsquo;\Accounting'</p><p>,</p><p>&lsquo;\FIN'
 )
}</p><p>Into this:</p><p>If
 ( 
$SourceFile1</p><p>.
Length 
/</p><p>1Gb</p><p>-gt</p><p>$MaxSizeGB</p><p>-and</p><p>     ( </p><p>$SourceFile1</p><p>.
FullName 
-like</p><p>&ldquo;*\Accounting*&rdquo;</p><p>-or</p><p>       $SourceFile1</p><p>.
FullName 
-like</p><p>&ldquo;*\Finance*&rdquo;
 ) )</p><p>    {</p><p>    $Destination</p><p>=</p><p>$SourceFile1</p><p>.
FullName
.</p><p>                    Replace( </p><p>$SourceShare</p><p>,</p><p>$DestinationShare
 )
.</p><p>                    Replace( </p><p>&lsquo;\Accounting'</p><p>,</p><p>&lsquo;\ACC'
 )
.</p><p>                    Replace( </p><p>&lsquo;\Accounting'</p><p>,</p><p>&lsquo;\FIN'
 )</p><p>    }</p>
]]></content:encoded></item><item><title>Boston PSUG Kick Off Meeting Tomorrow</title><link>https://powershell.org/articles/2016-05-19-boston-psug-kick-off-meeting-tomorrow/</link><guid>https://powershell.org/articles/2016-05-19-boston-psug-kick-off-meeting-tomorrow/</guid><pubDate>Thu, 19 May 2016 23:05:43 +0000</pubDate><description>&lt;p&gt;Hello fellow PowerShell enthusiasts. I have been missing for a few months with a new child that has occupied most of my extra time! I look forward to get back in the blogging gear soon.&lt;br&gt;
I just wanted to send out a note that we are hosting our first kick off meeting for the Boston PowerShell User Group at the Microsoft MTC in Kendall Square Cambridge, MA.  Here are the two topics that will be delivered via &lt;a href="https://twitter.com/enigma0x3"&gt;Matt Nelson&lt;/a&gt; and &lt;a href="https://twitter.com/harmj0y"&gt;Will Schroeder&lt;/a&gt;.&lt;br&gt;
&lt;em&gt;Offensive Active Directory With PowerShell&lt;/em&gt;&lt;br&gt;
Active Directory has been covered from a system administration aspect for as long as it has existed. However, much less information exists on how adversaries abuse and backdoor AD, leaving many defenders blind to the attacks being executed in their own environment. We&amp;rsquo;ll cover Active Directory from an offensive perspective, illustrating ways that attackers move through Windows networks with ease. PowerView (the PowerShell domain enumeration tool) will be highlighted, including how to use it for local administrator enumeration, domain trust hopping, user hunting, ACL auditing, and more.&lt;br&gt;
&lt;em&gt;Building an Empire With PowerShell&lt;/em&gt;&lt;br&gt;
Over the past few years, attackers have started to realize that the same aspects of PowerShell that make it an excellent Windows automation solution also make it an ideal attack platform. The Empire project aims to bring together various offensive projects into a fully-functional malware agent (written purely in PowerShell) that can be used offensively by red teams and used to train blue teams to defend against these types of attacks.&lt;br&gt;
Hope anyone local can make it. Sign up is live over at Meetup.com: &lt;a href="http://www.meetup.com/Boston-PowerShell-User-Group/events/230856302/"&gt;http://www.meetup.com/Boston-PowerShell-User-Group/events/230856302/&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Hello fellow PowerShell enthusiasts. I have been missing for a few months with a new child that has occupied most of my extra time! I look forward to get back in the blogging gear soon.<br>
I just wanted to send out a note that we are hosting our first kick off meeting for the Boston PowerShell User Group at the Microsoft MTC in Kendall Square Cambridge, MA.  Here are the two topics that will be delivered via<a href="https://twitter.com/enigma0x3">Matt Nelson</a> and<a href="https://twitter.com/harmj0y">Will Schroeder</a>.<br><em>Offensive Active Directory With PowerShell</em><br>
Active Directory has been covered from a system administration aspect for as long as it has existed. However, much less information exists on how adversaries abuse and backdoor AD, leaving many defenders blind to the attacks being executed in their own environment. We&rsquo;ll cover Active Directory from an offensive perspective, illustrating ways that attackers move through Windows networks with ease. PowerView (the PowerShell domain enumeration tool) will be highlighted, including how to use it for local administrator enumeration, domain trust hopping, user hunting, ACL auditing, and more.<br><em>Building an Empire With PowerShell</em><br>
Over the past few years, attackers have started to realize that the same aspects of PowerShell that make it an excellent Windows automation solution also make it an ideal attack platform. The Empire project aims to bring together various offensive projects into a fully-functional malware agent (written purely in PowerShell) that can be used offensively by red teams and used to train blue teams to defend against these types of attacks.<br>
Hope anyone local can make it. Sign up is live over at Meetup.com:<a href="http://www.meetup.com/Boston-PowerShell-User-Group/events/230856302/">http://www.meetup.com/Boston-PowerShell-User-Group/events/230856302/</a></p>
]]></content:encoded></item><item><title>Making Awesome Dashboards from Windows Performance Counters</title><link>https://powershell.org/articles/2016-05-19-making-awesome-dashboards-from-windows-performance-counters/</link><guid>https://powershell.org/articles/2016-05-19-making-awesome-dashboards-from-windows-performance-counters/</guid><pubDate>Thu, 19 May 2016 18:25:55 +0000</pubDate><description>&lt;p&gt;Having an understanding of your systems performance is a crucial part of running IT infrastructure.&lt;br&gt;
If a user comes to us and says &lt;em&gt;&amp;ldquo;why is my application running slowly?&amp;rdquo;&lt;/em&gt;, where do we start? Is it their machine? Is it the database server? Is it the file server?&lt;br&gt;
The first thing we usually do is open up perfmon.exe and take a look at some performance counters. You then see the CPU on the database server is 100% and think _ &amp;ldquo;was the CPU always at 100% or did this issue just start today? Was it something I changed? If only I could see what was happening at this time yesterday when the application was running fine!&amp;quot;. _It might take you a few hours to find the performance issue on your infrastructure, and you are probably going to need to open up perfmon.exe on a couple of other systems. There is a better way!&lt;br&gt;
What if you could turn your Windows performance counters into dashboards that look like this? How much time would you save?&lt;br&gt;
&lt;img src="https://hodgkins.io/images/posts/influxdb_grafana_windows/fulldashboard.png" alt="Full Hyper-V Dashboard"&gt;&lt;br&gt;
Using a combination of the open source tools &lt;strong&gt;InfluxDB&lt;/strong&gt; to store the performance counter data, **Grafana **to graph the data and the &lt;strong&gt;Telegraf&lt;/strong&gt; agent to collect Windows performance counters, you will be a master of your metrics in no time!&lt;br&gt;
Read the detailed walk through over at &lt;a href="https://hodgkins.io/windows-metric-dashboards-with-influxdb-and-grafana"&gt;hodgkins.io&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Having an understanding of your systems performance is a crucial part of running IT infrastructure.<br>
If a user comes to us and says <em>&ldquo;why is my application running slowly?&rdquo;</em>, where do we start? Is it their machine? Is it the database server? Is it the file server?<br>
The first thing we usually do is open up perfmon.exe and take a look at some performance counters. You then see the CPU on the database server is 100% and think _ &ldquo;was the CPU always at 100% or did this issue just start today? Was it something I changed? If only I could see what was happening at this time yesterday when the application was running fine!". _It might take you a few hours to find the performance issue on your infrastructure, and you are probably going to need to open up perfmon.exe on a couple of other systems. There is a better way!<br>
What if you could turn your Windows performance counters into dashboards that look like this? How much time would you save?<br><img src="https://hodgkins.io/images/posts/influxdb_grafana_windows/fulldashboard.png" alt="Full Hyper-V Dashboard"><br>
Using a combination of the open source tools <strong>InfluxDB</strong> to store the performance counter data, **Grafana **to graph the data and the <strong>Telegraf</strong> agent to collect Windows performance counters, you will be a master of your metrics in no time!<br>
Read the detailed walk through over at <a href="https://hodgkins.io/windows-metric-dashboards-with-influxdb-and-grafana">hodgkins.io</a></p>
]]></content:encoded></item><item><title>Dutch PowerShell User Group opens its doors on Slack</title><link>https://powershell.org/articles/2016-05-16-dutch-powershell-user-group-opens-its-doors-on-slack/</link><guid>https://powershell.org/articles/2016-05-16-dutch-powershell-user-group-opens-its-doors-on-slack/</guid><pubDate>Mon, 16 May 2016 13:07:17 +0000</pubDate><description>&lt;p&gt;In the past few weeks there has been a flurry of activity in the &lt;a href="http://www.dupsug.com"&gt;DuPSUG&lt;/a&gt; organization. We have been working on organizing the first PowerShell Saturday in the Netherlands and we recently also opened our doors on Slack, with our &lt;a href="https://dupsug.slack.com/"&gt;DuPSUG slack&lt;/a&gt; initiative.&lt;br&gt;
On Slack we will provide a platform on which we will share our content and provide another platform for our members and PowerShell enthusiasts worldwide to interact with the Dutch scripting community. If you are interested in participating in our events, either as a participant or perhaps at future events as a speaker, fill please out the following form:&lt;br&gt;
&lt;a href="http://goo.gl/forms/6La00HMeK7"&gt;DuPSUG Slack Registration&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>In the past few weeks there has been a flurry of activity in the<a href="http://www.dupsug.com">DuPSUG</a> organization. We have been working on organizing the first PowerShell Saturday in the Netherlands and we recently also opened our doors on Slack, with our<a href="https://dupsug.slack.com/">DuPSUG slack</a> initiative.<br>
On Slack we will provide a platform on which we will share our content and provide another platform for our members and PowerShell enthusiasts worldwide to interact with the Dutch scripting community. If you are interested in participating in our events, either as a participant or perhaps at future events as a speaker, fill please out the following form:<br><a href="http://goo.gl/forms/6La00HMeK7">DuPSUG Slack Registration</a></p>
]]></content:encoded></item><item><title>Your feedback wanted! New eBook Hosting for PowerShell.org</title><link>https://powershell.org/articles/2016-05-09-your-feedback-wanted-new-ebook-hosting-for-powershell-org/</link><guid>https://powershell.org/articles/2016-05-09-your-feedback-wanted-new-ebook-hosting-for-powershell-org/</guid><pubDate>Mon, 09 May 2016 13:28:43 +0000</pubDate><description>&lt;p&gt;After dealing with numerous problems from PenFlip (where our free ebooks are currently located), we&amp;rsquo;ve decided to try two new hosting providers: GitBook and LeanPub.&lt;br&gt;
Both of these are, or can be, based on Git/GitHub, which means the Markdown text of the book will always be open-sourced and available. Both offer conversion into PDF, MOBI, and EPUB formats, so you can download whichever you want. Both enable us to update the books at any time. Both are relatively easy to use; GitBook provides a moderately better writing experience since they provide a native app that kind of hides the Git-i-ness, but it&amp;rsquo;s not a huge deal. More or less the same thing could be assembled for LeanPub if we wanted.&lt;br&gt;
They do their formatting slightly differently, so it&amp;rsquo;s worth looking at each to see which you like better. We don&amp;rsquo;t have a ton of control over their formatting, so what you see in these tests is what you get.&lt;br&gt;
LeanPub offers two key differences:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>After dealing with numerous problems from PenFlip (where our free ebooks are currently located), we&rsquo;ve decided to try two new hosting providers: GitBook and LeanPub.<br>
Both of these are, or can be, based on Git/GitHub, which means the Markdown text of the book will always be open-sourced and available. Both offer conversion into PDF, MOBI, and EPUB formats, so you can download whichever you want. Both enable us to update the books at any time. Both are relatively easy to use; GitBook provides a moderately better writing experience since they provide a native app that kind of hides the Git-i-ness, but it&rsquo;s not a huge deal. More or less the same thing could be assembled for LeanPub if we wanted.<br>
They do their formatting slightly differently, so it&rsquo;s worth looking at each to see which you like better. We don&rsquo;t have a ton of control over their formatting, so what you see in these tests is what you get.<br>
LeanPub offers two key differences:</p><ul><li>While we can and will continue to make the books available for free, we can also suggest a purchase price, and then actually let readers set a purchase price. This would enable donations to DevOpsCollective.org.</li><li>Readers who &ldquo;buy&rdquo; the book (even for free) can register to receive email updates when a new version is produced. This<em>does</em> mean you have to register using an e-mail address to download any book, even if you&rsquo;re not paying for it. We know some people get twitchy about providing contact info.</li></ul><p>We&rsquo;re going to use <strong>one</strong> of these new solutions, and we&rsquo;d like your feedback. Try them both, if you can - we&rsquo;ve converted <em>Creating HTML Reports in PowerShell</em> over to both so that you can do a side-by-side comparison and see how they produce their various formats. Provide any feedback in the comments, below!<br><a href="https://leanpub.com/creatinghtmlreportsinwindowspowershell">The LeanPub Version</a> •<a href="https://www.gitbook.com/book/devopscollective/creating-html-reports-in-powershell">The GitBook Version</a></p><p>**UPDATE: **At least two folks have found that they can&rsquo;t access GitBook from their corporate network, which is concerning. Please indicate in the comments if that&rsquo;s a problem for you, too.<br>
**UPDATE: **We&rsquo;re playing with GitHub. Both GitBook and LeanPub support it, and we&rsquo;re thinking we may be able to publish to both locations automagically, so people can choose the one that they like best. It looks like LeanPub will only generate a &ldquo;Preview&rdquo; when we push to GitHub, and we have to go in and manually &ldquo;Publish&rdquo; that latest version, but there may be a way to automate that.</p>
]]></content:encoded></item><item><title>MSPSUG May 10th Virtual Meeting: Acceptance Testing PowerShell DSC with Test-Kitchen</title><link>https://powershell.org/articles/2016-05-08-mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen/</link><guid>https://powershell.org/articles/2016-05-08-mspsug-may-10th-virtual-meeting-acceptance-testing-powershell-dsc-with-test-kitchen/</guid><pubDate>Mon, 09 May 2016 01:06:51 +0000</pubDate><description>&lt;p&gt;Join the Mississippi PowerShell User Group virtually on Tuesday, May 10th 2016 at 8:30pm Central Time when Microsoft MVP &lt;a href="https://twitter.com/StevenMurawski"&gt;Steven Murawski&lt;/a&gt; will be presenting &amp;ldquo;&lt;em&gt;&lt;strong&gt;Acceptance Testing Desired State Configuration with Test-Kitchen&lt;/strong&gt;&lt;/em&gt;&amp;rdquo;.&lt;br&gt;
DSC is awesome, but only if the resources and configurations do what you want them to do.  How do you know? If you are relying on DSC to tell you when it didn’t do the right thing, you are in for a world of hurt.  Configuration management is the world of “trust but verify” and Test-Kitchen gives you a common framework for testing your resources and configurations and use Pester to validate that your servers end up in the state you expect.&lt;br&gt;
Visit the &lt;a href="http://mspsug.com/2016/04/29/mspsug-may-2016-virtual-meeting-acceptance-testing-dsc-with-test-kitchen/"&gt;Mississippi PowerShell User Group&lt;/a&gt; website to learn more about Steven and to find out more details about this month’s meeting.&lt;br&gt;
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 “&lt;a href="http://mspsug.com/attendee-info/"&gt;Attendee Info&lt;/a&gt;” section.&lt;br&gt;
Register via &lt;a href="http://mspsug.eventbrite.com/"&gt;EventBrite&lt;/a&gt; to receive the URL for this meeting.&lt;br&gt;
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.&lt;br&gt;
µ&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join the Mississippi PowerShell User Group virtually on Tuesday, May 10th 2016 at 8:30pm Central Time when Microsoft MVP<a href="https://twitter.com/StevenMurawski">Steven Murawski</a> will be presenting &ldquo;<em><strong>Acceptance Testing Desired State Configuration with Test-Kitchen</strong></em>&rdquo;.<br>
DSC is awesome, but only if the resources and configurations do what you want them to do.  How do you know? If you are relying on DSC to tell you when it didn’t do the right thing, you are in for a world of hurt.  Configuration management is the world of “trust but verify” and Test-Kitchen gives you a common framework for testing your resources and configurations and use Pester to validate that your servers end up in the state you expect.<br>
Visit the<a href="http://mspsug.com/2016/04/29/mspsug-may-2016-virtual-meeting-acceptance-testing-dsc-with-test-kitchen/">Mississippi PowerShell User Group</a> website to learn more about Steven and to find out more details about this month’s meeting.<br>
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.<br>
Register via<a href="http://mspsug.eventbrite.com/">EventBrite</a> to receive the URL for this meeting.<br>
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.<br>
µ</p>
]]></content:encoded></item><item><title>GET YOUR STICKERS!!! (AND WALLPAPERS!!!) (AND INTERNATIONAL STICKERS!!!)</title><link>https://powershell.org/articles/2016-05-04-get-your-stickers/</link><guid>https://powershell.org/articles/2016-05-04-get-your-stickers/</guid><pubDate>Wed, 04 May 2016 21:02:45 +0000</pubDate><description>&lt;p&gt;&lt;a href="https://powershell.org/wp-content/uploads/2016/05/IMG_2867.jpg"&gt;&lt;img src="https://powershell.org/wp-content/uploads/2016/05/IMG_2867-628x471.jpg" alt="STICKERS!"&gt;&lt;/a&gt;&lt;br&gt;
OK, we finally have a huge batch of PowerShell.org and DevOpsCollective.org laptop stickers! These are great, heavy-duty, &lt;em&gt;removable&lt;/em&gt; stickers for laptop and every day use. Here&amp;rsquo;s how you can get yours - &lt;strong&gt;follow these instructions carefully!&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="united-states" class="ps-heading"&gt;United States&lt;a class="ps-heading-anchor" href="#united-states" 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;First, this offer is only valid until July 1st, 2016. After that, you&amp;rsquo;ll have to attend PowerShell + DevOps Global Summit, our Ignite &amp;ldquo;PowerShell Community Happy Hour&amp;rdquo; event, or someplace else where we&amp;rsquo;re in-person to get a sticker. Sorry for the deadline - I&amp;rsquo;m just not in the full-time sticker distribution business.&lt;br&gt;
To get your sticker, send a &lt;strong&gt;business-sized Self-Addressed, Stamped Envelope&lt;/strong&gt; to Don Jones, 7582 Las Vegas Blvd S, Suite 503, Las Vegas NV 89123. The return envelope should include your address in both the &amp;ldquo;main&amp;rdquo; and &amp;ldquo;return address&amp;rdquo; positions.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><a href="https://powershell.org/wp-content/uploads/2016/05/IMG_2867.jpg"><img src="https://powershell.org/wp-content/uploads/2016/05/IMG_2867-628x471.jpg" alt="STICKERS!"/><br>
OK, we finally have a huge batch of PowerShell.org and DevOpsCollective.org laptop stickers! These are great, heavy-duty, <em>removable</em> stickers for laptop and every day use. Here&rsquo;s how you can get yours - <strong>follow these instructions carefully!</strong></p><h2 id="united-states" class="ps-heading">United States<a class="ps-heading-anchor" href="#united-states" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>First, this offer is only valid until July 1st, 2016. After that, you&rsquo;ll have to attend PowerShell + DevOps Global Summit, our Ignite &ldquo;PowerShell Community Happy Hour&rdquo; event, or someplace else where we&rsquo;re in-person to get a sticker. Sorry for the deadline - I&rsquo;m just not in the full-time sticker distribution business.<br>
To get your sticker, send a <strong>business-sized Self-Addressed, Stamped Envelope</strong> to Don Jones, 7582 Las Vegas Blvd S, Suite 503, Las Vegas NV 89123. The return envelope should include your address in both the &ldquo;main&rdquo; and &ldquo;return address&rdquo; positions.</p><ul><li>For one of each sticker, just use a Forever stamp.</li><li>If you run a user group, you may ask for 10 of each sticker. Your return envelope will need two Forever stamps.</li></ul><p>Please, no multiple requests, no special requests, make this easy on me ;). The number of stamps on the return envelope will tell me how many stickers to enclose; if you&rsquo;re requesting for a user group, please write the user group name on the back of the return envelope. If you have a giant user group, just get in touch with me first and we can try to figure something out.</p><h2 id="international" class="ps-heading">International<a class="ps-heading-anchor" href="#international" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>You&rsquo;ll have to buy them yourself, but it&rsquo;s not expensive in most countries.<a href="http://www.redbubble.com/people/devopscollectiv/works/21792888-devops-collective">DevOps Collective</a> merchandise and<a href="http://www.redbubble.com/people/devopscollectiv/works/21792909-powershell-org-logo">PowerShell.org merchandise</a> is available through RedBubble, which manufactures in numerous countries and offers inexpensive shipping to many. Note that we don&rsquo;t control the pricing or the manufacturing, here. These are not the cheapest (about $3 each) because they&rsquo;re produced on-demand, but it&rsquo;s an option!</p><h2 id="wallpaper" class="ps-heading">Wallpaper<a class="ps-heading-anchor" href="#wallpaper" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>And if nothing else, enjoy this&hellip; (click for link to full-size version)<br><a href="https://powershell.org/wp-content/uploads/2016/05/collective-org-wallpaper.png"><img src="https://powershell.org/wp-content/uploads/2016/05/collective-org-wallpaper-628x353.png" alt="collective-org-wallpaper"/></p>
]]></content:encoded></item><item><title>Documenting your PowerShell API–solved!</title><link>https://powershell.org/articles/2016-04-29-documenting-your-powershell-api-solved/</link><guid>https://powershell.org/articles/2016-04-29-documenting-your-powershell-api-solved/</guid><pubDate>Fri, 29 Apr 2016 22:01:52 +0000</pubDate><description>&lt;p&gt;Long has it been known how to easily document your PowerShell source code simply by embedding properly formatted documentation comments right along side your code, making maintenance relatively painless&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://powershell.org/wp-content/uploads/2016/04/ps-doc-comment-sample.png" alt="Sample Doc-Comments for PowerShell source"&gt;&lt;br&gt;
But if you advanced to writing your PowerShell cmdlets in C#, you have largely been on your own, either hand-crafting MAML files or using targeted MAML editors far removed from your source code. &lt;strong&gt;But not anymore.&lt;/strong&gt; With the advent of Chris Lambrou&amp;rsquo;s open-source &lt;strong&gt;XmlDoc2CmdletDoc&lt;/strong&gt;, the world has been righted upon its axis once more: it allows instrumenting your C# source with doc-comments just like any other C# source:&lt;br&gt;
&lt;img src="https://powershell.org/wp-content/uploads/2016/04/csharp-doc-comment-sample-628x422.png" alt="csharp doc-comment sample"&gt;&lt;br&gt;
All of the above provides fuel for Get-Help, i.e. providing help one cmdlet at a time. But we are a civilized people; we also need a web-based version of our full custom PowerShell API. That is, a hierarchical and indexed set of Get-Help pages for all the cmdlets in our module. For this task, my own open-source effort, &lt;strong&gt;DocTreeGenerator&lt;/strong&gt;, nicely fills the gap, requiring very little beyond the doc-comments described above to do the complete job.&lt;br&gt;
I have written extensively on using both XmlDoc2CmdletDoc and DocTreeGenerator, and just this week, released a one-page wallchart that shows how all the pieces work together:&lt;br&gt;
&lt;img src="https://powershell.org/wp-content/uploads/2016/04/doc-wallchart-thumbnail-628x409.png" alt="doc wallchart thumbnail"&gt;&lt;br&gt;
Here&amp;rsquo;s the link to get you started on this fun journey:&lt;br&gt;
&lt;a href="https://www.simple-talk.com/sysadmin/powershell/unified-approach-to-generating-documentation-for-powershell-cmdlets/"&gt;Unified Approach to Generating Documentation for PowerShell Cmdlets&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Long has it been known how to easily document your PowerShell source code simply by embedding properly formatted documentation comments right along side your code, making maintenance relatively painless&hellip;</p><p><img src="https://powershell.org/wp-content/uploads/2016/04/ps-doc-comment-sample.png" alt="Sample Doc-Comments for PowerShell source"><br>
But if you advanced to writing your PowerShell cmdlets in C#, you have largely been on your own, either hand-crafting MAML files or using targeted MAML editors far removed from your source code.<strong>But not anymore.</strong> With the advent of Chris Lambrou&rsquo;s open-source<strong>XmlDoc2CmdletDoc</strong>, the world has been righted upon its axis once more: it allows instrumenting your C# source with doc-comments just like any other C# source:<br><img src="https://powershell.org/wp-content/uploads/2016/04/csharp-doc-comment-sample-628x422.png" alt="csharp doc-comment sample"><br>
All of the above provides fuel for Get-Help, i.e. providing help one cmdlet at a time. But we are a civilized people; we also need a web-based version of our full custom PowerShell API. That is, a hierarchical and indexed set of Get-Help pages for all the cmdlets in our module. For this task, my own open-source effort,<strong>DocTreeGenerator</strong>, nicely fills the gap, requiring very little beyond the doc-comments described above to do the complete job.<br>
I have written extensively on using both XmlDoc2CmdletDoc and DocTreeGenerator, and just this week, released a one-page wallchart that shows how all the pieces work together:<br><img src="https://powershell.org/wp-content/uploads/2016/04/doc-wallchart-thumbnail-628x409.png" alt="doc wallchart thumbnail"><br>
Here&rsquo;s the link to get you started on this fun journey:<br><a href="https://www.simple-talk.com/sysadmin/powershell/unified-approach-to-generating-documentation-for-powershell-cmdlets/">Unified Approach to Generating Documentation for PowerShell Cmdlets</a></p>
]]></content:encoded></item><item><title>Scripting Games May 2016 AD Puzzle</title><link>https://powershell.org/articles/2016-04-26-scripting-games-may-2016-ad-puzzle/</link><guid>https://powershell.org/articles/2016-04-26-scripting-games-may-2016-ad-puzzle/</guid><pubDate>Wed, 27 Apr 2016 02:32:52 +0000</pubDate><description>&lt;p&gt;I love working in AD (Active Directory) with PowerShell. I find that I have had to really dig in to learn some of the syntax nuances that you need to understand to really mine data and change configurations within Active Directory. This puzzle reflects the kind of situation that people have to deal with in PowerShell everyday. I am interested to see what kinds of approaches each of you will take, this is a real chance to learn more of the diversity of methods that can be used in Active Directory with PowerShell.&lt;br&gt;
This month Bartek Bielawski has submitted two puzzles, I am going to post the beginner to medium one first and then the advanced one next month. This is going to be a real learning opportunity. Keep the puzzles coming in, Mike F. Robbinson has submitted one recently too, so you can look forward to that in a couple of months.&lt;br&gt;
Here we go:&lt;br&gt;
During an internal IT audit of rights on your file server it was discovered that certain group had rights to the share used by finance and HR with sensitive data and the main question is: who was able to access these files because of that. When it happens you are attending a conference (surprise, surprise) and can’t really do anything remotely. That doesn’t stop your boss from calling you and asking for help. All she wants is a list of all users that are members of that group. The problem is that this group suffers from snow-ball effect and has multiple nested groups, that contain nested groups, that contain nested…&lt;br&gt;
You respond with “use Get-ADGroupMember -Recursive” but your boss complains, that when she tried to use it, she just got some red text on her screen with information, that common delete is not recognized. You roll your eyes and eventually decide to write a short script and send it over e-mail. Luckily, you have sandbox domain controller running on your laptop, so testing your code is not that difficult. As you are in the middle of an interesting talk, you try to make it as simple and minimalistic as possible. You also decide not to try any other tools that require something to be installed on a computer running the code. One call from the boss is enough.&lt;br&gt;
Design goals:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I love working in AD (Active Directory) with PowerShell. I find that I have had to really dig in to learn some of the syntax nuances that you need to understand to really mine data and change configurations within Active Directory. This puzzle reflects the kind of situation that people have to deal with in PowerShell everyday. I am interested to see what kinds of approaches each of you will take, this is a real chance to learn more of the diversity of methods that can be used in Active Directory with PowerShell.<br>
This month Bartek Bielawski has submitted two puzzles, I am going to post the beginner to medium one first and then the advanced one next month. This is going to be a real learning opportunity. Keep the puzzles coming in, Mike F. Robbinson has submitted one recently too, so you can look forward to that in a couple of months.<br>
Here we go:<br>
During an internal IT audit of rights on your file server it was discovered that certain group had rights to the share used by finance and HR with sensitive data and the main question is: who was able to access these files because of that. When it happens you are attending a conference (surprise, surprise) and can’t really do anything remotely. That doesn’t stop your boss from calling you and asking for help. All she wants is a list of all users that are members of that group. The problem is that this group suffers from snow-ball effect and has multiple nested groups, that contain nested groups, that contain nested…<br>
You respond with “use Get-ADGroupMember -Recursive” but your boss complains, that when she tried to use it, she just got some red text on her screen with information, that common delete is not recognized. You roll your eyes and eventually decide to write a short script and send it over e-mail. Luckily, you have sandbox domain controller running on your laptop, so testing your code is not that difficult. As you are in the middle of an interesting talk, you try to make it as simple and minimalistic as possible. You also decide not to try any other tools that require something to be installed on a computer running the code. One call from the boss is enough.<br>
Design goals:</p><ul><li>Solution has to be quick. Don’t waste time on producing nice, informative error messages.<br>
Your boss won’t read them anyway</li><li>Try to use a solution that requires least testing possible</li><li>Writing simple function could be nice, but if you manage to get it done in two lines, or even one – just do it</li><li>You are limited to build-in functionality only.</li></ul>
]]></content:encoded></item><item><title>Verified Effective Exam Results</title><link>https://powershell.org/articles/2016-04-22-verified-effective-exam-results/</link><guid>https://powershell.org/articles/2016-04-22-verified-effective-exam-results/</guid><pubDate>Fri, 22 Apr 2016 16:14:26 +0000</pubDate><description>&lt;p&gt;We&amp;rsquo;ve uploaded the results of the Verified Effective: PowerShell Toolmaker exam, which was administered at the recent PowerShell + DevOps Global Summit 2016. Note that this exam has, for a couple of years now, been available only as an on-site, in-person, proctored experience - we do not offer online delivery.&lt;br&gt;
We had our best pass rate ever - about 20%. That said, nobody hit 100%. I had actually done a pre-con, full-day session on the very topic being tested - writing advanced functions - and had more than a few folks tell me that the session wasn&amp;rsquo;t as &amp;ldquo;advanced&amp;rdquo; as they wanted. Notwithstanding, 80% of the people who took the test didn&amp;rsquo;t pass (and I wasn&amp;rsquo;t the one grading the tests, either, so it&amp;rsquo;s not just spite!). Unfortunately, a lot of us &lt;em&gt;think&lt;/em&gt; we&amp;rsquo;re &amp;ldquo;advanced,&amp;rdquo; but in fact are missing a lot of details. In some cases, having reviewed the graded tests, folks are missing some of the basics.&lt;br&gt;
If you took the test, head over to &lt;a href="http://verifiedeffective.org"&gt;VerifiedEffective.org&lt;/a&gt; and enter your candidate ID to see if you passed. I want to stress that I personally don&amp;rsquo;t have access to the graded tests with names attached - I only have anonymized copies.&lt;br&gt;
We&amp;rsquo;re not going to offer the exam again at Summit 2017. We&amp;rsquo;re considering making some schedule changes that won&amp;rsquo;t accommodate the time and space and personnel needed to administer the exam and - to be frank - I think &lt;em&gt;education&lt;/em&gt; would benefit a lot of people more than a test. Whether we offer the test again in future years hasn&amp;rsquo;t yet been decided, although I&amp;rsquo;ll share our general feelings at the end of this article.&lt;br&gt;
In fact, with that &amp;ldquo;education&amp;rdquo; in mind, I&amp;rsquo;m going to break a rule. I&amp;rsquo;m going to post the entire exam packet, exactly as it was given to the attendees who took the exam. I did something similar after PowerShell Summit Europe 2015, but this is the &lt;em&gt;exact&lt;/em&gt; exam packet. Go ahead - give yourself an hour to finish the test, and then check back here. I&amp;rsquo;ll wait.&lt;br&gt;
&lt;a href="https://powershell.org/wp-content/uploads/2016/04/Exam.docx"&gt;Exam&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We&rsquo;ve uploaded the results of the Verified Effective: PowerShell Toolmaker exam, which was administered at the recent PowerShell + DevOps Global Summit 2016. Note that this exam has, for a couple of years now, been available only as an on-site, in-person, proctored experience - we do not offer online delivery.<br>
We had our best pass rate ever - about 20%. That said, nobody hit 100%. I had actually done a pre-con, full-day session on the very topic being tested - writing advanced functions - and had more than a few folks tell me that the session wasn&rsquo;t as &ldquo;advanced&rdquo; as they wanted. Notwithstanding, 80% of the people who took the test didn&rsquo;t pass (and I wasn&rsquo;t the one grading the tests, either, so it&rsquo;s not just spite!). Unfortunately, a lot of us <em>think</em> we&rsquo;re &ldquo;advanced,&rdquo; but in fact are missing a lot of details. In some cases, having reviewed the graded tests, folks are missing some of the basics.<br>
If you took the test, head over to<a href="http://verifiedeffective.org">VerifiedEffective.org</a> and enter your candidate ID to see if you passed. I want to stress that I personally don&rsquo;t have access to the graded tests with names attached - I only have anonymized copies.<br>
We&rsquo;re not going to offer the exam again at Summit 2017. We&rsquo;re considering making some schedule changes that won&rsquo;t accommodate the time and space and personnel needed to administer the exam and - to be frank - I think <em>education</em> would benefit a lot of people more than a test. Whether we offer the test again in future years hasn&rsquo;t yet been decided, although I&rsquo;ll share our general feelings at the end of this article.<br>
In fact, with that &ldquo;education&rdquo; in mind, I&rsquo;m going to break a rule. I&rsquo;m going to post the entire exam packet, exactly as it was given to the attendees who took the exam. I did something similar after PowerShell Summit Europe 2015, but this is the <em>exact</em> exam packet. Go ahead - give yourself an hour to finish the test, and then check back here. I&rsquo;ll wait.<br><a href="https://powershell.org/wp-content/uploads/2016/04/Exam.docx">Exam</a></p><p>All done? Now I&rsquo;m going to break another rule and go through the exam. I&rsquo;m going to point out a bunch of stuff that people got wrong, although _just because you did or did not get these things wrong does not mean you did or did not pass, _if you were one of the folks who took this at Summit. This is an amalgamation of comments. So <em>do not</em> drop into comments all angry that you &ldquo;should have passed&rdquo; because you think you did perfectly based on my comments in this article. If you didn&rsquo;t pass, you didn&rsquo;t pass for at least a couple of good reasons, and no, I&rsquo;m not going to ask the scoring panel to go over your exam with you personally. We don&rsquo;t have the tests with names on them anymore, anyway.<br>
So.<br>
The first thing people ran across is the fact that the function in the exam clearly has comment-based help, but when run in the transcript no help appeared. <em>No</em> help. Not even the auto-generated help, _which should have been a clue. _The problem is the blank line between the end of the help block and the <strong>function</strong> keyword<em>[NB: Dave Wyatt points out that this was fixed in v5; it&rsquo;s irrelevant for the exam scoring because you were not expected to fix it anyway]</em>. PowerShell _(in v4, at least, which is obviously what was used to create the transcript) _chokes on this and abandons all hope. _You were not expected to fix this, _because it was like this in the transcript - and your goal was to make the function look as needed to reproduce the transcript. Some (most) folks deleted the comment block. But do me a favor - paste this function into a script, omit the comment block, and see what PowerShell does when you ask for help. Is that what&rsquo;s shown in the transcript? Only two left it alone, recognizing the problem for what it was. &ldquo;But that&rsquo;s tricky!&rdquo; you might say. No, it isn&rsquo;t - not if you know the details of how this technology works. The <em>technology</em> may be tricky, but knowing those ins and outs is what sets you apart as an expert. However, nobody failed solely because they suggested deleting the comment block - the goal of this article is to point out what was going on, not describe the ways in which people failed or passed.<br>
Now for the parameter block, which caused more grief than almost anything else.</p><p><code>Param( [Parameter(ValueFromPipelineByPropetyName=$True)] [string[]]$ComputerName, [ValidateSet('Cim','Wmi')] [string]$Protocol = 'Cim' )</code>Most everyone recognized that <strong>ValueFromPipeline</strong> needed to be added; very few struck <strong>ByPropertyName</strong>. It&rsquo;s fine; it doesn&rsquo;t hurt to have it there and nothing in the transcript suggested it was wrong.<br>
There is no need to add <strong>[Parameter()]</strong> to the second parameter. However, that <strong>[ValidateSet()]</strong> really caused a lot of variation in the responses. The transcript clearly shows <strong>Dcom</strong> as one value, so <strong>Wmi</strong> is clearly wrong. While the transcript does not show any other value _being passed to the parameter, _it <em>clearly</em> shows <strong>Wsman</strong> as the &ldquo;default&rdquo; value - this is in the verbose output when the command is first run. Ergo, if Wsman is the default, then it must also be part of the validation set, not Cim. This is the kind of deductive reasoning that makes you a good debugger.<br>
Many people correctly pointed out that <strong>[CmdletBinding()]</strong> is missing, which is required to enable the built-in -Verbose parameter. Some folks wrote entire If() block to test for -Verbose, which <em>is not the right thing to do. [NB: Dave Wyatt points out that the -Verbose parameter would be implied by including [Parameter()], which is fine; I checked with the scoring panel and nobody was docked for not specifying [CmdletBinding()]. It&rsquo;s the If() construct that was unnecessary.]</em><br>
Several people insisted on adding a <strong>BEGIN{}</strong> and <strong>END{}</strong> block. These are unnecessary _to reproducing the transcript. _Advanced functions work fine without them, even in pipeline input mode.</p><p><code>if ($Protocol -eq 'Dcom') { $opt = New-CimSessionOption -Protocol Dcom } else { $opt = New-CimSessionOption -Protocol Wsman }</code>Many folks made extensive changes to that section. However, _according to the transcript, _the If() block is correct. It&rsquo;s the ValidateSet() that was wrong. Some folks felt that <strong>-Protocol $protocol</strong> could have removed the need for the whole If() block. That&rsquo;s fine, and the opinion wasn&rsquo;t counted against you, but the goal was to <em>reproduce the transcript</em>, not to simply simplify the code.<br>
Now for the main chunk.</p><p><code>try { $session = New-CimSession -SessionOption $opt</code>
-ComputerName $Comp
$os = Get-CimInstance -CimSession $session<code>-ClassName Win32_OperatingSystem $disk = Get-CimInstance -CimSession $session</code>
-ClassName Win32_Volume<code>-Filter "Name = 'C:\\'" $props = @{'ComputerName' = $Computername 'OSVersion' = $os.version 'SPVersion' = $os.ServicePackMajorVersion 'CDiskSize' = $disk.Capacity 'CDiskFree' = $disk.FreeSpace} New-Object -TypeName PSObject</code>
-Property $props
} catch {
Write-Error &ldquo;Failed to connect to $comp&rdquo;
}
`Ignoring the annoying backticks, which were there only to make this fit onto a printed sheet of paper, nearly _everyone missed the lack of <strong>-ErrorAction</strong> on **New-CimSession. **_Without that, the entire Try/Catch block doesn&rsquo;t work. That&rsquo;s a fairly grievous oversight.<br>
Others added in a slew of <strong>Write-Verbose</strong> statements to duplicate what was in the transcript. Problem is, if you&rsquo;d added <strong>[CmdletBinding()]</strong>, most of the verbosity in the transcript came from New-CimSession and Get-CimInstance, because running the function with -Verbose &ldquo;passes down&rdquo; the verbose instruction to cmdlets within the function. That&rsquo;s important to know as a Toolmaker. Other added <strong>-Verbose</strong> to the end of all the <strong>Get-CimInstance</strong> commands, which is clearly wrong, since those did not <em>always</em> produce verbose output.<br>
Many folks, by the way, caught that <strong>Write-Error</strong> should have been **Write-Warning. **Many also added #end comments to the construct closing brackets. Unnecessary, as there was no instruction to modify the script to conform with any particular set of practices, but it didn&rsquo;t count against you. Most caught the replacement of <strong>$comp</strong> with <strong>$computername</strong> in the <strong>$props</strong> hash table. Several insisted on saving the new object to a variable and then writing it with <strong>Write-Output</strong>; that&rsquo;s unnecessary but didn&rsquo;t count against them.<br>
A couple of folks insisted on saving the new object to a variable, and then writing that variable to the pipeline _after the end of the Catch block. _If you follow the logic, you&rsquo;ll see the problems that will produce. It&rsquo;s wrong. Others pointed out that the new object variable would have to be set to $null at the end of the ForEach construct. It doesn&rsquo;t. Not if you&rsquo;re doing it right.<br><em>Several</em> folks unnecessarily asked for the order of the hash table to be different, to match the output of the transcript. Because an unordered hash table is used, PowerShell won&rsquo;t respect the order shown in the script, and what&rsquo;s in the transcript is what you actually get. Changing the order of the hash table in the code won&rsquo;t necessarily have any effect on the output. Again, this is an important thing to know if you&rsquo;re going to be expert-level in Toolmaking.<br>
A few folks pointed out that Get-CimInstance would require a -Namespace. It doesn&rsquo;t, because we&rsquo;re querying the default namespace. Others somewhat inexplicably crossed out the <strong>-ClassName</strong> parameter, so I&rsquo;m not sure how the script would be expected to work that way.<br>
I want to emphasize that _I have not covered every single grade point from the exam - _only the major things that I noticed as I reviewed the already-graded packets. I reviewed those without people&rsquo;s names attached, too, so I can&rsquo;t even tell you who did what, which is as it should be.<br>
Now, for the good news. Pass or fail, most people got the <em>gist</em> of the thing. Some people were probably just freaked out about taking an exam, and flubbed a few bits they might ordinarily get right. A couple of people got time-pressured, and that can cause screwups. So know that, even if you didn&rsquo;t pass, _you were probably close. _And there&rsquo;s a massively legitimate position that you can&rsquo;t easily test this kind of skill without throwing in all kinds of off-topic stresses and complications. Fortunately, this isn&rsquo;t a certification exam, you&rsquo;re not going to lose your job if you didn&rsquo;t pass, and you didn&rsquo;t pay a dime to try (the exam was free to all attendees). And I want to emphasize that <em>nobody</em> got it 100% right. There were, I think, 11 errors, and you needed to find 8 of them to pass. So it was easy to fall just on one side or the other of that line.<br>
If there&rsquo;s a takeaway, it&rsquo;s that _there&rsquo;s always room to learn more. _If you made one of the silly mistakes, or missed -ErrorAction, it might well simply be because of the nature of this experience, not because you didn&rsquo;t know better. In which case - awesome. But I&rsquo;m pretty sure everyone &ldquo;legitimately&rdquo; missed at least one important thing, or added something unnecessary in the belief that it was required - and if you can make this a learning experience, then you&rsquo;ll at least grow as a professional.<br>
So, on to the future of this thing. This whole exam idea was started because Microsoft simply refuses to do a certification, and people wanted <em>some</em> kind of measuring stick for their skills. Thing is, <em>any</em> kind of exam (and perhaps Microsoft recognizes this?) tosses unrelated factors into the soup, and you get people failing just because of the nature of the exam. They tense up. They stress out. They overthink it. They start looking for &ldquo;tricks&rdquo; and second-guessing themselves. Whatever it is, the yardstick itself becomes a problem, perhaps more of a problem than what it was trying to solve. So for now, at least, we&rsquo;re not going to pursue this any further. I do recognize the need to measure yourself against a standard, and I recognize the value that can have in the workplace. But we&rsquo;re seeing that the testing process (and we&rsquo;ve tried this in four different processes in an attempt to combat this) is artificial, and introduces too many extraneous variables to be, I think, a super-accurate standard. So for now, we don&rsquo;t feel our best value as an organization is to pursue this at the moment. Instead, we&rsquo;re going to focus on education.<br>
Perhaps in some months the new Scripting Games can take on the role of giving you a task like this one - one with a more defined &ldquo;answer.&rdquo; A way for you to test yourself against a standard, just for your own satisfaction and edification. As always, we&rsquo;re open to suggestions (especially suggestions that come with an offer to _actually implement the suggestion, _since we&rsquo;re not gifted with any more free time than you are) on how we can help the community better serve itself and meet its needs.<br>
In the meantime, thanks for your support.</p>]]></content:encoded></item><item><title>Keeping it simple – Line breaks in PowerShell</title><link>https://powershell.org/articles/2016-04-20-keeping-it-simple-line-breaks-in-powershell/</link><guid>https://powershell.org/articles/2016-04-20-keeping-it-simple-line-breaks-in-powershell/</guid><pubDate>Wed, 20 Apr 2016 23:18:07 +0000</pubDate><description>&lt;p&gt;Trying to get your code to look good when reading it later can be tricky&lt;br&gt;
For line breaks in function scripts, there are two out-of-the-box options:&lt;br&gt;
First, you can break a line &lt;em&gt;after the pipe key&lt;/em&gt;, which is an elegant and easy-to-read approach.&lt;br&gt;
Second, you can arbitrarily break a line with a &lt;em&gt;back tick&lt;/em&gt; mark, which you will find left of the number 1 on a standard US keyboard.&lt;br&gt;
**It looks like this: &lt;code&gt; ** But did you know that the back tick is a hack? The back tick &lt;/code&gt; means, “literally interpret the next character,” or also said, escape the following character.”&lt;br&gt;
For example, you might want to literally reference a quotation mark “ in a path name, but because it’s inside “” for strings, you need to literally interpret it: “&lt;code&gt;”PATH&lt;/code&gt;”” – it’s hard to see, but squint.&lt;br&gt;
But here’s another takeaway: if you use the back tick to create a line break, make sure there’s no space after it; otherwise, the space – not the carriage return – will be the escaped, literal character!&lt;br&gt;
So here&amp;rsquo;s are some examples of what works and what doesn&amp;rsquo;t:&lt;br&gt;
First, no line breaks - works like a charm, but if we add a few more pipes and parameters this could get ugly.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Trying to get your code to look good when reading it later can be tricky<br>
For line breaks in function scripts, there are two out-of-the-box options:<br>
First, you can break a line<em>after the pipe key</em>, which is an elegant and easy-to-read approach.<br>
Second, you can arbitrarily break a line with a<em>back tick</em> mark, which you will find left of the number 1 on a standard US keyboard.<br>
**It looks like this:<code> ** But did you know that the back tick is a hack? The back tick</code> means, “literally interpret the next character,” or also said, escape the following character.”<br>
For example, you might want to literally reference a quotation mark “ in a path name, but because it’s inside “” for strings, you need to literally interpret it: “<code>”PATH</code>”” – it’s hard to see, but squint.<br>
But here’s another takeaway: if you use the back tick to create a line break, make sure there’s no space after it; otherwise, the space – not the carriage return – will be the escaped, literal character!<br>
So here&rsquo;s are some examples of what works and what doesn&rsquo;t:<br>
First, no line breaks - works like a charm, but if we add a few more pipes and parameters this could get ugly.</p><p><a href="https://1.bp.blogspot.com/-YhA2DFvuvJ0/VxgKrXR9-iI/AAAAAAAACpI/mxnNdjgJHnsJdBm5CJcDIlH0MZFU14SPgCLcB/s1600/psbreaks1.jpg"><img src="https://1.bp.blogspot.com/-YhA2DFvuvJ0/VxgKrXR9-iI/AAAAAAAACpI/mxnNdjgJHnsJdBm5CJcDIlH0MZFU14SPgCLcB/s640/psbreaks1.jpg" alt=""/></p><p>Next we have an example with a line break after the pipe, also functioning normally</p><p><a href="https://4.bp.blogspot.com/--yAWo97K86g/VxgKrQ1vGQI/AAAAAAAACpA/rU1Ufre9k5kIX0uHOGromWmrHM9lvBWlACLcB/s1600/psbreaks2.jpg"><img src="https://4.bp.blogspot.com/--yAWo97K86g/VxgKrQ1vGQI/AAAAAAAACpA/rU1Ufre9k5kIX0uHOGromWmrHM9lvBWlACLcB/s640/psbreaks2.jpg" alt=""/></p><p>Here we see the line break before the pipe, and the script fails</p><p><a href="https://3.bp.blogspot.com/-Ws06dXUMVcY/VxgKrQbqwMI/AAAAAAAACpE/Gv7ug-qwjeA8HyxfnK7jV0S7DI0zO6nPACLcB/s1600/psbreaks3.jpg"><img src="https://3.bp.blogspot.com/-Ws06dXUMVcY/VxgKrQbqwMI/AAAAAAAACpE/Gv7ug-qwjeA8HyxfnK7jV0S7DI0zO6nPACLcB/s640/psbreaks3.jpg" alt=""/></p><p>In this sample we use the tick immediately followed by a return. If we wanted to we could insert these ticks numerous times, before each parameter, for example</p><p> <a href="https://4.bp.blogspot.com/-E0dteWkhckg/VxgKr6uTTWI/AAAAAAAACpM/p_Qm4KDNuuoivzH61YGi5ul04sno3bGUwCLcB/s1600/psbreaks4.jpg"><img src="https://4.bp.blogspot.com/-E0dteWkhckg/VxgKr6uTTWI/AAAAAAAACpM/p_Qm4KDNuuoivzH61YGi5ul04sno3bGUwCLcB/s640/psbreaks4.jpg" alt=""/></p><p>Finally we see the effect of using the back tick AND A SPACE before the carriage return - this one is tricky to find when troubleshooting, so don&rsquo;t let it happen to you!</p><p><a href="https://2.bp.blogspot.com/-VifS3zKujEs/VxgKrwPG4FI/AAAAAAAACpQ/Ytct-gqOnJUbigd84aSFoV-xB--6h2OTwCLcB/s1600/psbreaks5.jpg"><img src="https://2.bp.blogspot.com/-VifS3zKujEs/VxgKrwPG4FI/AAAAAAAACpQ/Ytct-gqOnJUbigd84aSFoV-xB--6h2OTwCLcB/s640/psbreaks5.jpg" alt=""/></p><p>A special thanks to Sarah Wischmeyer for the introductory comments on this one!<br>
Keep your scripts snappy!<br><a href="http://majorbacon.blogspot.com/"><img src="https://4.bp.blogspot.com/-VLGIBDlOUUk/UzrUDRXA08I/AAAAAAAABCI/y25G69eJcXExhjHjBEa4OZvklXQdv5GuACKgB/s1600/MBLogo4.png" alt=""/></p>
]]></content:encoded></item><item><title>Help Get the Word Out on the 'GetGoing' Program &amp; Scholarship</title><link>https://powershell.org/articles/2016-04-20-help-get-the-word-out-on-the-getgoing-program-scholarship/</link><guid>https://powershell.org/articles/2016-04-20-help-get-the-word-out-on-the-getgoing-program-scholarship/</guid><pubDate>Wed, 20 Apr 2016 16:00:44 +0000</pubDate><description>&lt;p&gt;&lt;img src="https://powershell.org/wp-content/uploads/2015/12/PowerShellPodcast.png" alt="PowerShellPodcast"&gt;A couple of weeks ago, DevOps Collective (PowerShell.org&amp;rsquo;s parent non-profit organization) &lt;a href="https://devopscollective.org/2016/04/04/announcing-the-getgoing-it-ops-education-program-scholarship/"&gt;announced the availability&lt;/a&gt; of the &amp;lsquo;GetGoing&amp;rsquo; IT Ops Education Program and Scholarship.&lt;br&gt;
For those of you who may not have yet heard, DevOps Collective and Pluralsight have partnered together to create a modern &amp;rsquo;turnkey&amp;rsquo; curriculum that brings together mapped courses, recommended hands-on experiences, and live mentoring to prepare people for the real-world of IT Operations.  With this initiative, they&amp;rsquo;ve offered up to full-ride scholarships for 2016.  Applications for the scholarship have opened, and applications will be taken in until May 15th.&lt;br&gt;
Now that the way has been paved, it&amp;rsquo;s our turn as members of the community to get the word out; and doing so might be easier than you think!&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Contact Your Local School Districts&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
I recently reached out to my hometown public school district, and was immediately met with enthusiasm from the local superintendent and their Science, Guidance, and Counseling departments.  It only takes a quick email with some bullet points on the program to get the conversation initiated.  I&amp;rsquo;ve included the text of my initial correspondence for you to use as a guide to help you on your way.&lt;br&gt;
Contacting your school district is
&lt;em&gt;easy&lt;/em&gt;
.  A quick search online for your district can get your to their website with contact info, often including the email addresses for the district superintendent and other office officials that can help!  Send them a &lt;a href="https://devopscollective.files.wordpress.com/2016/04/getgoing-program-guide.pdf"&gt;copy of the brochure&lt;/a&gt; to help them get informed of the initiative.&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Use Your Social Media Skills&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Get the conversation going on social media!  Talk to your followers; speak out to local educational organizations; and make them aware of this awesome new program!&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Inform Your User Groups&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Get your user groups in on the action.  Enlist the greater community to get the word out faster!  Together we can canvas an even larger area and get more people interested!&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Get Involved&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
Offer to become a mentor.  We all know that the best way to learn is from real world experiences.  We, as a community, have this vast repository of practical knowledge that no book can effectively provide.  We, as a collective resource, can help to bring a new generation of administrators, engineers, and architects into this world already prepared to take on DevOps, Agile IT, and more!&lt;br&gt;
If you need a hand getting started, feel free to contact me at &lt;strong&gt;webmaster at powershell.org&lt;/strong&gt;.  Now let&amp;rsquo;s &lt;em&gt;&lt;strong&gt;#GetGoing&lt;/strong&gt;&lt;/em&gt; ourselves, and make this happen!&lt;br&gt;
Here&amp;rsquo;s my initial contact email that you can use to fit your own story:&lt;br&gt;
&lt;em&gt;Greetings [Contact Name],&lt;/em&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><img src="https://powershell.org/wp-content/uploads/2015/12/PowerShellPodcast.png" alt="PowerShellPodcast">A couple of weeks ago, DevOps Collective (PowerShell.org&rsquo;s parent non-profit organization)<a href="https://devopscollective.org/2016/04/04/announcing-the-getgoing-it-ops-education-program-scholarship/">announced the availability</a> of the &lsquo;GetGoing&rsquo; IT Ops Education Program and Scholarship.<br>
For those of you who may not have yet heard, DevOps Collective and Pluralsight have partnered together to create a modern &rsquo;turnkey&rsquo; curriculum that brings together mapped courses, recommended hands-on experiences, and live mentoring to prepare people for the real-world of IT Operations.  With this initiative, they&rsquo;ve offered up to full-ride scholarships for 2016.  Applications for the scholarship have opened, and applications will be taken in until May 15th.<br>
Now that the way has been paved, it&rsquo;s our turn as members of the community to get the word out; and doing so might be easier than you think!<br><em><strong>Contact Your Local School Districts</strong></em><br>
I recently reached out to my hometown public school district, and was immediately met with enthusiasm from the local superintendent and their Science, Guidance, and Counseling departments.  It only takes a quick email with some bullet points on the program to get the conversation initiated.  I&rsquo;ve included the text of my initial correspondence for you to use as a guide to help you on your way.<br>
Contacting your school district is<em>easy</em>
.  A quick search online for your district can get your to their website with contact info, often including the email addresses for the district superintendent and other office officials that can help!  Send them a<a href="https://devopscollective.files.wordpress.com/2016/04/getgoing-program-guide.pdf">copy of the brochure</a> to help them get informed of the initiative.<br><em><strong>Use Your Social Media Skills</strong></em><br>
Get the conversation going on social media!  Talk to your followers; speak out to local educational organizations; and make them aware of this awesome new program!<br><em><strong>Inform Your User Groups</strong></em><br>
Get your user groups in on the action.  Enlist the greater community to get the word out faster!  Together we can canvas an even larger area and get more people interested!<br><em><strong>Get Involved</strong></em><br>
Offer to become a mentor.  We all know that the best way to learn is from real world experiences.  We, as a community, have this vast repository of practical knowledge that no book can effectively provide.  We, as a collective resource, can help to bring a new generation of administrators, engineers, and architects into this world already prepared to take on DevOps, Agile IT, and more!<br>
If you need a hand getting started, feel free to contact me at<strong>webmaster at powershell.org</strong>.  Now let&rsquo;s<em><strong>#GetGoing</strong></em> ourselves, and make this happen!<br>
Here&rsquo;s my initial contact email that you can use to fit your own story:<br><em>Greetings [Contact Name],</em></p><p><em>I hope this email finds you well.</em></p><pre><code>*My name is [Your Name Here].  I'm a native to [City], IT Consultant, and an industry/community leader in Cloud and Datacenter Management.  I teach PowerShell for free to people in the community that have an interest in the technology at user groups in [location[s]].*
*I also do volunteer work for the DevOps Collective; a 501(c)(3) organization that is dedicated to creating conversations, improving connections between practitioners, and further develop the DevOps state of the art.*
*Recently, DevOps Collective announced the new “GetGoing” IT Ops Education Program &amp; Scholarship.  More on the program can be [researched here](https://devopscollective.org/2016/04/04/announcing-the-getgoing-it-ops-education-program-scholarship/), but I thought I'd offer some of the bullet points on the major educational objectives that form the basis of the program:*
-
*Core understanding of business IT environments, including the various components that commonly form the business technology infrastructure.*
-
*Basic networking essentials, including client configuration and troubleshooting.*
-
*Essentials of business technology security.*
-
*Essentials for technology troubleshooting, including methodologies and patterns.*
-
*Essentials of virtualization technologies.*
-
*Help desk essential skills, including Microsoft Office basics, customer interaction, ticketing systems, and process-following.*
-
*Desktop support essentials.*
-
*Server support essentials.*
-
*Windows client operating system fundamentals, including client and server administration fundamentals.*
-
*Windows PowerShell fundamentals, including the use of PowerShell for core help desk tasks.*
-
*Fundamentals of Microsoft-based databases, collaboration, and messaging technologies.*
*Finally, DevOps Collective has partnered with Pluralsight to offer two full-ride scholarships.  One is a general availability scholarship, and the second is a diversity scholarship being offered to groups that underrepresented in IT in the United States.  The scholarship has a total value of approximately $11,000 dollars and includes:*
-
*Full access to a Pluralsight turnkey curriculum, giving you all the education the model curriculum specifies.*
-
*A paid mentor, who will check-in weekly with each student.*
-
*Paid-for hands-on experiences, including Azure time, predesigned hands-on labs, and even a build-it-yourself kit PC that students get to keep.*
-
*Practice tests, knowledge checks, and other supplemental materials.*
-
*Paid-for certification exams – students only pay if they need to re-take a test.*
*As a leader in the IT community with strong ties the</code></pre><p>[city]
, I feel that this is an important conversation that we need to have for the children of the city.  I grew up [your story].  I have enjoyed much success in my career in Information Technology, and I would love to see today&rsquo;s [school district] students empowered to become tomorrow&rsquo;s technology successes.*</p><pre><code>*Please feel free to contact me if you have any questions.*
*Best Regards,*</code></pre>
]]></content:encoded></item><item><title>A study in Powershell scripting – A beginners guide Part 3</title><link>https://powershell.org/articles/2016-04-18-a-study-in-powershell-scripting-a-beginners-guide-part-3/</link><guid>https://powershell.org/articles/2016-04-18-a-study-in-powershell-scripting-a-beginners-guide-part-3/</guid><pubDate>Mon, 18 Apr 2016 12:28:02 +0000</pubDate><description>&lt;p&gt;Here is the long awaited post of my third installment of where I revisit my script and provide some explanation as to why I did the things I did in regards to synchronizing Active directory groups.&lt;br&gt;
As always feedback is welcome.&lt;br&gt;
Link is &lt;a href="http://weiyentanitjournal.com/index.php/2016/04/18/a-study-in-powershell-scripting-part-3/"&gt;here&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Here is the long awaited post of my third installment of where I revisit my script and provide some explanation as to why I did the things I did in regards to synchronizing Active directory groups.<br>
As always feedback is welcome.<br>
Link is<a href="http://weiyentanitjournal.com/index.php/2016/04/18/a-study-in-powershell-scripting-part-3/">here</a></p>
]]></content:encoded></item><item><title>The Unicode PowerShell module</title><link>https://powershell.org/articles/2016-04-15-the-unicode-powershell-module/</link><guid>https://powershell.org/articles/2016-04-15-the-unicode-powershell-module/</guid><pubDate>Fri, 15 Apr 2016 11:25:19 +0000</pubDate><description>&lt;p&gt;After authoring last month scripting games puzzle, which involved some scripting around the Unicode standard, I decided to have some fun and write a &lt;strong&gt;PowerShell module&lt;/strong&gt; which interacts directly with the online &lt;strong&gt;Unicode Database&lt;/strong&gt; (UCD) to retrieve the main properties of characters.&lt;br&gt;
&lt;img src="https://powershell.org/wp-content/uploads/2016/04/poshunicode-628x453.png" alt="poshunicode"&gt;&lt;/p&gt;
&lt;p&gt;Using this module you will be able to retrieve the following information for a single char or for every char in a given string:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Glyph name&lt;/li&gt;
&lt;li&gt;General category&lt;/li&gt;
&lt;li&gt;Unicode script&lt;/li&gt;
&lt;li&gt;Unicode block&lt;/li&gt;
&lt;li&gt;Unicode version (or age)&lt;/li&gt;
&lt;li&gt;Decimal value&lt;/li&gt;
&lt;li&gt;Hex value&lt;br&gt;
Here&amp;rsquo;s a few sample outputs you can get from using the functions in the UnicodeInfo module:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Get-Unicodeinfo '$' Glyph : $ Decimal value : 36 Hexadecimal value : U+0024 General Category : CurrencySymbol Unicode name : DOLLAR SIGN Unicode script : Common Unicode block : BasicLatin Unicode version : 1.1&lt;/code&gt;Get-Unicodeinfo &amp;lsquo;Powershell!&amp;rsquo; | Format-Table
Glyph Decimal value Hexadecimal value General Category Unicode name Unicode script Unicode block Unicode
version&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>After authoring last month scripting games puzzle, which involved some scripting around the Unicode standard, I decided to have some fun and write a<strong>PowerShell module</strong> which interacts directly with the online<strong>Unicode Database</strong> (UCD) to retrieve the main properties of characters.<br><img src="https://powershell.org/wp-content/uploads/2016/04/poshunicode-628x453.png" alt="poshunicode"/><p>Using this module you will be able to retrieve the following information for a single char or for every char in a given string:</p><ul><li>Glyph name</li><li>General category</li><li>Unicode script</li><li>Unicode block</li><li>Unicode version (or age)</li><li>Decimal value</li><li>Hex value<br>
Here&rsquo;s a few sample outputs you can get from using the functions in the UnicodeInfo module:</li></ul><p><code>Get-Unicodeinfo '$' Glyph : $ Decimal value : 36 Hexadecimal value : U+0024 General Category : CurrencySymbol Unicode name : DOLLAR SIGN Unicode script : Common Unicode block : BasicLatin Unicode version : 1.1</code>Get-Unicodeinfo &lsquo;Powershell!&rsquo; | Format-Table
Glyph Decimal value Hexadecimal value General Category Unicode name Unicode script Unicode block Unicode
version</p><hr><p>P 80 U+0050 UppercaseLetter LATIN CAPITAL LETTER P Latin BasicLatin 1.1
o 111 U+006F LowercaseLetter LATIN SMALL LETTER O Latin BasicLatin 1.1
w 119 U+0077 LowercaseLetter LATIN SMALL LETTER W Latin BasicLatin 1.1
e 101 U+0065 LowercaseLetter LATIN SMALL LETTER E Latin BasicLatin 1.1
r 114 U+0072 LowercaseLetter LATIN SMALL LETTER R Latin BasicLatin 1.1
s 115 U+0073 LowercaseLetter LATIN SMALL LETTER S Latin BasicLatin 1.1
h 104 U+0068 LowercaseLetter LATIN SMALL LETTER H Latin BasicLatin 1.1
e 101 U+0065 LowercaseLetter LATIN SMALL LETTER E Latin BasicLatin 1.1
l 108 U+006C LowercaseLetter LATIN SMALL LETTER L Latin BasicLatin 1.1
l 108 U+006C LowercaseLetter LATIN SMALL LETTER L Latin BasicLatin 1.1
! 33 U+0021 OtherPunctuation EXCLAMATION MARK Common BasicLatin 1.1`160..170 | % {
Get-Unicodeinfo ([char]$_) } |
Where &lsquo;General Category&rsquo; -eq &ldquo;CurrencySymbol&rdquo; |
Format-Table
Glyph Decimal value Hexadecimal value General Category Unicode name Unicode script Unicode block Unicode version</p><hr><p>¢ 162 U+00A2 CurrencySymbol CENT SIGN Common Latin-1Supplement 1.1
£ 163 U+00A3 CurrencySymbol POUND SIGN Common Latin-1Supplement 1.1
¤ 164 U+00A4 CurrencySymbol CURRENCY SIGN Common Latin-1Supplement 1.1
¥ 165 U+00A5 CurrencySymbol YEN SIGN Common Latin-1Supplement 1.1
`Before you dive into the code, head over to the blog post I wrote describing each and every one of these properties, how some of them are accessible directly from the .NET framework, and how other less known but still relevant can be extracted from the UCD and integrated to the resulting object:<br><a href="http://www.happysysadm.com/2016/04/working-with-unicode-scripts-blocks-and.html">http://www.happysysadm.com/2016/04/working-with-unicode-scripts-blocks-and.html</a><br>
The UnicodeInfo module is available on Github:<br><a href="https://github.com/happysysadm/UnicodeInfo">https://github.com/happysysadm/UnicodeInfo</a><br>
The module is for sure &lsquo;Work-In-Progress&rsquo; so if you find yourself willing to collaborate, you are very welcome to do so!</p>
]]></content:encoded></item><item><title>PowerShell + DevOps Global Summit Videos Online</title><link>https://powershell.org/articles/2016-04-13-powershell-devops-global-summit-videos-online/</link><guid>https://powershell.org/articles/2016-04-13-powershell-devops-global-summit-videos-online/</guid><pubDate>Wed, 13 Apr 2016 22:04:24 +0000</pubDate><description>&lt;p&gt;The session recordings are &lt;a href="https://www.youtube.com/playlist?list=PLfeA8kIs7Coc1Jn5hC4e_XgbFUaS5jY2i"&gt;now online&lt;/a&gt;! We did miss a few of the videos. The few 2-hour sessions scheduled in Room 406 were not recorded (and weren&amp;rsquo;t planned to be; we only have two sets of recording equipment, although for 2017 we&amp;rsquo;re adding a third set). And, we had a couple that had video problems on-site and weren&amp;rsquo;t recordable. We hope you&amp;rsquo;ll appreciate that our priority on-site is to provide a great experience for the people who were there, and stopping everything to make sure we get a recording isn&amp;rsquo;t always practical. As always, recordings are on a best-effort basis. As far as we know, we missed one of Matt Graeber&amp;rsquo;s sessions, Lee Holmes&amp;rsquo; session, and the Microsoft general session from Kenneth Hansen and Angel Cavelo.&lt;br&gt;
A new experiment this year should come online by July 2016. Pluralsight showed up with two film crews, and captured live HD video, and audio right from the speakers&amp;rsquo; mic, in rooms 404 and 405, which were our main session rooms. Those recordings, which will combine the live video with our screen captures, will be available in the Pluralsight library for all Pluralsight subscribers. Registered attendees of the event will receive free access to those as well, by means of a &amp;ldquo;slice&amp;rdquo; of the Pluralsight library.&lt;br&gt;
Note that last-minute registration transferees will &lt;em&gt;not&lt;/em&gt; be automatically included in that, as we&amp;rsquo;ll be sending the library information to the originally registered person. In addition, for attendees who did not provide complete contact information (like, if someone else registered you), the notification will go to the contact information we &lt;em&gt;do&lt;/em&gt; have. We don&amp;rsquo;t have the ability to update that list at this point, sorry.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The session recordings are<a href="https://www.youtube.com/playlist?list=PLfeA8kIs7Coc1Jn5hC4e_XgbFUaS5jY2i">now online</a>! We did miss a few of the videos. The few 2-hour sessions scheduled in Room 406 were not recorded (and weren&rsquo;t planned to be; we only have two sets of recording equipment, although for 2017 we&rsquo;re adding a third set). And, we had a couple that had video problems on-site and weren&rsquo;t recordable. We hope you&rsquo;ll appreciate that our priority on-site is to provide a great experience for the people who were there, and stopping everything to make sure we get a recording isn&rsquo;t always practical. As always, recordings are on a best-effort basis. As far as we know, we missed one of Matt Graeber&rsquo;s sessions, Lee Holmes&rsquo; session, and the Microsoft general session from Kenneth Hansen and Angel Cavelo.<br>
A new experiment this year should come online by July 2016. Pluralsight showed up with two film crews, and captured live HD video, and audio right from the speakers&rsquo; mic, in rooms 404 and 405, which were our main session rooms. Those recordings, which will combine the live video with our screen captures, will be available in the Pluralsight library for all Pluralsight subscribers. Registered attendees of the event will receive free access to those as well, by means of a &ldquo;slice&rdquo; of the Pluralsight library.<br>
Note that last-minute registration transferees will <em>not</em> be automatically included in that, as we&rsquo;ll be sending the library information to the originally registered person. In addition, for attendees who did not provide complete contact information (like, if someone else registered you), the notification will go to the contact information we <em>do</em> have. We don&rsquo;t have the ability to update that list at this point, sorry.</p>
]]></content:encoded></item><item><title>2016-March Scripting Games Wrap-Up</title><link>https://powershell.org/articles/2016-04-02-2016-march-scripting-games-wrap-up/</link><guid>https://powershell.org/articles/2016-04-02-2016-march-scripting-games-wrap-up/</guid><pubDate>Sat, 02 Apr 2016 15:04:22 +0000</pubDate><description>&lt;p&gt;Carlo really put a brain-twister out for our &lt;a href="https://powershell.org/2016/03/05/2016-march-scripting-games-puzzle/"&gt;March 2016 Puzzle&lt;/a&gt;. Also, as a note, we&amp;rsquo;re eagerly awaiting submissions of next month&amp;rsquo;s puzzle, so don&amp;rsquo;t delay in handing that in. &lt;a href="https://powershell.org/2016/02/06/2016-february-scripting-games-puzzle/"&gt;Here&amp;rsquo;s how you can contribute to the community&amp;rsquo;s favorite scripting game&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="official-solution" class="ps-heading"&gt;Official Solution&lt;a class="ps-heading-anchor" href="#official-solution" 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;It&amp;rsquo;s probably easiest just to share his solutions as actual script files, so here&amp;rsquo;s both the Beginner and Advanced versions that he provided, as a ZIP:&lt;br&gt;
&lt;a href="https://powershell.org/wp-content/uploads/2016/02/Solutions.zip"&gt;Solutions&lt;/a&gt;&lt;br&gt;
Carlo also provided some notes on his thinking:&lt;br&gt;
Just a precision concerning the regex: the idea I had was to &amp;lsquo;force&amp;rsquo; competitors to think in terms of Unicode categories and block ranges (unknown concept to most I bet).&lt;br&gt;
Without digging, some people could come up with an expression like this, which is NOT what we want:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Carlo really put a brain-twister out for our<a href="https://powershell.org/2016/03/05/2016-march-scripting-games-puzzle/">March 2016 Puzzle</a>. Also, as a note, we&rsquo;re eagerly awaiting submissions of next month&rsquo;s puzzle, so don&rsquo;t delay in handing that in.<a href="https://powershell.org/2016/02/06/2016-february-scripting-games-puzzle/">Here&rsquo;s how you can contribute to the community&rsquo;s favorite scripting game</a>.</p><h2 id="official-solution" class="ps-heading">Official Solution<a class="ps-heading-anchor" href="#official-solution" 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 probably easiest just to share his solutions as actual script files, so here&rsquo;s both the Beginner and Advanced versions that he provided, as a ZIP:<br><a href="https://powershell.org/wp-content/uploads/2016/02/Solutions.zip">Solutions</a><br>
Carlo also provided some notes on his thinking:<br>
Just a precision concerning the regex: the idea I had was to &lsquo;force&rsquo; competitors to think in terms of Unicode categories and block ranges (unknown concept to most I bet).<br>
Without digging, some people could come up with an expression like this, which is NOT what we want:</p><p><code>[char]$_ -match '[^\x20-\x7E]'</code>My idea is to force inclusion of latin chars (hence {IsLatin-1Supplement}) which are letters {L}, then progressively exclude all numbers {N}, all punctuation characters {P}, all symbols {S} and all separators {Z}.<br>
A proper use of the \p (in lowercase) and \P (in uppercase) constructs to force inclusion and exclusion is essential here:</p><p><code>[char]$_ -match "(?=\p{IsLatin-1Supplement})(?=\p{L})(?=\P{N})(?=\P{P})(?=\P{S})(?=\P{Z})")</code>Did you follow his thinking? How&rsquo;s you do?</p>
]]></content:encoded></item><item><title>Calling all Scripting Games Puzzles!</title><link>https://powershell.org/articles/2016-03-07-calling-all-scripting-games-puzzles/</link><guid>https://powershell.org/articles/2016-03-07-calling-all-scripting-games-puzzles/</guid><pubDate>Mon, 07 Mar 2016 22:25:25 +0000</pubDate><description>&lt;p&gt;Have you been enjoying our monthly Scripting Games puzzles? Want to keep them going?&lt;br&gt;
Then it&amp;rsquo;s time to &lt;strong&gt;jump in and contribute!&lt;/strong&gt; PowerShell.org is a community site, which means it only works when community makes it work! So come up with your Scripting Games puzzles (you&amp;rsquo;ve &lt;a href="https://powershell.org/category/announcements/scripting-games/"&gt;seen the different kinds&lt;/a&gt; we&amp;rsquo;ve done)! Your submission should include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The puzzle itself. This can include a narrative, example output you want people to achieve, etc.&lt;/li&gt;
&lt;li&gt;The solution (in code form, and it&amp;rsquo;s fine if you put this on GitHub or in a Gist too), along with a narrative of how and why the solution achieves the goal(s).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ideally, we&amp;rsquo;d love it if you could also review some of the entries for your puzzle and provide some commentary on ones that you found noteworthy.&lt;br&gt;
Submit your puzzle to Dan Iverson, our newly minted GamesMaster, via email to gamesmaster@ (and you should be able to figure out our domain name, as you&amp;rsquo;re on our site, right?). We&amp;rsquo;re looking for an April puzzle and beyond! For months where we have no entry, we&amp;rsquo;ll post a &amp;ldquo;taking a break&amp;rdquo; at the top of the month, just so you know.&lt;br&gt;
Don&amp;rsquo;t let us down! Personally, I&amp;rsquo;d love for this to become enough of a thing that we can start awarding not only top entrants (I &lt;em&gt;have&lt;/em&gt; been tracking entries each month), but top &lt;em&gt;puzzle authors&lt;/em&gt; - and maybe invite them to a PowerShell Summit where we&amp;rsquo;ll do a live Scripting Games event one evening! But it only happens if &lt;em&gt;&lt;strong&gt;you&lt;/strong&gt;&lt;/em&gt; help make it happen!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Have you been enjoying our monthly Scripting Games puzzles? Want to keep them going?<br>
Then it&rsquo;s time to <strong>jump in and contribute!</strong> PowerShell.org is a community site, which means it only works when community makes it work! So come up with your Scripting Games puzzles (you&rsquo;ve<a href="https://powershell.org/category/announcements/scripting-games/">seen the different kinds</a> we&rsquo;ve done)! Your submission should include:</p><ul><li>The puzzle itself. This can include a narrative, example output you want people to achieve, etc.</li><li>The solution (in code form, and it&rsquo;s fine if you put this on GitHub or in a Gist too), along with a narrative of how and why the solution achieves the goal(s).</li></ul><p>Ideally, we&rsquo;d love it if you could also review some of the entries for your puzzle and provide some commentary on ones that you found noteworthy.<br>
Submit your puzzle to Dan Iverson, our newly minted GamesMaster, via email to gamesmaster@ (and you should be able to figure out our domain name, as you&rsquo;re on our site, right?). We&rsquo;re looking for an April puzzle and beyond! For months where we have no entry, we&rsquo;ll post a &ldquo;taking a break&rdquo; at the top of the month, just so you know.<br>
Don&rsquo;t let us down! Personally, I&rsquo;d love for this to become enough of a thing that we can start awarding not only top entrants (I <em>have</em> been tracking entries each month), but top <em>puzzle authors</em> - and maybe invite them to a PowerShell Summit where we&rsquo;ll do a live Scripting Games event one evening! But it only happens if <em><strong>you</strong></em> help make it happen!</p>
]]></content:encoded></item><item><title>2016-March Scripting Games Puzzle</title><link>https://powershell.org/articles/2016-03-05-2016-march-scripting-games-puzzle/</link><guid>https://powershell.org/articles/2016-03-05-2016-march-scripting-games-puzzle/</guid><pubDate>Sat, 05 Mar 2016 14:55:49 +0000</pubDate><description>&lt;p&gt;Our March 2016 puzzle comes from Carlo Mancini. We&amp;rsquo;re actively interested in receiving Scripting Games puzzles from members of the community - submit yours, along with an official solution, to us at admin@ via email!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Our March 2016 puzzle comes from Carlo Mancini. We&rsquo;re actively interested in receiving Scripting Games puzzles from members of the community - submit yours, along with an official solution, to us at admin@ via email!</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 are 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 Gist 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. Just edit the original Gist and we&rsquo;ll see your changes shortly.</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>Our Puzzle this month comes in a &ldquo;Beginner&rdquo; and &ldquo;Advanced&rdquo; variety. Indicate in a code comment which one you&rsquo;re shooting for. And, you&rsquo;re welcome to submit one entry apiece for Beginner and Advanced, if you like. These are a bit tricky - be sure to read carefully!<br>
There&rsquo;s a ZIP file with some sample filenames to help you practice and test your solution - this is applicable to both versions of the puzzle:<br><a href="https://powershell.org/wp-content/uploads/2016/03/FileShare.zip">FileShare</a></p><h3 id="diacritics-the-beginner-version" class="ps-heading">Diacritics: The Beginner Version<a class="ps-heading-anchor" href="#diacritics-the-beginner-version" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>You are a server administrator for an international company with four branch back-offices in Western Europe (France, Norway, Italy and Germany). People at these sites store their files (invoices, receipts, customer complaints, as well as internal documents) on a central file server located in the United States.<br>
Since these back-office people have keyboards with a different layout from English QWERTY, they are able to save files with diacritical marks in their names on your central file server.<br>
It seems that your corporate backup routine has problems with these files and your backup tools hangs.<br>
Your boss has tasked you with finding precisely what kind of filenames interfere with the backup routine. After some time spent investigating the Unicode standard, you discover that this is a common problem in these European countries, and you find out that the culprits are, the ß used in German, the å, æ, ø used in Nordic languages, the é, é, ì and ò used in Italian, the ç used in French and, in general, all letters which are part of the Latin-1 Supplement character block.<br>
Unhappy with the situation, your boss has asked you to run a script against your file server to identify all the files whose names have letters (not symbols nor numbers) in that character block and return the following information:<br>
•                The name of the file<br>
•                The containing folder<br>
•                The time of creation<br>
•                The date of the last modification<br>
•                The size of the file<br>
An acceptable output for this task is shown in the following image.<br><img src="https://powershell.org/wp-content/uploads/2016/02/image001.png" alt="image001"><br>
Design Points<br>
·       Do not return files with other Latin symbols or numbers (like ©, ¼, ½, ÷) in their names.<br>
·       Assume that the appropriate ports are opened on your file server.<br>
·       Assume that Powershell Remoting is enabled on your file server.<br>
·       Use the simplest command that will work and feel free to write a one-liner if you able to.<br>
·       Display the output to the screen; you do not need to write to a text file.</p><h3 id="diacritics-the-advanced-version" class="ps-heading"><strong>Diacritics: The Advanced Version</strong><a class="ps-heading-anchor" href="#diacritics-the-advanced-version" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>Thanks to your reputation of Powershell guru, you have been hired by a fast growing international company with four branch back-offices in Western Europe (France, Norway, Italy and Germany). People at these sites store their files (invoices, receipts, customer complaints, as well as internal documents) on a central file server located in the United States.<br>
Since these back-office people have keyboards with a different layout from English QWERTY, they are able to save files with diacritical marks in their names on your central file server.<br>
It seems that your corporate backup routine has problems with these files and your backup tools hangs.<br>
Your boss has tasked you with finding what kind of filenames interfere with the backup routine. After some time spent investigating the Unicode standard, you discover that this is a common problem in these European countries, and you find out that the culprits are, the ß used in German, the å, æ, ø used in Nordic languages, the é, é, ì and ò used in Italian, the ç used in French and, in general, all letters which are part of the Latin-1 Supplement character block.<br>
Unhappy with that situation, and confident with your Powershell skills, your boss has asked you to setup a scheduled task that runs every Saturday night on your central file server which call a function that extracts a list of all the filenames which have letters (not symbols nor numbers) in that character block and send them to him by e-mail.<br>
The e-mail must include the following information:<br>
•                The name of the file<br>
•                The containing folder<br>
•                The time of creation<br>
•                The date of the last modification<br>
•                The size of the file<br>
The e-mail should be sent every two weeks on Saturday 11PM.<br>
An acceptable output for this task is shown in the following images.<br><img src="https://powershell.org/wp-content/uploads/2016/02/image001-1.png" alt="image001"/><p><img src="https://powershell.org/wp-content/uploads/2016/02/image002.png" alt="image002"/><p><img src="https://powershell.org/wp-content/uploads/2016/02/image003.png" alt="image003"><br>
Design Points</p><ul><li>Your boss says you should provide two scripts:<ul><li>One which leverages Powershell Remoting to create the Scheduled task on the file server with the appropriate job trigger. Your boss challenges you to this to be a one-liner.</li><li>One that contains the Get-Diacritic function that identifies the filenames with diacritic marks and e-mails the report.</li></ul></li><li>The function Get-Diacritic must generate a CSV file containing the mentioned information. The CSV file should by default be named yyyyMMdd_FileNamesWithDiacritics.csv (where yyyyMMdd represents the current year, month and day) and be stored in the system temp folder.</li><li>No CSV report must be generated if the count of filenames with diacritic marks is null.</li><li>The size of the retrieved files should be presented in a readable format followed by the most appropriate unit (i.e. 1.2MB, or 500Kb).</li><li>You can assume that you have the required permissions to remotely access the File Server.</li><li>Appropriate parameter validation and error handling must be put in place.</li></ul><h3 id="about-the-author-of-this-scenario" class="ps-heading"><strong>About the author of this scenario:</strong><a class="ps-heading-anchor" href="#about-the-author-of-this-scenario" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>Carlo Mancini has been working as a system administrator for over 15 years and on PowerShell since its first release in 2007.<br>
He is one of the winners of the 2013 PowerShell Scripting Games and is currently employed by one of the largest European IT companies where he is in charge of maintaining and administering both the physical and virtual architecture.<br>
Carlo is also a technical speaker of renown at conferences around Europe and was awarded with the Microsoft MVP Award for Powershell in 2013 and 2014.<br>
He is involved on many technical forums as well as on his blog,<a href="http://happysysadm.com">happysysadm.com</a>.</p>]]></content:encoded></item><item><title>Microsoft automation platforms – Twin Cities March meeting</title><link>https://powershell.org/articles/2016-03-03-microsoft-automation-platforms-twin-cities-march-meeting/</link><guid>https://powershell.org/articles/2016-03-03-microsoft-automation-platforms-twin-cities-march-meeting/</guid><pubDate>Thu, 03 Mar 2016 13:02:50 +0000</pubDate><description>&lt;p&gt;&lt;a href="http://www.meetup.com/Twin-Cities-PowerShell-User-Group/"&gt;Twin Cities PowerShell Automation Group&lt;/a&gt; meeting Tuesday, March 8, 2016, at the &lt;a href="https://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;q=3601+76th+St+W%3B+Suite+600%2C+Edina%2C+MN%2C+us"&gt;Microsoft Technology Center&lt;/a&gt; in Edina, MN.&lt;br&gt;
Come and learn about the road map for Microsoft’s automation platforms, System Center Orchestrator, Service Management Automation and Azure Automation. Ryan Andorfer will cover the road map for these three products and then dive into how to utilize Azure Automation in the cloud and on premises for both process and configuration automation in an enterprise setting, including strategies around code management, PowerShell Module development and PowerShell DSC management.&lt;br&gt;
Ryan ran the IT-Automation team for General Mills for 6 years, was a Cloud and Datacenter MVP for 3 years and is now a Microsoft Technology Solutions Professional.&lt;br&gt;
This is a secure facility. &lt;strong&gt;&lt;a href="http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/229312191/"&gt;RSVP&lt;/a&gt; with full name is required.&lt;/strong&gt; If you do not use your full name on meetup, please email us your full name. &lt;a href="http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/229312191/"&gt;Please RSVP at&lt;/a&gt; &lt;a href="http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/229312191/"&gt;http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/229312191/&lt;/a&gt;&lt;br&gt;
Food and networking starts at 4:30. The presentations will start at 5 PM. We&amp;rsquo;ll keeping talking until 7 PM.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><a href="http://www.meetup.com/Twin-Cities-PowerShell-User-Group/">Twin Cities PowerShell Automation Group</a> meeting Tuesday, March 8, 2016, at the<a href="https://maps.google.com/maps?f=q&amp;hl=en&amp;q=3601+76th+St+W%3B+Suite+600%2C+Edina%2C+MN%2C+us">Microsoft Technology Center</a> in Edina, MN.<br>
Come and learn about the road map for Microsoft’s automation platforms, System Center Orchestrator, Service Management Automation and Azure Automation. Ryan Andorfer will cover the road map for these three products and then dive into how to utilize Azure Automation in the cloud and on premises for both process and configuration automation in an enterprise setting, including strategies around code management, PowerShell Module development and PowerShell DSC management.<br>
Ryan ran the IT-Automation team for General Mills for 6 years, was a Cloud and Datacenter MVP for 3 years and is now a Microsoft Technology Solutions Professional.<br>
This is a secure facility.<strong><a href="http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/229312191/">RSVP</a> with full name is required.</strong> If you do not use your full name on meetup, please email us your full name.<a href="http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/229312191/">Please RSVP at</a><a href="http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/229312191/">http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/229312191/</a><br>
Food and networking starts at 4:30. The presentations will start at 5 PM. We&rsquo;ll keeping talking until 7 PM.</p>
]]></content:encoded></item><item><title>Official PowerShell + DevOps Global Summit 2016 Agenda Now Available</title><link>https://powershell.org/articles/2016-03-02-official-powershell-devops-global-summit-2016-agenda-now-available/</link><guid>https://powershell.org/articles/2016-03-02-official-powershell-devops-global-summit-2016-agenda-now-available/</guid><pubDate>Wed, 02 Mar 2016 22:17:48 +0000</pubDate><description>&lt;p&gt;The agenda is available on the &lt;a href="https://powershell.org/summit/"&gt;official event page&lt;/a&gt;! Please note that this is subject to change, but we&amp;rsquo;ll update that same copy so you can just refer to it. We&amp;rsquo;ll have handouts on site, but we recommend having an &lt;strong&gt;offline copy&lt;/strong&gt; of the PDF, or your own printout, as a backup. It&amp;rsquo;s worth reviewing this in advance, so you can start planning your own personal agenda. Don&amp;rsquo;t forget that the registration site (&lt;a href="https://eventloom.com/event/home/PSNA16"&gt;https://eventloom.com/event/home/PSNA16&lt;/a&gt;) allows you to set your own personal agenda (after logging in), and provides a mobile-friendly view at the event.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The agenda is available on the<a href="https://powershell.org/summit/">official event page</a>! Please note that this is subject to change, but we&rsquo;ll update that same copy so you can just refer to it. We&rsquo;ll have handouts on site, but we recommend having an <strong>offline copy</strong> of the PDF, or your own printout, as a backup. It&rsquo;s worth reviewing this in advance, so you can start planning your own personal agenda. Don&rsquo;t forget that the registration site (<a href="https://eventloom.com/event/home/PSNA16">https://eventloom.com/event/home/PSNA16</a>) allows you to set your own personal agenda (after logging in), and provides a mobile-friendly view at the event.</p>
]]></content:encoded></item><item><title>PowerShellSummit.org Registration Status &amp; Extension</title><link>https://powershell.org/articles/2016-03-01-powershellsummit-org-registration-status-extension/</link><guid>https://powershell.org/articles/2016-03-01-powershellsummit-org-registration-status-extension/</guid><pubDate>Tue, 01 Mar 2016 21:09:19 +0000</pubDate><description>&lt;p&gt;So, we have 3 seats left, which isn&amp;rsquo;t much - and we contacted our venue, and they said they they&amp;rsquo;d let us bring in those people more last-minute (in terms of us setting food and space requirements), but there&amp;rsquo;s a small uncharge of $100 per person. So those last three seats are on sale at PowerShellSummit.org, through the morning of March 11th, and the new pricing should go into effect sometime tonight. In the meantime, if you happen to show up and the lower price is still there, go for it. But&amp;hellip; only three seats. Good luck!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>So, we have 3 seats left, which isn&rsquo;t much - and we contacted our venue, and they said they they&rsquo;d let us bring in those people more last-minute (in terms of us setting food and space requirements), but there&rsquo;s a small uncharge of $100 per person. So those last three seats are on sale at PowerShellSummit.org, through the morning of March 11th, and the new pricing should go into effect sometime tonight. In the meantime, if you happen to show up and the lower price is still there, go for it. But&hellip; only three seats. Good luck!</p>
]]></content:encoded></item><item><title>A study in Powershell scripting – A beginners guide Part 2</title><link>https://powershell.org/articles/2016-02-26-a-study-in-powershell-scripting-part-2/</link><guid>https://powershell.org/articles/2016-02-26-a-study-in-powershell-scripting-part-2/</guid><pubDate>Fri, 26 Feb 2016 21:54:50 +0000</pubDate><description>&lt;p&gt;In this post I elaborate the steps that I went through to build the function to extract users into alphabetical order. I talk about the problems I face and how I resolved them.&lt;br&gt;
I also post snippets of my code that I used so that new people can see how I wrote it.&lt;br&gt;
I&amp;rsquo;m hoping that this help the new people that are out there.&lt;br&gt;
Biggest tip in the post is what the secret sauce is on how to pass results from one cmdlet to another. As always always pleased to know people&amp;rsquo;s thoughts.&lt;br&gt;
Link &lt;a href="http://weiyentanitjournal.com/index.php/2016/02/26/a-study-in-learning-powershell-part-2/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>In this post I elaborate the steps that I went through to build the function to extract users into alphabetical order. I talk about the problems I face and how I resolved them.<br>
I also post snippets of my code that I used so that new people can see how I wrote it.<br>
I&rsquo;m hoping that this help the new people that are out there.<br>
Biggest tip in the post is what the secret sauce is on how to pass results from one cmdlet to another. As always always pleased to know people&rsquo;s thoughts.<br>
Link<a href="http://weiyentanitjournal.com/index.php/2016/02/26/a-study-in-learning-powershell-part-2/">here</a>.</p>
]]></content:encoded></item><item><title>A study in Powershell Scripting – A beginners Guide Part I</title><link>https://powershell.org/articles/2016-02-25-a-study-in-powershell-scripting-a-beginners-guide-part-i/</link><guid>https://powershell.org/articles/2016-02-25-a-study-in-powershell-scripting-a-beginners-guide-part-i/</guid><pubDate>Thu, 25 Feb 2016 11:27:42 +0000</pubDate><description>&lt;p&gt;I thought I would post my learning experiences as a person that has very little programming background. Don did say in one of the TechEd&amp;rsquo;s a few  years ago that even a beginner could share their experiences with others. So I thought that I should contribute with the approach that I use to write my scripts so that other people starting to begin their Powershell adventure could benefit.&lt;br&gt;
The scenario in this case is to do with three Active Directory security groups and synchronizing with a master Active Directory security group.&lt;br&gt;
Link to blog post &lt;a href="http://weiyentanitjournal.com/index.php/2016/01/31/a-study-in-learning-powershell-part-1/"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I thought I would post my learning experiences as a person that has very little programming background. Don did say in one of the TechEd&rsquo;s a few  years ago that even a beginner could share their experiences with others. So I thought that I should contribute with the approach that I use to write my scripts so that other people starting to begin their Powershell adventure could benefit.<br>
The scenario in this case is to do with three Active Directory security groups and synchronizing with a master Active Directory security group.<br>
Link to blog post<a href="http://weiyentanitjournal.com/index.php/2016/01/31/a-study-in-learning-powershell-part-1/">here</a>.</p>
]]></content:encoded></item><item><title>I'm Not A Developer</title><link>https://powershell.org/articles/2016-02-19-im-not-a-developer/</link><guid>https://powershell.org/articles/2016-02-19-im-not-a-developer/</guid><pubDate>Fri, 19 Feb 2016 12:57:33 +0000</pubDate><description>&lt;p&gt;Are you intimidated by scripting? Does PowerShell seem too much like programming to you? You aren&amp;rsquo;t a developer, why should you learn this mumbo jumbo?&lt;br&gt;
It turns out, PowerShell is quite easy to get started with. Can you run ipconfig? Do you know how to give someone instructions? You could probably pick up the PowerShell basics in a month of lunches or so.&lt;br&gt;
Don&amp;rsquo;t believe me? &lt;a href="http://ramblingcookiemonster.github.io/PowerShell-Is-Too-Hard/"&gt;I spent a few minutes to compare a simple task in four languages&lt;/a&gt;. PowerShell is a single, easy to understand command. Python is two lines and starts to include some syntax like .().&lt;br&gt;
We won&amp;rsquo;t even look at the C example here, but check out this C# code that simply reads and prints out the content of a file:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Are you intimidated by scripting? Does PowerShell seem too much like programming to you? You aren&rsquo;t a developer, why should you learn this mumbo jumbo?<br>
It turns out, PowerShell is quite easy to get started with. Can you run ipconfig? Do you know how to give someone instructions? You could probably pick up the PowerShell basics in a month of lunches or so.<br>
Don&rsquo;t believe me?<a href="http://ramblingcookiemonster.github.io/PowerShell-Is-Too-Hard/">I spent a few minutes to compare a simple task in four languages</a>. PowerShell is a single, easy to understand command. Python is two lines and starts to include some syntax like .().<br>
We won&rsquo;t even look at the C example here, but check out this C# code that simply reads and prints out the content of a file:</p><p><code>// Modified with suggestions from Anton. // Better ways to do this, but, I'm not a developer ; ) using System; using System.IO; class ReadFromFile { static void Main() { foreach(string s in File.ReadAllLines(@"C:\file.txt")) { Console.WriteLine(s); } } }</code>You can get a feel for what&rsquo;s going on, and there are many ways to skin a cat, but let&rsquo;s compare this to PowerShell:</p><p><code>Get-Content C:\file.txt</code>This was one example among many. Read or write a CSV, execute a SQL query, create a VM, kick off an AzureRM template, modify an AD user, the list goes on. All of these are individual PowerShell commands, that handle a whole bunch of code behind the scenes, giving you simple, task-based commands.<br>
This lets you worry about the actual problem you are trying to solve, not the nitty gritty programming details. Have you ever had to write your own<a href="http://www.sorting-algorithms.com/">sorting code</a>, rather than just using </p><p><code>Sort-Object</code>?<br>
Come join the fun, you&rsquo;ll save yourself time and effort, and help out your team and organization in the process. Learn PowerShell.<br>
Cheers!</p>
]]></content:encoded></item><item><title>Last Chance for PowerShellSummit.org Registration</title><link>https://powershell.org/articles/2016-02-18-last-chance-for-powershellsummit-org-registration/</link><guid>https://powershell.org/articles/2016-02-18-last-chance-for-powershellsummit-org-registration/</guid><pubDate>Thu, 18 Feb 2016 18:52:02 +0000</pubDate><description>&lt;p&gt;Here&amp;rsquo;s a sort of last call: Registration ends on March 1st, 2016, giving you just about ten days from today (Feb 18th). Additionally, we&amp;rsquo;ve got just around 24 seats remaining. About 5 of those are available as 3-day seats, and about 19 as 4-day seats. We&amp;rsquo;ll try and slide that availability around so you&amp;rsquo;re not forced into one or the other, but this is basically last call for attendees either way. Hope we&amp;rsquo;ll see you there!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Here&rsquo;s a sort of last call: Registration ends on March 1st, 2016, giving you just about ten days from today (Feb 18th). Additionally, we&rsquo;ve got just around 24 seats remaining. About 5 of those are available as 3-day seats, and about 19 as 4-day seats. We&rsquo;ll try and slide that availability around so you&rsquo;re not forced into one or the other, but this is basically last call for attendees either way. Hope we&rsquo;ll see you there!</p>
]]></content:encoded></item><item><title>Convert VBA Macros To PowerShell for Microsoft Office Automation</title><link>https://powershell.org/articles/2016-02-18-convert-vba-macros-to-powershell-for-microsoft-office-automation/</link><guid>https://powershell.org/articles/2016-02-18-convert-vba-macros-to-powershell-for-microsoft-office-automation/</guid><pubDate>Thu, 18 Feb 2016 14:46:34 +0000</pubDate><description>&lt;p&gt;There is a lot of documentation out there for interacting with Microsoft Office including Outlook, Excel, Word, etc with Visual Basic for Applications (VBA). A lot of time you may only be able to find VBA examples. VBA&amp;rsquo;s require template files to be sent to the desktop and are a real hassle when trying to automate across multiple machines.&lt;br&gt;
There are not many A to B examples of translating VBA to PowerShell so I took a problem I had solved in the past and presented the before and after. Hopefully it will provide enough information to allow others to convert VBA code into PowerShell for their scenarios.&lt;br&gt;
You can check out the full article on &lt;a href="http://wp.me/p7al1Q-5f"&gt;PowerShellBlogger.com&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>There is a lot of documentation out there for interacting with Microsoft Office including Outlook, Excel, Word, etc with Visual Basic for Applications (VBA). A lot of time you may only be able to find VBA examples. VBA&rsquo;s require template files to be sent to the desktop and are a real hassle when trying to automate across multiple machines.<br>
There are not many A to B examples of translating VBA to PowerShell so I took a problem I had solved in the past and presented the before and after. Hopefully it will provide enough information to allow others to convert VBA code into PowerShell for their scenarios.<br>
You can check out the full article on<a href="http://wp.me/p7al1Q-5f">PowerShellBlogger.com</a>.</p>
]]></content:encoded></item><item><title>Planning for PowerShell+DevOps Global Summit 2017… Need Your Opinion</title><link>https://powershell.org/articles/2016-02-16-planning-for-powershelldevops-global-summit-2017-need-your-opinion/</link><guid>https://powershell.org/articles/2016-02-16-planning-for-powershelldevops-global-summit-2017-need-your-opinion/</guid><pubDate>Tue, 16 Feb 2016 17:35:31 +0000</pubDate><description>&lt;p&gt;So, we&amp;rsquo;re already doing some planning for the 2017, 2018, and 2019 events. Because, you know. We do that around here ;).&lt;br&gt;
One thing we&amp;rsquo;re considering is an option to lock-in venue pricing for that three-year period, helping to ensure we can keep our pricing at around $950 for a 3-day event. Doing so requires a hotel room block lock-in as well. On the plus side, that&amp;rsquo;ll lock in hotel pricing for 3 years too, which is great in terms of affordability and predictability. It&amp;rsquo;s scary, because we&amp;rsquo;re committing to paying for those rooms whether people sleep in &amp;rsquo;em or not. Another upside is bringing all or most attendees together into one hotel, along with our speakers.&lt;br&gt;
So what we&amp;rsquo;re considering is opening 2017 registration by only offering packages of either 3 or 4 days (it&amp;rsquo;ll be your pick) which are _inclusive of your hotel room. _This would be at a Marriott property, and we could provide receipts/invoices that showed the conference/travel expense breakout, if you needed. So up front, you&amp;rsquo;d only be able to buy that complete package. The package would also likely include something like a Sunday night meet &amp;rsquo;n&amp;rsquo; greet at the hotel - again, only open to people staying there.&lt;br&gt;
Closer to the event, say in the 60 days before, we&amp;rsquo;d open registration to ticket-only sales, for however many seats we had remaining.&lt;br&gt;
This is obviously an unabashed attempt to reduce risk by &amp;ldquo;forcing&amp;rdquo; people into the hotel package. Realizing that some people might not be able to book &amp;ldquo;inclusive&amp;rdquo; packages due to company policies, we&amp;rsquo;d try to also offer an option where you could buy just a ticket early-on, but were required to book your room in our block. Honestly, this is all about making sure we fill the block.&lt;br&gt;
Our feeling is that a 3-day package would be around $1500 including hotel (3 nights), and you&amp;rsquo;d have the option of booking on additional nights if you wanted to. it&amp;rsquo;d be about $2300 for a 4-day/4-night package, if we do the pre-con day again (which is likely as it&amp;rsquo;s been our most popular option for 2016).&lt;br&gt;
Another advantage of having our rates and dates locked in so far out is that we could let attendees put down a (refundable) deposit for 2017, 2018, and/or 2019 - locking in your seat before registration even opens, so you don&amp;rsquo;t have to worry about hitting the website at midnight sharp the day sales open ;). Now that we&amp;rsquo;re a nonprofit, collecting that in advance is much more do-able.&lt;br&gt;
Anyway&amp;hellip; we&amp;rsquo;d like some input from the community. Take &lt;a href="http://polldaddy.com/poll/9312274/"&gt;a quick, one-question poll&lt;/a&gt; to tell us what you think.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>So, we&rsquo;re already doing some planning for the 2017, 2018, and 2019 events. Because, you know. We do that around here ;).<br>
One thing we&rsquo;re considering is an option to lock-in venue pricing for that three-year period, helping to ensure we can keep our pricing at around $950 for a 3-day event. Doing so requires a hotel room block lock-in as well. On the plus side, that&rsquo;ll lock in hotel pricing for 3 years too, which is great in terms of affordability and predictability. It&rsquo;s scary, because we&rsquo;re committing to paying for those rooms whether people sleep in &rsquo;em or not. Another upside is bringing all or most attendees together into one hotel, along with our speakers.<br>
So what we&rsquo;re considering is opening 2017 registration by only offering packages of either 3 or 4 days (it&rsquo;ll be your pick) which are _inclusive of your hotel room. _This would be at a Marriott property, and we could provide receipts/invoices that showed the conference/travel expense breakout, if you needed. So up front, you&rsquo;d only be able to buy that complete package. The package would also likely include something like a Sunday night meet &rsquo;n&rsquo; greet at the hotel - again, only open to people staying there.<br>
Closer to the event, say in the 60 days before, we&rsquo;d open registration to ticket-only sales, for however many seats we had remaining.<br>
This is obviously an unabashed attempt to reduce risk by &ldquo;forcing&rdquo; people into the hotel package. Realizing that some people might not be able to book &ldquo;inclusive&rdquo; packages due to company policies, we&rsquo;d try to also offer an option where you could buy just a ticket early-on, but were required to book your room in our block. Honestly, this is all about making sure we fill the block.<br>
Our feeling is that a 3-day package would be around $1500 including hotel (3 nights), and you&rsquo;d have the option of booking on additional nights if you wanted to. it&rsquo;d be about $2300 for a 4-day/4-night package, if we do the pre-con day again (which is likely as it&rsquo;s been our most popular option for 2016).<br>
Another advantage of having our rates and dates locked in so far out is that we could let attendees put down a (refundable) deposit for 2017, 2018, and/or 2019 - locking in your seat before registration even opens, so you don&rsquo;t have to worry about hitting the website at midnight sharp the day sales open ;). Now that we&rsquo;re a nonprofit, collecting that in advance is much more do-able.<br>
Anyway&hellip; we&rsquo;d like some input from the community. Take<a href="http://polldaddy.com/poll/9312274/">a quick, one-question poll</a> to tell us what you think.</p>
]]></content:encoded></item><item><title>2016-February Scripting Games Puzzle</title><link>https://powershell.org/articles/2016-02-06-2016-february-scripting-games-puzzle/</link><guid>https://powershell.org/articles/2016-02-06-2016-february-scripting-games-puzzle/</guid><pubDate>Sat, 06 Feb 2016 15:07:55 +0000</pubDate><description>&lt;p&gt;Although we have a couple of puzzles queued up, we&amp;rsquo;ll be taking a brief break for the month of February 2016. So, no puzzle this month!&lt;br&gt;
However, **we are in need of puzzles, including sample solutions and explanations. **This is a community effort, so if you&amp;rsquo;ve never contributed - now&amp;rsquo;s a great time to start! Drop an email to admin@ this domain. Include a ZIP file with your puzzle, solution, and explanation - all in plain-text files, please. You can include screen shots, as needed, as PNG files.&lt;br&gt;
We&amp;rsquo;re also in need of a Games Master, who can collect monthly puzzles, queue them up for publishing, and scan reader submissions for noteworthy entries. Drop an e-mail if you&amp;rsquo;re interested.&lt;br&gt;
Belong to a user group? Why not spend some time in your next meeting coming up with a puzzle or two that your group can submit? Make them easy or tricky, fun or devilish - it&amp;rsquo;s up to you. A user group could also collectively take on the Games Master role, giving you an important activity (reviewing entries and queuing them for publishing) at each monthly group meeting.&lt;br&gt;
Become a contributor, and help keep this highly visible part of the PowerShell community up and running!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Although we have a couple of puzzles queued up, we&rsquo;ll be taking a brief break for the month of February 2016. So, no puzzle this month!<br>
However, **we are in need of puzzles, including sample solutions and explanations. **This is a community effort, so if you&rsquo;ve never contributed - now&rsquo;s a great time to start! Drop an email to admin@ this domain. Include a ZIP file with your puzzle, solution, and explanation - all in plain-text files, please. You can include screen shots, as needed, as PNG files.<br>
We&rsquo;re also in need of a Games Master, who can collect monthly puzzles, queue them up for publishing, and scan reader submissions for noteworthy entries. Drop an e-mail if you&rsquo;re interested.<br>
Belong to a user group? Why not spend some time in your next meeting coming up with a puzzle or two that your group can submit? Make them easy or tricky, fun or devilish - it&rsquo;s up to you. A user group could also collectively take on the Games Master role, giving you an important activity (reviewing entries and queuing them for publishing) at each monthly group meeting.<br>
Become a contributor, and help keep this highly visible part of the PowerShell community up and running!</p>
]]></content:encoded></item><item><title>MSPSUG Feb 9th Virtual Meeting: Intro into the #PowerShell ISE, #Git, #PSPester &amp; #OneDrive</title><link>https://powershell.org/articles/2016-02-05-mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive/</link><guid>https://powershell.org/articles/2016-02-05-mspsug-feb-9th-virtual-meeting-intro-into-the-powershell-ise-git-pspester-onedrive/</guid><pubDate>Fri, 05 Feb 2016 15:01:11 +0000</pubDate><description>&lt;p&gt;Join the Mississippi PowerShell User Group virtually on Tuesday, February 9th 2016 at 8:30pm Central Time when &lt;a href="http://twitter.com/ryanyates1990"&gt;Ryan Yates&lt;/a&gt; will be presenting an “&lt;em&gt;&lt;strong&gt;Intro session to Teaching the IT Pro how to Dev with ISE, Git, Pester &amp;amp; OneDrive&lt;/strong&gt;&lt;/em&gt;”.&lt;br&gt;
With the amount of additional technologies needed to optimise the efficency of writing PowerShell this can seem very overwelming to someone new to PowerShell and could even put them completely off following an efficency optimised script creation workflow. So in this session I will be Demoing a way of working that can help users progress into Test Driven Development with the Help of a module that adds additional functionality to PowerShell ISE to make this easier to work with.&lt;br&gt;
Visit the &lt;a href="http://mspsug.com/2016/01/26/mspsug-february-2016-virtual-meeting-intro-into-the-powershell-ise-git-pester-onedrive/"&gt;Mississippi PowerShell User Group&lt;/a&gt; website to learn more about Ryan and to find out more details about this month’s meeting.&lt;br&gt;
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 “&lt;a href="http://mspsug.com/attendee-info/"&gt;Attendee Info&lt;/a&gt;” section.&lt;br&gt;
Register via &lt;a href="http://mspsug.eventbrite.com/"&gt;EventBrite&lt;/a&gt; to receive the URL for this meeting.&lt;br&gt;
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.&lt;br&gt;
µ&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join the Mississippi PowerShell User Group virtually on Tuesday, February 9th 2016 at 8:30pm Central Time when<a href="http://twitter.com/ryanyates1990">Ryan Yates</a> will be presenting an “<em><strong>Intro session to Teaching the IT Pro how to Dev with ISE, Git, Pester &amp; OneDrive</strong></em>”.<br>
With the amount of additional technologies needed to optimise the efficency of writing PowerShell this can seem very overwelming to someone new to PowerShell and could even put them completely off following an efficency optimised script creation workflow. So in this session I will be Demoing a way of working that can help users progress into Test Driven Development with the Help of a module that adds additional functionality to PowerShell ISE to make this easier to work with.<br>
Visit the<a href="http://mspsug.com/2016/01/26/mspsug-february-2016-virtual-meeting-intro-into-the-powershell-ise-git-pester-onedrive/">Mississippi PowerShell User Group</a> website to learn more about Ryan and to find out more details about this month’s meeting.<br>
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.<br>
Register via<a href="http://mspsug.eventbrite.com/">EventBrite</a> to receive the URL for this meeting.<br>
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.<br>
µ</p>
]]></content:encoded></item><item><title>Using PowerShell to make Azure Automation Graphical Runbooks – Part 2</title><link>https://powershell.org/articles/2016-02-03-using-powershell-to-make-azure-automation-graphical-runbooks-part-2/</link><guid>https://powershell.org/articles/2016-02-03-using-powershell-to-make-azure-automation-graphical-runbooks-part-2/</guid><pubDate>Thu, 04 Feb 2016 07:08:25 +0000</pubDate><description>&lt;p&gt;The &lt;a href="http://www.powershell.amsterdam/2016/01/29/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/"&gt;previous article&lt;/a&gt; in this series covered the release of the Microsoft Azure Automation Graphical Authoring SDK, and began to outline some of the classes used and, where possible, the visible elements they relate to in the Azure portal itself.&lt;br&gt;
This second part of the series focuses on probably the most time consuming and challenging part of scripting these runbooks, those to do with Activities.&lt;br&gt;
You can read the full article at &lt;a href="http://www.powershell.amsterdam/2016/02/03/using-powershell-to-make-azure-automation-graphical-runbooks-part-2/"&gt;www.powershell.amsterdam&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The<a href="http://www.powershell.amsterdam/2016/01/29/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/">previous article</a> in this series covered the release of the Microsoft Azure Automation Graphical Authoring SDK, and began to outline some of the classes used and, where possible, the visible elements they relate to in the Azure portal itself.<br>
This second part of the series focuses on probably the most time consuming and challenging part of scripting these runbooks, those to do with Activities.<br>
You can read the full article at<a href="http://www.powershell.amsterdam/2016/02/03/using-powershell-to-make-azure-automation-graphical-runbooks-part-2/">www.powershell.amsterdam</a></p>
]]></content:encoded></item><item><title>Microsoft PowerShell team panel – Twin Cities February meeting</title><link>https://powershell.org/articles/2016-02-03-microsoft-powershell-team-panel-twin-cities-february-meeting/</link><guid>https://powershell.org/articles/2016-02-03-microsoft-powershell-team-panel-twin-cities-february-meeting/</guid><pubDate>Thu, 04 Feb 2016 00:21:21 +0000</pubDate><description>&lt;p&gt;Ever wonder just what the heck the Microsoft PowerShell team was thinking? Come find out!&lt;br&gt;
Keith Bankston is the senior program manager for PowerShell. Mark Gray is the senior program manager for DSC. Michael Greene is the program manager responsible for understanding customer feedback and getting it into PowerShell.&lt;br&gt;
Join us for a panel discussion where they will answer all of our questions about PowerShell and we in turn will answer their questions about how we use PowerShell and how we would like to use it in the future.&lt;br&gt;
Target North Campus&lt;br&gt;
7300 Oak Grove Parkway&lt;br&gt;
Brooklyn Park, MN&lt;br&gt;
This is a secure facility. &lt;a href="http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/228593479/"&gt;RSVP&lt;/a&gt; with full name is required. If you do not use your full name on meetup, please email us your full name. Park in the guest lot to the west of the complex. Check in with security with photo ID. You will be escorted to the meeting room.&lt;br&gt;
Food and networking begin at 4:30. The main meeting will run from 5 to 7.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Ever wonder just what the heck the Microsoft PowerShell team was thinking? Come find out!<br>
Keith Bankston is the senior program manager for PowerShell. Mark Gray is the senior program manager for DSC. Michael Greene is the program manager responsible for understanding customer feedback and getting it into PowerShell.<br>
Join us for a panel discussion where they will answer all of our questions about PowerShell and we in turn will answer their questions about how we use PowerShell and how we would like to use it in the future.<br>
Target North Campus<br>
7300 Oak Grove Parkway<br>
Brooklyn Park, MN<br>
This is a secure facility.<a href="http://www.meetup.com/Twin-Cities-PowerShell-User-Group/events/228593479/">RSVP</a> with full name is required. If you do not use your full name on meetup, please email us your full name. Park in the guest lot to the west of the complex. Check in with security with photo ID. You will be escorted to the meeting room.<br>
Food and networking begin at 4:30. The main meeting will run from 5 to 7.</p>
]]></content:encoded></item><item><title>Connect to all Office 365 Services with PowerShell</title><link>https://powershell.org/articles/2016-02-02-connect-to-all-office-365-services-with-powershell/</link><guid>https://powershell.org/articles/2016-02-02-connect-to-all-office-365-services-with-powershell/</guid><pubDate>Tue, 02 Feb 2016 18:50:40 +0000</pubDate><description>&lt;p&gt;If you are not on Office 365 or have a tenant set up with Microsoft yet, now is the time to reserve your tenant name! With utilizing Office 365, a lot of administration is only available from a PowerShell session. There is a mix of outdated information on what you actually need to install and execute in order to connect to all of the Office 365 services. As a result, I accumulated and wrote up the current download requirements and commands to connect and administer every Office 365 service from one PowerShell session. I hope this saves everyone a lot of time and effort!&lt;br&gt;
Head over to &lt;a href="http://wp.me/p7al1Q-53"&gt;PowerShellBlogger.com&lt;/a&gt; to read the full article &lt;a href="http://wp.me/p7al1Q-53"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>If you are not on Office 365 or have a tenant set up with Microsoft yet, now is the time to reserve your tenant name! With utilizing Office 365, a lot of administration is only available from a PowerShell session. There is a mix of outdated information on what you actually need to install and execute in order to connect to all of the Office 365 services. As a result, I accumulated and wrote up the current download requirements and commands to connect and administer every Office 365 service from one PowerShell session. I hope this saves everyone a lot of time and effort!<br>
Head over to<a href="http://wp.me/p7al1Q-53">PowerShellBlogger.com</a> to read the full article<a href="http://wp.me/p7al1Q-53">here</a>.</p>
]]></content:encoded></item><item><title>PowerShellSummit.org Registration Status for 2-Feb-2016 (also, recordings)</title><link>https://powershell.org/articles/2016-02-02-powershellsummit-org-registration-status-for-2-feb-2016-also-recordings/</link><guid>https://powershell.org/articles/2016-02-02-powershellsummit-org-registration-status-for-2-feb-2016-also-recordings/</guid><pubDate>Tue, 02 Feb 2016 14:43:52 +0000</pubDate><description>&lt;p&gt;OK, here&amp;rsquo;s a quick update of where we&amp;rsquo;re at with registration for &lt;a href="http://powershellsummit.org"&gt;PowerShell + DevOps Global Summit 2016&lt;/a&gt;.&lt;br&gt;
We&amp;rsquo;d originally scheduled 150 seats for the April event, inclusive of speakers. Yesterday (1st Feb) we opened 3-day sales (previously, only 4-day seats had been available), and are now at 126 total attendees. So we&amp;rsquo;ve got 24 seats of our original space remaining.&lt;br&gt;
The venue assures us that we can accommodate at least another 25 people, possible as many as 50 more. So we&amp;rsquo;re working with them to make that happen - in the meantime, &lt;strong&gt;I strongly recommend you register soon&lt;/strong&gt; if you plan to attend. It looks like, no matter what, we&amp;rsquo;ll be in a sellout situation again this year.&lt;br&gt;
Now, keep in mind that we&amp;rsquo;ve greatly expanded the event this year. We&amp;rsquo;re running three full-day pre-conference workshops (that&amp;rsquo;s what you get for the extra day in the 4-day pass). We&amp;rsquo;re having an informal gathering on Sunday evening (after the pre-cons) at the Courtyard Downtown Bellevue, a bar crawl Monday night, and a reception with the WMF team on Tuesday evening. In addition to two tracks of content, we have a third track which will run some extra-long sessions (although not all day). We&amp;rsquo;re also welcoming the WMF team on Tuesday after lunch for a &amp;ldquo;State of the Shell&amp;rdquo; address by two of the main team leaders, followed by &amp;ldquo;Lightning Demos&amp;rdquo; from a variety of team members. It&amp;rsquo;s a lot of content.&lt;br&gt;
As always, we&amp;rsquo;ll be recording &lt;em&gt;most&lt;/em&gt; of the sessions. Basically, the pre-con sessions won&amp;rsquo;t be recorded, nor will the extra-long &amp;ldquo;bonus&amp;rdquo; sessions in the third track (we only have two sets of recording gear). All of what we do record will go on YouTube as usual. However, this year, &lt;a href="http://pluralsight.com"&gt;Pluralsight&lt;/a&gt; will be on-hand with camera crews in our two main rooms, and they&amp;rsquo;ll be producing recordings that include screen capture as well as live video of the speakers. Those &amp;ldquo;better&amp;rdquo; recordings will go into the Pluralsight library, and everyone attending in person will receive free access to those even if you don&amp;rsquo;t have a subscription. For anyone not attending, you can either access our screen-caps on YouTube for free, or use a Pluralsight subscription to access the nicer videos. This is an experiment with Pluralsight and we appreciate their support!&lt;br&gt;
Oh, and we&amp;rsquo;ll also be offering Verified Effective exams (no computer required!) on Wednesday, to anyone who&amp;rsquo;s interested (no advance registration required).&lt;br&gt;
Anyway, as you can see, it&amp;rsquo;s going to be a busy-busy-busy Summit, and it&amp;rsquo;s looking firmly to be a sellout, even if we&amp;rsquo;re able to secure the extra space at the venue. So &lt;strong&gt;register right the heck now&lt;/strong&gt; if you plan to attend. If you&amp;rsquo;re just now getting around to talking the boss into it - well, honestly, you shoulda started back in November ;). At $950 for the 3-day pass, though, this is probably the best educational deal you or your company will ever find, and more than a few people see enough value to pay their own way every year.&lt;br&gt;
So I hope we&amp;rsquo;ll see you there!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>OK, here&rsquo;s a quick update of where we&rsquo;re at with registration for<a href="http://powershellsummit.org">PowerShell + DevOps Global Summit 2016</a>.<br>
We&rsquo;d originally scheduled 150 seats for the April event, inclusive of speakers. Yesterday (1st Feb) we opened 3-day sales (previously, only 4-day seats had been available), and are now at 126 total attendees. So we&rsquo;ve got 24 seats of our original space remaining.<br>
The venue assures us that we can accommodate at least another 25 people, possible as many as 50 more. So we&rsquo;re working with them to make that happen - in the meantime, <strong>I strongly recommend you register soon</strong> if you plan to attend. It looks like, no matter what, we&rsquo;ll be in a sellout situation again this year.<br>
Now, keep in mind that we&rsquo;ve greatly expanded the event this year. We&rsquo;re running three full-day pre-conference workshops (that&rsquo;s what you get for the extra day in the 4-day pass). We&rsquo;re having an informal gathering on Sunday evening (after the pre-cons) at the Courtyard Downtown Bellevue, a bar crawl Monday night, and a reception with the WMF team on Tuesday evening. In addition to two tracks of content, we have a third track which will run some extra-long sessions (although not all day). We&rsquo;re also welcoming the WMF team on Tuesday after lunch for a &ldquo;State of the Shell&rdquo; address by two of the main team leaders, followed by &ldquo;Lightning Demos&rdquo; from a variety of team members. It&rsquo;s a lot of content.<br>
As always, we&rsquo;ll be recording <em>most</em> of the sessions. Basically, the pre-con sessions won&rsquo;t be recorded, nor will the extra-long &ldquo;bonus&rdquo; sessions in the third track (we only have two sets of recording gear). All of what we do record will go on YouTube as usual. However, this year,<a href="http://pluralsight.com">Pluralsight</a> will be on-hand with camera crews in our two main rooms, and they&rsquo;ll be producing recordings that include screen capture as well as live video of the speakers. Those &ldquo;better&rdquo; recordings will go into the Pluralsight library, and everyone attending in person will receive free access to those even if you don&rsquo;t have a subscription. For anyone not attending, you can either access our screen-caps on YouTube for free, or use a Pluralsight subscription to access the nicer videos. This is an experiment with Pluralsight and we appreciate their support!<br>
Oh, and we&rsquo;ll also be offering Verified Effective exams (no computer required!) on Wednesday, to anyone who&rsquo;s interested (no advance registration required).<br>
Anyway, as you can see, it&rsquo;s going to be a busy-busy-busy Summit, and it&rsquo;s looking firmly to be a sellout, even if we&rsquo;re able to secure the extra space at the venue. So <strong>register right the heck now</strong> if you plan to attend. If you&rsquo;re just now getting around to talking the boss into it - well, honestly, you shoulda started back in November ;). At $950 for the 3-day pass, though, this is probably the best educational deal you or your company will ever find, and more than a few people see enough value to pay their own way every year.<br>
So I hope we&rsquo;ll see you there!</p>
]]></content:encoded></item><item><title>Using PowerShell to make Azure Automation Graphical Runbooks – Part 1</title><link>https://powershell.org/articles/2016-01-29-using-powershell-to-make-azure-automation-graphical-runbooks-part-1/</link><guid>https://powershell.org/articles/2016-01-29-using-powershell-to-make-azure-automation-graphical-runbooks-part-1/</guid><pubDate>Fri, 29 Jan 2016 15:52:51 +0000</pubDate><description>&lt;p&gt;Microsoft recently released another extension for Azure Automation developers, this time in the form of the Microsoft Azure Automation Graphical Authoring SDK.&lt;br&gt;
This SDK allows developers to make and edit graphic runbooks for using in Azure Automation. Although the examples given are in C#, it&amp;rsquo;s possible to apply the same methodologies to develop them in PowerShell with the accompanying SDK mentioned above.&lt;br&gt;
You can read the first article of this series on creating these Graphical Runbooks at &lt;a href="http://www.powershell.amsterdam/2016/01/29/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/"&gt;powershell.amsterdam&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Microsoft recently released another extension for Azure Automation developers, this time in the form of the Microsoft Azure Automation Graphical Authoring SDK.<br>
This SDK allows developers to make and edit graphic runbooks for using in Azure Automation. Although the examples given are in C#, it&rsquo;s possible to apply the same methodologies to develop them in PowerShell with the accompanying SDK mentioned above.<br>
You can read the first article of this series on creating these Graphical Runbooks at<a href="http://www.powershell.amsterdam/2016/01/29/using-powershell-to-make-azure-automation-graphical-runbooks-part-1/">powershell.amsterdam</a></p>
]]></content:encoded></item><item><title>PowerShell + DevOps Global Summit 2016 Registration Status</title><link>https://powershell.org/articles/2016-01-28-powershell-devops-global-summit-2016-registration-status/</link><guid>https://powershell.org/articles/2016-01-28-powershell-devops-global-summit-2016-registration-status/</guid><pubDate>Thu, 28 Jan 2016 18:09:54 +0000</pubDate><description>&lt;p&gt;A quick status update on Summit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We&amp;rsquo;re currently past our 50% registration point. Right now, only 4-day registrations are available. Register at https://eventloom.com/event/home/PSNA16.&lt;/li&gt;
&lt;li&gt;In just a few days, on February 1st, we&amp;rsquo;ll open all remaining seats for both 3- and 4-day registrations (same registration URL).&lt;/li&gt;
&lt;li&gt;Registration ends during the first week of March. At that time, we&amp;rsquo;ll review the situation, and may be able to open additional seats. However, the price will go up a bit. Our absolute final date for registrations will be March 20th.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So you&amp;rsquo;ve got about 3 days before 3-day registration opens, and from there about a month to sign up. After that, if we have additional space or can make additional space, we&amp;rsquo;ll open more seats - but the price &lt;strong&gt;will&lt;/strong&gt; be higher.&lt;br&gt;
If you&amp;rsquo;re attending, don&amp;rsquo;t forget to head over to http://www.zazzle.com/collections/powershell_devops_global_summit_2016-119347973985746667 to pick up an official conference t-shirt, hat, coffee mug, or notebook to bring with you! We also have commemorative tiles available, and will offer a new one each year for you to collect.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>A quick status update on Summit:</p><ul><li>We&rsquo;re currently past our 50% registration point. Right now, only 4-day registrations are available. Register at https://eventloom.com/event/home/PSNA16.</li><li>In just a few days, on February 1st, we&rsquo;ll open all remaining seats for both 3- and 4-day registrations (same registration URL).</li><li>Registration ends during the first week of March. At that time, we&rsquo;ll review the situation, and may be able to open additional seats. However, the price will go up a bit. Our absolute final date for registrations will be March 20th.</li></ul><p>So you&rsquo;ve got about 3 days before 3-day registration opens, and from there about a month to sign up. After that, if we have additional space or can make additional space, we&rsquo;ll open more seats - but the price <strong>will</strong> be higher.<br>
If you&rsquo;re attending, don&rsquo;t forget to head over to http://www.zazzle.com/collections/powershell_devops_global_summit_2016-119347973985746667 to pick up an official conference t-shirt, hat, coffee mug, or notebook to bring with you! We also have commemorative tiles available, and will offer a new one each year for you to collect.</p>
]]></content:encoded></item><item><title>Using PowerShell to enable ChatOps on Windows</title><link>https://powershell.org/articles/2016-01-28-using-powershell-to-enable-chatops-on-windows/</link><guid>https://powershell.org/articles/2016-01-28-using-powershell-to-enable-chatops-on-windows/</guid><pubDate>Thu, 28 Jan 2016 14:31:19 +0000</pubDate><description>&lt;p&gt;ChatOps is a term used to describe bringing development or operations work that is already happening in the background into a common chat room. It involves having everyone in the team in a single chat room, then bringing tools into the room so everyone can automate, collaborate and see how automation is used to solve problems. In doing so, you are unifying the communication about what work gets done and have a history of it happening.&lt;br&gt;
ChatOps can be supplemented with the use of tools or scripts exposed using a chat bot. Users in the chat room can talk to the bot and have it take actions on their behalf, some examples of this may be:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>ChatOps is a term used to describe bringing development or operations work that is already happening in the background into a common chat room. It involves having everyone in the team in a single chat room, then bringing tools into the room so everyone can automate, collaborate and see how automation is used to solve problems. In doing so, you are unifying the communication about what work gets done and have a history of it happening.<br>
ChatOps can be supplemented with the use of tools or scripts exposed using a chat bot. Users in the chat room can talk to the bot and have it take actions on their behalf, some examples of this may be:</p><ul><li>Checking the status of a Windows Service</li><li>Finding out who is on call via the PagerDuty API</li><li>Querying a server via WMI to see how much disk space is available</li></ul><p>Bots can also be a great way to expose functionality to low-privledged users such as help desk staff, without having to create web interfaces or forms.<br>
If you want more details on the concept of ChatOps, I recommend watching **<a href="https://www.youtube.com/watch?v=F8Vfoz7GeHw">ChatOps, a Beginners Guide</a> **presented by<a href="https://twitter.com/jasonhand">Jason Hand</a>.<br>
A popular toolset for ChatOps is<a href="https://slack.com/">Slack</a> as the chat client, and<a href="https://hubot.github.com/">Hubot</a> as the bot. In this post we will use Slack and Hubot together with a PowerShell module I’ve written called<a href="https://github.com/MattHodge/PoshHubot">PoshHubot</a>. The module will handle installation and basic administration of Hubot. From there, we will integrate Hubot with PowerShell so we can perform some ChatOps in the Microsoft ecosystem.<br>
Continue reading over at<a href="http://bit.ly/PSHubot">hodgkins.io</a></p>
]]></content:encoded></item><item><title>Create Windows Shortcuts or Favorites With PowerShell</title><link>https://powershell.org/articles/2016-01-22-create-windows-shortcuts-or-favorites-with-powershell/</link><guid>https://powershell.org/articles/2016-01-22-create-windows-shortcuts-or-favorites-with-powershell/</guid><pubDate>Fri, 22 Jan 2016 16:37:59 +0000</pubDate><description>&lt;p&gt;Creating windows shortcuts are usually done through the New Shortcut Wizard, MSI files, Group Policy Objects, or even a simple file copy. Shortcut files are .lnk files that Microsoft Windows uses for shortcuts to local files while .url is used for destinations such as web sites. As we all are aware, the .lnk filename extension is hidden in Windows Explorer even when &amp;ldquo;Hide extensions for known file types&amp;rdquo; is unchecked in File Type options. The reason for this is the NeverShowExt string value in HKEY_CLASSES_ROOT\lnkfile. Shortcuts are also displayed with a curled arrow overlay icon. The IsShortcut string value causes the arrow to be displayed.&lt;br&gt;
For a full run down on creating shortcuts and favorites with PowerShell head over to &lt;a href="http://powershellblogger.com/?p=301"&gt;PowerShellBlogger.com&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Creating windows shortcuts are usually done through the New Shortcut Wizard, MSI files, Group Policy Objects, or even a simple file copy. Shortcut files are .lnk files that Microsoft Windows uses for shortcuts to local files while .url is used for destinations such as web sites. As we all are aware, the .lnk filename extension is hidden in Windows Explorer even when &ldquo;Hide extensions for known file types&rdquo; is unchecked in File Type options. The reason for this is the NeverShowExt string value in HKEY_CLASSES_ROOT\lnkfile. Shortcuts are also displayed with a curled arrow overlay icon. The IsShortcut string value causes the arrow to be displayed.<br>
For a full run down on creating shortcuts and favorites with PowerShell head over to<a href="http://powershellblogger.com/?p=301">PowerShellBlogger.com</a>.</p>
]]></content:encoded></item><item><title>Using Local Functions in a Scriptblock with Existing Code</title><link>https://powershell.org/articles/2016-01-18-using-local-functions-remotely-in-an-existing-scriptblock/</link><guid>https://powershell.org/articles/2016-01-18-using-local-functions-remotely-in-an-existing-scriptblock/</guid><pubDate>Mon, 18 Jan 2016 15:14:03 +0000</pubDate><description>&lt;p&gt;When you are wanting to run code remotely, it&amp;rsquo;s common to do this via the use of &lt;strong&gt;Invoke-Command&lt;/strong&gt; (though other options exist, such as through &lt;strong&gt;Start-Job&lt;/strong&gt; for example). The biggest downfall to date i&amp;rsquo;ve found with remoting is the lack of an option to combine the use of your local functions within a &lt;em&gt;ScriptBlock&lt;/em&gt; that has other code in it. As an example, the following is not possible:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;function Add ($param1, $param2) { $param1 + $param2 } function Multiply($param1,$param2) { $param1 * $param2 } Invoke-Command -ComputerName $env:COMPUTERNAME -ScriptBlock { $addResult = Add $args[0] $args[1] $multiplyResult = Multiply $args[0] $args[1] Write-Output &amp;quot;The result of the addition was : $addResult&amp;quot; Write-Output &amp;quot;The result of the multiplication was : $multiplyResult&amp;quot; } -ArgumentList 3, 2 &lt;/code&gt;However, there is a way to achieve this type of operation, and make as many local functions as you want available to be used and combined with other code in your &lt;em&gt;ScriptBlock&lt;/em&gt;. You can find the full article at &lt;a href="http://www.powershell.amsterdam/2015/11/09/using-local-functions-on-remote-computers/"&gt;powershell.amsterdam&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>When you are wanting to run code remotely, it&rsquo;s common to do this via the use of<strong>Invoke-Command</strong> (though other options exist, such as through<strong>Start-Job</strong> for example). The biggest downfall to date i&rsquo;ve found with remoting is the lack of an option to combine the use of your local functions within a<em>ScriptBlock</em> that has other code in it. As an example, the following is not possible:</p><p><code>function Add ($param1, $param2) { $param1 + $param2 } function Multiply($param1,$param2) { $param1 * $param2 } Invoke-Command -ComputerName $env:COMPUTERNAME -ScriptBlock { $addResult = Add $args[0] $args[1] $multiplyResult = Multiply $args[0] $args[1] Write-Output "The result of the addition was : $addResult" Write-Output "The result of the multiplication was : $multiplyResult" } -ArgumentList 3, 2</code>However, there is a way to achieve this type of operation, and make as many local functions as you want available to be used and combined with other code in your<em>ScriptBlock</em>. You can find the full article at<a href="http://www.powershell.amsterdam/2015/11/09/using-local-functions-on-remote-computers/">powershell.amsterdam</a>.</p>
]]></content:encoded></item><item><title>Improve Delivery of PowerShell Tools or Version Controlled Files</title><link>https://powershell.org/articles/2016-01-14-improve-delivery-of-powershell-tools-or-version-controlled-files/</link><guid>https://powershell.org/articles/2016-01-14-improve-delivery-of-powershell-tools-or-version-controlled-files/</guid><pubDate>Thu, 14 Jan 2016 17:04:54 +0000</pubDate><description>&lt;p&gt;I am back this week with a quick how-to article on delivering, installing, or launching version controlled files. In the past I ran into problems when having administrators launch my PowerShell tools from a network share. The performance was slow when launching it across the WAN, and the file would often be locked when I tried to replace it with a newer version. I came up with a solution to the problem by using none other than PowerShell.&lt;br&gt;
The solution dips into all kinds of PowerShell techniques including local environment variables, getting text file contents, file version checking and even shortcut (.lnk) creation. If you are also a user of Sapien&amp;rsquo;s PowerShell Studio, then definitely give this one a read. Check out the solution over on &lt;a href="http://powershellblogger.com/?p=275"&gt;PowerShellBlogger.com&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I am back this week with a quick how-to article on delivering, installing, or launching version controlled files. In the past I ran into problems when having administrators launch my PowerShell tools from a network share. The performance was slow when launching it across the WAN, and the file would often be locked when I tried to replace it with a newer version. I came up with a solution to the problem by using none other than PowerShell.<br>
The solution dips into all kinds of PowerShell techniques including local environment variables, getting text file contents, file version checking and even shortcut (.lnk) creation. If you are also a user of Sapien&rsquo;s PowerShell Studio, then definitely give this one a read. Check out the solution over on<a href="http://powershellblogger.com/?p=275">PowerShellBlogger.com</a>.</p>
]]></content:encoded></item><item><title>Atlanta PowerShell User's Group Meeting – January 19th 'Let's win the scripting games!'</title><link>https://powershell.org/articles/2016-01-11-atlpug-01-19-2016/</link><guid>https://powershell.org/articles/2016-01-11-atlpug-01-19-2016/</guid><pubDate>Mon, 11 Jan 2016 18:25:02 +0000</pubDate><description>&lt;p&gt;Kicking off in our new venue, we&amp;rsquo;ll be tackling this month&amp;rsquo;s PowerShell.org monthly scripting games challenge! Prizes are given to the group with the best answers over the year, so let&amp;rsquo;s try our best! Have an idea or want to cover a topic? Let us know my messaging Mark Schill or myself (Stephen Owen)&lt;br&gt;
&lt;a href="https://powershell.org/2016/01/02/january-2016-scripting-games-puzzle/"&gt;Here&amp;rsquo;s the link to the puzzle for this month&lt;/a&gt;. I would recommend that you look it over, and begin thinking of how you might approach it. However, let&amp;rsquo;s let everyone have a chance to answer the puzzle and work through it as a team 🙂&lt;br&gt;
&lt;a href="http://www.meetup.com/Atlanta-PowerShell-Users-Group/events/227807680/"&gt;Register now on Meetup!&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>Kicking off in our new venue, we&rsquo;ll be tackling this month&rsquo;s PowerShell.org monthly scripting games challenge! Prizes are given to the group with the best answers over the year, so let&rsquo;s try our best! Have an idea or want to cover a topic? Let us know my messaging Mark Schill or myself (Stephen Owen)<br><a href="https://powershell.org/2016/01/02/january-2016-scripting-games-puzzle/">Here&rsquo;s the link to the puzzle for this month</a>. I would recommend that you look it over, and begin thinking of how you might approach it. However, let&rsquo;s let everyone have a chance to answer the puzzle and work through it as a team 🙂<br><a href="http://www.meetup.com/Atlanta-PowerShell-Users-Group/events/227807680/">Register now on Meetup!<img src="https://powershell.org/wp-content/uploads/2015/11/MeetUp.png" alt="MeetUp"/></p>
]]></content:encoded></item><item><title>New Boston PowerShell User Group</title><link>https://powershell.org/articles/2016-01-11-new-boston-powershell-user-group/</link><guid>https://powershell.org/articles/2016-01-11-new-boston-powershell-user-group/</guid><pubDate>Mon, 11 Jan 2016 15:39:08 +0000</pubDate><description>&lt;p&gt;Its a new year with new goals and I hope to provide even more assistance and value to the PowerShell community in 2016. I have created a new Boston based PowerShell user group and will be working hard on creating sessions as frequently and regularly as possible. If you are in the greater Boston or New England area please join the user group. If we have any Microsoft employees or PowerShell MVPs visiting the Boston area in the future, we would love to have you deliver a session. I have arranged booking of a room in the Microsoft Technology Center located at Kendall Square, 255 Main Street, Cambridge, MA 02142 when required. I will also look into offering the meetings over Skype for Business if possible.&lt;br&gt;
Check out and join the Boston PowerShell User Group here: &lt;a href="http://www.meetup.com/Boston-PowerShell-User-Group"&gt;http://www.meetup.com/Boston-PowerShell-User-Group&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Its a new year with new goals and I hope to provide even more assistance and value to the PowerShell community in 2016. I have created a new Boston based PowerShell user group and will be working hard on creating sessions as frequently and regularly as possible. If you are in the greater Boston or New England area please join the user group. If we have any Microsoft employees or PowerShell MVPs visiting the Boston area in the future, we would love to have you deliver a session. I have arranged booking of a room in the Microsoft Technology Center located at Kendall Square, 255 Main Street, Cambridge, MA 02142 when required. I will also look into offering the meetings over Skype for Business if possible.<br>
Check out and join the Boston PowerShell User Group here:<a href="http://www.meetup.com/Boston-PowerShell-User-Group">http://www.meetup.com/Boston-PowerShell-User-Group</a></p>
]]></content:encoded></item><item><title>MSPSUG Virtual Meeting: Avoiding Version Chaos in a Multi-Version #PowerShell World – Jan 12th</title><link>https://powershell.org/articles/2016-01-08-mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th/</link><guid>https://powershell.org/articles/2016-01-08-mspsug-virtual-meeting-avoiding-version-chaos-in-a-multi-version-powershell-world-jan-12th/</guid><pubDate>Fri, 08 Jan 2016 14:39:43 +0000</pubDate><description>&lt;p&gt;Join the Mississippi PowerShell User Group virtually on Tuesday, January 12th 2016 at 8:30pm Central Time when PowerShell MVP &lt;a href="http://twitter.com/juneb_get_help"&gt;June Blender&lt;/a&gt; will present “&lt;em&gt;&lt;strong&gt;PowersHELL: Avoiding Version Chaos in a Multi-Version PowerShell World&lt;/strong&gt;&lt;/em&gt;”.&lt;br&gt;
Beginning in Windows PowerShell 5.0, you can install multiple versions of the same module on the same computer; even in the same directory. Open source and PowerShellGet have revolutionized the availability of modules and Windows PowerShell 5.0+ will be continuously updated with Windows. The result is a myriad of interlocking parts with far more potential for conflicts in name, version, and functionality. Are we fated for the old &amp;ldquo;DLL Hell?&amp;rdquo; In this talk, I&amp;rsquo;ll present the problem, describe some mitigating strategies, warn about their limitations, and provide a roadmap for version sanity.&lt;br&gt;
Visit the &lt;a href="http://mspsug.com/2016/01/05/mspsug-january-2016-meeting-powershell-avoiding-version-chaos-in-a-multi-version-world/"&gt;Mississippi PowerShell User Group&lt;/a&gt; website to learn more about June and to find out more details about this month’s meeting.&lt;br&gt;
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 “&lt;a href="http://mspsug.com/attendee-info/"&gt;Attendee Info&lt;/a&gt;” section.&lt;br&gt;
Register via &lt;a href="http://mspsug.eventbrite.com/"&gt;EventBrite&lt;/a&gt; to receive the URL for this meeting.&lt;br&gt;
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.&lt;br&gt;
µ&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Join the Mississippi PowerShell User Group virtually on Tuesday, January 12th 2016 at 8:30pm Central Time when PowerShell MVP<a href="http://twitter.com/juneb_get_help">June Blender</a> will present “<em><strong>PowersHELL: Avoiding Version Chaos in a Multi-Version PowerShell World</strong></em>”.<br>
Beginning in Windows PowerShell 5.0, you can install multiple versions of the same module on the same computer; even in the same directory. Open source and PowerShellGet have revolutionized the availability of modules and Windows PowerShell 5.0+ will be continuously updated with Windows. The result is a myriad of interlocking parts with far more potential for conflicts in name, version, and functionality. Are we fated for the old &ldquo;DLL Hell?&rdquo; In this talk, I&rsquo;ll present the problem, describe some mitigating strategies, warn about their limitations, and provide a roadmap for version sanity.<br>
Visit the<a href="http://mspsug.com/2016/01/05/mspsug-january-2016-meeting-powershell-avoiding-version-chaos-in-a-multi-version-world/">Mississippi PowerShell User Group</a> website to learn more about June and to find out more details about this month’s meeting.<br>
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.<br>
Register via<a href="http://mspsug.eventbrite.com/">EventBrite</a> to receive the URL for this meeting.<br>
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.<br>
µ</p>
]]></content:encoded></item><item><title>Get Last Reboot or Computer Up Time With PowerShell</title><link>https://powershell.org/articles/2016-01-07-get-last-reboot-or-computer-up-time-with-powershell/</link><guid>https://powershell.org/articles/2016-01-07-get-last-reboot-or-computer-up-time-with-powershell/</guid><pubDate>Thu, 07 Jan 2016 14:20:24 +0000</pubDate><description>&lt;p&gt;Hey everyone, hope you had a great 2015 and I am back with I hope to be weekly updates for everyone at PowerShell.org. I wrote up a quick article on how to retrieve the last reboot time or the current up time for any local or remote computer. I also include a function that can be used to query remote computers as well. There may be a situation where you want to determine whether you take action depending on the last reboot time, or you may simply want it to be displayed for debugging or logging purposes.&lt;br&gt;
You can check out the full article over on &lt;a href="http://powershellblogger.com/?p=248"&gt;PowerShellBlogger.com&lt;/a&gt;.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Hey everyone, hope you had a great 2015 and I am back with I hope to be weekly updates for everyone at PowerShell.org. I wrote up a quick article on how to retrieve the last reboot time or the current up time for any local or remote computer. I also include a function that can be used to query remote computers as well. There may be a situation where you want to determine whether you take action depending on the last reboot time, or you may simply want it to be displayed for debugging or logging purposes.<br>
You can check out the full article over on<a href="http://powershellblogger.com/?p=248">PowerShellBlogger.com</a>.</p>
]]></content:encoded></item><item><title>2016-January Scripting Games Puzzle</title><link>https://powershell.org/articles/2016-01-02-january-2016-scripting-games-puzzle/</link><guid>https://powershell.org/articles/2016-01-02-january-2016-scripting-games-puzzle/</guid><pubDate>Sat, 02 Jan 2016 15:00:01 +0000</pubDate><description>&lt;p&gt;Our January 2016 puzzle comes from MVP Adam Bertram. We&amp;rsquo;re actively interested in receiving Scripting Games puzzles from members of the community - submit yours, along with an official solution, to us at admin@ via email!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Our January 2016 puzzle comes from MVP Adam Bertram. We&rsquo;re actively interested in receiving Scripting Games puzzles from members of the community - submit yours, along with an official solution, to us at admin@ via email!</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 are 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 Gist 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. Just edit the original Gist and we&rsquo;ll see your changes shortly.</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>Server uptime is the lifeblood of system administrators. We strive on it, get addicted to it..we need…more server uptime! Don&rsquo;t you think something as addictive and important as server uptime be measured?  How do we know we&rsquo;re getting our uptime fix?  As that famous quote goes, &ldquo;Reality does not exist until it&rsquo;s measured.".  Let&rsquo;s measure it not only for our own sake but also to give a pretty report to our manager with all those whizbang, doohickey Excel juju that they love to see!<br>
For this month&rsquo;s challenge, I want you to create a PowerShell function that you can remotely point to a Windows server to see how long it has been up for. Here&rsquo;s an example of what it should output.<br><img src="https://powershell.org/wp-content/uploads/2015/12/image001.png" alt="image001"><br>
Requirements:<br>
1.     Support pipeline input so that you can pipe computer names directly to it.<br>
2.     Process multiple computer names at once time and output each computer&rsquo;s stats with each one being a single object.<br>
3.     It should not try to query computers that are offline. If an offline computer is found, it should write a warning to the console yet still output an object but with Status of OFFLINE.<br>
4.     If the function is not able to find the uptime it should show ERROR in the Status field.<br>
5.     If the function is able to get the uptime, it should show &lsquo;OK&rsquo; in the Status field.<br>
6.     It should include the time the server started up and the uptime in days (rounded to 1/10 of a day)<br>
7.     If no ComputerName is passed, it should default to the local computer.</p><p>Bonus:<br>
1.     The function should show a MightNeedPatched property of $true ONLY if it has been up for more than 30 days (rounded to 1/10 of a month).  If it has been up for less than 30 days, MightNeedPatched should be $false.</p>]]></content:encoded></item></channel></rss>