I use it for back-end work on our nebulous Outlook 365 instance.
They went out of their way to come up with the most tortured syntax of any scripting language out there. Using -parameter styling for everything, including the boolean operators, gets very tiring very soon. And only popular properties have command parameters. Good luck getting/setting the rest. At best, it makes the code hard to maintain. Also, because a command sports a certain parameter does not mean that property exists on the object, or is accessible. It is up to you to crash into those.
Pipes don't work as it says on the tin. i.e. you should be able to do things like
get-mailbox -filter {foo} | set-mailbox -customattribute1 bar
but the set can't get to get's iterated object. So you have to assign the first part to a variable, which causes all the mailboxes to be downloaded to the local PC, then back. Fantastic, if you have all day.
They went out of their way to come up with the most tortured syntax of any scripting language out there. Using -parameter styling for everything, including the boolean operators, gets very tiring very soon. And only popular properties have command parameters. Good luck getting/setting the rest. At best, it makes the code hard to maintain. Also, because a command sports a certain parameter does not mean that property exists on the object, or is accessible. It is up to you to crash into those.
Pipes don't work as it says on the tin. i.e. you should be able to do things like
get-mailbox -filter {foo} | set-mailbox -customattribute1 bar
but the set can't get to get's iterated object. So you have to assign the first part to a variable, which causes all the mailboxes to be downloaded to the local PC, then back. Fantastic, if you have all day.