Uso de PowerShell para conectar turnos a UKG Pro Workforce Management
Información general
Use el conector Turnos de Microsoft Teams para UKG Pro Workforce Management para integrar la aplicación Shifts en Microsoft Teams con UKG Pro Workforce Management (UKG Pro WFM). Los trabajadores de primera línea pueden ver y administrar sin problemas sus programaciones en UKG Pro WFM desde shifts.
En este artículo, le guiaremos a través de cómo usar PowerShell para configurar y configurar el conector para integrar Shifts con UKG Pro WFM.
Para configurar la conexión, ejecute un script de PowerShell. El script configura el conector, aplica la configuración de sincronización, crea la conexión y asigna instancias de UKG Pro WFM (también denominadas instancias de WFM) a los equipos de Teams. La configuración de sincronización determina las características habilitadas en Turnos y la información de programación sincronizada entre UKG Pro WFM y Shifts. Las asignaciones definen la relación de sincronización entre las instancias de WFM y los equipos de Teams. Puede asignar a los equipos existentes y a los nuevos equipos.
Proporcionamos dos scripts. Puede usar cualquiera de los scripts, dependiendo de si desea asignar a los equipos existentes o crear nuevos equipos a los que asignar.
Puede configurar varias conexiones, cada una con una configuración de sincronización diferente. Por ejemplo, si su organización tiene varias ubicaciones con requisitos de programación diferentes, cree una conexión con una configuración de sincronización única para cada ubicación. Tenga en cuenta que una instancia de Blue Yonder WFM solo se puede asignar a un equipo en un momento dado. Si una instancia ya está asignada a un equipo, no se puede asignar a otro equipo.
Con UKG Pro WFM como sistema de registro, los trabajadores de primera línea pueden administrar de forma eficaz sus programaciones y disponibilidad en turnos en sus dispositivos. Los administradores de primera línea pueden seguir usando UKG Pro WFM para configurar programaciones.
Nota:
También puede usar el asistente del conector Shifts en el Centro de administración de Microsoft 365 para conectar Shifts a UKG Pro WFM.
Antes de empezar
Requisitos previos
Tómese tiempo para revisar la información y completar todas las tareas de requisitos previos y configuración en Requisitos previos y requisitos para el conector turnos de Teams para UKG Pro Workforce Management.
Asegúrese de completar todas las tareas antes de seguir los pasos de este artículo.
Rol de administrador para administrar el conector mediante PowerShell
Debe ser administrador global de Microsoft 365 o administrador de conectores de turnos para completar los pasos de este artículo.
El rol de administrador del conector Shifts es un rol personalizado que se crea en Microsoft Entra ID y se asigna a un usuario. El nombre del rol debe ser "Administrador de conector de Turnos". No es necesario que el rol tenga permisos específicos, aunque se debe establecer al menos un permiso al crearlo. El servicio se basa en la presencia del rol en el usuario y no en sus permisos.
Para obtener más información, consulte Creación y asignación de un rol personalizado en Microsoft Entra ID y Asignación de roles de Microsoft Entra a los usuarios. Tenga en cuenta que el rol puede tardar hasta 24 horas en crearse y aplicarse a un usuario.
Importante
Microsoft recomienda utilizar roles con la menor cantidad de permisos. Esto ayuda a mejorar la seguridad de la organización. Administrador global es un rol con privilegios elevados que debe limitarse a escenarios de emergencia cuando no se puede usar un rol con menos privilegios.
Configurar el entorno
Instale PowerShell versión 7 o posterior. Para obtener instrucciones paso a paso, consulte Instalar PowerShell en Windows.
Ejecute PowerShell en modo de administrador.
Instalar el módulo de PowerShell de Microsoft Graph.
Install-Module Microsoft.Graph Import-Module Microsoft.Graph
Compruebe que es la versión 1.6.1 o posterior.
Get-InstalledModule Microsoft.Graph
Instalar el módulo de PowerShell de Teams en versión preliminar.
Install-Module -Name MicrosoftTeams -AllowPrerelease -Force Import-Module MicrosoftTeams
Compruebe que es al menos la versión 4.7.0 y contiene los cmdlets del conector Shifts.
Get-Command -Module MicrosoftTeams -Name *teamsshiftsconnection*
Establezca PowerShell para salir si se produce un error al ejecutar el script.
$ErrorActionPreference = "Stop"
Habilitación de la ejecución de scripts en Windows.
Set-ExecutionPolicy bypass
Conectarse a Teams
Ejecute lo siguiente para conectarse a Microsoft Teams.
Connect-MicrosoftTeams
Cuando se le solicite, inicie sesión con sus credenciales de administrador. Ahora está configurado para ejecutar los scripts de este artículo y los cmdlets del conector Turnos.
Identificar los equipos que desea asignar
Nota:
Complete este paso si va a asignar instancias de WFM a equipos existentes. Si va a crear nuevos equipos a los que asignará estas instancias, puede omitir este paso.
En Azure Portal, vaya a la página Todos los grupos para obtener una lista de los TeamIds de los equipos de su organización.
Tome nota de los identificadores de equipo de los equipos que desea asignar. El script le pedirá que escriba esta información.
Nota:
Si uno o varios equipos tienen una programación existente, el script quitará las programaciones de esos equipos. De lo contrario, verá turnos duplicados.
Ejecutar el script
Ejecute uno de los siguientes scripts, en función de si va a crear un nuevo equipo o asignarlo a un equipo existente:
- Para configurar una conexión, cree un nuevo equipo en Teams y asigne una instancia de WFM al nuevo equipo, ejecute el nuevo script de teams.
- Para configurar una conexión y asignar instancias de WFM a equipos existentes en Teams, ejecute el script de teams existente.
Siga las instrucciones en pantalla al ejecutar el script. El script completa las siguientes acciones:
Pruebe y compruebe la conexión a UKG Pro WFM mediante las credenciales de la cuenta de servicio de UKG Pro WFM y las direcciones URL de servicio que especifique.
Aplicar la configuración de sincronización. Esta configuración incluye la frecuencia de sincronización (en minutos) y los datos de programación sincronizados entre UKG Pro WFM y Shifts. Puede habilitar los datos de programación definidos por estos escenarios:
Shift
,SwapRequest
, ,UserShiftPreferences
OfferShiftRequest
,OpenShift
,OpenShiftRequest
,TimeOff
,TimeOffRequest
.Para obtener más información, consulte New-CsTeamsShiftsConnectionInstance. Para ver la lista de opciones de sincronización admitidas para cada parámetro, ejecute Get-CsTeamsShiftsConnectionConnector.
Nota:
El script habilita la sincronización para cada opción de sincronización admitida. Si desea cambiar la configuración de sincronización, puede hacerlo después de configurar la conexión. Para más información, consulte Uso de PowerShell para administrar la conexión de Turnos a UKG Pro Workforce Management.
Asigne instancias de WFM a los equipos de Teams.
- Si decide ejecutar el nuevo script de teams para crear nuevos equipos, las asignaciones se basan en los nuevos equipos que cree.
- Si decide ejecutar el script de teams existente para asignar los equipos existentes, las asignaciones se basan en los identificadores de instancia de WFM y teamid que especifique. Si un equipo tiene una programación existente, el script quita todos los datos de programación.
Después de ejecutar el script, un mensaje correcto confirma si la conexión se ha configurado correctamente.
Administrar la conexión
Una vez configurada una conexión, puede administrarla y realizar cambios en ella en el Centro de administración de Microsoft 365 o mediante PowerShell.
Uso del Centro de administración de Microsoft 365
La página Administración de conectores muestra cada conexión que ha configurado, junto con información como el estado de mantenimiento y los detalles del intervalo de sincronización. También puede acceder al asistente para realizar cambios en cualquiera de las conexiones. Por ejemplo, puede actualizar la configuración de sincronización y las asignaciones de equipo.
Para más información, consulte Uso del Centro de administración de Microsoft 365 para administrar la conexión de Turnos a UKG Pro Workforce Management.
Usar PowerShell
Puede usar PowerShell para ver un informe de errores, cambiar la configuración de conexión, deshabilitar la sincronización, etc. Para obtener instrucciones paso a paso, consulte Uso de PowerShell para administrar la conexión de Turnos a UKG Pro Workforce Management.
Scripts
Configuración de una conexión y creación de un nuevo equipo
#Map WFM instances to teams script
Write-Output "Map WFM sites to teams"
Start-Sleep 1
#Ensure Teams module is at least version x
Write-Output "Checking Teams module version"
try {
Get-InstalledModule -Name "MicrosoftTeams" -MinimumVersion 5.2.0
} catch {
throw
}
#Connect to MS Graph
Connect-MgGraph -Scopes "User.Read.All","Group.ReadWrite.All"
#List connector types available
Write-Output "Listing connector types available"
$UkgId = "95BF2848-2DDA-4425-B0EE-D62AEED4C0A0"
$connectors = Get-CsTeamsShiftsConnectionConnector
Write-Output $connectors
$Ukg = $connectors | Where-Object {$_.Id -match $UkgId}
if ($NULL -eq $Ukg) {
throw "UKG Dimensions not currently supported"
}
#Prompt for entering of WFM username and password
$WfmUserName = Read-Host -Prompt 'Input your UKG account username'
$WfmPwd = Read-Host -Prompt 'Input your UKG account password' -AsSecureString
$plainPwd =[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($WfmPwd))
#Test connection settings
Write-Output "Testing connection settings"
$ConnectionName = Read-Host -Prompt 'Input connection name'
$apiUrl = Read-Host -Prompt 'Input connector api url'
$ssoUrl = Read-Host -Prompt 'Input connector sso url'
$clientId = Read-Host -Prompt 'Input connector client id'
$AppKey = Read-Host -Prompt 'Input your app key' -AsSecureString
$plainKey =[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($AppKey))
$ClientSecret = Read-Host -Prompt 'Input your client secret' -AsSecureString
$plainSecret =[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($ClientSecret))
$testResult = Test-CsTeamsShiftsConnectionValidate `
-Name $ConnectionName `
-ConnectorId $UkgId `
-ConnectorSpecificSettings (New-Object Microsoft.Teams.ConfigAPI.Cmdlets.Generated.Models.ConnectorSpecificUkgDimensionsSettingsRequest `
-Property @{
apiUrl = $apiUrl
ssoUrl = $ssoUrl
appKey = $plainKey
clientId = $clientId
clientSecret = $plainSecret
LoginUserName = $WfmUserName
LoginPwd = $plainPwd
})
if ($NULL -ne $testResult.Code) {
Write-Output $testResult
throw "Validation failed, conflict found"
}
Write-Output "Test complete, no conflicts found"
#Create a connection
Write-Output "Creating a connection"
$ConnectionResponse = New-CsTeamsShiftsConnection `
-Name $ConnectionName `
-ConnectorId $UkgId `
-ConnectorSpecificSettings (New-Object Microsoft.Teams.ConfigAPI.Cmdlets.Generated.Models.ConnectorSpecificUkgDimensionsSettingsRequest `
-Property @{
apiUrl = $apiUrl
ssoUrl = $ssoUrl
appKey = $plainKey
clientId = $clientId
clientSecret = $plainSecret
LoginUserName = $WfmUserName
LoginPwd = $plainPwd
})
$ConnectionId = $ConnectionResponse.Id
if ($null -ne $ConnectionId){
Write-Output "Successfully created connection"
} else {
throw "Connection creation failed"
}
#Create a connection instance
Write-Output "Creating a connection instance"
$designatedActorName = Read-Host -Prompt "Input Microsoft 365 System Account (person@contoso.com)"
$designator = Get-MgUser -UserId $designatedActorName
$teamsUserId = $designator.Id
$syncFreq = Read-Host -Prompt "Input sync frequency in minutes"
$InstanceName = Read-Host -Prompt "Input connection instance name"
#Read sync scenarios for connection instance
function GetSyncScenarioSetting {
param (
$SettingName
)
$TwoWay = New-Object System.Management.Automation.Host.ChoiceDescription '&TwoWay', 'TwoWay'
$Disabled = New-Object System.Management.Automation.Host.ChoiceDescription '&Disabled', 'Disabled'
$FromWfmToShifts = New-Object System.Management.Automation.Host.ChoiceDescription '&FromWfmToShifts', 'FromWfmToShifts'
$options = [System.Management.Automation.Host.ChoiceDescription[]]($TwoWay, $Disabled, $FromWfmToShifts)
$result = $host.ui.PromptForChoice("Set sync scenario for $SettingName", "", $options, 0)
switch ($result)
{
0 { return "TwoWay" }
1 { return "Disabled" }
2 { return "FromWfmToShifts" }
}
}
$SyncScenarioOfferShiftRequest = GetSyncScenarioSetting "Offer Shift Request"
$SyncScenarioOpenShift = GetSyncScenarioSetting "Open Shift"
$SyncScenarioOpenShiftRequest = GetSyncScenarioSetting "Open Shift Request"
$SyncScenarioShift = GetSyncScenarioSetting "Shift"
$SyncScenarioSwapRequest = GetSyncScenarioSetting "Swap Request"
$SyncScenarioTimeCard = GetSyncScenarioSetting "Time Card"
$SyncScenarioTimeOff = GetSyncScenarioSetting "Time Off"
$SyncScenarioTimeOffRequest = GetSyncScenarioSetting "Time Off Request"
$SyncScenarioUserShiftPreference = GetSyncScenarioSetting "User Shift Preferences"
#Read admin email list
[psobject[]]$AdminEmailList = @()
while ($true){
$AdminEmail = Read-Host -Prompt "Enter admin's email to receive error report"
$AdminEmailList += $AdminEmail
$title = 'Adding another email'
$question = 'Would you like to add another admin email?'
$choices = '&Yes', '&No'
$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 1) {
break
}
}
$InstanceResponse = New-CsTeamsShiftsConnectionInstance `
-ConnectionId $ConnectionId `
-ConnectorAdminEmail $AdminEmailList `
-DesignatedActorId $teamsUserId `
-Name $InstanceName `
-SyncFrequencyInMin $syncFreq `
-SyncScenarioOfferShiftRequest $SyncScenarioOfferShiftRequest `
-SyncScenarioOpenShift $SyncScenarioOpenShift `
-SyncScenarioOpenShiftRequest $SyncScenarioOpenShiftRequest `
-SyncScenarioShift $SyncScenarioShift `
-SyncScenarioSwapRequest $SyncScenarioSwapRequest `
-SyncScenarioTimeCard $SyncScenarioTimeCard `
-SyncScenarioTimeOff $SyncScenarioTimeOff `
-SyncScenarioTimeOffRequest $SyncScenarioTimeOffRequest `
-SyncScenarioUserShiftPreference $SyncScenarioUserShiftPreference
$InstanceId = $InstanceResponse.id
if ($null -ne $InstanceId){
Write-Output "Success"
} else {
throw "Connector instance creation failed"
}
#Keep mapping teams until user stops it
$mappings=@()
while ($true)
{
#Create a new Teams team with owner set to system account and name set to the site name
Write-Output "Creating a Teams team"
$teamsTeamName = Read-Host -Prompt "Input the Teams team name"
$Team = New-Team -DisplayName $teamsTeamName -Visibility "Public" -Owner $teamsUserId
Write-Output "Successfully created a team"
$TeamsTeamId=$Team.GroupId
#Retrieve the list of wfm locations
Write-Output "Listing the WFM team sites"
$WfmTeamIds = Get-CsTeamsShiftsConnectionWfmTeam -ConnectorInstanceId $InstanceId
Write-Output $WfmTeamIds
if (($NULL -ne $WfmTeamIds) -and ($WfmTeamIds.Count -gt 0)){
[System.String]$WfmTeamId = Read-Host -Prompt "Input the ID of WFM team you want to map"
}
else {
throw "The WfmTeamId list is null or empty"
}
#Retrieve the list of WFM users and their roles
Write-Output "Listing WFM users and roles"
$WFMUsers = Get-CsTeamsShiftsConnectionWfmUser -ConnectorInstanceId $InstanceId -WfmTeamId $WfmTeamId
Write-Output $WFMUsers
#Add users to the Team for Shifts
Write-Output "Adding users to Teams team"
$currentUser = Read-Host -Prompt "Input the current user's user name or AAD ID"
Add-TeamUser -GroupId $TeamsTeamId -User $currentUser -Role Owner
$failedWfmUsers=@()
foreach ($user in $WFMUsers) {
try {
$userEmail = $user.Name + "@" +$domain
Add-TeamUser -GroupId $TeamsTeamId -User $userEmail
} catch {
$failedWfmUsers+=$user
}
}
if($failedWfmUsers.Count -gt 0){
Write-Output "There are WFM users not existed in Teams tenant:"
Write-Output $failedWfmUsers
}
#Enable scheduling in the group
$RequestBody = @{
Enabled = $true
TimeZone = "America/Los_Angeles"
}
$teamUpdateUrl="https://graph.microsoft.com/v1.0/teams/"+$TeamsTeamId+"/schedule"
Invoke-MgGraphRequest -Uri $teamUpdateUrl -Method PUT -Body $RequestBody
#Create a mapping of the new team to the instance
Write-Output "Create a mapping of the new team to the site"
$TimeZone = Read-Host -Prompt "Input the time zone of team mapping"
$mapping = @{
teamId = $TeamsTeamId
wfmTeamId = $WfmTeamId
timeZone = $TimeZone
}
$mappings += , $mapping
$title = 'Connecting another team'
$question = 'Would you like to connect another team?'
$choices = '&Yes', '&No'
$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 1) {
break
}
}
$batchMappingResponse = New-CsTeamsShiftsConnectionBatchTeamMap -ConnectorInstanceId $InstanceId -TeamMapping @($mappings)
if ($null -ne $batchMappingResponse.OperationId){
"The mapping has begun asynchronously. To query mapping results run Get-CsTeamsShiftsConnectionOperation with the operation Id."
}
else {
throw "The mapping has failed due to validation errors."
}
Write-Output $batchMappingResponse
Remove-TeamUser -GroupId $TeamsTeamId -User $currentUser -Role Owner
Disconnect-MgGraph
Configuración de una conexión y asignación de un equipo existente
#Map WFM instances to existing teams script
Write-Host "Map WFM sites to existing teams"
Start-Sleep 1
#Ensure Teams module is at least version x
Write-Host "Checking Teams module version"
try {
Get-InstalledModule -Name "MicrosoftTeams" -MinimumVersion 5.2.0
} catch {
throw
}
#Connect to MS Graph
Connect-MgGraph -Scopes "User.Read.All","Group.ReadWrite.All"
#List connector types available
Write-Output "Listing connector types available"
$UkgId = "95BF2848-2DDA-4425-B0EE-D62AEED4C0A0"
$connectors = Get-CsTeamsShiftsConnectionConnector
Write-Output $connectors
$Ukg = $connectors | Where-Object {$_.Id -match $UkgId}
if ($NULL -eq $Ukg) {
throw "UKG Dimensions not currently supported"
}
#Prompt for entering of WFM username and password
$WfmUserName = Read-Host -Prompt 'Input your UKG account username'
$WfmPwd = Read-Host -Prompt 'Input your UKG account password' -AsSecureString
$plainPwd =[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($WfmPwd))
#Test connection settings
Write-Output "Testing connection settings"
$ConnectionName = Read-Host -Prompt 'Input connection name'
$apiUrl = Read-Host -Prompt 'Input connector api url'
$ssoUrl = Read-Host -Prompt 'Input connector sso url'
$clientId = Read-Host -Prompt 'Input connector client id'
$AppKey = Read-Host -Prompt 'Input your app key' -AsSecureString
$plainKey =[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($AppKey))
$ClientSecret = Read-Host -Prompt 'Input your client secret' -AsSecureString
$plainSecret =[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($ClientSecret))
$testResult = Test-CsTeamsShiftsConnectionValidate `
-Name $ConnectionName `
-ConnectorId $UkgId `
-ConnectorSpecificSettings (New-Object Microsoft.Teams.ConfigAPI.Cmdlets.Generated.Models.ConnectorSpecificUkgDimensionsSettingsRequest `
-Property @{
apiUrl = $apiUrl
ssoUrl = $ssoUrl
appKey = $plainKey
clientId = $clientId
clientSecret = $plainSecret
LoginUserName = $WfmUserName
LoginPwd = $plainPwd
})
if ($NULL -ne $testResult.Code) {
Write-Output $testResult
throw "Validation failed, conflict found"
}
Write-Output "Test complete, no conflicts found"
#Create a connection
Write-Output "Creating a connection"
$ConnectionResponse = New-CsTeamsShiftsConnection `
-Name $ConnectionName `
-ConnectorId $UkgId `
-ConnectorSpecificSettings (New-Object Microsoft.Teams.ConfigAPI.Cmdlets.Generated.Models.ConnectorSpecificUkgDimensionsSettingsRequest `
-Property @{
apiUrl = $apiUrl
ssoUrl = $ssoUrl
appKey = $plainKey
clientId = $clientId
clientSecret = $plainSecret
LoginUserName = $WfmUserName
LoginPwd = $plainPwd
})
$ConnectionId = $ConnectionResponse.Id
if ($null -ne $ConnectionId){
Write-Output "Successfully created connection"
} else {
throw "Connection creation failed"
}
#Create a connection instance
Write-Output "Creating a connection instance"
$designatedActorName = Read-Host -Prompt "Input Microsoft 365 System Account (person@contoso.com)"
$designator = Get-MgUser -UserId $designatedActorName
$teamsUserId = $designator.Id
$syncFreq = Read-Host -Prompt "Input sync frequency in minutes"
$InstanceName = Read-Host -Prompt "Input connection instance name"
#Read sync scenarios for connection instance
function GetSyncScenarioSetting {
param (
$SettingName
)
$TwoWay = New-Object System.Management.Automation.Host.ChoiceDescription '&TwoWay', 'TwoWay'
$Disabled = New-Object System.Management.Automation.Host.ChoiceDescription '&Disabled', 'Disabled'
$FromWfmToShifts = New-Object System.Management.Automation.Host.ChoiceDescription '&FromWfmToShifts', 'FromWfmToShifts'
$options = [System.Management.Automation.Host.ChoiceDescription[]]($TwoWay, $Disabled, $FromWfmToShifts)
$result = $host.ui.PromptForChoice("Set sync scenario for $SettingName", "", $options, 0)
switch ($result)
{
0 { return "TwoWay" }
1 { return "Disabled" }
2 { return "FromWfmToShifts" }
}
}
$SyncScenarioOfferShiftRequest = GetSyncScenarioSetting "Offer Shift Request"
$SyncScenarioOpenShift = GetSyncScenarioSetting "Open Shift"
$SyncScenarioOpenShiftRequest = GetSyncScenarioSetting "Open Shift Request"
$SyncScenarioShift = GetSyncScenarioSetting "Shift"
$SyncScenarioSwapRequest = GetSyncScenarioSetting "Swap Request"
$SyncScenarioTimeCard = GetSyncScenarioSetting "Time Card"
$SyncScenarioTimeOff = GetSyncScenarioSetting "Time Off"
$SyncScenarioTimeOffRequest = GetSyncScenarioSetting "Time Off Request"
$SyncScenarioUserShiftPreference = GetSyncScenarioSetting "User Shift Preferences"
#Read admin email list
[psobject[]]$AdminEmailList = @()
while ($true){
$AdminEmail = Read-Host -Prompt "Enter admin's email to receive error report"
$AdminEmailList += $AdminEmail
$title = 'Adding another email'
$question = 'Would you like to add another admin email?'
$choices = '&Yes', '&No'
$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 1) {
break
}
}
$InstanceResponse = New-CsTeamsShiftsConnectionInstance `
-ConnectionId $ConnectionId `
-ConnectorAdminEmail $AdminEmailList `
-DesignatedActorId $teamsUserId `
-Name $InstanceName `
-SyncFrequencyInMin $syncFreq `
-SyncScenarioOfferShiftRequest $SyncScenarioOfferShiftRequest `
-SyncScenarioOpenShift $SyncScenarioOpenShift `
-SyncScenarioOpenShiftRequest $SyncScenarioOpenShiftRequest `
-SyncScenarioShift $SyncScenarioShift `
-SyncScenarioSwapRequest $SyncScenarioSwapRequest `
-SyncScenarioTimeCard $SyncScenarioTimeCard `
-SyncScenarioTimeOff $SyncScenarioTimeOff `
-SyncScenarioTimeOffRequest $SyncScenarioTimeOffRequest `
-SyncScenarioUserShiftPreference $SyncScenarioUserShiftPreference
$InstanceId = $InstanceResponse.id
if ($null -ne $InstanceId){
Write-Output "Success"
} else {
throw "Connector instance creation failed"
}
#Keep mapping teams until user stops it
$mappings=@()
while ($true)
{
$TeamsTeamId = Read-Host -Prompt "Input the ID of the Teams team to be mapped"
#Clear schedule of the Teams team
Write-Host "Clear schedule of the existing team"
$entityTypeString = Read-Host -Prompt 'Input the entity types of clear schedule'
$Delimiters = ",", ".", ":", ";", " ", "`t"
$entityType = $entityTypeString -Split {$Delimiters -contains $_}
$entityType = $entityType.Trim()
$entityType = $entityType.Split('',[System.StringSplitOptions]::RemoveEmptyEntries)
Remove-CsTeamsShiftsScheduleRecord -TeamId $TeamsTeamId -ClearSchedulingGroup:$True -EntityType $entityType
#Retrieve the list of wfm locations
Write-Output "Listing the WFM team sites"
$WfmTeamIds = Get-CsTeamsShiftsConnectionWfmTeam -ConnectorInstanceId $InstanceId
Write-Output $WfmTeamIds
if (($NULL -ne $WfmTeamIds) -and ($WfmTeamIds.Count -gt 0)){
[System.String]$WfmTeamId = Read-Host -Prompt "Input the ID of WFM team you want to map"
}
else {
throw "The WfmTeamId list is null or empty"
}
#Retrieve the list of WFM users and their roles
Write-Output "Listing WFM users and roles"
$WFMUsers = Get-CsTeamsShiftsConnectionWfmUser -ConnectorInstanceId $InstanceId -WfmTeamId $WfmTeamId
Write-Output $WFMUsers
#Create a mapping of the existing team to the instance
Write-Host "Create a mapping of the existing team to the site"
$TimeZone = Read-Host -Prompt "Input the time zone of team mapping"
$mapping = @{
teamId = $TeamsTeamId
wfmTeamId = $WfmTeamId
timeZone = $TimeZone
}
$mappings += , $mapping
$title = 'Connecting another team'
$question = 'Would you like to connect another team?'
$choices = '&Yes', '&No'
$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 1) {
break
}
}
$batchMappingResponse = New-CsTeamsShiftsConnectionBatchTeamMap -ConnectorInstanceId $InstanceId -TeamMapping @($mappings)
if ($null -ne $batchMappingResponse.OperationId){
"The mapping has begun asynchronously. To query mapping results run Get-CsTeamsShiftsConnectionOperation with the operation Id."
}
else {
throw "The mapping has failed due to validation errors."
}
Write-Output $batchMappingResponse
Disconnect-MgGraph
Cmdlets del conector Turnos
Para obtener ayuda con los cmdlets del conector Turnos, incluidos los cmdlets usados en los scripts, busque CsTeamsShiftsConnection en la referencia de cmdlets de PowerShell de Teams. Estos son vínculos a algunos cmdlets de uso común, agrupados por categoría:
Connections
Credenciales de sistemas WFM
Opciones de sincronización para escenarios admitidos
Eliminación de datos de programación
Instancias de conexión
- New-CsTeamsShiftsConnectionInstance
- Get-CsTeamsShiftsConnectionInstance
- Set-CsTeamsShiftsConnectionInstance
- Update-CsTeamsShiftsConnectionInstance
- Remove-CsTeamsShiftsConnectionInstance
Asignación de usuarios y sincronización correcta
Asignación de equipos
Identificador de operación
Informes de errores
Artículos relacionados
- Conectores de Turnos
- Uso de PowerShell para administrar la conexión de Shifts a UKG Pro Workforce Management
- Use el Centro de administración de Microsoft 365 para administrar la conexión de Turnos a UKG Pro Workforce Management
- Administrar la aplicación Turnos para su organización en Teams
- Información general de PowerShell para Teams
- Referencia del cmdlet de PowerShell para Teams