PowerShell is underrated. For those who haven't tried it:
* It's part-REPL, part-shell
* In addition to plain text, you can pipe objects between cmdlets
* Integrating with .NET dlls is very easy
* Objects can be represented as directories using a provider model (eg, navigate the windows registry: cd HKLM:\Software\Microsoft)
On the other hand, I always found asynchrony/concurrency in PS to be a PITA. I wish it had async/await.
For an example of how to write a PowerShell module, check out this PR on Orleans (open source .NET virtual actor framework) which lets you call into remote actors: https://github.com/dotnet/orleans/pull/1990