Skip to content

Commit 9f17e92

Browse files
Merge pull request #41 from teamviewer/feature_changed-to-teamviewerPS
updated AD-Connector with imported TeamViewerPS module functions
2 parents 1705b6b + 5019e26 commit 9f17e92

File tree

13 files changed

+291
-735
lines changed

13 files changed

+291
-735
lines changed

.vscode/tasks.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
{
66
"label": "Lint (via PSScriptAnalyzer)",
77
"type": "shell",
8-
"command": "Invoke-ScriptAnalyzer -Path '${workspaceFolder}' -Severity Information, Warning, Error -ExcludeRule PSReviewUnusedParameter -Recurse",
8+
"command": "Invoke-ScriptAnalyzer -Path '${workspaceFolder}' -Settings '${workspaceFolder}/PSScriptAnalyzerSettings.psd1' -Severity Information, Warning, Error -ExcludeRule PSReviewUnusedParameter -Recurse",
99
"group": {
1010
"kind": "build",
1111
"isDefault": true

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Change Log
22

3+
## [2.0.0]
4+
5+
- Imported TeamViewerPS module for API calls
6+
37
## [1.5.0]
48

59
- Removed company permissions

Configure TeamViewer AD Connector.bat

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
SETLOCAL
33

44
CD /D "%~dp0"
5-
POWERSHELL -NonInteractive -NoProfile -ExecutionPolicy Bypass -Command "& {.\TeamViewerADConnector\Invoke-Configuration.ps1 ; exit $LastExitCode }"
5+
POWERSHELL -NonInteractive -NoProfile -ExecutionPolicy Bypass -Command "& { .\TeamViewerADConnector\Invoke-InstallTeamViewerPSModule.ps1; exit $LastExitCode }"
6+

PSScriptAnalyzerSettings.psd1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
@{
22
Severity = @('Error', 'Warning', 'Information')
3-
ExcludeRules = @('PSReviewUnusedParameter', 'PSUseSingularNouns')
3+
ExcludeRules = @('PSReviewUnusedParameter', 'PSUseSingularNouns', 'PSAvoidUsingConvertToSecureStringWithPlainText')
44
}

TeamViewerADConnector/Internal/GraphicalUserInterface.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ function Invoke-GraphicalUserInterfaceConfiguration($configuration, [string] $cu
222222
# Click Handler Button "Test Token"
223223
$mainWindow.FindName('BtnTestToken').Add_Click( {
224224
try {
225-
$tokenValid = (Invoke-TeamViewerPing $mainWindow.DataContext.ConfigurationData.ApiToken)
225+
$tokenValid = (Invoke-TeamViewerPing -ApiToken (ConvertTo-SecureString $mainWindow.DataContext.ConfigurationData.ApiToken -AsPlainText -Force))
226226
}
227227
catch {
228228
Write-Error "Token test failed: $_"

TeamViewerADConnector/Internal/Sync.ps1

Lines changed: 61 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -136,23 +136,36 @@ function Invoke-SyncPrework($syncContext, $configuration, $progressHandler) {
136136
# Users are mapped to their email addresses.
137137
Write-SyncProgress -Handler $progressHandler -PercentComplete 10 'GetTeamViewerUsers'
138138
Write-SyncLog 'Fetching TeamViewer company users'
139-
140-
$usersTVByEmail = (Get-TeamViewerUser $configuration.ApiToken)
141-
Write-SyncLog "Retrieved $($usersTVByEmail.Count) TeamViewer company users"
139+
$teamViewerUsers = (Get-TeamViewerUser -ApiToken (ConvertTo-SecureString $configuration.ApiToken -AsPlainText -Force) -PropertiesToLoad 'All')
140+
Write-SyncLog "Retrieved $($teamViewerUsers.Count) TeamViewer company users"
141+
142+
#converting the array to hashtable
143+
$usersTVByEmail = @{}
144+
if ($teamViewerUsers -And $teamViewerUsers.Count -Gt 0) {
145+
foreach ($tvUser in $teamViewerUsers) {
146+
if ($tvUser -And $tvUser.email) {
147+
$usersTVByEmail[$tvUser.email] = $tvUser
148+
}
149+
}
150+
}
151+
Write-Synclog "Created hashtable with $($usersTVByEmail.Count) TeamviewerUsers indexed by email"
142152

143153
if ($configuration.EnableUserGroupsSync) {
144154
# Fetch all available user groups
145155
Write-SyncProgress -Handler $progressHandler -PercentComplete 20 'GetTeamViewerUserGroups'
146156
Write-SyncLog 'Fetching list of TeamViewer user groups.'
147-
$userGroups = @(Get-TeamViewerUserGroup $configuration.ApiToken)
157+
$userGroups = @(Get-TeamViewerUserGroup -ApiToken (ConvertTo-SecureString $configuration.ApiToken -AsPlainText -Force))
148158
Write-SyncLog "Retrieved $($userGroups.Count) TeamViewer user groups."
149159

150160
# Fetch user group members
151161
$userGroupMembersByGroup = @{}
152162

153163
foreach ($userGroup in $userGroups) {
164+
if ($null -eq $userGroup) {
165+
continue
166+
}
154167
Write-SyncLog "Fetching members of TeamViewer user group '$($userGroup.name)'"
155-
$userGroupMembers = @(Get-TeamViewerUserGroupMember $configuration.ApiToken $userGroup.id)
168+
$userGroupMembers = @(Get-TeamViewerUserGroupMember -ApiToken (ConvertTo-SecureString $configuration.ApiToken -AsPlainText -Force) -Id $userGroup.id)
156169
Write-SyncLog "Retrieved $($userGroupMembers.Count) members of TeamViewer user group '$($userGroup.name)'"
157170
$userGroupMembersByGroup[$userGroup.id] = $userGroupMembers
158171
}
@@ -190,11 +203,22 @@ function Invoke-SyncUser($syncContext, $configuration, $progressHandler) {
190203
Write-SyncLog "Updating user $($userAd.email): $($changeset | Format-SyncUpdateUserChangeset)" -Extra $changeset
191204

192205
if (!$configuration.TestRun) {
193-
$updatedUser = $userAd.Clone()
194-
$updatedUser.active = $true
206+
$apiToken = ConvertTo-SecureString $configuration.ApiToken -AsPlainText -Force
207+
$updateParams = @{
208+
ApiToken = $apiToken
209+
UserId = $userTv.id
210+
}
211+
212+
# build update properties
213+
if ($changeset.name) {
214+
$updateParams['Name'] = $changeset.name
215+
}
216+
if ($changeset.PSObject.Properties['active']) {
217+
$updateParams['Active'] = $changeset.active
218+
}
195219

196220
try {
197-
Edit-TeamViewerUser $configuration.ApiToken $userTv.id $updatedUser | Out-Null
221+
Set-TeamViewerUser @updateParams | Out-Null
198222
$statistics.Updated++
199223
}
200224
catch {
@@ -210,29 +234,36 @@ function Invoke-SyncUser($syncContext, $configuration, $progressHandler) {
210234
Write-SyncLog "Creating user $($userAd.email)"
211235

212236
if (!$configuration.TestRun) {
213-
$newUser = $userAd.Clone()
214-
$newUser.language = $configuration.UserLanguage
237+
$apiToken = ConvertTo-SecureString $configuration.ApiToken -AsPlainText -Force
238+
$newUserParams = @{
239+
ApiToken = $apiToken
240+
Email = $userAd.Email
241+
Name = $userAd.Name
242+
}
215243

244+
# add password parameter (either default, generated, or SSO)
216245
if ($configuration.UseDefaultPassword) {
217-
$newUser.password = $configuration.DefaultPassword
246+
$newUserParams['Password'] = ConvertTo-SecureString $configuration.DefaultPassword -AsPlainText -Force
218247
}
219-
220-
if ($configuration.UseGeneratedPassword) {
221-
$newUser.password = ''
248+
elseif ($configuration.UseGeneratedPassword) {
249+
$newUserParams['WithoutPassword'] = $true
250+
}
251+
elseif ($configuration.UseSsoCustomerId) {
252+
$newUserParams['SsoCustomerIdentifier'] = ConvertTo-SecureString $configuration.SsoCustomerId -AsPlainText -Force
222253
}
223254

224-
if ($configuration.UseSsoCustomerId) {
225-
$newUser.sso_customer_id = $configuration.SsoCustomerId
255+
# add optional parameters
256+
if ($configuration.UserLanguage) {
257+
$newUserParams['Culture'] = $configuration.UserLanguage
226258
}
227259

228260
if ($configuration.MeetingLicenseKey) {
229-
$newUser.meeting_license_key = $configuration.MeetingLicenseKey
261+
$newUserParams['MeetingLicenseKey'] = $configuration.MeetingLicenseKey
230262
}
231263

232264
try {
233-
$addedUser = (Add-TeamViewerUser $configuration.ApiToken $newUser)
234-
$newUser.id = $addedUser.id
235-
$syncContext.UsersTeamViewerByEmail[$newUser.email] = $newUser
265+
$addedUser = (New-TeamViewerUser @newUserParams)
266+
$syncContext.UsersTeamViewerByEmail[$addedUser.Email] = $addedUser
236267
$statistics.Created++
237268
}
238269
catch {
@@ -253,10 +284,12 @@ function Invoke-SyncUser($syncContext, $configuration, $progressHandler) {
253284
# Try to fetch the account information of the configured TeamViewer API token.
254285
# This information is used to not accidentially deactivate the token owner,
255286
# which would block further processing of the script.
256-
Write-SyncLog 'Trying to fetch account information of configured TeamViewer API token'
257-
$currentAccount = Get-TeamViewerAccount $configuration.ApiToken -NoThrow
258287

259-
if (!$currentAccount) {
288+
Write-SyncLog 'Trying to fetch account information of configured TeamViewer API token'
289+
try {
290+
$currentAccount = Get-TeamViewerAccount -ApiToken (ConvertTo-SecureString $configuration.ApiToken -AsPlainText -Force)
291+
}
292+
catch {
260293
Write-SyncLog 'Unable to determine token account information. Please check API token permissions.'
261294
}
262295

@@ -271,7 +304,7 @@ function Invoke-SyncUser($syncContext, $configuration, $progressHandler) {
271304
Write-SyncLog "Deactivating TeamViewer user $($user.email)"
272305
if (!$configuration.TestRun) {
273306
try {
274-
Disable-TeamViewerUser $configuration.ApiToken $user.id | Out-Null
307+
Set-TeamViewerUser -ApiToken (ConvertTo-SecureString $configuration.ApiToken -AsPlainText -Force) -User $user.id -Property @{ active = $false } | Out-Null
275308
$statistics.Deactivated++
276309
}
277310
catch {
@@ -316,7 +349,7 @@ function Invoke-SyncUserGroups($syncContext, $configuration, $progressHandler) {
316349
Write-SyncLog "Creating user group '$adGroupName'"
317350
if (!$configuration.TestRun) {
318351
try {
319-
$userGroup = (Add-TeamViewerUserGroup $configuration.ApiToken $adGroupName)
352+
$userGroup = (New-TeamViewerUserGroup -ApiToken (ConvertTo-SecureString $configuration.ApiToken -AsPlainText -Force) -Name $adGroupName)
320353
$statistics.CreatedGroups++
321354
}
322355
catch {
@@ -359,7 +392,7 @@ function Invoke-SyncUserGroups($syncContext, $configuration, $progressHandler) {
359392
$currentMembersToAdd = $_
360393

361394
try {
362-
(Add-TeamViewerUserGroupMember $configuration.ApiToken $userGroup.id $currentMembersToAdd) | Out-Null
395+
(Add-TeamViewerUserGroupMember -ApiToken (ConvertTo-SecureString $configuration.ApiToken -AsPlainText -Force) $userGroup.id $currentMembersToAdd) | Out-Null
363396
$statistics.AddedMembers += $currentMembersToAdd.Count
364397
}
365398
catch {
@@ -376,7 +409,7 @@ function Invoke-SyncUserGroups($syncContext, $configuration, $progressHandler) {
376409
$membersToRemove = @()
377410

378411
foreach ($userGroupMember in $userGroupMembers) {
379-
$userTv = ($usersTv | Where-Object { $_.id.Trim('u') -Eq $userGroupMember.accountId })
412+
$userTv = ($usersTv | Where-Object { $_.id.Trim('u') -eq $userGroupMember.accountId })
380413

381414
if (!$userTv) {
382415
Write-SyncLog "User '$($userGroupMember.name)' will be removed from user group '$($userGroup.name)'"
@@ -389,7 +422,7 @@ function Invoke-SyncUserGroups($syncContext, $configuration, $progressHandler) {
389422
$currentMembersToRemove = $_
390423

391424
try {
392-
(Remove-TeamViewerUserGroupMember $configuration.ApiToken $userGroup.id $currentMembersToRemove) | Out-Null
425+
(Remove-TeamViewerUserGroupMember -ApiToken (ConvertTo-SecureString $configuration.ApiToken -AsPlainText -Force) $userGroup.id $currentMembersToRemove) | Out-Null
393426
$statistics.RemovedMembers += $currentMembersToRemove.Count
394427
}
395428
catch {

TeamViewerADConnector/Internal/TeamViewer.ps1

Lines changed: 0 additions & 157 deletions
This file was deleted.

TeamViewerADConnector/Invoke-Configuration.ps1

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ if (!$principal.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Adminis
5454

5555
(. "$PSScriptRoot\Internal\Configuration.ps1")
5656
(. "$PSScriptRoot\Internal\ActiveDirectory.ps1")
57-
(. "$PSScriptRoot\Internal\TeamViewer.ps1")
5857
(. "$PSScriptRoot\Internal\ScheduledSync.ps1")
5958
(. "$PSScriptRoot\Internal\GraphicalUserInterface.ps1")
6059

0 commit comments

Comments
 (0)