Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
This blog is part of a series that shows example PowerShell code for those learning the language.
This time we’re using PowerShell to generate random words and check if they are popular by using a Bing search. The words are color-coded as white (not found on the web), green (between 1 and 1,000 hits on the web), yellow (between 1,000 and 1,000,000 hits) and red (more than 1,000,000 hits). This could be useful if you need to create a username on a popular website and everything you can think of is already taken :-).
This example explores using the Internet Explorer objects and searching through web pages by ID, along with more common items like arrays, string manipulation and functions.
## Random words and their popularity with Bing# ## Defines array with common vowels, consonants and endings# [array] $Vowels = "a;a;a;a;e;e;e;e;i;i;i;o;o;o;u;u;y" -split ";"[array] $Consonants = "b;b;br;c;c;c;ch;cr;d;f;g;h;j;k;l;m;m;m;n;n;p;p;ph;qu;r;r;r;s;s;s;sh;t;tr;v;w;x;z" -split ";"[array] $Endings = "r;r;s;r;l;n;n;n;c;c;t;p" -split ";" ## Functions for random vowels, consonants, endings and words# function Get-RandomVowel { return $Vowels[(Get-Random($Vowels.Length))] } function Get-RandomConsonant{ return $Consonants[(Get-Random($Consonants.Length))] } function Get-RandomEnding{ return $Endings[(Get-Random($Endings.Length))] } function Get-RandomSyllable ([int32] $PercentConsonants, [int32] $PercentEndings){ [string] $Syllable = "" if ((Get-Random(100)) -le $PercentConsonants) { $Syllable+= Get-RandomConsonant } $Syllable+= Get-RandomVowel if ((Get-Random(100)) -le $PercentEndings) { $Syllable+= Get-RandomEnding } return $Syllable} function Get-RandomWord ([int32] $MinSyllables, [int32] $MaxSyllables){ [string] $Word = "" [int32] $Syllables = ($MinSyllables) + (Get-Random(($MaxSyllables - $MinSyllables + 1))) for ([int32] $Count=1; $Count -le $Syllables; $Count++) { $Word += Get-RandomSyllable 70 20 } <# Consonant 70% of the time, Ending 20% #> return $Word} ## Function to see how many pages Bing finds for a given term# Function Get-BingCount([string] $Term) { # Navigate to the Bing page to query the $term $ie.Navigate("https://bing.com/search?q=%2B"+$term); # Wait for the page to load $timeout = 0 while ($ie.Busy) { # Write-Host "Waiting for Bing page for $term to load" Start-Sleep -Milliseconds 100 $timeout++ If ($timeout -gt 100) { return "L-Error" } } # Wait for the document to be ready $timeout = 0 $element1 = $ie.Document.IHTMLDocument3_getElementById("b_tween").innertext $element2 = $ie.Document.IHTMLDocument3_getElementById("b_content").innertext While ($element1 -eq $null -and $element2 -eq $null) { # Write-Host "Waiting for Bing document for $term to be ready" Start-Sleep -Milliseconds 100 $timeout++ If ($timeout -gt 100) { return "D-Error" } $element1 = $ie.Document.IHTMLDocument3_getElementById("b_tween").innertext $element2 = $ie.Document.IHTMLDocument3_getElementById("b_content").innertext } # Get the count of pages If ($element1 -ne $null) { $result = $element1.split(" ")[0] } else { $result = "0" } # Return the count return $result} ## Main code# # Create Internet Explorer object$ie = New-Object -ComObject "InternetExplorer.Application" # Show initial messageWrite-HostWrite-Host "Here are 20 random words and their popularity"Write-Host 1..20 | % { # Get a random word $word = Get-RandomWord 2 5 # Check the popularity with Bing $count = ([string] (Get-BingCount $word)).Padleft(12) $countint = [int] $count # Select Color based on popularity. if ($countint -eq 0) { $color = "white" } elseif ($countint -lt 1000) { $color = "green" } elseif ($countint -lt 1000000) { $color = "yellow" } else { $color = "red" } # Write the info with the right color Write-Host "$count --> $word" -ForegroundColor $color} # Quit Internet Explorer$ie.quit(); |
In case you were wondering what the output would look like, here is a sample: