There are times I use PowerShell to help format information I need to send along to others in an email. What I mean is that I return results from PowerShell commands, and format it using PowerShell, so that I can simply send it to the clipboard and paste it into an email.
The below example gathers all the computer-related details about my Lync servers each time I open a new Windows PowerShell session. The time to complete is minimal, so I’m perfectly okay with returning all the properties on each of the servers. The extra milliseconds are worth having the most current information on these servers inside my $Lync variable. By the way, you don’t need to know anything about Lync (or Skype) to make use of the post; it’s not the point.
PS > $Lync = Get-ADComputer -Filter * -SearchBase "OU=Lync,DC=MyDomain,DC=com" -Properties *
With the variable set and assigned, I can do things like the next two, combined examples. This comes in handy all the time, and without the need to think about rewriting the command whenever it’s needed again.
PS > $Lync.Name L-FE01 L-PC02 L-PC01 L-FE02 L-Ed01 L-FE04 L-FE03 L-Ed02 PS > $Lync | Select-Object Name,Description Name Description ---- ----------- L-FE01 Lync 2013 Front End L-PC02 Lync 2013 Persistent Chat L-PC01 Lync 2013 Persistent Chat L-FE02 Lync 2013 Front End L-Ed01 Lync 2013 Edge L-FE04 Lync 2013 Front End L-FE03 Lync 2013 Front End L-Ed02 Lync 2013 Edge
Let’s consider that I need to enter the names of the servers into an email and I want them to be comma separated. Easy, we’ll the use the -join operator to complete this task
PS > $Lync.Name -join ',' L-FE01,L-PC02,L-PC01,L-FE02,L-Ed01,L-FE04,L-FE03,L-Ed02 PS > PS > # Humm... let's add spaces, too. PS > PS > $Lync.Name -join ', ' # <-- Notice the trailing space. L-FE01, L-PC02, L-PC01, L-FE02, L-Ed01, L-FE04, L-FE03, L-Ed02
Because I’m sold on PowerShell, I’ll always take extra time to use it to its full potential. What I wanted to do was add the word “and” after the last comma and a space, and before the name of the final Lync server. This will make the most sense when my text is dropped into an email and used as, or part of, a sentence. We’ll start this example by determining the location of the last comma by using the .LastIndexOf() method. This returns the location within the string.
PS > $index = (($Lync.Name) -join ', ').LastIndexOf(',') PS > $index 54
Now that we know the location of the last comma, we can remove it and then insert what we want. The next example uses two methods. First the .Remove() method removes the comma, and then the .Insert() method adds everything the way we want it.
PS > (($Lync.Name) -join ', ').Remove($index,1).Insert($index,', and') L-FE01, L-PC02, L-PC01, L-FE02, L-Ed01, L-FE04, L-FE03, and L-Ed02 PS > PS > (($Lync.Name) -join ', ').Remove($index,1).Insert($index,', and') | clip.exe
In the last above line, we reran the command and piped it to clip, so that it’s ready to be pasted into my email. After you do this awhile, you find little ways in PowerShell to handle the exact formatting you want. It’s these little tasks, that will give you an opportunity to continue to practice your PowerShell. And finally, here’s the email where I entered the information I had collected and formatted in PowerShell.