&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 April 2016 on PowerShell.org - Welcome Automaters!</title><link>https://powershell.org/articles/2016/04/</link><description>Recent content in Articles from April 2016 on PowerShell.org - Welcome Automaters!</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://powershell.org/articles/2016/04/index.xml" rel="self" type="application/rss+xml"/><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></channel></rss>