You may be in a situation where you need to dynamically set the hostname of a machine as part of your SCCM task sequence. For a zero touch deployment you'll want to use a method that requires no interaction. In my experience I've found that using the serial number of the machine provides a decent unique string.
A note about Windows hostname length. On some forums the maximum size of a Windows hostname is a debate, however I find it best to stick to what Microsoft has published on their site, 15 character maximum and a restriction on some special characters. https://support.microsoft.com/en-us/kb/909264
Know what platform you're deploying to
In order to support both physical and virtual platforms I set up most task sequences with separate rules to accommodate physical and virtual machines.
Physical Machines
Each Name Workstation has a different condition associated with it, for example the Name Workstation (Physical) step will only run if the system mode does not equal "Virtual Machine".
For workstations I like to use only the serial number of the computer which can be accomplished by just typing %SerialNumber% into the Value: box. Most manufactures use a unique string that is fewer than 10 characters, however you should take some samples in your environment first, below is a screenshot of a home built PC that I use, I believe it is an ASRock motherboard. You can see what the serial number of a machine is by opening a PowerShell prompt and typing "Get-WMIObject Win32_BIOS"
VMWare Virtual Machines
VMWare VMs are a different beast, they have very long serial numbers that contain spaces. See example below
Because of the long serial number what I like to do is just take the last two characters and prefix it with "VM-" (obviously this gives you less entropy, but I haven't found the need to image many VMWare machines yet). You'll see in the screenshot below you can do some basic string manipulation using VB script syntax, we're taking the right most two characters from the %SerialNumber% task sequence variable, then adding "VM-" to the beginning.
To ensure this step only runs on a VMWare virtual machine I use the following criteria.
Hyper-V Virtual Machines
Hyper-V is similar to VMWare where the serial number is going to be long, however the format is a bit easier to work with.
For Hyper-V I take the rightmost 8 characters of the serial number and prefix that with "VM-"
In order to ensure this only runs on the Hyper-V platform I use the following conditions
Final Thoughts
There are many ways to accomplish the task when you're working with computers. Hopefully these examples put you on the right track for a task sequence that can accommodate your needs. Comment on this if you know a better way of doing it, I'd like to hear how others are accomplishing this.