True and valid point. how dotNet libraries are invoked is often absurdly baroque but usually PowerShell can handle invoking with the correct types. In fact if the library is complete the types can be imported into PS with just a reference. However when you get down to that level you might as well be programming in C#.
One has to be careful not to abuse this too much. For example I once wrote some amusing PS code for generating C# code based on parameters and creating a signed assembly to then stuff into SQL Server directly for use as a function called by scripts invoked in a distributed environment. This was a performance optimization for scrubbing multi-billion row tables in a live system, IIRC. My excuse? it was a death march. Amusingly I also invoked the SAS motto to help characterize the rationale for the risk acceptance meeting..."who dares, wins".
Abuse? What could go wrong?