If the intent is to protect your code to stop people from copying it then that's just not going to be possible. Obfuscation can be very easy to bypass in PowerShell due to things like scriptblock logging and the fact that PowerShell itself needs to parse the plaintext script at runtime to actually produce the code to run. You could migrate the code to compiled languages like C# but decompiling C# binaries is trivial and while there are tools to obfuscate this code there are also tools to help de-obfuscate them. You are starting to move into territory where you need to pay for obfuscation tools and even then it's not guaranteed to work.
If it's to just stopping the casual user from seeing the code and simply copying it then you could use one of the many ps2exe tools out there but I wouldn't recommend it. You are now adding more complexity to the process, most of these tools are flagged by Antivirus tools so you now need to deal with that, and once again someone who really wants to copy the tool can easily do so anyway.
If it's about ensuring the data isn't changed then script signing is an option but that's only really useful if you are validating the file explicitly before running it. People who modify the script can easily just remove the signature to stop it failing there so whatever is calling it either needs to be in an environment where only signed scripts are allowed in run or is manually checking the signature is present and valid before hand.
Honestly if it was me I would keep it as a .ps1, look at script signing if you are in an environment where you can use a trusted CA to sign your script. If you are trying to stop people from just copying the code and not paying you that's a legal issue and not something that can be fixed as a technical issue. You can only make it slightly more inconvenient to the end user to do so but even then it's not that inconvenient.