{"id":52063,"date":"2009-11-09T00:01:00","date_gmt":"2009-11-09T00:01:00","guid":{"rendered":"https:\/\/blogs.technet.microsoft.com\/heyscriptingguy\/2009\/11\/09\/hey-scripting-guy-tell-me-about-aliases-in-windows-powershell\/"},"modified":"2009-11-09T00:01:00","modified_gmt":"2009-11-09T00:01:00","slug":"hey-scripting-guy-tell-me-about-aliases-in-windows-powershell","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/scripting\/hey-scripting-guy-tell-me-about-aliases-in-windows-powershell\/","title":{"rendered":"Hey, Scripting Guy! Tell Me About Aliases in Windows PowerShell"},"content":{"rendered":"<p><!-- AddThis Button BEGIN --><a class=\"addthis_button\" href=\"http:\/\/www.addthis.com\/bookmark.php?v=250&amp;pub=scriptingguys\"><img decoding=\"async\" alt=\"Bookmark and Share\" src=\"http:\/\/s7.addthis.com\/static\/btn\/v2\/lg-share-en.gif\" width=\"125\" height=\"16\"><\/a><!-- AddThis Button END --><\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p><img decoding=\"async\" title=\"Hey, Scripting Guy! Question\" border=\"0\" alt=\"Hey, Scripting Guy! Question\" align=\"left\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/q-for-powertip.jpg\" width=\"34\" height=\"34\"><\/p>\n<p class=\"MsoNormal\">Hey, Scripting Guy! I have been playing around with Windows PowerShell 2.0 in Windows 7 and I think that I like it. However, it seems to require an awful lot of typing. The double command names, such as <b>Get-Process<\/b>, are somewhat helpful for remembering things, but it is quite a bit of typing. Yes, it is shorter than writing a VBScript to return the same information, but did you have to make everything so long? And by the way, while I am whining, I hate typing the hyphen. It is too hard to find on my keyboard. I do not expect you to change Windows PowerShell just for me, but surely there are others out there who feel the same way I do. If Windows PowerShell is supposed to be the all-new management tool for administrators, you could have made it easier to use. <\/p>\n<p class=\"MsoNormal\">&#8212; RR<\/p>\n<p class=\"MsoNormal\"><img decoding=\"async\" title=\"Hey, Scripting Guy! Answer\" border=\"0\" alt=\"Hey, Scripting Guy! Answer\" align=\"left\" src=\"https:\/\/devblogs.microsoft.com\/wp-content\/uploads\/sites\/29\/2019\/02\/a-for-powertip.jpg\" width=\"34\" height=\"34\">Hello, RR. <\/p>\n<p class=\"MsoNormal\">Microsoft Scripting Guy Ed Wilson here. Well I just got off a two-hour Live Meeting with a customer. I was talking about some of the new remoting features in Windows PowerShell 2.0. It was an awesome talk, if I do say so myself. I love talking to customers, and I love working with Windows PowerShell 2.0. On those occasions when I combine those two passions, it is a great day.<\/p>\n<p class=\"MsoNormal\">RR, it seems that I need to introduce you to the concept of aliases. Consider a command such as <b>Measure-Object<\/b> that is used to count information and provide statistical information such as the minimum and maximum values of an object. <b>Measure-Object<\/b> can be a bit cumbersome to type from a command line, and given the relative frequency of its use, it becomes a good candidate for aliasing. <\/p>\n<p class=\"Readeraidonly\">Note: Portions of today&#8217;s Hey, Scripting Guy! post are excerpted from the Microsoft Press book, <i>Windows PowerShell 2.0 Best Practices<\/i> by Ed Wilson. The book is <a href=\"http:\/\/bit.ly\/edwilsonbestpractices\">available for pre-order<\/a>. <\/p>\n<p class=\"SbarHead\"><strong><font size=\"3\">Verifying the existence of an alias<\/font><\/strong><\/p>\n<p class=\"SbarParafirst\">Before creating a new alias, it is a best practice to see if there is a suitable alias already created for the cmdlet in question. By default, Windows PowerShell ships with more than 130 predefined aliases for its 271 cmdlets. When you consider that several of the cmdlets have more than one alias defined, you can see there is great opportunity for the creation of additional aliases. The ListCmdletsWithMoreThanOneAlias.ps1 script lists all cmdlets that have more than one alias defined. This script is seen here. <\/p>\n<p class=\"CodeBlockScreenedHead\"><strong>ListCmdletsWithMoreThanOneAlias.ps1<br><\/strong><span><br><font><font face=\"Lucida Sans Typewriter\">Get-Alias | <br>Group-Object -Property definition | <br>Sort-Object -Property count -Descending | <br>Where-Object { $_.count -gt 2 }<\/p>\n<p><\/font><\/font><\/span><\/p>\n<p class=\"SbarParamid\">&nbsp;<\/p>\n<p class=\"SbarParamid\">When the ListCmdletsWithMoreThanOneAlias.ps1 script runs, the following appears:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">Count Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Group<br>&#8212;&#8211; &#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8211;<br><span>&nbsp;&nbsp;&nbsp; <\/span>6 Remove-Item<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{del, erase, rd, ri&#8230;}<br><span>&nbsp;&nbsp;&nbsp; <\/span>3 Set-Location<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{cd, chdir, sl}<br><span>&nbsp;&nbsp;&nbsp; <\/span>3 Get-History<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{ghy, h, history}<br><span>&nbsp;&nbsp;&nbsp; <\/span>3 Get-ChildItem<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{dir, gci, ls}<br><span>&nbsp;&nbsp;&nbsp; <\/span>3 Get-Content<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{cat, gc, type}<br><span>&nbsp;&nbsp;&nbsp; <\/span>3 Move-Item<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{mi, move, mv}<br><span>&nbsp;&nbsp;&nbsp; <\/span>3 Copy-Item<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>{copy, cp, cpi}<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">To see if an alias for the <b>Measure-Object<\/b> cmdlet exists already, you can use the <b>Get-Alias<\/b> cmdlet and the <b>-definition<\/b> parameter as shown here: <\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:&gt; Get-Alias -Definition Measure-Object<\/p>\n<p>CommandType<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Definition<br>&#8212;&#8212;&#8212;&#8211;<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;-<br>Alias<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>measure<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Measure-Object<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">If you like the alias <b>measure<\/b>, you can use that alias. However, you may decide that the readability of the alias <b>measure<\/b> is hampered by the fact, that it only saves two key strokes. Because of the implementation of the tab expansion feature, all you need to do is type <b>measure-o<\/b> and press TAB. In general, when creating personal aliases, I prefer to sacrifice readability for ease of use. My very favorite aliases are one-letter and two-letter aliases. I use the one-letter aliases for commands I frequently use, because they are the most useful and most obscure. I use the two-letter aliases for most of my other alias needs. The two-letter combination can easily correspond to the verb noun naming convention. Therefore, <b>mo<\/b> would be a logical alias for the <b>Measure-Object<\/b> cmdlet. To ensure its availability, use the <b>Get-Alias<\/b> cmdlet as shown here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:&gt; Get-Alias -Name mo<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"SbarHead\"><strong><font size=\"3\">How many two-letter aliases are there?<\/font><\/strong><\/p>\n<p class=\"SbarParafirst\">The two-letter alias namespace is rather large. How large? You have to take every letter in the range A-Z, and pair it with every other letter in the range of A-Z. If you are good with algebra then you immediately know there are 676 possible letter combinations (26 x 26). However, if your algebra is a bit rusty, you may wish to write a Windows PowerShell script to figure it out for you. The problem with such an approach is that we cannot use the <b>range<\/b> operator to produce a range of letters. It works with numbers, so <b>1..10<\/b> automatically creates a range of numbers with the values 1 through 10, and can save you a lot of typing. However, because we have ASCII numeric representations of the letters A-Z, you can use this technique to create a range of letters. The ASCII value 97 is the &ldquo;A&rdquo; character, and the ASCII value 122 is &ldquo;Z&rdquo;. After we have the numeric range, we use the <b>ForEach-Object<\/b> cmdlet and convert each letter to a character by using the <b>[char]<\/b> type. We store the resulting array of letters in the <b>$letters<\/b> variable. We then do two loops through the array and store the resulting letter combinations in the <b>$lettercombination<\/b> variable, which is constrained as an array by using the <b>[array]<\/b> type. The <b>Measure-Object<\/b> cmdlet is used to count the number of possible letter combinations. The ListTwoLetterCombinations.ps1 script is shown here. <\/p>\n<p class=\"CodeBlockScreenedHead\"><strong>ListTwoLetterCombinations.ps1<\/strong><\/p>\n<p class=\"CodeBlock\"><span><br><font face=\"Lucida Sans Typewriter\">$letterCombinations = $null<br>$asciiNum = 97..122<br>$letters = $asciiNum | ForEach-Object { [char]$_ }<br>Foreach ($1letter in $letters)<br>{<br><span>&nbsp;<\/span>Foreach ($2letter in $letters)<br><span>&nbsp;<\/span>{<br><span>&nbsp; <\/span>[array]$letterCombinations += &#8220;$1letter$2letter&#8221;<br><span>&nbsp;<\/span>}<br>}<br>&#8220;There are &#8221; + ($letterCombinations | Measure-Object).count + &#8221; possible combinations&#8221;<br>&#8220;They are listed here: &#8220;<br>$letterCombinations<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"SbarCodeBlockScreened\">To create a new alias, you can use either the <b>New-Alias<\/b> cmdlet or the <b>Set-Alias<\/b> cmdlet. You could also use the <b>New-Item<\/b> cmdlet and target the <b>Alias<\/b> drive. The problem with that technique is it does not support the <b>Description<\/b> parameter, which allows you to specify additional information about the alias. The other problem with using the <b>New-Item<\/b> cmdlet to create an alias is that it is more typing. So as a best practice, I always use either the <b>New-Alias<\/b> or the <b>Set-Alias<\/b> cmdlet. <\/p>\n<p class=\"SbarCodeBlockScreened\">In choosing between the two cmdlets, which should you use when creating a new alias? Before we answer that, we should actually talk about what the cmdlets are intended to be used for. The <b>New-Alias<\/b> cmdlet, obviously creates a new alias. The <b>Set-Alias<\/b> cmdlet is used to modify an existing alias. If an alias does not exist, it will create the alias for you. Therefore, many people use the <b>Set-Alias<\/b> cmdlet to both create and modify an alias. There is a danger in this approach, however, in that you can inadvertently modify a previously existing alias with no notification. If this is your desired behavior, that approach is fine. A better approach is to use the <b>New-Alias<\/b> cmdlet when creating an alias. This allows you to specify the <b>Description<\/b> parameter, and to receive notification if an alias that you are trying to create already exists. To assign a description to an alias when creating it, you use the <b>Description<\/b> parameter as seen here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">New-Alias -Name mo -Value Measure-Object -Description &#8220;MrEd Alias&#8221;<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"SbarCodeBlockScreened\">In an enterprise-scripting environment, many companies like defining a corporate set of aliases&mdash;this provides for a consistent environment. A network administrator working on one machine can be assured that a particular alias is available. This also helps to ensure a predictable and consistent environment. By using the same value for the <b>Description<\/b> parameter of the alias, it is easy to list all the corporate aliases. To do this, you would filter the list of aliases by the description. An example of this is seen here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:&gt; Get-Alias | Where-Object { $_.description -eq &#8216;mred alias&#8217; }<\/p>\n<p>CommandType<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Name<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span>Definition<br>&#8212;&#8212;&#8212;&#8211;<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;-<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>&#8212;&#8212;&#8212;-<br>Alias<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>mo<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>Measure-Object<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">When using the <b>-eq<\/b> operator in the code block of the <b>Where-Object<\/b> cmdlet, the filter is case insensitive. If you need a case sensitive operator, you would use <b>-ceq<\/b>. The &ldquo;c&rdquo; is added to all the operators to form a case sensitive form of the operator&mdash;by default the operators are case insensitive. As shown here, when using the case sensitive operator, the filter does not return any aliases:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">PS C:&gt; Get-Alias | Where-Object { $_.description -ceq &#8216;mred alias&#8217; }<br>PS C:&gt;<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">In addition to specifying the <b>Description<\/b> parameter, many companies also like to use the <b>Option<\/b> parameter to make the alias either read-only or constant. To make the alias read-only, you supply the <b>readonly<\/b> keyword to the <b>Option<\/b> parameter. This is shown here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">New-Alias -Name mo -Value Measure-Object -Description &#8220;MrEd Alias&#8221; -Option readonly<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">The advantage of making the alias read-only is that it offers protection against accidental modification or deletion. This is seen here:<\/p>\n<p class=\"Fig-Graphic\"><img decoding=\"async\" title=\"Image of read-only alias protecting against modification or deletion\" alt=\"Image of read-only alias protecting against modification or deletion\" src=\"http:\/\/img.microsoft.com\/library\/media\/1033\/technet\/images\/scriptcenter\/qanda\/hsg\/2009\/november\/hey1109\/hsg-11-09-09-1.jpg\" width=\"600\" height=\"422\"><\/p>\n<p class=\"MsoNormal\"><br>There is an additional advantage to making the alias read-only: It can be modified or deleted if needed. If you wish to modify the description, you use the <b>Set-Alias<\/b> cmdlet to specify the name, <b>value<\/b> the new description, and use the <b>Force<\/b> parameter. This is seen here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">Set-Alias -Name mo -value measure-object -Description &#8220;my alias&#8221; &ndash;Force<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">If you need to delete a read-only cmdlet, you use the <b>Remove-Item<\/b> cmdlet and specify the <b>Force<\/b> parameter. This is seen here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">Remove-Item Alias:mo -Force<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">To create a constant alias, you use the <b>constant<\/b> keyword with the <b>option<\/b> parameter. This technique is shown here:<\/p>\n<p class=\"CodeBlock\"><span><font face=\"Lucida Sans Typewriter\">New-Alias -Name mo -Value Measure-Object -Description &#8220;MrEd Alias&#8221; -Option constant<\/p>\n<p><\/font><\/span><\/p>\n<p class=\"MsoNormal\">As a best practice, you should not create constant aliases unless you are certain you do not need to either modify them or delete them. This is because a constant alias can be neither modified nor deleted&mdash;in effect, they really are constant. The error message is a bit misleading in that it says the alias is either read-only or constant, and it suggests attempting to use the <b>Force<\/b> parameter. The reason this is misleading is the message is displayed even when the command was run with the <b>Force<\/b> parameter. This error message is seen here:<\/p>\n<p class=\"Fig-Graphic\"><img decoding=\"async\" title=\"Image of error message\" alt=\"Image of error message\" src=\"http:\/\/img.microsoft.com\/library\/media\/1033\/technet\/images\/scriptcenter\/qanda\/hsg\/2009\/november\/hey1109\/hsg-11-09-09-2.jpg\" width=\"600\" height=\"422\"><\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p class=\"MsoNormal\">Well, RR, this should get you started on using aliases in Windows PowerShell. Join us tomorrow as we continue examining ways to customize our Windows PowerShell environment. <\/p>\n<p class=\"MsoNormal\">If you want to know exactly what we will be looking at tomorrow, follow us on <a href=\"http:\/\/bit.ly\/scriptingguystwitter\" target=\"_blank\">Twitter<\/a> or <a href=\"http:\/\/bit.ly\/scriptingguysfacebook\" target=\"_blank\">Facebook<\/a>. If you have any questions, send e-mail to us at <a href=\"http:\/\/blogs.technet.commailto:scripter@microsoft.com\" target=\"_blank\"><font face=\"Segoe\">scripter@microsoft.com<\/font><\/a> or post them on the <a href=\"http:\/\/bit.ly\/scriptingforum\" target=\"_blank\">Official Scripting Guys Forum<\/a>. See you tomorrow. Until then, keep on scripting!<\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p><b><font size=\"3\"><font face=\"Times New Roman\"><\/p>\n<p>&lt;<\/p>\n<p>p style=&#8221;MARGIN-LEFT: 0in&#8221;&gt;<b><span>Ed Wilson and Craig Liebendorfer, Scripting Guys<\/p>\n<p><\/span><\/b><\/p>\n<p><\/font><\/font><\/b><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Hey, Scripting Guy! I have been playing around with Windows PowerShell 2.0 in Windows 7 and I think that I like it. However, it seems to require an awful lot of typing. The double command names, such as Get-Process, are somewhat helpful for remembering things, but it is quite a bit of typing. Yes, [&hellip;]<\/p>\n","protected":false},"author":595,"featured_media":87096,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[51,3,45],"class_list":["post-52063","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scripting","tag-getting-started","tag-scripting-guy","tag-windows-powershell"],"acf":[],"blog_post_summary":"<p>&nbsp; Hey, Scripting Guy! I have been playing around with Windows PowerShell 2.0 in Windows 7 and I think that I like it. However, it seems to require an awful lot of typing. The double command names, such as Get-Process, are somewhat helpful for remembering things, but it is quite a bit of typing. Yes, [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/52063","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/users\/595"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/comments?post=52063"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/posts\/52063\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media\/87096"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/media?parent=52063"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/categories?post=52063"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/scripting\/wp-json\/wp\/v2\/tags?post=52063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}