In an air-gapped or disconnected environment, license entitlement for VMware Cloud Foundation (VCF) involves a multi-step file exchange between the VCF Business Service Console (BSC) and your deployed VCF Operations instance.
Below is a visual that outlines the workflow between VCF BSC (red) and VCF Operations (orange):
Note: This workflow is also applicable to VMware vSphere Foundation (VVF) deployments as well.
For organizations managing multiple VCF Fleet deployments, automation is essential to operating at scale. Back in September, I had written a blog post that demonstrated some of the VCF Operations APIs that can be used to address the orange boxes above, but that was only half the solution.
However, the steps outlined in the red boxes were not covered and a recent question came up on whether those operations could also be automated?
The answer is YES! Using the VCF Business Service Console (BSC) API, users can fully automate the end-to-end workflow for VCF license entitlement.
To demonstrate the complete workflow outlined in the diagram above and to provide users with a ready to use solution, I have created a comprehensive PowerShell Module called Broadcom.Community.VCFLicensing that can contains the following functions:
- Connect-VcfBsc
- Connect-VcfOperations
- Download-VcfBscLicense
- Download-VcfOperationsRegistrationFile
- Download-VcfOperationsUsageFile
- Get-VcfBscCLicense
- Get-VcfOperationsEntitlements
- Get-VcfOperationsVcenters
- Import-VcfOperationsLicenseFile
- Import-VcfOperationsUsageFile
- Register-VcfOperations
- Set-VcfBscCLicense
- Set-VcfOperationsLicenseAssignment
Step 1 - Install the Powershell Module by running the following command:
Install-Module Community.VCFLicenseEntitlement
Step 2 - Login to VCF BSC portal (https://vcf.broadcom.com) to create an OAuth API Client by navigating to Access Management->OAuth Apps and make a note of the Client ID and Client Secret.
You will also need to make a note of your BSC Tenant ID, which can be obtained by hovering over the info icon next to your SiteID on the left hand navigation.

Step 3 - Login to your VCF Operations instance using the Connect-VcfOperations function with FQDN and credentials:
$VCF_OPERATIONS_HOSTNAME="vcf01.vcf.lab" $VCF_OPERATIONS_USERNAME="admin" $VCF_OPERATIONS_PASSWORD='' Connect-VcfOperations -Fqdn $VCF_OPERATIONS_HOSTNAME -User $VCF_OPERATIONS_USERNAME -Password $VCF_OPERATIONS_PASSWORD
Step 4 - Run the Download-VcfOperationsRegistrationFile function to download the registration file from your VCF Operations instance to your local system as shown in the screenshot below.
![]()
Step 5 - Connect to VCF BSC using Connect-VcfBsc function with the Client ID/Secret and Tenant ID from Step 2
$VCF_BSC_OAUTH_CLIENT_ID="" $VCF_BSC_OAUTH_CLIENT_SECRET="" $VCF_BSC_TENANT_ID="" Connect-VcfBsc -ClientId $VCF_BSC_OAUTH_CLIENT_ID -SecretId $VCF_BSC_OAUTH_CLIENT_SECRET
Step 6 - Register your VCF Operations instance by using the Register-VcfOperations function providing the registration file that was downloaded from Step 4 and friendly name to label your VCF Operations instance in VCF BSC portal.
$VCF_OPERATIONS_REGISTRATION_LABEL="vcf01.vcf.lab" $VCF_OPERATIONS_REGISTRATION_FILE="Registration-vcf01.vcf.lab-2025-12-16T15_03_43Z.data" Register-VcfOperations -TenantId $VCF_BSC_TENANT_ID -RegistrationFile $VCF_OPERATIONS_REGISTRATION_FILE -Name $VCF_OPERATIONS_REGISTRATION_LABEL

Once your VCF Operations instance has been registered successfully, you will see an ID that is returned, make a note of that as you will need it later.
Step 7 - Make sure you have already created license entitlements using the VCF BSC portal, especially if you want to assign a subset of the entitlements to a given VCF Operations instance. In my example, I have created the following two entitlements:
- william-vcf with 64 Cores of VCF entitlements
- william-vsan with 64 TiB of vSAN entitlements

We will need the entitlement IDs that you wish to associate with a given VCF Operations by using the Get-VcfBscCLicense function. You can also filter by a specific entitlement label by providing -Name property.
Get-VcfBscCLicense -TenantId $VCF_BSC_TENANT_ID
Make a note of all entitlement IDs as you will need that in the next step.
Step 8 - We will now associate the entitlement IDs to your VCF Operations by using the Set-VcfBscCLicense function provided with the VCF Operations ID (retrieved from Step 6) and the entitlement IDs from Step 7
$VCF_BSC_OPERATIONS_REGISTRATION_ID=""
$VCF_BSC_LICENSE_IDS=@("efaa38b7-08ac-452f-929b-d30f6d37fba5","fc711690-f8d3-4209-a06e-529c39979251")
Set-VcfBscCLicense -TenantId $VCF_BSC_TENANT_ID -VcfOperationsId $VCF_BSC_OPERATIONS_REGISTRATION_ID -LicenseIds $VCF_BSC_LICENSE_IDS -Operation Associate
![]()
Note: We can also remove entitlements from a given VCF Operations by specifying the Disassociate for the Operation parameter.
Step 9 - We can now download the license entitlement file for our VCF Operations instance by using the Download-VcfBscLicense function and provide the filename to save the license file to.
$VCF_LICENSE_FILE="vcf01.vcf.lab.lic" Download-VcfBscLicense -TenantId $VCF_BSC_TENANT_ID -VcfOperationsId $VCF_BSC_OPERATIONS_REGISTRATION_ID -LicenseFile $VCF_LICENSE_FILE
![]()
Step 10 - We can now import the license file into your VCF Operations instance by using the Import-VcfOperationsLicenseFile function and the name of the license file from previous step.
$VCF_LICENSE_FILE="vcf01.vcf.lab.lic" Import-VcfOperationsLicenseFile -LicenseFile $VCF_LICENSE_FILE
![]()
Step 11 - Before we can assign the imported license entitlements to a particular vCenter Server that is managed by your VCF Operations instance, we need to retrieve the entitlement IDs and vCenter Server IDs. To do so, you can use the Get-VcfOperationsEntitlements and Get-VcfOperationsVcenters functions respectively and make note of the IDs.
![]()
Step 12 - We can finally assign the license entitlements to a specific vCenter Server using the Set-VcfOperationsLicenseAssignment function with the provided IDs from the previous Step.
$VCENTER_ID="df688ce4-66d6-4adf-b33b-8926bad4be48"
$VCF_LICENSE_IDS=("efaa38b7-08ac-452f-929b-d30f6d37fba5","fc711690-f8d3-4209-a06e-529c39979251")
Set-VcfOperationsLicenseAssignment -VcenterId $VCENTER_ID -VcfLicenseIds $VCF_LICENSE_IDS
![]()
If you now login to your VCF Operations UI and navigate to License Management->Licenses, we can see that we have successfully completed the license entitlement workflow and our selected vCenter Server has been assigned with both our VCF and vSAN entitlements!

After completing your initial VCF Operations registration, you will have up to 180 days before you need to provide a usage report and then download an updated license entitlement from VCF BSC portal.
You can automate this of course by using the Download-VcfOperationsUsageFile function.
![]()
To upload the usage file into VCF BSC, you will use the
$VCF_OPERATIONS_USAGE_FILE="Usage-vcf01.vcf.lab-2025-12-16T21_09_14Z.gzip" Import-VcfOperationsUsageFile -TenantId $VCF_BSC_TENANT_ID -UsageFile $VCF_OPERATIONS_USAGE_FILE
![]()
After successfully importing the usage file, you can then download a new license entitlement file by using the same Download-VcfBscLicense function as shown in Step 9.

Thanks for the comment!