Quantcast
Channel: TechNet Blogs
Viewing all articles
Browse latest Browse all 34890

The parsing mystery of my HERE-STRING

$
0
0

I was helping a friend re-write a script to make it visually more appealing.   For some scenarios I LOVE using Here-Strings.

If you've never encountered one a Here-String looks like this

$Somedata=@'
Here is something I am writing
This is what it will look like at the end
Isn't this cool?
'@

And literally it will output to the scene just the way it looks.   Like this.

I like to think of them as "Here, this is what it will look like String"

Another form of Here-String uses double quotes.   This allows the internal content to be evaluated and parsed which means you can plug in variables.   It's a bit slower because you are parsing the content but allows you to neat things, like a simple form letter when welcoming an Employee

$Welcome=@"
Hello $FirstName $LastName and welcome to Contoso!

Your login ID is $LoginID

Your Temporary password is $SecretPassword
"@

Here's what that might look like.

But here is where I ran into a problem.   I can also do THIS in a Here-String.

$Stuff=@"
$($FirstName.Substring(0,4)) is the first Four letters of your First Name.
"@

So when you see $() in a String it's say "Run this code and the output of this will be injected into the string...."

This works fine if the output is a pure string.   But what if you have some really cool stuff like Event logs,  content from Active Directory or anything that's output is a pinch more than a String.

Initially if you do this.

$Output=@"
Woohoo!  Check out my cool event logs!
$(Get-EventLog -logname System -newest 15)
"

You end up with this mess.

That's because a Here-String (just like a regular String object) can ONLY deal with "String" data and this is a .NET Object that was produced by Get-EventLog.

So you just need to help it all.   You can (in most cases!) Convert that into something perfectly useful by piping the results into an OUT-String Cmdlet.

$Output=@"
Woohoo!  Check out my cool event logs!
$(Get-EventLog -logname System -newest 15| Out-String)
"

Now you'll get something much more useful like below!

This is not just isolated to Here-Strings but regular strings as well.   But the same trick works both ways.  Neat eh?

Just a little something fun I thought I'd share out today!

Cheers all and remember, the Power of Shell is in YOU!

Sean
the EnergizedTech, Microsoft PFE


Viewing all articles
Browse latest Browse all 34890

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>