Skip to content

Commit

Permalink
Add set/remove group policy functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexandrosAlexiou committed Oct 16, 2023
1 parent 41a1bd5 commit 0b8d5bf
Show file tree
Hide file tree
Showing 9 changed files with 6,371 additions and 37 deletions.
39 changes: 39 additions & 0 deletions Cmdlets/Public/Remove-TeamViewerPolicyFromManagedGroup.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
function Remove-TeamviewerPolicyFromManagedGroup {
[CmdletBinding(SupportsShouldProcess = $true)]
param(
[Parameter(Mandatory = $true)]
[securestring]
$ApiToken,

[Parameter(Mandatory = $true, ValueFromPipeline = $true)]
[ValidateScript( { $_ | Resolve-TeamViewerManagedGroupId } )]
[Alias('GroupId')]
[object]
$Group,

[Parameter(Mandatory = $true)]
[PolicyType]
$PolicyType
)
Begin {
$body = @{
'policy_type' = [int]$PolicyType
}
}
Process {
$groupId = $Group | Resolve-TeamViewerManagedGroupId
$resourceUri = "$(Get-TeamViewerApiUri)/managed/groups/$groupId/policy/remove"

if ($PSCmdlet.ShouldProcess($Group.ToString(), 'Change managed group entry')) {
Invoke-TeamViewerRestMethod `
-ApiToken $ApiToken `
-Uri $resourceUri `
-Method Put `
-ContentType 'application/json; charset=utf-8' `
-Body ([System.Text.Encoding]::UTF8.GetBytes(($body | ConvertTo-Json))) `
-WriteErrorTo $PSCmdlet `
-ErrorAction Stop | `
Out-Null
}
}
}
22 changes: 11 additions & 11 deletions Cmdlets/Public/Set-TeamViewerManagedDevice.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,21 @@ function Set-TeamViewerManagedDevice {

[Parameter(Mandatory = $true, ValueFromPipeline = $true)]
[ValidateScript( { $_ | Resolve-TeamViewerManagedDeviceId } )]
[Alias("DeviceId")]
[Alias('DeviceId')]
[object]
$Device,

[Alias("Alias")]
[Alias('Alias')]
[string]
$Name,

[ValidateScript( { $_ | Resolve-TeamViewerPolicyId } )]
[Alias("PolicyId")]
[Alias('PolicyId')]
[object]
$Policy,

[ValidateScript( { $_ | Resolve-TeamViewerManagedGroupId } )]
[Alias("ManagedGroupId")]
[Alias('ManagedGroupId')]
[object]
$ManagedGroup
)
Expand All @@ -38,28 +38,28 @@ function Set-TeamViewerManagedDevice {
$body['managedGroupId'] = $ManagedGroup | Resolve-TeamViewerManagedGroupId
}

if ($Policy -And $ManagedGroup) {
if ($Policy -And $ManagedGroup) {
$PSCmdlet.ThrowTerminatingError(
("The combination of parameters -Policy and -ManagedGroup is not allowed." | `
ConvertTo-ErrorRecord -ErrorCategory InvalidArgument))
('The combination of parameters -Policy and -ManagedGroup is not allowed.' | `
ConvertTo-ErrorRecord -ErrorCategory InvalidArgument))
}

if ($body.Count -eq 0) {
$PSCmdlet.ThrowTerminatingError(
("The given input does not change the managed device." | `
ConvertTo-ErrorRecord -ErrorCategory InvalidArgument))
('The given input does not change the managed device.' | `
ConvertTo-ErrorRecord -ErrorCategory InvalidArgument))
}
}
Process {
$deviceId = $Device | Resolve-TeamViewerManagedDeviceId
$resourceUri = "$(Get-TeamViewerApiUri)/managed/devices/$deviceId"

if ($PSCmdlet.ShouldProcess($Device.ToString(), "Change managed device entry")) {
if ($PSCmdlet.ShouldProcess($Device.ToString(), 'Change managed device entry')) {
Invoke-TeamViewerRestMethod `
-ApiToken $ApiToken `
-Uri $resourceUri `
-Method Put `
-ContentType "application/json; charset=utf-8" `
-ContentType 'application/json; charset=utf-8' `
-Body ([System.Text.Encoding]::UTF8.GetBytes(($body | ConvertTo-Json))) `
-WriteErrorTo $PSCmdlet `
-ErrorAction Stop | `
Expand Down
60 changes: 46 additions & 14 deletions Cmdlets/Public/Set-TeamViewerManagedGroup.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -7,55 +7,87 @@ function Set-TeamViewerManagedGroup {

[Parameter(Mandatory = $true, ValueFromPipeline = $true)]
[ValidateScript( { $_ | Resolve-TeamViewerManagedGroupId })]
[Alias("GroupId")]
[Alias("Id")]
[Alias('GroupId')]
[Alias('Id')]
[object]
$Group,

[Parameter(Mandatory = $true, ParameterSetName = 'ByParameters')]
[Parameter(ParameterSetName = 'ByParameters')]
[string]
$Name,

[Parameter(ParameterSetName = 'ByParameters')]
[ValidateScript( { $_ | Resolve-TeamViewerPolicyId } )]
[Alias('Policy')]
[object]
$PolicyId,

[Parameter(ParameterSetName = 'ByParameters')]
[PolicyType]
$PolicyType,

[Parameter(Mandatory = $true, ParameterSetName = 'ByProperties')]
[hashtable]
$Property
)

Begin {
# Warning suppresion doesn't seem to work.
# Warning suppression doesn't seem to work.
# See https://github.com/PowerShell/PSScriptAnalyzer/issues/1472
$null = $Property

$body = @{}
switch ($PSCmdlet.ParameterSetName) {
'ByParameters' {
$body['name'] = $Name
if ($Name) {
$body['name'] = $Name
}

if ($PolicyId -or $PolicyType) {
if (-not ($PolicyId -and $PolicyType)) {
$PSCmdlet.ThrowTerminatingError(
('PolicyId and PolicyType must be specified together' | ConvertTo-ErrorRecord -ErrorCategory InvalidArgument))
}
$body['policy'] = @{
'policy_id' = $PolicyId
'policy_type' = $PolicyType
}
}
}
'ByProperties' {
@('name') | `
Where-Object { $Property[$_] } | `
ForEach-Object { $body[$_] = $Property[$_] }
@('name') | Where-Object { $Property[$_] } | ForEach-Object { $body[$_] = $Property[$_] }

if ($Property.ContainsKey('policy_id') -or $Property.ContainsKey('policy_type')) {
if (-not ($Property.ContainsKey('policy_id') -and $Property.ContainsKey('policy_type'))) {
$PSCmdlet.ThrowTerminatingError(
('PolicyId and PolicyType must be specified together' | ConvertTo-ErrorRecord -ErrorCategory InvalidArgument))
}
$body['policy'] = @{
'policy_id' = $Property['policy_id']
'policy_type' = [PolicyType]$Property['policy_type']
}
}
}
}

if ($body.Count -eq 0) {
$PSCmdlet.ThrowTerminatingError(
("The given input does not change the managed group." | `
ConvertTo-ErrorRecord -ErrorCategory InvalidArgument))
('The given input does not change the managed group.' | ConvertTo-ErrorRecord -ErrorCategory InvalidArgument))
}
}

Process {
$groupId = $Group | Resolve-TeamViewerManagedGroupId
$resourceUri = "$(Get-TeamViewerApiUri)/managed/groups/$groupId"

if ($PSCmdlet.ShouldProcess($groupId, "Update managed group")) {
if ($PSCmdlet.ShouldProcess($groupId, 'Update managed group')) {
Invoke-TeamViewerRestMethod `
-ApiToken $ApiToken `
-Uri $resourceUri `
-Method Put `
-ContentType "application/json; charset=utf-8" `
-ContentType 'application/json; charset=utf-8' `
-Body ([System.Text.Encoding]::UTF8.GetBytes(($body | ConvertTo-Json))) `
-WriteErrorTo $PSCmdlet | `
Out-Null
-WriteErrorTo $PSCmdlet | Out-Null
}
}
}
4 changes: 2 additions & 2 deletions Cmdlets/TeamViewerPS.psd1
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@{
@{
# Script module or binary module file associated with this manifest.
RootModule = 'TeamViewerPS.psm1'

Expand Down Expand Up @@ -60,7 +60,7 @@
# NestedModules = @()

# Functions to export from this module.
FunctionsToExport = @('Add-TeamViewerAssignment', 'Add-TeamViewerCustomization', 'Add-TeamViewerManagedDevice', 'Add-TeamViewerManager', 'Add-TeamViewerRoleToAccount', 'Add-TeamViewerRoleToUserGroup', 'Add-TeamViewerSsoExclusion', 'Add-TeamViewerUserGroupMember', 'Connect-TeamViewerApi', 'Disconnect-TeamViewerApi', 'Export-TeamViewerSystemInformation', 'Get-TeamViewerAccount', 'Get-TeamViewerConnectionReport', 'Get-TeamViewerContact', 'Get-TeamViewerCustomModuleId', 'Get-TeamViewerDevice', 'Get-TeamViewerEventLog', 'Get-TeamViewerGroup', 'Get-TeamViewerId', 'Get-TeamViewerInstallationDirectory', 'Get-TeamViewerLogFilePath', 'Get-TeamViewerManagedDevice', 'Get-TeamViewerManagedGroup', 'Get-TeamViewerManagementId', 'Get-TeamViewerManager', 'Get-TeamViewerPolicy', 'Get-TeamViewerRoleAssignmentToAccount', 'Get-TeamViewerRoleAssignmentToUserGroup', 'Get-TeamViewerService', 'Get-TeamViewerSsoDomain', 'Get-TeamViewerSsoExclusion', 'Get-TeamViewerUser', 'Get-TeamViewerUserGroup', 'Get-TeamViewerUserGroupMember', 'Get-TeamViewerUserRole', 'Get-TeamViewerVersion', 'Invoke-TeamViewerPackageDownload', 'Invoke-TeamViewerPing', 'New-TeamViewerContact', 'New-TeamViewerDevice', 'New-TeamViewerGroup', 'New-TeamViewerManagedGroup', 'New-TeamViewerPolicy', 'New-TeamViewerUser', 'New-TeamViewerUserGroup', 'New-TeamViewerUserRole', 'Publish-TeamViewerGroup', 'Remove-TeamViewerAssignment', 'Remove-TeamViewerContact', 'Remove-TeamViewerCustomization', 'Remove-TeamViewerDevice', 'Remove-TeamViewerGroup', 'Remove-TeamViewerManagedDevice', 'Remove-TeamViewerManagedDeviceManagement', 'Remove-TeamViewerManagedGroup', 'Remove-TeamViewerManager', 'Remove-TeamViewerPolicy', 'Remove-TeamViewerPolicyFromManagedDevice', 'Remove-TeamViewerPSProxy', 'Remove-TeamViewerRoleFromAccount', 'Remove-TeamViewerRoleFromUserGroup', 'Remove-TeamViewerSsoExclusion', 'Remove-TeamViewerUser', 'Remove-TeamViewerUserGroup', 'Remove-TeamViewerUserGroupMember', 'Remove-TeamViewerUserRole', 'Restart-TeamViewerService', 'Set-TeamViewerAccount', 'Set-TeamViewerAPIUri', 'Set-TeamViewerDevice', 'Set-TeamViewerGroup', 'Set-TeamViewerManagedDevice', 'Set-TeamViewerManagedGroup', 'Set-TeamViewerManager', 'Set-TeamViewerPolicy', 'Set-TeamViewerPSProxy', 'Set-TeamViewerUser', 'Set-TeamViewerUserGroup', 'Set-TeamViewerUserRole', 'Start-TeamViewerService', 'Stop-TeamViewerService', 'Test-TeamViewerConnectivity', 'Test-TeamViewerInstallation', 'Unpublish-TeamViewerGroup')
FunctionsToExport = @('Add-TeamViewerAssignment','Add-TeamViewerCustomization','Add-TeamViewerManagedDevice','Add-TeamViewerManager','Add-TeamViewerRoleToAccount','Add-TeamViewerRoleToUserGroup','Add-TeamViewerSsoExclusion','Add-TeamViewerUserGroupMember','Connect-TeamViewerApi','Disconnect-TeamViewerApi','Export-TeamViewerSystemInformation','Get-TeamViewerAccount','Get-TeamViewerConnectionReport','Get-TeamViewerContact','Get-TeamViewerCustomModuleId','Get-TeamViewerDevice','Get-TeamViewerEventLog','Get-TeamViewerGroup','Get-TeamViewerId','Get-TeamViewerInstallationDirectory','Get-TeamViewerLogFilePath','Get-TeamViewerManagedDevice','Get-TeamViewerManagedGroup','Get-TeamViewerManagementId','Get-TeamViewerManager','Get-TeamViewerPolicy','Get-TeamViewerRoleAssignmentToAccount','Get-TeamViewerRoleAssignmentToUserGroup','Get-TeamViewerService','Get-TeamViewerSsoDomain','Get-TeamViewerSsoExclusion','Get-TeamViewerUser','Get-TeamViewerUserGroup','Get-TeamViewerUserGroupMember','Get-TeamViewerUserRole','Get-TeamViewerVersion','Invoke-TeamViewerPackageDownload','Invoke-TeamViewerPing','New-TeamViewerContact','New-TeamViewerDevice','New-TeamViewerGroup','New-TeamViewerManagedGroup','New-TeamViewerPolicy','New-TeamViewerUser','New-TeamViewerUserGroup','New-TeamViewerUserRole','Publish-TeamViewerGroup','Remove-TeamViewerAssignment','Remove-TeamViewerContact','Remove-TeamViewerCustomization','Remove-TeamViewerDevice','Remove-TeamViewerGroup','Remove-TeamViewerManagedDevice','Remove-TeamViewerManagedDeviceManagement','Remove-TeamViewerManagedGroup','Remove-TeamViewerManager','Remove-TeamViewerPolicy','Remove-TeamViewerPolicyFromManagedDevice','Remove-TeamViewerPolicyFromManagedGroup','Remove-TeamViewerPSProxy','Remove-TeamViewerRoleFromAccount','Remove-TeamViewerRoleFromUserGroup','Remove-TeamViewerSsoExclusion','Remove-TeamViewerUser','Remove-TeamViewerUserGroup','Remove-TeamViewerUserGroupMember','Remove-TeamViewerUserRole','Restart-TeamViewerService','Set-TeamViewerAccount','Set-TeamViewerAPIUri','Set-TeamViewerDevice','Set-TeamViewerGroup','Set-TeamViewerManagedDevice','Set-TeamViewerManagedGroup','Set-TeamViewerManager','Set-TeamViewerPolicy','Set-TeamViewerPSProxy','Set-TeamViewerUser','Set-TeamViewerUserGroup','Set-TeamViewerUserRole','Start-TeamViewerService','Stop-TeamViewerService','Test-TeamViewerConnectivity','Test-TeamViewerInstallation','Unpublish-TeamViewerGroup')

# Cmdlets to export from this module.
CmdletsToExport = @()
Expand Down
Loading

0 comments on commit 0b8d5bf

Please sign in to comment.