I just create the VM from the template and not power it on. From there I can change the hardware specs with Set-VM. I've gone through and added NICs and adjusted Memory, Disk and CPU per system type. Once that's done, I power on the system and use the Invoke-VMScript to change network settings (setting static IP's) or anything else I need like installing security tools. Customizations are nice, but I've found them limiting so I prefer to just hit the OS and make changes I need although I'm leaning more towards Desired State Configuration for changes made after the VM get's powered on.
Peace