I really struggle with PowerShell - so many things don't work like I expect them to (e.g. passing arguments to the command line, which is surprisingly hard given that's one of the problems it was meant to solve; anything involving operators - these are different from any other language; different error condition semantics for the different built-in commands; default error handling behaviour; etc.)
Having the power of .Net in a scripting language is great, but it would have been even nicer if that language was consistent with the others on the platform (C#, JS, Ruby, Python for instance.) In fact I regularly think of converting our existing PS deployment scripts to Python, and better tooling support would definitely help.
I used to struggle with it too, until some time ago I think it all kind of clicked in place.
Don't try and think of it as similar to other shells like bash, but as an interactive console for objects. The operators, flow mechanisms and semantics make a lot of sense from that perspective, at least to me.
I've found that in that capacity, and as soon as I grokked the object pipeline, it's a wonderful tool with access to the entire .net ecosystem and a really hard push from Microsoft to have support for it on most of their tools
I've been automating several procedures with it and it's been working great.
That said, I also have some (iron)python scripts for some other tasks that don't involve as much glue between applications and services.
Having the power of .Net in a scripting language is great, but it would have been even nicer if that language was consistent with the others on the platform (C#, JS, Ruby, Python for instance.) In fact I regularly think of converting our existing PS deployment scripts to Python, and better tooling support would definitely help.