Łączenie funkcji Shift z rozwiązaniem UKG Pro Workforce Management przy użyciu programu PowerShell
Omówienie
Użyj łącznika Microsoft Teams Shifts dla usługi UKG Pro Workforce Management , aby zintegrować aplikację Shifts w usłudze Microsoft Teams z rozwiązaniem UKG Pro Workforce Management (UKG Pro WFM). Twoi pracownicy pierwszej linii mogą bezproblemowo wyświetlać swoje harmonogramy i zarządzać nimi w usłudze UKG Pro WFM z poziomu usługi Shifts.
W tym artykule opisano sposób używania programu PowerShell do konfigurowania i konfigurowania łącznika w celu integracji rozwiązania Shifts z usługą UKG Pro WFM.
Aby skonfigurować połączenie, uruchom skrypt programu PowerShell. Skrypt konfiguruje łącznik, stosuje ustawienia synchronizacji, tworzy połączenie i mapuje wystąpienia programu UKG Pro WFM (nazywane również wystąpieniami WFM) do zespołów w usłudze Teams. Ustawienia synchronizacji określają funkcje włączone w usłudze Shifts oraz informacje o harmonogramie synchronizowane między programami UKG Pro WFM i Shifts. Mapowania definiują relację synchronizacji między wystąpieniami programu WFM i zespołami w usłudze Teams. Możesz mapować istniejące zespoły i nowe zespoły.
Udostępniamy dwa skrypty. Możesz użyć dowolnego skryptu, w zależności od tego, czy chcesz mapować istniejące zespoły, czy tworzyć nowe zespoły do mapowania.
Możesz skonfigurować wiele połączeń, z których każde ma różne ustawienia synchronizacji. Jeśli na przykład organizacja ma wiele lokalizacji z różnymi wymaganiami dotyczącymi harmonogramu, utwórz połączenie z unikatowymi ustawieniami synchronizacji dla każdej lokalizacji. Należy pamiętać, że wystąpienie programu WFM można zamapować tylko do jednego zespołu w danym momencie. Jeśli wystąpienie zostało już zamapowane do zespołu, nie można go zamapować na inny zespół.
Dzięki usłudze UKG Pro WFM jako systemowi rekordów pracownicy pierwszej linii mogą efektywnie zarządzać swoimi harmonogramami i dostępnością w systemie Shift na swoich urządzeniach. Menedżerowie linii frontu mogą nadal używać programu UKG Pro WFM do konfigurowania harmonogramów.
Uwaga
Możesz również użyć kreatora łącznika Shifts w centrum administracyjnym platformy Microsoft 365, aby połączyć się z usługą Shifts z usługą UKG Pro WFM.
Przed rozpoczęciem
Wymagania wstępne
Poświęć trochę czasu na zapoznanie się z informacjami i wykonanie wszystkich zadań wstępnych i konfiguracji w temacie Wymagania wstępne i wymagania dotyczące łącznika Teams Shifts dla usługi UKG Pro Workforce Management.
Przed wykonaniem kroków opisanych w tym artykule upewnij się, że wykonasz wszystkie zadania.
Rola administratora do zarządzania łącznikiem przy użyciu programu PowerShell
Aby wykonać kroki opisane w tym artykule, musisz być administratorem globalnym platformy Microsoft 365 lub administratorem łącznika shifts.
Rola administratora łącznika Shifts to rola niestandardowa, którą tworzysz w identyfikatorze Microsoft Entra i przypisujesz do użytkownika. Nazwa roli musi być "Shifts connector admin". Rola nie musi mieć żadnych określonych uprawnień, chociaż podczas jej tworzenia należy ustawić co najmniej jedno uprawnienie. Usługa opiera się na obecności roli na użytkowniku, a nie na jego uprawnieniach.
Aby dowiedzieć się więcej, zobacz Create and assign a custom role in Microsoft Entra ID (Tworzenie i przypisywanie roli niestandardowej w identyfikatorze Microsoft Entra ) oraz Assign Microsoft Entra roles to users (Przypisywanie ról microsoft entra do użytkowników). Pamiętaj, że utworzenie i zastosowanie roli do użytkownika może potrwać do 24 godzin.
Ważna
Firma Microsoft rekomenduje używanie ról z najmniejszą liczbą uprawnień. Pomaga to zwiększyć bezpieczeństwo organizacji. Administrator globalny to rola o wysokim poziomie uprawnień, która powinna być ograniczona do scenariuszy awaryjnych, gdy nie można użyć roli o mniej uprzywilejowanych uprawnieniach.
Konfigurowanie środowiska
Zainstaluj program PowerShell w wersji 7 lub nowszej. Aby uzyskać szczegółowe wskazówki, zobacz Instalowanie programu PowerShell w systemie Windows.
Uruchom program PowerShell w trybie administratora.
Zainstaluj moduł Programu PowerShell programu Microsoft Graph.
Install-Module Microsoft.Graph Import-Module Microsoft.Graph
Sprawdź, czy jest to wersja 1.6.1 lub nowsza.
Get-InstalledModule Microsoft.Graph
Zainstaluj moduł Programu PowerShell w wersji zapoznawczej aplikacji Teams.
Install-Module -Name MicrosoftTeams -AllowPrerelease -Force Import-Module MicrosoftTeams
Sprawdź, czy jest to co najmniej wersja 4.7.0 i czy zawiera polecenia cmdlet łącznika Shifts.
Get-Command -Module MicrosoftTeams -Name *teamsshiftsconnection*
Ustaw program PowerShell, aby zakończyć działanie, jeśli wystąpi błąd podczas uruchamiania skryptu.
$ErrorActionPreference = "Stop"
Włącz uruchamianie skryptów w systemie Windows.
Set-ExecutionPolicy bypass
Łączenie z usługą Teams
Uruchom następujące polecenie, aby nawiązać połączenie z usługą Microsoft Teams.
Connect-MicrosoftTeams
Po wyświetleniu monitu zaloguj się przy użyciu poświadczeń administratora. Teraz skonfigurowano uruchamianie skryptów w tym artykule i poleceń cmdlet łącznika Shifts.
Identyfikowanie zespołów, które chcesz zamapować
Uwaga
Wykonaj ten krok, jeśli mapujesz wystąpienia programu WFM na istniejące zespoły. Jeśli tworzysz nowe zespoły do mapowania, możesz pominąć ten krok.
W witrynie Azure Portal przejdź do strony Wszystkie grupy , aby uzyskać listę identyfikatorów TeamId zespołów w organizacji.
Zanotuj identyfikatory teamid zespołów, które chcesz mapować. Skrypt wyświetli monit o wprowadzenie tych informacji.
Uwaga
Jeśli co najmniej jeden zespół ma istniejący harmonogram, skrypt usunie harmonogramy z tych zespołów. W przeciwnym razie zobaczysz zduplikowane zmiany.
Uruchamianie skryptu
Uruchom jeden z następujących skryptów, w zależności od tego, czy tworzysz nowy zespół, czy mapujesz go na istniejący zespół:
- Aby skonfigurować połączenie, utwórz nowy zespół w usłudze Teams i zamapuj wystąpienie programu WFM na nowy zespół, uruchom nowy skrypt teams.
- Aby skonfigurować połączenie i zamapować wystąpienia programu WFM na istniejące zespoły w usłudze Teams, uruchom istniejący skrypt zespołów.
Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie podczas uruchamiania skryptu. Skrypt wykonuje następujące akcje:
Przetestuj i sprawdź połączenie z usługą UKG Pro WFM przy użyciu poświadczeń konta usługi UKG Pro WFM i wprowadzonych adresów URL usługi.
Zastosuj ustawienia synchronizacji. Te ustawienia obejmują częstotliwość synchronizacji (w minutach) i dane harmonogramu synchronizowane między usługami UKG Pro WFM i Shifts. Możesz włączyć dane harmonogramu zdefiniowane przez następujące scenariusze:
Shift
, , ,OfferShiftRequest
,UserShiftPreferences
,OpenShift
,OpenShiftRequest
, ,TimeOff
.TimeOffRequest
SwapRequest
Aby dowiedzieć się więcej, zobacz New-CsTeamsShiftsConnectionInstance. Aby wyświetlić listę obsługiwanych opcji synchronizacji dla każdego parametru, uruchom polecenie Get-CsTeamsShiftsConnectionConnector.
Uwaga
Skrypt umożliwia synchronizację dla każdej obsługiwanej opcji synchronizacji. Jeśli chcesz zmienić ustawienia synchronizacji, możesz to zrobić po skonfigurowaniu połączenia. Aby dowiedzieć się więcej, zobacz Używanie programu PowerShell do zarządzania połączeniem shifts z rozwiązaniem UKG Pro Workforce Management.
Mapowanie wystąpień programu WFM na zespoły w usłudze Teams.
- Jeśli wybrano uruchomienie skryptu nowych zespołów w celu utworzenia nowych zespołów, mapowania są oparte na utworzonych nowych zespołach.
- Jeśli wybrano opcję uruchomienia istniejącego skryptu zespołu w celu mapowania istniejących zespołów, mapowania są oparte na wprowadzonych identyfikatorach wystąpień programu WFM i identyfikatorach zespołu. Jeśli zespół ma istniejący harmonogram, skrypt usuwa wszystkie dane harmonogramu.
Po uruchomieniu skryptu komunikat o powodzeniu potwierdza, czy połączenie zostało pomyślnie skonfigurowane.
Zarządzanie połączeniem
Po skonfigurowaniu połączenia możesz zarządzać nim i wprowadzać w nim zmiany w centrum administracyjnym platformy Microsoft 365 lub przy użyciu programu PowerShell.
Korzystanie z centrum administracyjnego platformy Microsoft 365
Strona Zarządzanie łącznikami zawiera listę wszystkich skonfigurowanych połączeń wraz z informacjami, takimi jak stan kondycji i szczegóły interwału synchronizacji. Możesz również uzyskać dostęp do kreatora, aby wprowadzić zmiany w dowolnym połączeniu. Można na przykład zaktualizować ustawienia synchronizacji i mapowania zespołów.
Aby dowiedzieć się więcej, zobacz Używanie centrum administracyjnego platformy Microsoft 365 do zarządzania połączeniem shifts z rozwiązaniem UKG Pro Workforce Management.
Korzystanie z programu PowerShell
Za pomocą programu PowerShell można wyświetlić raport o błędach, zmienić ustawienia połączenia, wyłączyć synchronizację i nie tylko. Aby uzyskać szczegółowe wskazówki, zobacz Używanie programu PowerShell do zarządzania połączeniem shifts z rozwiązaniem UKG Pro Workforce Management.
Skrypty
Konfigurowanie połączenia i tworzenie nowego zespołu
#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
Konfigurowanie połączenia i mapowanie istniejącego zespołu
#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
Przesunięcia poleceń cmdlet łącznika
Aby uzyskać pomoc dotyczącą poleceń cmdlet łącznika Shifts, w tym poleceń cmdlet używanych w skryptach, wyszukaj ciąg CsTeamsShiftsConnection w dokumentacji poleceń cmdlet programu Teams programu PowerShell. Poniżej przedstawiono linki do niektórych często używanych poleceń cmdlet pogrupowanych według kategorii:
Połączenia
Poświadczenia systemów programu WFM
Opcje synchronizacji dla obsługiwanych scenariuszy
Usuwanie danych harmonogramu
Wystąpienia połączeń
- New-CsTeamsShiftsConnectionInstance
- Get-CsTeamsShiftsConnectionInstance
- Set-CsTeamsShiftsConnectionInstance
- Update-CsTeamsShiftsConnectionInstance
- Remove-CsTeamsShiftsConnectionInstance
Mapowanie użytkownika i pomyślne synchronizowanie
Mapowanie zespołu
Identyfikator operacji
Raporty o błędach
Artykuły pokrewne
- Łączniki aplikacji Zmiany
- Zarządzanie połączeniem shifts z rozwiązaniem UKG Pro Workforce Management przy użyciu programu PowerShell
- Zarządzanie połączeniem shifts z usługą UKG Pro Workforce Management przy użyciu centrum administracyjnego platformy Microsoft 365
- Zarządzanie aplikacją Zmiany
- Omówienie programu PowerShell w usłudze Teams
- Dokumentacja poleceń cmdlet programu PowerShell w usłudze Teams