PowerShell seems to perform bounds-checking after arithmetic operations and conversions. For instance, the following operations fail:
[byte]$a = 255
$a++
$a = [byte]256
Is there any way to enforce overflows or the typecast without resorting to a manual calculation via modulo or C# and Add-Type?
The behavior you want in PowerShell is achievable, though, it's a bit of a hack; and maybe there's a better way.
If you just want cryptographic functionality though, it's worth calling out, that there's a TON of that already built-in to the BCL, and it's fully accessible from PowerShell (MD5, SHA, RSA, X509, a ton of other stuff too).
But if you're dead set on performing unchecked arithmetic in PowerShell, this is a hack that should give you what you want (basically we're embedding C# code, and using the unchecked keyword):
Usage:
Of Note:
[Helpers.Convert]::To...
and not[System.Convert]::To...
.$members
block at the top of the code.Add-Type
multiple times in a row for the sameNamespace
andName
combination, in the same PowerShell session, it will fail; and you will be left with the previously registered type. -- I've added-ErrorAction SilentlyContinue
to ignore this specific scenario. -- That way, you can dump this code into a .ps1 script, and call it every single time, before you use them methods, and they will always be present. -- But if you are modifying the C# code and retesting, you will want to change the type name after every change you make; it's kind of painful.PowerShell is a scripting language, not a programming language, it doesn't support a lot of advanced techniques like overloading operators (which would be handy in this case).
To add to the things you have already suggested, you could just catch the error.
Or write your own function and do some modulo fun in there.