This is a problem I've encountered as well. When a calendar is shared with a user directly, it also adds the calendar to the user's calendar list. Sharing the calendar through a group bypasses this step.
You can do this programmatically using Google Apps Manager as part of your provisioning process. These three commands below will create a user, add them to the group that gives access to the calendar, and add the shared calendar to the user's calendar list.
gam create user <user email address> firstname <First Name> lastname <Last Name> password <Password>
gam update group <group> add member user <user email address>
gam user <user email address> add calendar <calendar email address> selected true hidden false
Note that the "calendar email address" referenced above is the unique address associated with the calendar. You can find it by going to the settings page for that calendar (blue circle > red box):
Next scroll down until you get to the "Calendar Address" section. The email address is listed after "Calendar ID:"
If you want to make this even easier, you can script the GAM commands with Powershell. If you had a file (provisioning.csv) like the following:
And a powershell file (createuser.ps1) like the following:
$list = Import-Csv provisioning.csv
foreach ($entry in $list)
.\gam.exe create user $($entry.username) firstname $($entry.firstname) lastname $($entry.lastname) password $($entry.password)
.\gam.exe update group <group> add member user $($entry.username)
.\gam.exe user $($entry.username) add calendar <calendar email address> selected true hidden false
Just open the powershell cli (powershell.exe), cd to the directory where provisioning.csv and and createuser.ps1 reside, and type .\createuser.ps1 to execute the script.
You may need to configure Powershell to accept unsigned scripts.