From a16999826a9d31bdf85172134ed402c66c8f15e8 Mon Sep 17 00:00:00 2001 From: Achilleas Mitos Date: Fri, 15 Nov 2024 11:40:57 +0200 Subject: [PATCH 1/2] Added Get-TeamViewerCompanyManagedDevice cmdlet - Added new cmdlet that calls into the appropriate WebApi endpoint and retrieves all company-managed devices of the company associated with the ApiToken - Added unit tests for the new cmdlet - Updated documentation to include the new cmdlet - Bumped the module's minor version Needed for JIRA task TEAM-60324. --- CHANGELOG.md | 6 ++ .../Get-TeamViewerCompanyManagedDevice.ps1 | 23 ++++++ Cmdlets/TeamViewerPS.psd1 | 2 +- .../Get-TeamViewerCompanyManagedDevice.md | 73 +++++++++++++++++++ Docs/TeamViewerPS.md | 2 + ...t-TeamViewerCompanyManagedDevice.Tests.ps1 | 66 +++++++++++++++++ 6 files changed, 171 insertions(+), 1 deletion(-) create mode 100644 Cmdlets/Public/Get-TeamViewerCompanyManagedDevice.ps1 create mode 100644 Docs/Help/Get-TeamViewerCompanyManagedDevice.md create mode 100644 Tests/Public/Get-TeamViewerCompanyManagedDevice.Tests.ps1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 2276c94..b775873 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## 2.1.0 (2024-11-15) + +### Added + +- Adds `Get-TeamViewerCompanyManagedDevice` to return all company-managed devices. + ## 2.0.1 (2024-11-14) ### Added diff --git a/Cmdlets/Public/Get-TeamViewerCompanyManagedDevice.ps1 b/Cmdlets/Public/Get-TeamViewerCompanyManagedDevice.ps1 new file mode 100644 index 0000000..a1f31c9 --- /dev/null +++ b/Cmdlets/Public/Get-TeamViewerCompanyManagedDevice.ps1 @@ -0,0 +1,23 @@ +function Get-TeamViewerCompanyManagedDevice { + param( + [Parameter(Mandatory = $true)] + [securestring] + $ApiToken + ) + + $resourceUri = "$(Get-TeamViewerApiUri)/managed/devices/company" + $parameters = @{} + + do { + $response = Invoke-TeamViewerRestMethod ` + -ApiToken $ApiToken ` + -Uri $resourceUri ` + -Method Get ` + -Body $parameters ` + -WriteErrorTo $PSCmdlet ` + -ErrorAction Stop + + $parameters.paginationToken = $response.nextPaginationToken + Write-Output ($response.resources | ConvertTo-TeamViewerManagedDevice) + } while ($parameters.paginationToken) +} diff --git a/Cmdlets/TeamViewerPS.psd1 b/Cmdlets/TeamViewerPS.psd1 index facd771..78813a9 100644 --- a/Cmdlets/TeamViewerPS.psd1 +++ b/Cmdlets/TeamViewerPS.psd1 @@ -3,7 +3,7 @@ RootModule = 'TeamViewerPS.psm1' # Version number of this module. - ModuleVersion = '2.0.2' + ModuleVersion = '2.1.0' # Supported PSEditions. # CompatiblePSEditions = @() diff --git a/Docs/Help/Get-TeamViewerCompanyManagedDevice.md b/Docs/Help/Get-TeamViewerCompanyManagedDevice.md new file mode 100644 index 0000000..cac46a4 --- /dev/null +++ b/Docs/Help/Get-TeamViewerCompanyManagedDevice.md @@ -0,0 +1,73 @@ +--- +external help file: TeamViewerPS-help.xml +Module Name: TeamViewerPS +online version: https://github.com/teamviewer/TeamViewerPS/blob/main/Docs/Help/Get-TeamViewerCompanyManagedDevice.md +schema: 2.0.0 +--- + +# Get-TeamViewerCompanyManagedDevice + +## SYNOPSIS + +Retrieves TeamViewer company-managed devices. Requires an API Token with company admin permissions. + +## SYNTAX + +### List (Default) + +```powershell +Get-TeamViewerCompanyManagedDevice -ApiToken [] +``` + +## DESCRIPTION + +Retrieves company-managed devices of the company that is associated with the API access token. + +## EXAMPLES + +### Example 1 + +```powershell + +PS /> Get-TeamViewerCompanyManagedDevice +``` + +List all company-managed devices of this company. + +## PARAMETERS + +### -ApiToken + +The TeamViewer API access token. Needs to have company admin permissions to successfully retrieve the devices. + +```yaml +Type: SecureString +Parameter Sets: (All) +Aliases: + +Required: True +Position: Named +Default value: None +Accept pipeline input: False +Accept wildcard characters: False +``` + +### CommonParameters + +This cmdlet supports the common parameters: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutVariable, -OutBuffer, -PipelineVariable, -Verbose, -WarningAction, and -WarningVariable. For more information, see [about_CommonParameters](http://go.microsoft.com/fwlink/?LinkID=113216). + +## INPUTS + +### None + +## OUTPUTS + +## NOTES + +## RELATED LINKS + +[Get-TeamViewerManagedDevice](Get-TeamViewerManagedDevice.md) + +[Get-TeamViewerManagedGroup](Get-TeamViewerManagedGroup.md) + +[Get-TeamViewerManagementId](Get-TeamViewerManagementId.md) diff --git a/Docs/TeamViewerPS.md b/Docs/TeamViewerPS.md index fe0e802..6275976 100644 --- a/Docs/TeamViewerPS.md +++ b/Docs/TeamViewerPS.md @@ -133,6 +133,8 @@ The following functions are available in this category: [`Get-TeamViewerManagedGroup`](Help/Get-TeamViewerManagedGroup.md) +[`Get-TeamViewerCompanyManagedDevice`](Help/Get-TeamViewerCompanyManagedDevice.md) + [`Get-TeamViewerManagementId`](Help/Get-TeamViewerManagementId.md) [`Get-TeamViewerManager`](Help/Get-TeamViewerManager.md) diff --git a/Tests/Public/Get-TeamViewerCompanyManagedDevice.Tests.ps1 b/Tests/Public/Get-TeamViewerCompanyManagedDevice.Tests.ps1 new file mode 100644 index 0000000..53b5563 --- /dev/null +++ b/Tests/Public/Get-TeamViewerCompanyManagedDevice.Tests.ps1 @@ -0,0 +1,66 @@ +BeforeAll { + . "$PSScriptRoot\..\..\Cmdlets\Public\Get-TeamViewerCompanyManagedDevice.ps1" + + @(Get-ChildItem -Path "$PSScriptRoot\..\..\Cmdlets\Private\*.ps1") | ` + ForEach-Object { . $_.FullName } + + $testApiToken = [securestring]@{} + $null = $testApiToken + + Mock Get-TeamViewerApiUri { '//unit.test' } +} + +Describe 'Get-TeamViewerCompanyManagedDevice' { + Context 'AllDevices' { + BeforeAll { + Mock Invoke-TeamViewerRestMethod { @{ + nextPaginationToken = $null + resources = @( + @{ id = 'ae222e9d-a665-4cea-85b7-d4a3a08a5e35'; name = 'test company-managed device 1' }, + @{ id = '6cbfcfb2-a929-4987-a91b-89e2945412cf'; name = 'test company-managed device 2' }, + @{ id = '99a87bed-3d60-46f2-a869-b7e67a6bf2c8'; name = 'test company-managed device 3' } + ) + } } + } + + It 'Should call the correct API endpoint to list company-managed devices' { + Get-TeamViewerCompanyManagedDevice -ApiToken $testApiToken + + $base_test_path = '//unit.test' + $desired_endpoint = 'managed/devices/company' + + Assert-MockCalled Invoke-TeamViewerRestMethod -Times 1 -Scope It -ParameterFilter { + $ApiToken -eq $testApiToken -And ` + $Uri -eq "$base_test_path/$desired_endpoint" -And ` + $Method -eq 'Get' } + } + + It 'Should return ManagedDevice objects' { + $result = Get-TeamViewerCompanyManagedDevice -ApiToken $testApiToken + $result | Should -HaveCount 3 + $result[0].PSObject.TypeNames | Should -Contain 'TeamViewerPS.ManagedDevice' + } + + It 'Should fetch consecutive pages' { + Mock Invoke-TeamViewerRestMethod { @{ + nextPaginationToken = 'abc' + resources = @( + @{ id = 'ae222e9d-a665-4cea-85b7-d4a3a08a5e35'; name = 'test company-managed device 1' }, + @{ id = '6cbfcfb2-a929-4987-a91b-89e2945412cf'; name = 'test company-managed device 2' }, + @{ id = '99a87bed-3d60-46f2-a869-b7e67a6bf2c8'; name = 'test company-managed device 3' } + ) + } } + Mock Invoke-TeamViewerRestMethod { @{ + nextPaginationToken = $null + resources = @( + @{ id = '76e699b7-2559-4202-bf7b-c6af6929aa15'; name = 'test company-managed device 4' } + ) + } } -ParameterFilter { $Body -And $Body['paginationToken'] -eq 'abc' } + + $result = Get-TeamViewerCompanyManagedDevice -ApiToken $testApiToken + $result | Should -HaveCount 4 + + Assert-MockCalled Invoke-TeamViewerRestMethod -Times 2 -Scope It + } + } +} From 60caf284a0b4161fd2cef16e4372417418b3023f Mon Sep 17 00:00:00 2001 From: Achilleas Mitos Date: Fri, 15 Nov 2024 15:28:25 +0200 Subject: [PATCH 2/2] Corrected the 2.0.1 changelog entry to 2.0.2 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b775873..4baeed8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ - Adds `Get-TeamViewerCompanyManagedDevice` to return all company-managed devices. -## 2.0.1 (2024-11-14) +## 2.0.2 (2024-11-14) ### Added - Add-TeamViewerSsoInclusion command to add SSO Inclusion list items.