Skip to content
Menu
The Lonely Administrator
  • PowerShell Tips & Tricks
  • Books & Training
  • Essential PowerShell Learning Resources
  • Privacy Policy
  • About Me
The Lonely Administrator

Friday Fun Get Beer List

Posted on March 8, 2013February 21, 2014

beerWell, another Friday and what goes better with it than beer. Of course I should mix in a little PowerShell as well. I live in the Syracuse, NY area and we have a terrific local brewery, Middle Ages Brewing Company. Not only is there a tasting room, but I can also get growler refills. Middle Ages brews a number of beers throughout the year and beers available for growlers vary. Fortunately they post online what is currently available.

But I can't be bothered to open a web browser and visit their site everytime I want to see what they have. That's what PowerShell is for. Specifically PowerShell 3.0 and Invoke-Webrequest. With only a few lines of PowerShell, actually it could be done as a one-liner, I can get the list of beers available for growler refills. Let me break it down.

First, I'll grab the web page with Invoke-WebRequest

PS Scripts:\> $ma = Invoke-Webrequest http://middleagesbrewing.com/

Invoke-Webrequest "packages" it as a nice object.

invoke-webrequest-middleages

On the page, the growler refills have links pages for the respective beers. This is handy because I can get all the links from the object I just pulled down.

PS Scripts:\> $ma.links[-2]

innerHTML : <SPAN>Wailing Wench</SPAN>
innerText : Wailing Wench
outerHTML : <A href="/beers/wailing-wench"><SPAN>Wailing Wench</SPAN></A>
outerText : Wailing Wench
tagName   : A
href      : /beers/wailing-wench

Naturally there are other links as well, but after looking through them I realized all the ones I was interested in had /beers/ in the href property. Knowing that, I can filter.

PS Scripts:\> $ma.links | where {$_.href -match "/beers/"}

innerHTML : <SPAN>Double Wit</SPAN>
innerText : Double Wit
outerHTML : <A href="/beers/double-wit"><SPAN>Double Wit</SPAN></A>
outerText : Double Wit
tagName   : A
href      : /beers/double-wit

innerHTML : <SPAN>Druid Fluid</SPAN>
innerText : Druid Fluid
outerHTML : <A href="/beers/druid-fluid"><SPAN>Druid Fluid</SPAN></A>
outerText : Druid Fluid
tagName   : A
href      : /beers/druid-fluid
...

Excellent. All I need is to grab one of the text properties and I have my list.

PS Scripts:\> $ma.links | where {$_.href -match "/beers/"}  | select -expand InnerText
Double Wit
Druid Fluid
ImPaled Ale
Kilt Tilter
Middle Ages Pale Ale
Session IPA
Swallow Wit
The Duke of Winship
Tripel Crown
Wailing Wench

Perfect (and I'm getting a little thirsty). My script, such as it is comes down to two lines.

$ma = Invoke-Webrequest http://middleagesbrewing.com/
$ma.links | where {$_.href -match "/beers/"}  | select -expand InnerText

This could even be consolidated down to a one-liner:

((Invoke-Webrequest http://middleagesbrewing.com/).Links | where {$_.href -match "/beers/"}).InnerText

Although there's no practical reason to do so. If you are new to PowerShell that is a little more difficult to understand. Normally I prefer sending objects to the pipeline but all I really need to see are beer names so this works just fine for me.

I see they are filling growlers with the Duke of Winship porter, one of my faves, so I'd better wrap this up. Cheers!

Share this:

  • Print (Opens in new window) Print

Like this:

Like Loading…

Related

The PowerShell Practice Primer
Learn PowerShell in a Month of Lunches Fourth edition


Get More PowerShell Books

Other Online Content

github



PluralSightAuthor

Active Directory ADSI Automation Backup Books CIM CLI conferences console Friday Fun FridayFun Function functions Get-WMIObject GitHub hashtable HTML Hyper-V Iron Scripter ISE Measure-Object module modules MrRoboto new-object objects Out-Gridview Pipeline PowerShell PowerShell ISE Profile prompt Registry Regular Expressions remoting SAPIEN ScriptBlock Scripting Techmentor Training VBScript WMI WPF Write-Host xml

©2026 The Lonely Administrator | Powered by SuperbThemes!
%d