The BlockRange object is a block range descriptor containing three key fields: SourceBlockNumber, DestinationBlockNumber, and BlockCount. For LUNs, these block ranges are 512-byte LBA ranges, and for WAFL files they are 4k blocks.
You can create a BlockRange object using the New-Object cmdlet, for example:
Calculating the block ranges is the tricky part. For WAFL files it is fairly straightforward as long as you remember there are 4096 bytes in a WAFL block. If you are trying to sub-file clone a file on a LUN, it is significantly more complicated (and risky). You must find the block ranges the file occupies on the LUN, then calculate which block ranges fall in the part of the file you want to clone. Copy-NaHostFile handles this for you, but does not do sub-file cloning. Getting the source and destination block numbers wrong could very easily corrupt the LUN.