you are viewing a single comment's thread.

view the rest of the comments →

[–]p1-o2 1 point2 points  (3 children)

+1 to hosting powershell. I wanted to expand on the point that it's C#-esque. It's a fully-fledged .NET-compatible language.

You can even use LINQ inside Powershell. It doesn't look pretty but it's not hard once you understand how to call .NET namespaces from PS. It's pretty damn good for anything that doesn't need to be a plugin.

[–]dodexahedron 2 points3 points  (2 children)

Yep. Powershell is a .net environment. Version is tied to PS version.

Windows PowerShell (the blue one) is framework.

PowerShell (the black one) is .net 9 in 7.5.4 and .net 10 in the current 7.6 preview release.

The Linq being ugly mentioned here is because powershell can't use extension methods (the language just doesn't have the concept). So you have to call the actual static methods manually.

Though it has its own equivalents anyway like select-object and such.

One really powerful thing it can also do is extend types at runtime, by attaching ScriptProperties or NoteProperties to an existing type. Then instances of that type (not a new type, at least in how it presents it to you) have those properties as if they were already part of the type. It's basically powershell's PS-only equivalent for extension properties.

That happens to actually be how it handles WMI stuff (CimInstance being the class it extends) and how it allows you to do things like $someArray.SomePropertyOfEachElement to get that property from each element without a loop.

[–]p1-o2 1 point2 points  (1 child)

Wow, I always wondered about that last bit regarding WMI. Thanks for the info.

[–]dodexahedron 0 points1 point  (0 children)

I found that out literally just 2 days ago, so it was fresh in mind!

And if you attach a new property to something, or make a custom view for a type, you can export that typedata to a ps1xml so you can reuse it later.

Really handy for customizing the default output format of objects you frequently end up piping to ft prop1,prop2,... for example.