There are two scenarios, the first is with a chef server and the second is without a chef server.
If you are using a chef server in your environment, you can get the effect of bootstrapping the node, but you have to push that step either earlier in the machine provisioning lifecycle (including chef-client in the image or installing it as part of it’s cloud-init or system setup). Once you have chef-client (and your basic configuration information - a client.rb that points it to your chef-server and a validator key that can register the new node), the chef-client can run (either via a scheduled task or some other orchestration (maybe azure automation or powershell workflows for example) and register with the chef server.
The other main scenario is without a chef server, in which case you just need to get the chef-client installed (again either as part of the image or part of your image deployment process) and getting a scheduled task set up to run chef-client in “local-mode”. That will require that you get all the cookbooks you need to that local node as well.
In either case, you have to do some work either as part of your base image creation, at the time your new system is provisioned, or after provisioning via some other orchestration or command execution tool.