Utilisez PowerShell pour gérer votre connexion Shifts à Blue Yonder Workforce Management

Vue d’ensemble

Le connecteur Microsoft Teams Shifts pour Blue Yonder vous permet d’intégrer l'application Shifts dans Microsoft Teams avec Blue Yonder Workforce Management (Blue Yonder WFM). Vos employés de première ligne peuvent afficher et gérer en toute transparence leurs horaires dans Blue Yonder WFM à partir de Shifts.

Vous pouvez utiliser l’Assistant Connecteur Shifts dans le Centre d’administration Microsoft 365 ou PowerShell pour configurer une connexion. Une fois la connexion configurée, vous pouvez la gérer à l’aide des applets de commande PowerShell du connecteur Shifts.

Cet article explique comment utiliser PowerShell pour effectuer les opérations suivantes :

Cet article part du principe que vous avez déjà configuré une connexion à Blue Yonder WFM, à l’aide de l’Assistant ou de PowerShell.

Remarque

Vous pouvez également gérer votre connexion dans le Centre d'administration Microsoft 365. Par exemple, vous pouvez case activée l’status d’intégrité et accéder à l’Assistant pour modifier les paramètres de connexion. Pour en savoir plus, consultez Utiliser la Centre d'administration Microsoft 365 pour gérer votre connexion Shifts à Blue Yonder Workforce Management.

Avant de commencer

Vous devez être un administrateur général Microsoft 365 ou un administrateur de connecteur Shifts pour effectuer les étapes décrites dans cet article.

Le rôle d’administrateur du connecteur Shifts est un rôle personnalisé que vous créez dans Microsoft Entra ID et que vous attribuez à un utilisateur. Le nom du rôle doit être « Administrateur du connecteur Shifts ». Le rôle n’a pas besoin d’avoir d’autorisations spécifiques, même si au moins une autorisation doit être définie lors de sa création. Le service s’appuie sur la présence du rôle sur l’utilisateur, et non sur ses autorisations.

Pour plus d’informations, consultez Créer et attribuer un rôle personnalisé dans Microsoft Entra ID et Attribuer des rôles Microsoft Entra aux utilisateurs. N’oubliez pas que la création et l’application du rôle à un utilisateur peuvent prendre jusqu’à 24 heures.

Configuration de votre environnement

Remarque

Veillez à suivre ces étapes pour configurer votre environnement avant d’exécuter l’une des commandes ou scripts de cet article.

  1. Installez PowerShell version 7 ou ultérieure. Pour obtenir des conseils pas à pas, consultez l’installation de PowerShell sur Windows.

  2. Exécutez PowerShell en mode Administrateur.

  3. Installez le module PowerShell Microsoft Graph.

    Install-Module Microsoft.Graph
    Import-Module Microsoft.Graph
    

    Vérifiez qu’il s’agit de la version 1.6.1 ou ultérieure.

    Get-InstalledModule Microsoft.Graph 
    
  4. Installez le module PowerShell Teams Preview.

    Install-Module -Name MicrosoftTeams -AllowPrerelease -Force
    Import-Module MicrosoftTeams 
    

    Vérifiez qu’il s’agit au moins de la version 4.7.0 et qu’il contient les applets de commande du connecteur Shifts.

    Get-Command -Module MicrosoftTeams -Name *teamsshiftsconnection* 
    
  5. Définissez PowerShell pour qu’il s’arrête si une erreur se produit lors de l’exécution du script.

    $ErrorActionPreference = "Stop" 
    
  6. Activez l’exécution des scripts dans Windows.

    Set-ExecutionPolicy bypass 
    
  1. Se connecter à Teams.

    Connect-MicrosoftTeams
    

    Lorsque vous y êtes invité, connectez-vous à l’aide de vos informations d’identification d’administrateur. Vous êtes maintenant configuré pour exécuter les scripts de cet article et les applets de commande du connecteur Shifts.

Vérifier l’état de l’installation de la connexion

Pour case activée la status de la connexion que vous avez configurée à l’aide de l’ID d’opération que vous avez reçu dans un e-mail, procédez comme suit :

  1. Configurez votre environnement (si vous ne l’avez pas déjà fait).

  2. Exécutez la commande suivante : Cette commande vous donne l’état global des mappages d’équipe pour la connexion.

    Get-CsTeamsShiftsConnectionOperation -OperationId <YourOperationId>
    

Pour en savoir plus, consultez Get-CsTeamsShiftsConnectionOperation.

Afficher un rapport d’erreurs pour une connexion

Vous pouvez exécuter un rapport qui affiche les détails de l’erreur pour une connexion. Le rapport répertorie les mappages d’équipe et d’utilisateur qui ont réussi et échoué. Il fournit également des informations sur les problèmes liés aux comptes associés à la connexion.

  1. Configurez votre environnement (si vous ne l’avez pas déjà fait).

  2. Obtenez la liste des rapports d’erreurs pour une connexion.

    Get-CsTeamsShiftsConnectionErrorReport -ConnectorInstanceId <ConnectorInstanceId>
    
  3. Pour afficher un rapport d’erreurs spécifique, exécutez la commande suivante :

    Get-CsTeamsShiftsConnectionErrorReport -ErrorReportId <ErrorReportId>
    

Pour en savoir plus, consultez Get-CsTeamsShiftsConnectionErrorReport.

Remarque

Pour obtenir la liste complète des messages d’erreur, consultez Liste des messages d’erreur plus loin dans cet article.

Résoudre les erreurs de connexion

Erreurs de mappage d’utilisateurs

Des erreurs de mappage d’utilisateurs peuvent se produire si un ou plusieurs utilisateurs d’un WFM instance n’est pas membre de l’équipe mappée dans Teams. Pour résoudre ce problème, assurez-vous que les utilisateurs de l’équipe mappée correspondent aux utilisateurs du WFM instance.

Pour afficher les détails des utilisateurs non mappés, configurez votre environnement (si ce n’est pas déjà fait), puis exécutez le script suivant.

#View sync errors script
Write-Host "View sync errors"
Start-Sleep 1

#Ensure Teams module is of version x
Write-Host "Checking Teams module version"
try {
    Get-InstalledModule -Name "MicrosoftTeams" -MinimumVersion 4.7.0
} catch {
    throw
}

#List connection instances available
Write-Host "Listing connection instances"
$InstanceList = Get-CsTeamsShiftsConnectionInstance
write $InstanceList

#Get an instance
if ($InstanceList.Count -gt 0){
    $InstanceId = Read-Host -Prompt 'Input the instance ID that you want to retrieve user sync results from'
}
else {
    throw "Instance list is empty"
}

#Get a list of the mappings
Write-Host "Listing team mappings"
$mappings = Get-CsTeamsShiftsConnectionTeamMap -ConnectorInstanceId $InstanceId
write $mappings

#For each mapping, retrieve the failed mappings
ForEach ($mapping in $mappings){
    $teamsTeamId = $mapping.TeamId
    $wfmTeamId = $mapping.WfmTeamId
    Write-Host "Failed mapped users in the mapping of ${teamsTeamId} and ${wfmTeamId}:"
    $userSyncResult = Get-CsTeamsShiftsConnectionSyncResult -ConnectorInstanceId $InstanceId -TeamId $teamsTeamId
    Write-Host "Failed AAD users:"
    write $userSyncResult.FailedAadUser
    Write-Host "Failed WFM users:"
    write $userSyncResult.FailedWfmUser
}

Erreurs d’autorisation de compte

Des erreurs d’autorisation de compte peuvent se produire si le compte de service WFM ou les informations d’identification du compte système Microsoft 365 sont incorrectes ou ne disposent pas des autorisations requises.

Pour modifier vos informations d’identification de compte de service WFM ou de compte système Microsoft 365 pour la connexion, vous pouvez exécuter l’applet de commande Set-CsTeamsShiftsConnectionInstance ou utiliser le script PowerShell dans la section Modifier les paramètres de connexion de cet article.

Modifier les paramètres de connexion

Utilisez ce script pour modifier les paramètres de connexion. Les paramètres que vous pouvez modifier incluent votre compte et mot de passe de service WFM, le compte système Microsoft 365, les mappages d’équipe et les paramètres de synchronisation.

Les paramètres de synchronisation incluent la fréquence de synchronisation (en minutes) et les données de planification synchronisées entre votre système WFM et Shifts. Les données de planification sont définies dans les paramètres suivants, que vous pouvez afficher en exécutant Get-CsTeamsShiftsConnectionConnector.

  • Le paramètre enabledConnectorScenarios définit les données synchronisées entre votre système WFM et Shifts. Les options sont Shift, SwapRequest, UserShiftPreferences, OpenShift, OpenShiftRequest, TimeOff, TimeOffRequest.

  • Le paramètre enabledWfiScenarios définit les données synchronisées entre Shifts et votre système WFM. Les options sont SwapRequest, OpenShiftRequest, TimeOffRequest, UserShiftPreferences.

    Remarque

    Si vous choisissez de ne pas synchroniser les shifts ouverts, les demandes d’ouverture, les demandes d’échange ou les demandes de congé entre Shifts et votre système WFM, vous devez effectuer une autre étape pour masquer la fonctionnalité dans Shifts. Après avoir exécuté ce script, assurez-vous de suivre les étapes de la section Désactiver les équipes ouvertes, les demandes d'équipes ouvertes, les demandes de permutation et les demandes de congés plus loin dans cet article.

Importante

Pour les paramètres que vous ne souhaitez pas modifier, vous devez entrer à nouveau les paramètres d’origine lorsque le script vous y invite.

Configurez votre environnement (si vous ne l’avez pas déjà fait), puis exécutez le script suivant.

#Update connector instance and mapping script
Write-Host "Update Connector instance and mapping"
Start-Sleep 1

#Ensure Teams module is at least version x
Write-Host "Checking Teams module version"
try {
    Get-InstalledModule -Name "MicrosoftTeams" -MinimumVersion 4.7.0
} catch {
    throw
}

#Connect to MS Graph
Connect-MgGraph -Scopes "User.Read.All","Group.ReadWrite.All"

#List connector types available (comment out if not implemented for preview)
Write-Host "Listing connector types available"
$BlueYonderId = "6A51B888-FF44-4FEA-82E1-839401E9CD74"
$connectors = Get-CsTeamsShiftsConnectionConnector
write $connectors
$blueYonder = $connectors | where {$_.Id -match $BlueYonderId}

#List connection instances available
Write-Host "Listing connection instances available"
$InstanceList = Get-CsTeamsShiftsConnectionInstance | where {$_.ConnectorId -match $BlueYonderId}
write $InstanceList

#Prompt for the WFM username and password
$WfmUserName = Read-Host -Prompt 'Input your WFM user name'
$WfmPwd = Read-Host -Prompt 'Input your WFM password' -AsSecureString
$plainPwd =[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($WfmPwd))

#Get the instance ID
$InstanceId = Read-Host -Prompt 'Input the instance ID that you want to update'
$Instance = Get-CsTeamsShiftsConnectionInstance -ConnectorInstanceId $InstanceId
$Etag = $Instance.etag

#Change sync setting
$designatorName = Read-Host -Prompt "Input designated actor's user name"
$designator = Get-MgUser -UserId $designatorName
$teamsUserId = $designator.Id
$UpdatedInstanceName = Read-Host -Prompt 'Input new connection instance name'
$updatedConnectorScenarioString = Read-Host -Prompt 'Input new enabled connector scenarios'
$updatedWfiScenarioString = Read-Host -Prompt 'Input new enabled WFI scenarios'
$Delimiters = ",", ".", ":", ";", " ", "`t"
$updatedConnectorScenario = $updatedConnectorScenarioString -Split {$Delimiters -contains $_}
$updatedConnectorScenario = $updatedConnectorScenario.Trim()
$updatedConnectorScenario = $updatedConnectorScenario.Split('',[System.StringSplitOptions]::RemoveEmptyEntries)
$updatedWfiScenario = $updatedWfiScenarioString -Split {$Delimiters -contains $_}
$updatedWfiScenario = $updatedWfiScenario.Trim()
$updatedWfiScenario = $updatedWfiScenario.Split('', [System.StringSplitOptions]::RemoveEmptyEntries)
$adminApiUrl = $Instance.ConnectorSpecificSettingAdminApiUrl
$cookieAuthUrl = $Instance.ConnectorSpecificSettingCookieAuthUrl
$essApiUrl = $Instance.ConnectorSpecificSettingEssApiUrl
$federatedAuthUrl = $Instance.ConnectorSpecificSettingFederatedAuthUrl
$retailWebApiUrl = $Instance.ConnectorSpecificSettingRetailWebApiUrl
$siteManagerUrl = $Instance.ConnectorSpecificSettingSiteManagerUrl
$syncFreq = Read-Host -Prompt 'Input new sync frequency'

#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
}
}
$UpdatedInstance = Set-CsTeamsShiftsConnectionInstance `
    -ConnectorInstanceId $InstanceId `
    -ConnectorId $BlueYonderId `
    -ConnectorAdminEmail $AdminEmailList `
    -DesignatedActorId $teamsUserId `
    -EnabledConnectorScenario $updatedConnectorScenario `
    -EnabledWfiScenario $updatedWfiScenario `
    -Name $UpdatedInstanceName `
    -SyncFrequencyInMin $syncFreq `
    -ConnectorSpecificSettings (New-Object Microsoft.Teams.ConfigAPI.Cmdlets.Generated.Models.ConnectorSpecificBlueYonderSettingsRequest `
    -Property @{
        AdminApiUrl = $adminApiUrl
        SiteManagerUrl = $siteManagerUrl
        EssApiUrl = $essApiUrl
        RetailWebApiUrl = $retailWebApiUrl
        CookieAuthUrl = $cookieAuthUrl
        FederatedAuthUrl = $federatedAuthUrl
        LoginUserName = $WfmUserName
        LoginPwd = $plainPwd
    }) `
    -IfMatch $Etag
if ($UpdatedInstance.Id -ne $null) {
    Write-Host "Success"
}
else {
    throw "Update instance failed"
}
#Get a list of the mappings
Write-Host "Listing mappings"
$TeamMaps = Get-CsTeamsShiftsConnectionTeamMap -ConnectorInstanceId $InstanceId
write $TeamMaps

#Modify a mapping
#Remove a mapping
Write-Host "Removing a mapping"
$TeamsTeamId = Read-Host -Prompt 'Input the Teams team ID that you want to unlink'
$WfmTeamId = Read-Host -Prompt 'Input the WFM team ID that you want to unlink'
Remove-CsTeamsShiftsConnectionTeamMap -ConnectorInstanceId $InstanceId -TeamId $TeamsTeamId
Write-Host "Success"

#Add a mapping
Write-Host "Adding a mapping"
$TeamsTeamId = Read-Host -Prompt 'Input the Teams team ID that you want to link'
$WfmTeamId = Read-Host -Prompt 'Input the WFM team ID that you want to link'
New-CsTeamsShiftsConnectionTeamMap -ConnectorInstanceId $InstanceId -TeamId $TeamsTeamId -TimeZone "America/Los_Angeles" -WfmTeamId $WfmTeamId
Write-Host "Success"

Désactiver les shifts ouverts, les demandes de shifts ouverts, les demandes de permutation et les demandes de congés.

Importante

Suivez ces étapes uniquement si vous avez choisi de désactiver les équipes ouvertes, les demandes d’équipes ouvertes, les demandes de permutation ou les demandes de congés à l’aide du script de la section Modifier les paramètres de connexion plus haut dans cet article ou à l’aide du cmdlet Set-CsTeamsShiftsConnectionInstance. L’exécution de cette étape masque la fonctionnalité dans Shifts. Sans cette deuxième étape, les utilisateurs verront toujours la fonctionnalité dans Shifts et recevront un message d’erreur « opération non prise en charge » s’ils essaient de l’utiliser.

Pour masquer les shifts ouverts, les demandes d’échange et les demandes de congé dans Shifts, utilisez le type de ressource de planification API Graph pour définir les paramètres false suivants pour chaque équipe que vous avez mappée à un WFM instance :

  • Ouvrir les shifts : openShiftsEnabled
  • Demandes d’échange : swapShiftsRequestsEnabled
  • Demandes de congé : timeOffRequestsEnabled

Pour masquer les demandes de shifts ouverts dans Shifts, accédez à Paramètres dans Shifts, puis désactivez le paramètre Ouvrir les shifts .

Annuler le mappage d’une équipe d’une connexion et la mapper à une autre connexion

Remarque

Le compte système Microsoft 365 doit être le même pour les deux connexions. Si ce n’est pas le cas, le message d’erreur « Ce profil d’acteur désigné n’a pas de privilèges de propriété d’équipe » s’affiche.

Si vous souhaitez dissocier une équipe d’une connexion et la mapper à une autre connexion :

  1. Configurez votre environnement (si vous ne l’avez pas déjà fait).

  2. Affichez la liste de tous les mappages d’équipe pour une connexion.

    Get-CsTeamsShiftsConnectionTeamMap -ConnectorInstanceId <ConnectorInstanceId>
    
  3. Supprimez un mappage d’équipe de la connexion.

    Remove-CsTeamsShiftsConnectionTeamMap -ConnectorInstanceId <ConnectorInstanceId> -TeamId <TeamId>
    
  4. Mappez l’équipe à une autre connexion.

    New-CsTeamsShiftsConnectionTeamMap -ConnectorInstanceId <ConnectorInstanceId> -TeamId <TeamId> -WfmTeamId <SiteId> -TimeZone <TimeZone>
    

Pour plus d’informations, consultez Get-CsTeamsShiftsConnectionTeamMap, Remove-CsTeamsShiftsConnectionTeamMap et New-CsTeamsShiftsConnectionTeamMap.

Désactiver la synchronisation pour une connexion

Utilisez ce script pour désactiver la synchronisation d’une connexion. Gardez à l’esprit que ce script ne supprime pas une connexion. Il désactive la synchronisation afin qu’aucune donnée ne soit synchronisée entre Shifts et votre système WFM pour la connexion que vous spécifiez.

Configurez votre environnement (si vous ne l’avez pas déjà fait), puis exécutez le script suivant.

#Disable sync script
Write-Host "Disable sync"
Start-Sleep 1

#Ensure Teams module is at least version x
Write-Host "Checking Teams module version"
try {
    Get-InstalledModule -Name "MicrosoftTeams" -MinimumVersion 4.7.0
} catch {
    throw
}

#List connection instances available
$BlueYonderId = "6A51B888-FF44-4FEA-82E1-839401E9CD74"
Write-Host "Listing connection instances"
$InstanceList = Get-CsTeamsShiftsConnectionInstance | where {$_.ConnectorId -match $BlueYonderId}
write $InstanceList

#Get an instance
if ($InstanceList.Count -gt 0){
    $InstanceId = Read-Host -Prompt 'Input the instance ID that you want to disable sync'
    $Instance = Get-CsTeamsShiftsConnectionInstance -ConnectorInstanceId $InstanceId
    $Etag = $Instance.etag
    $InstanceName = $Instance.Name
    $DesignatedActorId = $Instance.designatedActorId
    $adminApiUrl = $Instance.ConnectorSpecificSettingAdminApiUrl
    $cookieAuthUrl = $Instance.ConnectorSpecificSettingCookieAuthUrl
    $essApiUrl = $Instance.ConnectorSpecificSettingEssApiUrl
    $federatedAuthUrl = $Instance.ConnectorSpecificSettingFederatedAuthUrl
    $retailWebApiUrl = $Instance.ConnectorSpecificSettingRetailWebApiUrl
    $siteManagerUrl = $Instance.ConnectorSpecificSettingSiteManagerUrl
    $ConnectorAdminEmail = $Instance.ConnectorAdminEmail
}
else {
    throw "Instance list is empty"
}

#Remove scenarios in the mapping
Write-Host "Disabling scenarios in the team mapping"
$UpdatedInstanceName = $InstanceName + " - Disabled"
$BlueYonderId = "6A51B888-FF44-4FEA-82E1-839401E9CD74"
$WfmUserName = Read-Host -Prompt 'Input your WFM user name'
$WfmPwd = Read-Host -Prompt 'Input your WFM password' -AsSecureString
$plainPwd =[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($WfmPwd))

$UpdatedInstance = Set-CsTeamsShiftsConnectionInstance `
    -ConnectorInstanceId $InstanceId `
    -ConnectorId $BlueYonderId `
    -ConnectorAdminEmail $ConnectorAdminEmail `
    -DesignatedActorId $DesignatedActorId `
    -EnabledConnectorScenario @() `
    -EnabledWfiScenario @() `
    -Name $UpdatedInstanceName `
    -SyncFrequencyInMin 10 `
    -ConnectorSpecificSettings (New-Object Microsoft.Teams.ConfigAPI.Cmdlets.Generated.Models.ConnectorSpecificBlueYonderSettingsRequest `
        -Property @{
            AdminApiUrl = $adminApiUrl
            SiteManagerUrl = $siteManagerUrl
            EssApiUrl = $essApiUrl
            RetailWebApiUrl = $retailWebApiUrl
            CookieAuthUrl = $cookieAuthUrl
            FederatedAuthUrl = $federatedAuthUrl
            LoginUserName = $WfmUserName
            LoginPwd = $plainPwd
        }) `
    -IfMatch $Etag

if ($UpdatedInstance.Id -ne $null) {
    Write-Host "Success"
}
else {
    throw "Update instance failed"
}

Liste des messages d’erreur

Voici la liste des messages d’erreur que vous pouvez rencontrer et des informations pour vous aider à les résoudre.

Type d’erreur Détails de l’erreur Résolution
Impossible d’authentifier le système de gestion du personnel. Les informations d’identification du compte système de gestion de la main-d’œuvre que vous avez fournies ne sont pas valides ou ce compte ne dispose pas des autorisations requises. Mettez à jour les informations d’identification de votre compte de service WFM dans les paramètres de connexion. Pour cela, appliquez l’une des méthodes suivantes :
Impossible d’authentifier Graph. Échec de l’authentification. Vérifiez que vous avez entré des informations d’identification valides pour l’acteur désigné et que vous disposez des autorisations requises. Assurez-vous que votre compte système Microsoft 365 (également appelé acteur désigné) est ajouté en tant que propriétaire d’équipe.
Vous pouvez également mettre à jour les informations d’identification de votre compte système Microsoft 365 dans les paramètres de connexion.
Certains utilisateurs n’ont pas pu mapper correctement Le mappage a échoué pour certains utilisateurs : <X> réussi, <X> utilisateur(s) AAD ayant échoué et <X> utilisateur(s) du système de gestion de la main-d’œuvre ayant échoué. Utilisez l’applet de commande Get-CsTeamsShiftsConnectionSyncResult ou ce script PowerShell pour identifier les utilisateurs pour lesquels le mappage a échoué. Assurez-vous que les utilisateurs de l’équipe mappée correspondent aux utilisateurs du WFM instance.
Impossible de mapper une équipe ou des équipes dans ce lot. Ce profil d’acteur désigné n’a pas de privilèges de propriété d’équipe. Assurez-vous que votre compte système Microsoft 365 (également appelé acteur désigné) est ajouté en tant que propriétaire d’équipe.
Si vous avez modifié votre compte système Microsoft 365, ajoutez ce compte en tant que propriétaire d’équipe et mettez à jour les paramètres de connexion pour utiliser ce compte.
Cette équipe est déjà mappée à un connecteur existant instance. Annulez le mappage de l’équipe du connecteur existant instance à l’aide de l’applet de commande Remove-CsTeamsShiftsConnectionTeamMap. Vous pouvez également créer une connexion pour remapper l’équipe.
Ce fuseau horaire n’est pas valide. Le fuseau horaire passé n’utilise pas le format de base de données tz. Vérifiez que le fuseau horaire est correct, puis remapper l’équipe.
Nous ne trouvons pas ce connecteur instance. Mapper l’équipe à une connexion existante.
Cette équipe AAD est introuvable. Assurez-vous que l’équipe existe ou créez-en une.

Applets de commande du connecteur Shifts

Pour obtenir de l’aide sur les applets de commande du connecteur Shifts, recherchez CsTeamsShiftsConnection dans la référence de l’applet de commande Teams PowerShell. Voici des liens vers certaines applets de commande couramment utilisées.