Forum Discussion
AP_TC_ECASD
Sep 30, 2025Brass Contributor
New-MgBookingBusinessService | Customer Information Questions
I'm trying to turn off the stock Customer Information questions except for the customer email using PowerShell and New-MgBookingBusinessService and cannot seem to figure it out. Any assistance is much appreciated!
# Prompt for Booking Business ID
$bookingBusinessId = Read-Host "Enter the Booking Business ID (e.g., email address removed for privacy reasons)"
# Prompt for default duration in minutes
$defaultDurationMinutes = Read-Host "Enter default appointment duration in minutes (e.g., 15)"
$defaultDuration = [TimeSpan]::FromMinutes([double]$defaultDurationMinutes)
# Post-buffer stays at 5 minutes
$postBuffer = [TimeSpan]::FromMinutes(5)
# Hardcoded Excel file path
$excelFilePath = "C:\Users\apettit\OneDrive - Eau Claire Area School District\Downloads\adamtestconferencedata.xlsx"
# Prompt for worksheet/tab name
$sheetName = Read-Host "Enter the worksheet/tab name to read data from"
# Import Excel data using Import-Excel (requires ImportExcel module)
if (-not (Get-Module -ListAvailable -Name ImportExcel)) {
Install-Module -Name ImportExcel -Scope CurrentUser -Force
}
Import-Module ImportExcel
$staffEmails = Import-Excel -Path $excelFilePath -WorksheetName $sheetName
# Retrieve all staff members for the booking business
Write-Host "Fetching all staff members for booking business ID: $bookingBusinessId"
$allStaff = Get-MgBookingBusinessStaffMember -BookingBusinessId $bookingBusinessId
if (-not $allStaff) {
Write-Error "No staff members found for the booking business ID: $bookingBusinessId"
return
}
# Retrieve all custom questions
Write-Host "Fetching all custom questions for booking business ID: $bookingBusinessId"
$allCustomQuestions = Get-MgBookingBusinessCustomQuestion -BookingBusinessId $bookingBusinessId
if (-not $allCustomQuestions) {
Write-Error "No custom questions found for the booking business ID: $bookingBusinessId"
return
}
# Loop through each staff member from Excel automatically
Write-Host "Creating individual booking services for each staff member..."
foreach ($row in $staffEmails) {
$email = $row.emailAddress.Trim().ToLower()
# Automatically match staff from Booking Business
$matchingStaff = $allStaff | Where-Object {
$_.AdditionalProperties["emailAddress"] -and ($_.AdditionalProperties["emailAddress"].Trim().ToLower() -eq $email)
}
if ($matchingStaff) {
$staffId = $matchingStaff.Id
$displayName = $matchingStaff.AdditionalProperties["displayName"]
Write-Host "Automatically creating service for: ${displayName} ($email)" -ForegroundColor Cyan
try {
# Prepare custom questions
$customQuestions = $allCustomQuestions | ForEach-Object -Begin { $isLast = $false } -Process {
$isLast = ($_.Id -eq $allCustomQuestions[-1].Id)
$questionAssignment = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphBookingQuestionAssignment
$questionAssignment.QuestionId = $_.Id
$questionAssignment.IsRequired = if ($isLast) { $false } else { $true }
$questionAssignment
}
# Prepare the reminder
$defaultReminder = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphBookingReminder
$defaultReminder.Message = "Don't forget! Family Teacher Conferences are tomorrow, and we are excited to visit with you! If you wish to change the meeting type (virtual, in-person, hybrid, or phone), please let the teacher know as soon as possible!"
$defaultReminder.Offset = [TimeSpan]::FromDays(1)
$defaultReminder.Recipients = @("customer")
# Prepare service parameters
$serviceParams = @{
BookingBusinessId = $bookingBusinessId
DisplayName = "${displayName} Family Conference"
Description = "Family Teacher Conference with ${displayName}"
StaffMemberIds = @($staffId) # Assign specific staff member
DefaultDuration = $defaultDuration
DefaultPrice = 0.00
DefaultPriceType = "free"
CustomQuestions = $customQuestions
PostBuffer = $postBuffer
IsLocationOnline = $true
IsCustomerAllowedToManageBooking = $true
DefaultReminder = $defaultReminder
AdditionalInformation = @"
Please arrive on time for your conferences as we will be sticking to a tight schedule.
If you wish to change the meeting type (virtual, in-person, hybrid, or phone), please let the teacher know as soon as possible.
If you require a translator, please submit a request at this form: https://forms.office.com/r/XWwBFWP7XD
"@ # Appears in the customer confirmation email
AdditionalProperties = @{
customerEmail = @{ isRequired = $true } # Only email field remains
}
}
# Log service parameters
Write-Host "Service Parameters for ${displayName}:" -ForegroundColor Blue
$serviceParams.GetEnumerator() | ForEach-Object { Write-Host "$($_.Key): $($_.Value)" }
# Create the booking service
New-MgBookingBusinessService @serviceParams
Write-Host "Booking service successfully created for ${displayName}!" -ForegroundColor Green
} catch {
Write-Error "Failed to create booking service for ${displayName}: $_"
}
} else {
Write-Warning "No match found for email: $email"
}
}
No RepliesBe the first to reply