Použití PowerShellu k připojení směn ke správě pracovních sil UKG Pro
Přehled
Pomocí konektoru Microsoft Teams Shifts pro UKG Pro Workforce Management můžete integrovat aplikaci Směny v Microsoft Teams se správou pracovních sil UKG Pro (UKG Pro WFM). Pracovníci v první linii můžou bez problémů zobrazovat a spravovat své plány ve službě UKG Pro WFM v rámci směn.
V tomto článku vás provedeme tím, jak pomocí PowerShellu nastavit a nakonfigurovat konektor pro integraci Shifts s UKG Pro WFM.
Pokud chcete nastavit připojení, spusťte skript PowerShellu. Skript nakonfiguruje konektor, použije nastavení synchronizace, vytvoří připojení a mapuje instance UKG Pro WFM (označované také jako instance WFM) na týmy v Teams. Nastavení synchronizace určuje funkce povolené ve směnách a informace o plánu, které se synchronizují mezi UKG Pro WFM a Směnami. Mapování definují vztah synchronizace mezi instancemi WFM a týmy v Teams. Můžete se mapovat na existující týmy a nové týmy.
Nabízíme dva skripty. Můžete použít skript v závislosti na tom, jestli chcete namapovat na existující týmy, nebo vytvořit nové týmy, na které se chcete mapovat.
Můžete nastavit více připojení, z nichž každé má jiné nastavení synchronizace. Pokud má vaše organizace například více umístění s různými požadavky na plán, vytvořte připojení s jedinečným nastavením synchronizace pro každé umístění. Mějte na paměti, že instanci WFM je možné v daném okamžiku namapovat pouze na jeden tým. Pokud už je instance namapovaná na tým, nelze ji namapovat na jiný tým.
Díky systému UKG Pro WFM jako záznamu mohou vaši pracovníci v první linii efektivně spravovat své plány a dostupnost ve směnách na svých zařízeních. Vedoucí pracovníci v první linii můžou k nastavení plánů dál používat UKG Pro WFM.
Poznámka
Můžete také použít průvodce konektorem Směny v Centru pro správu Microsoftu 365 a připojit Směny k UKG Pro WFM.
Než začnete
Požadavky
Přečtěte si informace a dokončete všechny požadavky a úlohy konfigurace v části Požadavky a požadavky na konektor Teams Shifts pro ukG Pro Workforce Management.
Než budete postupovat podle kroků v tomto článku, ujistěte se, že jste dokončili všechny úkoly.
Role správce pro správu konektoru pomocí PowerShellu
Abyste mohli provést kroky v tomto článku, musíte být globálním správcem Microsoftu 365 nebo správcem konektoru Shifts.
Role správce konektoru Shifts je vlastní role, kterou vytvoříte v ID Microsoft Entra a přiřadíte ji uživateli. Název role musí být "Správce konektoru Směny". Role nemusí mít žádná konkrétní oprávnění, i když při jejím vytváření musí být nastaveno alespoň jedno oprávnění. Služba spoléhá na přítomnost role u uživatele, nikoli na její oprávnění.
Další informace najdete v tématech Vytvoření a přiřazení vlastní role v Microsoft Entra ID a Přiřazení rolí Microsoft Entra uživatelům. Mějte na paměti, že vytvoření role a použití role pro uživatele může trvat až 24 hodin.
Důležité
Microsoft doporučuje používat role s co nejmenším počtem oprávnění. To pomáhá zlepšit zabezpečení vaší organizace. Globální správce je vysoce privilegovaná role, která by měla být omezená na nouzové scénáře, když nemůžete použít roli s nižšími oprávněními.
Nastavení prostředí
Nainstalujte PowerShell verze 7 nebo novější. Podrobné pokyny najdete v tématu Instalace PowerShellu ve Windows.
Spusťte PowerShell v režimu správce.
Nainstalujte modul Microsoft Graph PowerShellu.
Install-Module Microsoft.Graph Import-Module Microsoft.Graph
Ověřte, že je verze 1.6.1 nebo novější.
Get-InstalledModule Microsoft.Graph
Nainstalujte modul PowerShellu pro Teams Preview.
Install-Module -Name MicrosoftTeams -AllowPrerelease -Force Import-Module MicrosoftTeams
Ověřte, že je aspoň verze 4.7.0 a obsahuje rutiny konektoru Shifts.
Get-Command -Module MicrosoftTeams -Name *teamsshiftsconnection*
Nastavte PowerShell tak, aby se ukončil, pokud při spuštění skriptu dojde k chybě.
$ErrorActionPreference = "Stop"
Povolte spouštění skriptů ve Windows.
Set-ExecutionPolicy bypass
Připojení k Teams
Spuštěním následujícího příkazu se připojte k Microsoft Teams.
Connect-MicrosoftTeams
Po zobrazení výzvy se přihlaste pomocí přihlašovacích údajů správce. Teď máte nastavené spouštění skriptů v tomto článku a rutinách konektoru Shifts.
Identifikace týmů, které chcete mapovat
Poznámka
Tento krok proveďte, pokud mapujete instance WFM na existující týmy. Pokud vytváříte nové týmy, na které se chcete mapovat, můžete tento krok přeskočit.
Na webu Azure Portal přejděte na stránku Všechny skupiny a získejte seznam Id týmu týmů ve vaší organizaci.
Poznamenejte si ID týmu týmů, které chcete mapovat. Skript vás vyzve k zadání těchto informací.
Poznámka
Pokud má jeden nebo více týmů existující plán, skript tyto plány z těchto týmů odebere. V opačném případě uvidíte duplicitní směny.
Spuštění skriptu
Spusťte jeden z následujících skriptů v závislosti na tom, jestli vytváříte nový tým nebo mapování na existující tým:
- Pokud chcete nastavit připojení, vytvořit nový tým v Teams a namapovat instanci WFM na nový tým, spusťte nový týmový skript.
- Pokud chcete nastavit připojení a namapovat instance WFM na existující týmy v Teams, spusťte existující týmový skript.
Při spuštění skriptu postupujte podle pokynů na obrazovce. Skript provede následující akce:
Otestujte a ověřte připojení k UKG Pro WFM pomocí přihlašovacích údajů účtu služby UKG Pro WFM a adres URL služeb, které zadáte.
Použijte nastavení synchronizace. Tato nastavení zahrnují frekvenci synchronizace (v minutách) a data plánu synchronizovaná mezi UKG Pro WFM a Směnami. Můžete povolit data plánu definovaná v těchto scénářích:
Shift
,SwapRequest
, ,OfferShiftRequest
,OpenShift
UserShiftPreferences
, ,OpenShiftRequest
, ,TimeOff
.TimeOffRequest
Další informace najdete v tématu New-CsTeamsShiftsConnectionInstance. Pokud chcete zobrazit seznam podporovaných možností synchronizace pro jednotlivé parametry, spusťte rutinu Get-CsTeamsShiftsConnectionConnector.
Poznámka
Skript povolí synchronizaci pro každou podporovanou možnost synchronizace. Pokud chcete změnit nastavení synchronizace, můžete to udělat po nastavení připojení. Další informace najdete v tématu Použití PowerShellu ke správě připojení směn ke službě UKG Pro Workforce Management.
Namapujte instance WFM na vaše týmy v Teams.
- Pokud jste se rozhodli spustit nový týmový skript pro vytvoření nových týmů, mapování jsou založená na nových týmech, které vytvoříte.
- Pokud jste se rozhodli spustit existující skript teams pro mapování existujících týmů, mapování jsou založená na ID instancí WFM a Id týmu, které zadáte. Pokud má tým existující plán, skript odebere všechna data plánu.
Po spuštění skriptu se zobrazí zpráva o úspěšném nastavení připojení.
Správa připojení
Po nastavení připojení ho můžete spravovat a měnit v Centru pro správu Microsoftu 365 nebo pomocí PowerShellu.
Použití Centra pro správu Microsoftu 365
Na stránce Správa konektoru se zobrazí seznam jednotlivých připojení, která jste nastavili, spolu s informacemi, jako je stav a podrobnosti o intervalu synchronizace. Můžete také získat přístup k průvodci a provádět změny v libovolném z vašich připojení. Můžete například aktualizovat nastavení synchronizace a týmová mapování.
Další informace najdete v tématu Použití Centra pro správu Microsoftu 365 ke správě připojení směn ke službě UKG Pro Workforce Management.
Použití PowerShellu
Pomocí PowerShellu můžete zobrazit zprávu o chybách, změnit nastavení připojení, zakázat synchronizaci atd. Podrobné pokyny najdete v tématu Použití PowerShellu ke správě připojení směn ke službě UKG Pro Workforce Management.
Skripty
Nastavení připojení a vytvoření nového týmu
#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
Nastavení připojení a mapování existujícího týmu
#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
Rutiny konektoru Shifts
Pokud potřebujete pomoc s rutinami konektoru Shifts, včetně rutin použitých ve skriptech, vyhledejte CsTeamsShiftsConnection v referenčních informacích k rutinám PowerShellu pro Teams. Tady jsou odkazy na některé běžně používané rutiny seskupené podle kategorií:
Konexe
Přihlašovací údaje systémů WFM
Možnosti synchronizace pro podporované scénáře
Odebrání dat plánu
Instance připojení
- New-CsTeamsShiftsConnectionInstance
- Get-CsTeamsShiftsConnectionInstance
- Set-CsTeamsShiftsConnectionInstance
- Update-CsTeamsShiftsConnectionInstance
- Remove-CsTeamsShiftsConnectionInstance
Mapování uživatelů a úspěšná synchronizace
Mapování týmu
ID operace
Zprávy o chybách
Související články
- Konektory směn
- Použití PowerShellu ke správě připojení směn ke službě UKG Pro Workforce Management
- Použití Centra pro správu Microsoftu 365 ke správě připojení směn ke službě UKG Pro Workforce Management
- Správa aplikace Směny
- Přehled PowerShellu pro Teams
- Referenční informace k rutinám PowerShellu pro Teams