Public/adc-functions-conf-rdp.ps1
function Invoke-ADCAddRdpclientprofile { <# .SYNOPSIS Add Rdp configuration Object. .DESCRIPTION Configuration for RDP clientprofile resource. .PARAMETER Name The name of the rdp profile. .PARAMETER Rdpurloverride This setting determines whether the RDP parameters supplied in the vpn url override those specified in the RDP profile. Possible values = ENABLE, DISABLE .PARAMETER Redirectclipboard This setting corresponds to the Clipboard check box on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Redirectdrives This setting corresponds to the selections for Drives under More on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Redirectprinters This setting corresponds to the selection in the Printers check box on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Redirectcomports This setting corresponds to the selections for comports under More on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Redirectpnpdevices This setting corresponds to the selections for pnpdevices under More on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Keyboardhook This setting corresponds to the selection in the Keyboard drop-down list on the Local Resources tab under Options in RDC. Possible values = OnLocal, OnRemote, InFullScreenMode .PARAMETER Audiocapturemode This setting corresponds to the selections in the Remote audio area on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Videoplaybackmode This setting determines if Remote Desktop Connection (RDC) will use RDP efficient multimedia streaming for video playback. Possible values = ENABLE, DISABLE .PARAMETER Multimonitorsupport Enable/Disable Multiple Monitor Support for Remote Desktop Connection (RDC). Possible values = ENABLE, DISABLE .PARAMETER Rdpcookievalidity RDP cookie validity period. RDP cookie validity time is applicable for new connection and also for any re-connection that might happen, mostly due to network disruption or during fail-over. .PARAMETER Addusernameinrdpfile Add username in rdp file. Possible values = YES, NO .PARAMETER Rdpfilename RDP file name to be sent to End User. .PARAMETER Rdphost Fully-qualified domain name (FQDN) of the RDP Listener. .PARAMETER Rdplistener IP address (or) Fully-qualified domain name(FQDN) of the RDP Listener with the port in the format IP:Port (or) FQDN:Port. .PARAMETER Rdpcustomparams Option for RDP custom parameters settings (if any). Custom params needs to be separated by ';'. .PARAMETER Psk Pre shared key value. .PARAMETER Randomizerdpfilename Will generate unique filename everytime rdp file is downloaded by appending output of time() function in the format <rdpfileName>_<time>.rdp. This tries to avoid the pop-up for replacement of existing rdp file during each rdp connection launch, hence providing better end-user experience. Possible values = YES, NO .PARAMETER Rdplinkattribute Citrix Gateway allows the configuration of rdpLinkAttribute parameter which can be used to fetch a list of RDP servers(IP/FQDN) that a user can access, from an Authentication server attribute(Example: LDAP, SAML). Based on the list received, the RDP links will be generated and displayed to the user. Note: The Attribute mentioned in the rdpLinkAttribute should be fetched through corresponding authentication method. .PARAMETER Rdpvalidateclientip This setting determines whether RDC launch is initiated by the valid client IP. Possible values = ENABLE, DISABLE .PARAMETER PassThru Return details about the created rdpclientprofile item. .EXAMPLE PS C:\>Invoke-ADCAddRdpclientprofile -name <string> An example how to add rdpclientprofile configuration Object(s). .NOTES File Name : Invoke-ADCAddRdpclientprofile Version : v2210.2317 Author : John Billekens Reference : https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/rdp/rdpclientprofile/ Requires : PowerShell v5.1 and up ADC 13.x and up. ADC 12 and lower may work, not guaranteed. .LINK https://blog.j81.nl #> [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingUserNameAndPasswordParams', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseBOMForUnicodeEncodedFile', '')] param( [Parameter(DontShow)] [Object]$ADCSession = (Get-ADCSession), [Parameter(Mandatory)] [ValidateScript({ $_.Length -gt 1 })] [string]$Name, [ValidateSet('ENABLE', 'DISABLE')] [string]$Rdpurloverride = 'ENABLE', [ValidateSet('ENABLE', 'DISABLE')] [string]$Redirectclipboard = 'ENABLE', [ValidateSet('ENABLE', 'DISABLE')] [string]$Redirectdrives = 'DISABLE', [ValidateSet('ENABLE', 'DISABLE')] [string]$Redirectprinters = 'ENABLE', [ValidateSet('ENABLE', 'DISABLE')] [string]$Redirectcomports = 'DISABLE', [ValidateSet('ENABLE', 'DISABLE')] [string]$Redirectpnpdevices = 'DISABLE', [ValidateSet('OnLocal', 'OnRemote', 'InFullScreenMode')] [string]$Keyboardhook = 'InFullScreenMode', [ValidateSet('ENABLE', 'DISABLE')] [string]$Audiocapturemode = 'DISABLE', [ValidateSet('ENABLE', 'DISABLE')] [string]$Videoplaybackmode = 'ENABLE', [ValidateSet('ENABLE', 'DISABLE')] [string]$Multimonitorsupport = 'ENABLE', [ValidateRange(1, 86400)] [double]$Rdpcookievalidity = '60', [ValidateSet('YES', 'NO')] [string]$Addusernameinrdpfile = 'NO', [ValidateScript({ $_.Length -gt 1 })] [string]$Rdpfilename, [string]$Rdphost, [string]$Rdplistener, [ValidateScript({ $_.Length -gt 1 })] [string]$Rdpcustomparams = '0', [string]$Psk = '0', [ValidateSet('YES', 'NO')] [string]$Randomizerdpfilename = 'NO', [string]$Rdplinkattribute, [ValidateSet('ENABLE', 'DISABLE')] [string]$Rdpvalidateclientip = 'DISABLE', [Switch]$PassThru ) begin { Write-Verbose "Invoke-ADCAddRdpclientprofile: Starting" } process { try { $payload = @{ name = $name } if ( $PSBoundParameters.ContainsKey('rdpurloverride') ) { $payload.Add('rdpurloverride', $rdpurloverride) } if ( $PSBoundParameters.ContainsKey('redirectclipboard') ) { $payload.Add('redirectclipboard', $redirectclipboard) } if ( $PSBoundParameters.ContainsKey('redirectdrives') ) { $payload.Add('redirectdrives', $redirectdrives) } if ( $PSBoundParameters.ContainsKey('redirectprinters') ) { $payload.Add('redirectprinters', $redirectprinters) } if ( $PSBoundParameters.ContainsKey('redirectcomports') ) { $payload.Add('redirectcomports', $redirectcomports) } if ( $PSBoundParameters.ContainsKey('redirectpnpdevices') ) { $payload.Add('redirectpnpdevices', $redirectpnpdevices) } if ( $PSBoundParameters.ContainsKey('keyboardhook') ) { $payload.Add('keyboardhook', $keyboardhook) } if ( $PSBoundParameters.ContainsKey('audiocapturemode') ) { $payload.Add('audiocapturemode', $audiocapturemode) } if ( $PSBoundParameters.ContainsKey('videoplaybackmode') ) { $payload.Add('videoplaybackmode', $videoplaybackmode) } if ( $PSBoundParameters.ContainsKey('multimonitorsupport') ) { $payload.Add('multimonitorsupport', $multimonitorsupport) } if ( $PSBoundParameters.ContainsKey('rdpcookievalidity') ) { $payload.Add('rdpcookievalidity', $rdpcookievalidity) } if ( $PSBoundParameters.ContainsKey('addusernameinrdpfile') ) { $payload.Add('addusernameinrdpfile', $addusernameinrdpfile) } if ( $PSBoundParameters.ContainsKey('rdpfilename') ) { $payload.Add('rdpfilename', $rdpfilename) } if ( $PSBoundParameters.ContainsKey('rdphost') ) { $payload.Add('rdphost', $rdphost) } if ( $PSBoundParameters.ContainsKey('rdplistener') ) { $payload.Add('rdplistener', $rdplistener) } if ( $PSBoundParameters.ContainsKey('rdpcustomparams') ) { $payload.Add('rdpcustomparams', $rdpcustomparams) } if ( $PSBoundParameters.ContainsKey('psk') ) { $payload.Add('psk', $psk) } if ( $PSBoundParameters.ContainsKey('randomizerdpfilename') ) { $payload.Add('randomizerdpfilename', $randomizerdpfilename) } if ( $PSBoundParameters.ContainsKey('rdplinkattribute') ) { $payload.Add('rdplinkattribute', $rdplinkattribute) } if ( $PSBoundParameters.ContainsKey('rdpvalidateclientip') ) { $payload.Add('rdpvalidateclientip', $rdpvalidateclientip) } if ( $PSCmdlet.ShouldProcess("rdpclientprofile", "Add Rdp configuration Object") ) { $result = Invoke-ADCNitroApi -ADCSession $ADCSession -Method POST -NitroPath nitro/v1/config -Type rdpclientprofile -Payload $payload -GetWarning #HTTP Status Code on Success: 201 Created #HTTP Status Code on Failure: 4xx <string> (for general HTTP errors) or 5xx <string> (for NetScaler-specific errors). The response payload provides details of the error if ( $PSBoundParameters.ContainsKey('PassThru') ) { Write-Output (Invoke-ADCGetRdpclientprofile -Filter $payload) } else { Write-Output $result } } } catch { Write-Verbose "ERROR: $($_.Exception.Message)" throw $_ } } end { Write-Verbose "Invoke-ADCAddRdpclientprofile: Finished" } } function Invoke-ADCUpdateRdpclientprofile { <# .SYNOPSIS Update Rdp configuration Object. .DESCRIPTION Configuration for RDP clientprofile resource. .PARAMETER Name The name of the rdp profile. .PARAMETER Rdpurloverride This setting determines whether the RDP parameters supplied in the vpn url override those specified in the RDP profile. Possible values = ENABLE, DISABLE .PARAMETER Redirectclipboard This setting corresponds to the Clipboard check box on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Redirectdrives This setting corresponds to the selections for Drives under More on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Redirectprinters This setting corresponds to the selection in the Printers check box on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Redirectcomports This setting corresponds to the selections for comports under More on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Redirectpnpdevices This setting corresponds to the selections for pnpdevices under More on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Keyboardhook This setting corresponds to the selection in the Keyboard drop-down list on the Local Resources tab under Options in RDC. Possible values = OnLocal, OnRemote, InFullScreenMode .PARAMETER Audiocapturemode This setting corresponds to the selections in the Remote audio area on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Videoplaybackmode This setting determines if Remote Desktop Connection (RDC) will use RDP efficient multimedia streaming for video playback. Possible values = ENABLE, DISABLE .PARAMETER Multimonitorsupport Enable/Disable Multiple Monitor Support for Remote Desktop Connection (RDC). Possible values = ENABLE, DISABLE .PARAMETER Rdpcookievalidity RDP cookie validity period. RDP cookie validity time is applicable for new connection and also for any re-connection that might happen, mostly due to network disruption or during fail-over. .PARAMETER Addusernameinrdpfile Add username in rdp file. Possible values = YES, NO .PARAMETER Rdpfilename RDP file name to be sent to End User. .PARAMETER Rdphost Fully-qualified domain name (FQDN) of the RDP Listener. .PARAMETER Rdplistener IP address (or) Fully-qualified domain name(FQDN) of the RDP Listener with the port in the format IP:Port (or) FQDN:Port. .PARAMETER Rdpcustomparams Option for RDP custom parameters settings (if any). Custom params needs to be separated by ';'. .PARAMETER Psk Pre shared key value. .PARAMETER Randomizerdpfilename Will generate unique filename everytime rdp file is downloaded by appending output of time() function in the format <rdpfileName>_<time>.rdp. This tries to avoid the pop-up for replacement of existing rdp file during each rdp connection launch, hence providing better end-user experience. Possible values = YES, NO .PARAMETER Rdplinkattribute Citrix Gateway allows the configuration of rdpLinkAttribute parameter which can be used to fetch a list of RDP servers(IP/FQDN) that a user can access, from an Authentication server attribute(Example: LDAP, SAML). Based on the list received, the RDP links will be generated and displayed to the user. Note: The Attribute mentioned in the rdpLinkAttribute should be fetched through corresponding authentication method. .PARAMETER Rdpvalidateclientip This setting determines whether RDC launch is initiated by the valid client IP. Possible values = ENABLE, DISABLE .PARAMETER PassThru Return details about the created rdpclientprofile item. .EXAMPLE PS C:\>Invoke-ADCUpdateRdpclientprofile -name <string> An example how to update rdpclientprofile configuration Object(s). .NOTES File Name : Invoke-ADCUpdateRdpclientprofile Version : v2210.2317 Author : John Billekens Reference : https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/rdp/rdpclientprofile/ Requires : PowerShell v5.1 and up ADC 13.x and up. ADC 12 and lower may work, not guaranteed. .LINK https://blog.j81.nl #> [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingUserNameAndPasswordParams', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseBOMForUnicodeEncodedFile', '')] param( [Parameter(DontShow)] [Object]$ADCSession = (Get-ADCSession), [Parameter(Mandatory)] [ValidateScript({ $_.Length -gt 1 })] [string]$Name, [ValidateSet('ENABLE', 'DISABLE')] [string]$Rdpurloverride, [ValidateSet('ENABLE', 'DISABLE')] [string]$Redirectclipboard, [ValidateSet('ENABLE', 'DISABLE')] [string]$Redirectdrives, [ValidateSet('ENABLE', 'DISABLE')] [string]$Redirectprinters, [ValidateSet('ENABLE', 'DISABLE')] [string]$Redirectcomports, [ValidateSet('ENABLE', 'DISABLE')] [string]$Redirectpnpdevices, [ValidateSet('OnLocal', 'OnRemote', 'InFullScreenMode')] [string]$Keyboardhook, [ValidateSet('ENABLE', 'DISABLE')] [string]$Audiocapturemode, [ValidateSet('ENABLE', 'DISABLE')] [string]$Videoplaybackmode, [ValidateSet('ENABLE', 'DISABLE')] [string]$Multimonitorsupport, [ValidateRange(1, 86400)] [double]$Rdpcookievalidity, [ValidateSet('YES', 'NO')] [string]$Addusernameinrdpfile, [ValidateScript({ $_.Length -gt 1 })] [string]$Rdpfilename, [string]$Rdphost, [string]$Rdplistener, [ValidateScript({ $_.Length -gt 1 })] [string]$Rdpcustomparams, [string]$Psk, [ValidateSet('YES', 'NO')] [string]$Randomizerdpfilename, [string]$Rdplinkattribute, [ValidateSet('ENABLE', 'DISABLE')] [string]$Rdpvalidateclientip, [Switch]$PassThru ) begin { Write-Verbose "Invoke-ADCUpdateRdpclientprofile: Starting" } process { try { $payload = @{ name = $name } if ( $PSBoundParameters.ContainsKey('rdpurloverride') ) { $payload.Add('rdpurloverride', $rdpurloverride) } if ( $PSBoundParameters.ContainsKey('redirectclipboard') ) { $payload.Add('redirectclipboard', $redirectclipboard) } if ( $PSBoundParameters.ContainsKey('redirectdrives') ) { $payload.Add('redirectdrives', $redirectdrives) } if ( $PSBoundParameters.ContainsKey('redirectprinters') ) { $payload.Add('redirectprinters', $redirectprinters) } if ( $PSBoundParameters.ContainsKey('redirectcomports') ) { $payload.Add('redirectcomports', $redirectcomports) } if ( $PSBoundParameters.ContainsKey('redirectpnpdevices') ) { $payload.Add('redirectpnpdevices', $redirectpnpdevices) } if ( $PSBoundParameters.ContainsKey('keyboardhook') ) { $payload.Add('keyboardhook', $keyboardhook) } if ( $PSBoundParameters.ContainsKey('audiocapturemode') ) { $payload.Add('audiocapturemode', $audiocapturemode) } if ( $PSBoundParameters.ContainsKey('videoplaybackmode') ) { $payload.Add('videoplaybackmode', $videoplaybackmode) } if ( $PSBoundParameters.ContainsKey('multimonitorsupport') ) { $payload.Add('multimonitorsupport', $multimonitorsupport) } if ( $PSBoundParameters.ContainsKey('rdpcookievalidity') ) { $payload.Add('rdpcookievalidity', $rdpcookievalidity) } if ( $PSBoundParameters.ContainsKey('addusernameinrdpfile') ) { $payload.Add('addusernameinrdpfile', $addusernameinrdpfile) } if ( $PSBoundParameters.ContainsKey('rdpfilename') ) { $payload.Add('rdpfilename', $rdpfilename) } if ( $PSBoundParameters.ContainsKey('rdphost') ) { $payload.Add('rdphost', $rdphost) } if ( $PSBoundParameters.ContainsKey('rdplistener') ) { $payload.Add('rdplistener', $rdplistener) } if ( $PSBoundParameters.ContainsKey('rdpcustomparams') ) { $payload.Add('rdpcustomparams', $rdpcustomparams) } if ( $PSBoundParameters.ContainsKey('psk') ) { $payload.Add('psk', $psk) } if ( $PSBoundParameters.ContainsKey('randomizerdpfilename') ) { $payload.Add('randomizerdpfilename', $randomizerdpfilename) } if ( $PSBoundParameters.ContainsKey('rdplinkattribute') ) { $payload.Add('rdplinkattribute', $rdplinkattribute) } if ( $PSBoundParameters.ContainsKey('rdpvalidateclientip') ) { $payload.Add('rdpvalidateclientip', $rdpvalidateclientip) } if ( $PSCmdlet.ShouldProcess("rdpclientprofile", "Update Rdp configuration Object") ) { $result = Invoke-ADCNitroApi -ADCSession $ADCSession -Method PUT -NitroPath nitro/v1/config -Type rdpclientprofile -Payload $payload -GetWarning #HTTP Status Code on Success: 200 OK #HTTP Status Code on Failure: 4xx <string> (for general HTTP errors) or 5xx <string> (for NetScaler-specific errors). The response payload provides details of the error if ( $PSBoundParameters.ContainsKey('PassThru') ) { Write-Output (Invoke-ADCGetRdpclientprofile -Filter $payload) } else { Write-Output $result } } } catch { Write-Verbose "ERROR: $($_.Exception.Message)" throw $_ } } end { Write-Verbose "Invoke-ADCUpdateRdpclientprofile: Finished" } } function Invoke-ADCUnsetRdpclientprofile { <# .SYNOPSIS Unset Rdp configuration Object. .DESCRIPTION Configuration for RDP clientprofile resource. .PARAMETER Name The name of the rdp profile. .PARAMETER Rdpurloverride This setting determines whether the RDP parameters supplied in the vpn url override those specified in the RDP profile. Possible values = ENABLE, DISABLE .PARAMETER Redirectclipboard This setting corresponds to the Clipboard check box on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Redirectdrives This setting corresponds to the selections for Drives under More on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Redirectprinters This setting corresponds to the selection in the Printers check box on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Redirectcomports This setting corresponds to the selections for comports under More on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Redirectpnpdevices This setting corresponds to the selections for pnpdevices under More on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Keyboardhook This setting corresponds to the selection in the Keyboard drop-down list on the Local Resources tab under Options in RDC. Possible values = OnLocal, OnRemote, InFullScreenMode .PARAMETER Audiocapturemode This setting corresponds to the selections in the Remote audio area on the Local Resources tab under Options in RDC. Possible values = ENABLE, DISABLE .PARAMETER Videoplaybackmode This setting determines if Remote Desktop Connection (RDC) will use RDP efficient multimedia streaming for video playback. Possible values = ENABLE, DISABLE .PARAMETER Multimonitorsupport Enable/Disable Multiple Monitor Support for Remote Desktop Connection (RDC). Possible values = ENABLE, DISABLE .PARAMETER Rdpcookievalidity RDP cookie validity period. RDP cookie validity time is applicable for new connection and also for any re-connection that might happen, mostly due to network disruption or during fail-over. .PARAMETER Addusernameinrdpfile Add username in rdp file. Possible values = YES, NO .PARAMETER Rdpfilename RDP file name to be sent to End User. .PARAMETER Rdphost Fully-qualified domain name (FQDN) of the RDP Listener. .PARAMETER Rdplistener IP address (or) Fully-qualified domain name(FQDN) of the RDP Listener with the port in the format IP:Port (or) FQDN:Port. .PARAMETER Rdpcustomparams Option for RDP custom parameters settings (if any). Custom params needs to be separated by ';'. .PARAMETER Psk Pre shared key value. .PARAMETER Randomizerdpfilename Will generate unique filename everytime rdp file is downloaded by appending output of time() function in the format <rdpfileName>_<time>.rdp. This tries to avoid the pop-up for replacement of existing rdp file during each rdp connection launch, hence providing better end-user experience. Possible values = YES, NO .PARAMETER Rdplinkattribute Citrix Gateway allows the configuration of rdpLinkAttribute parameter which can be used to fetch a list of RDP servers(IP/FQDN) that a user can access, from an Authentication server attribute(Example: LDAP, SAML). Based on the list received, the RDP links will be generated and displayed to the user. Note: The Attribute mentioned in the rdpLinkAttribute should be fetched through corresponding authentication method. .PARAMETER Rdpvalidateclientip This setting determines whether RDC launch is initiated by the valid client IP. Possible values = ENABLE, DISABLE .EXAMPLE PS C:\>Invoke-ADCUnsetRdpclientprofile -name <string> An example how to unset rdpclientprofile configuration Object(s). .NOTES File Name : Invoke-ADCUnsetRdpclientprofile Version : v2210.2317 Author : John Billekens Reference : https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/rdp/rdpclientprofile Requires : PowerShell v5.1 and up ADC 13.x and up. ADC 12 and lower may work, not guaranteed. .LINK https://blog.j81.nl #> [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingUserNameAndPasswordParams', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseBOMForUnicodeEncodedFile', '')] param( [Parameter(DontShow)] [Object]$ADCSession = (Get-ADCSession), [ValidateScript({ $_.Length -gt 1 })] [string]$Name, [Boolean]$rdpurloverride, [Boolean]$redirectclipboard, [Boolean]$redirectdrives, [Boolean]$redirectprinters, [Boolean]$redirectcomports, [Boolean]$redirectpnpdevices, [Boolean]$keyboardhook, [Boolean]$audiocapturemode, [Boolean]$videoplaybackmode, [Boolean]$multimonitorsupport, [Boolean]$rdpcookievalidity, [Boolean]$addusernameinrdpfile, [Boolean]$rdpfilename, [Boolean]$rdphost, [Boolean]$rdplistener, [Boolean]$rdpcustomparams, [Boolean]$psk, [Boolean]$randomizerdpfilename, [Boolean]$rdplinkattribute, [Boolean]$rdpvalidateclientip ) begin { Write-Verbose "Invoke-ADCUnsetRdpclientprofile: Starting" } process { try { $payload = @{ name = $name } if ( $PSBoundParameters.ContainsKey('rdpurloverride') ) { $payload.Add('rdpurloverride', $rdpurloverride) } if ( $PSBoundParameters.ContainsKey('redirectclipboard') ) { $payload.Add('redirectclipboard', $redirectclipboard) } if ( $PSBoundParameters.ContainsKey('redirectdrives') ) { $payload.Add('redirectdrives', $redirectdrives) } if ( $PSBoundParameters.ContainsKey('redirectprinters') ) { $payload.Add('redirectprinters', $redirectprinters) } if ( $PSBoundParameters.ContainsKey('redirectcomports') ) { $payload.Add('redirectcomports', $redirectcomports) } if ( $PSBoundParameters.ContainsKey('redirectpnpdevices') ) { $payload.Add('redirectpnpdevices', $redirectpnpdevices) } if ( $PSBoundParameters.ContainsKey('keyboardhook') ) { $payload.Add('keyboardhook', $keyboardhook) } if ( $PSBoundParameters.ContainsKey('audiocapturemode') ) { $payload.Add('audiocapturemode', $audiocapturemode) } if ( $PSBoundParameters.ContainsKey('videoplaybackmode') ) { $payload.Add('videoplaybackmode', $videoplaybackmode) } if ( $PSBoundParameters.ContainsKey('multimonitorsupport') ) { $payload.Add('multimonitorsupport', $multimonitorsupport) } if ( $PSBoundParameters.ContainsKey('rdpcookievalidity') ) { $payload.Add('rdpcookievalidity', $rdpcookievalidity) } if ( $PSBoundParameters.ContainsKey('addusernameinrdpfile') ) { $payload.Add('addusernameinrdpfile', $addusernameinrdpfile) } if ( $PSBoundParameters.ContainsKey('rdpfilename') ) { $payload.Add('rdpfilename', $rdpfilename) } if ( $PSBoundParameters.ContainsKey('rdphost') ) { $payload.Add('rdphost', $rdphost) } if ( $PSBoundParameters.ContainsKey('rdplistener') ) { $payload.Add('rdplistener', $rdplistener) } if ( $PSBoundParameters.ContainsKey('rdpcustomparams') ) { $payload.Add('rdpcustomparams', $rdpcustomparams) } if ( $PSBoundParameters.ContainsKey('psk') ) { $payload.Add('psk', $psk) } if ( $PSBoundParameters.ContainsKey('randomizerdpfilename') ) { $payload.Add('randomizerdpfilename', $randomizerdpfilename) } if ( $PSBoundParameters.ContainsKey('rdplinkattribute') ) { $payload.Add('rdplinkattribute', $rdplinkattribute) } if ( $PSBoundParameters.ContainsKey('rdpvalidateclientip') ) { $payload.Add('rdpvalidateclientip', $rdpvalidateclientip) } if ( $PSCmdlet.ShouldProcess("$name", "Unset Rdp configuration Object") ) { $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method POST -Type rdpclientprofile -NitroPath nitro/v1/config -Action unset -Payload $payload -GetWarning #HTTP Status Code on Success: 200 OK #HTTP Status Code on Failure: 4xx <string> (for general HTTP errors) or 5xx <string> (for NetScaler-specific errors). The response payload provides details of the error Write-Output $response } } catch { Write-Verbose "ERROR: $($_.Exception.Message)" throw $_ } } end { Write-Verbose "Invoke-ADCUnsetRdpclientprofile: Finished" } } function Invoke-ADCDeleteRdpclientprofile { <# .SYNOPSIS Delete Rdp configuration Object. .DESCRIPTION Configuration for RDP clientprofile resource. .PARAMETER Name The name of the rdp profile. .EXAMPLE PS C:\>Invoke-ADCDeleteRdpclientprofile -Name <string> An example how to delete rdpclientprofile configuration Object(s). .NOTES File Name : Invoke-ADCDeleteRdpclientprofile Version : v2210.2317 Author : John Billekens Reference : https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/rdp/rdpclientprofile/ Requires : PowerShell v5.1 and up ADC 13.x and up. ADC 12 and lower may work, not guaranteed. .LINK https://blog.j81.nl #> [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingUserNameAndPasswordParams', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseBOMForUnicodeEncodedFile', '')] param( [Parameter(DontShow)] [Object]$ADCSession = (Get-ADCSession), [Parameter(Mandatory)] [string]$Name ) begin { Write-Verbose "Invoke-ADCDeleteRdpclientprofile: Starting" } process { try { $arguments = @{ } if ( $PSCmdlet.ShouldProcess("$name", "Delete Rdp configuration Object") ) { $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method DELETE -Type rdpclientprofile -NitroPath nitro/v1/config -Resource $name -Arguments $arguments #HTTP Status Code on Success: 200 OK #HTTP Status Code on Failure: 4xx <string> (for general HTTP errors) or 5xx <string> (for NetScaler-specific errors). The response payload provides details of the error Write-Output $response } } catch { Write-Verbose "ERROR: $($_.Exception.Message)" throw $_ } } end { Write-Verbose "Invoke-ADCDeleteRdpclientprofile: Finished" } } function Invoke-ADCGetRdpclientprofile { <# .SYNOPSIS Get Rdp configuration object(s). .DESCRIPTION Configuration for RDP clientprofile resource. .PARAMETER Name The name of the rdp profile. .PARAMETER GetAll Retrieve all rdpclientprofile object(s). .PARAMETER Count If specified, the count of the rdpclientprofile object(s) will be returned. .PARAMETER Filter Specify a filter. -Filter @{ 'name'='<value>' } .PARAMETER ViewSummary When specified, only a summary of information is returned. .EXAMPLE PS C:\>Invoke-ADCGetRdpclientprofile Get data. .EXAMPLE PS C:\>Invoke-ADCGetRdpclientprofile -GetAll Get all rdpclientprofile data. .EXAMPLE PS C:\>Invoke-ADCGetRdpclientprofile -Count Get the number of rdpclientprofile objects. .EXAMPLE PS C:\>Invoke-ADCGetRdpclientprofile -name <string> Get rdpclientprofile object by specifying for example the name. .EXAMPLE PS C:\>Invoke-ADCGetRdpclientprofile -Filter @{ 'name'='<value>' } Get rdpclientprofile data with a filter. .NOTES File Name : Invoke-ADCGetRdpclientprofile Version : v2210.2317 Author : John Billekens Reference : https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/rdp/rdpclientprofile/ Requires : PowerShell v5.1 and up ADC 13.x and up. ADC 12 and lower may work, not guaranteed. .LINK https://blog.j81.nl #> [CmdletBinding(DefaultParameterSetName = "GetAll")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingUserNameAndPasswordParams', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseBOMForUnicodeEncodedFile', '')] param( [Parameter(DontShow)] [Object]$ADCSession = (Get-ADCSession), [Parameter(ParameterSetName = 'GetByResource')] [ValidateScript({ $_.Length -gt 1 })] [string]$Name, [Parameter(ParameterSetName = 'Count', Mandatory)] [Switch]$Count, [hashtable]$Filter = @{ }, [Parameter(ParameterSetName = 'GetAll')] [Switch]$GetAll, [Parameter(ParameterSetName = 'GetAll')] [Parameter(ParameterSetName = 'Get')] [Switch]$ViewSummary ) begin { Write-Verbose "Invoke-ADCGetRdpclientprofile: Beginning" } process { try { if ( $PsCmdlet.ParameterSetName -eq 'GetAll' ) { $query = @{ } Write-Verbose "Retrieving all rdpclientprofile objects" $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpclientprofile -NitroPath nitro/v1/config -Query $query -Summary:$ViewSummary -Filter $Filter -GetWarning } elseif ( $PsCmdlet.ParameterSetName -eq 'Count' ) { if ( $PSBoundParameters.ContainsKey('Count') ) { $query = @{ 'count' = 'yes' } } Write-Verbose "Retrieving total count for rdpclientprofile objects" $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpclientprofile -NitroPath nitro/v1/config -Query $query -Summary:$ViewSummary -Filter $Filter -GetWarning } elseif ( $PsCmdlet.ParameterSetName -eq 'GetByArgument' ) { Write-Verbose "Retrieving rdpclientprofile objects by arguments" $arguments = @{ } $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpclientprofile -NitroPath nitro/v1/config -Arguments $arguments -GetWarning } elseif ( $PsCmdlet.ParameterSetName -eq 'GetByResource' ) { Write-Verbose "Retrieving rdpclientprofile configuration for property 'name'" $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpclientprofile -NitroPath nitro/v1/config -Resource $name -Summary:$ViewSummary -Filter $Filter -GetWarning } else { Write-Verbose "Retrieving rdpclientprofile configuration objects" $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpclientprofile -NitroPath nitro/v1/config -Summary:$ViewSummary -Query $query -Filter $Filter -GetWarning } } catch { Write-Verbose "ERROR: $($_.Exception.Message)" $response = $null } Write-Output $response } end { Write-Verbose "Invoke-ADCGetRdpclientprofile: Ended" } } function Invoke-ADCKillRdpconnections { <# .SYNOPSIS Kill Rdp configuration Object. .DESCRIPTION Configuration for active rdp connections resource. .PARAMETER Username User name for which to display connections. .PARAMETER All Terminate all active rdpconnections. .EXAMPLE PS C:\>Invoke-ADCKillRdpconnections An example how to kill rdpconnections configuration Object(s). .NOTES File Name : Invoke-ADCKillRdpconnections Version : v2210.2317 Author : John Billekens Reference : https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/rdp/rdpconnections/ Requires : PowerShell v5.1 and up ADC 13.x and up. ADC 12 and lower may work, not guaranteed. .LINK https://blog.j81.nl #> [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingUserNameAndPasswordParams', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseBOMForUnicodeEncodedFile', '')] param( [Parameter(DontShow)] [Object]$ADCSession = (Get-ADCSession), [ValidateScript({ $_.Length -gt 1 })] [string]$Username, [boolean]$All ) begin { Write-Verbose "Invoke-ADCKillRdpconnections: Starting" } process { try { $payload = @{ } if ( $PSBoundParameters.ContainsKey('username') ) { $payload.Add('username', $username) } if ( $PSBoundParameters.ContainsKey('all') ) { $payload.Add('all', $all) } if ( $PSCmdlet.ShouldProcess($Name, "Kill Rdp configuration Object") ) { $result = Invoke-ADCNitroApi -ADCSession $ADCSession -Method POST -NitroPath nitro/v1/config -Type rdpconnections -Action kill -Payload $payload -GetWarning #HTTP Status Code on Success: 200 OK #HTTP Status Code on Failure: 4xx <string> (for general HTTP errors) or 5xx <string> (for NetScaler-specific errors). The response payload provides details of the error Write-Output $result } } catch { Write-Verbose "ERROR: $($_.Exception.Message)" throw $_ } } end { Write-Verbose "Invoke-ADCKillRdpconnections: Finished" } } function Invoke-ADCGetRdpconnections { <# .SYNOPSIS Get Rdp configuration object(s). .DESCRIPTION Configuration for active rdp connections resource. .PARAMETER Username User name for which to display connections. .PARAMETER GetAll Retrieve all rdpconnections object(s). .PARAMETER Count If specified, the count of the rdpconnections object(s) will be returned. .PARAMETER Filter Specify a filter. -Filter @{ 'name'='<value>' } .PARAMETER ViewSummary When specified, only a summary of information is returned. .EXAMPLE PS C:\>Invoke-ADCGetRdpconnections Get data. .EXAMPLE PS C:\>Invoke-ADCGetRdpconnections -GetAll Get all rdpconnections data. .EXAMPLE PS C:\>Invoke-ADCGetRdpconnections -Count Get the number of rdpconnections objects. .EXAMPLE PS C:\>Invoke-ADCGetRdpconnections -name <string> Get rdpconnections object by specifying for example the name. .EXAMPLE PS C:\>Invoke-ADCGetRdpconnections -Filter @{ 'name'='<value>' } Get rdpconnections data with a filter. .NOTES File Name : Invoke-ADCGetRdpconnections Version : v2210.2317 Author : John Billekens Reference : https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/rdp/rdpconnections/ Requires : PowerShell v5.1 and up ADC 13.x and up. ADC 12 and lower may work, not guaranteed. .LINK https://blog.j81.nl #> [CmdletBinding(DefaultParameterSetName = "GetAll")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingUserNameAndPasswordParams', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseBOMForUnicodeEncodedFile', '')] param( [Parameter(DontShow)] [Object]$ADCSession = (Get-ADCSession), [Parameter(ParameterSetName = 'GetByArgument')] [ValidateScript({ $_.Length -gt 1 })] [string]$Username, [Parameter(ParameterSetName = 'Count', Mandatory)] [Switch]$Count, [hashtable]$Filter = @{ }, [Parameter(ParameterSetName = 'GetAll')] [Switch]$GetAll, [Parameter(ParameterSetName = 'GetAll')] [Switch]$ViewSummary ) begin { Write-Verbose "Invoke-ADCGetRdpconnections: Beginning" } process { try { if ( $PsCmdlet.ParameterSetName -eq 'GetAll' ) { $query = @{ } Write-Verbose "Retrieving all rdpconnections objects" $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpconnections -NitroPath nitro/v1/config -Query $query -Summary:$ViewSummary -Filter $Filter -GetWarning } elseif ( $PsCmdlet.ParameterSetName -eq 'Count' ) { if ( $PSBoundParameters.ContainsKey('Count') ) { $query = @{ 'count' = 'yes' } } Write-Verbose "Retrieving total count for rdpconnections objects" $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpconnections -NitroPath nitro/v1/config -Query $query -Summary:$ViewSummary -Filter $Filter -GetWarning } elseif ( $PsCmdlet.ParameterSetName -eq 'GetByArgument' ) { Write-Verbose "Retrieving rdpconnections objects by arguments" $arguments = @{ } if ( $PSBoundParameters.ContainsKey('username') ) { $arguments.Add('username', $username) } $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpconnections -NitroPath nitro/v1/config -Arguments $arguments -GetWarning } elseif ( $PsCmdlet.ParameterSetName -eq 'GetByResource' ) { Write-Verbose "Retrieving rdpconnections configuration for property ''" } else { Write-Verbose "Retrieving rdpconnections configuration objects" $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpconnections -NitroPath nitro/v1/config -Summary:$ViewSummary -Query $query -Filter $Filter -GetWarning } } catch { Write-Verbose "ERROR: $($_.Exception.Message)" $response = $null } Write-Output $response } end { Write-Verbose "Invoke-ADCGetRdpconnections: Ended" } } function Invoke-ADCAddRdpserverprofile { <# .SYNOPSIS Add Rdp configuration Object. .DESCRIPTION Configuration for RDP serverprofile resource. .PARAMETER Name The name of the rdp server profile. .PARAMETER Rdpip IPv4 or IPv6 address of RDP listener. This terminates client RDP connections. .PARAMETER Rdpport TCP port on which the RDP connection is established. .PARAMETER Psk Pre shared key value. .PARAMETER Rdpredirection Enable/Disable RDP redirection support. This needs to be enabled in presence of connection broker or session directory with IP cookie(msts cookie) based redirection support. Possible values = ENABLE, DISABLE .PARAMETER PassThru Return details about the created rdpserverprofile item. .EXAMPLE PS C:\>Invoke-ADCAddRdpserverprofile -name <string> -psk <string> An example how to add rdpserverprofile configuration Object(s). .NOTES File Name : Invoke-ADCAddRdpserverprofile Version : v2210.2317 Author : John Billekens Reference : https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/rdp/rdpserverprofile/ Requires : PowerShell v5.1 and up ADC 13.x and up. ADC 12 and lower may work, not guaranteed. .LINK https://blog.j81.nl #> [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingUserNameAndPasswordParams', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseBOMForUnicodeEncodedFile', '')] param( [Parameter(DontShow)] [Object]$ADCSession = (Get-ADCSession), [Parameter(Mandatory)] [ValidateLength(1, 32)] [string]$Name, [ValidateScript({ $_.Length -gt 1 })] [string]$Rdpip, [ValidateRange(1, 65535)] [double]$Rdpport = '3389', [Parameter(Mandatory)] [string]$Psk, [ValidateSet('ENABLE', 'DISABLE')] [string]$Rdpredirection = 'DISABLE', [Switch]$PassThru ) begin { Write-Verbose "Invoke-ADCAddRdpserverprofile: Starting" } process { try { $payload = @{ name = $name psk = $psk } if ( $PSBoundParameters.ContainsKey('rdpip') ) { $payload.Add('rdpip', $rdpip) } if ( $PSBoundParameters.ContainsKey('rdpport') ) { $payload.Add('rdpport', $rdpport) } if ( $PSBoundParameters.ContainsKey('rdpredirection') ) { $payload.Add('rdpredirection', $rdpredirection) } if ( $PSCmdlet.ShouldProcess("rdpserverprofile", "Add Rdp configuration Object") ) { $result = Invoke-ADCNitroApi -ADCSession $ADCSession -Method POST -NitroPath nitro/v1/config -Type rdpserverprofile -Payload $payload -GetWarning #HTTP Status Code on Success: 201 Created #HTTP Status Code on Failure: 4xx <string> (for general HTTP errors) or 5xx <string> (for NetScaler-specific errors). The response payload provides details of the error if ( $PSBoundParameters.ContainsKey('PassThru') ) { Write-Output (Invoke-ADCGetRdpserverprofile -Filter $payload) } else { Write-Output $result } } } catch { Write-Verbose "ERROR: $($_.Exception.Message)" throw $_ } } end { Write-Verbose "Invoke-ADCAddRdpserverprofile: Finished" } } function Invoke-ADCUpdateRdpserverprofile { <# .SYNOPSIS Update Rdp configuration Object. .DESCRIPTION Configuration for RDP serverprofile resource. .PARAMETER Name The name of the rdp server profile. .PARAMETER Rdpip IPv4 or IPv6 address of RDP listener. This terminates client RDP connections. .PARAMETER Rdpport TCP port on which the RDP connection is established. .PARAMETER Psk Pre shared key value. .PARAMETER Rdpredirection Enable/Disable RDP redirection support. This needs to be enabled in presence of connection broker or session directory with IP cookie(msts cookie) based redirection support. Possible values = ENABLE, DISABLE .PARAMETER PassThru Return details about the created rdpserverprofile item. .EXAMPLE PS C:\>Invoke-ADCUpdateRdpserverprofile -name <string> An example how to update rdpserverprofile configuration Object(s). .NOTES File Name : Invoke-ADCUpdateRdpserverprofile Version : v2210.2317 Author : John Billekens Reference : https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/rdp/rdpserverprofile/ Requires : PowerShell v5.1 and up ADC 13.x and up. ADC 12 and lower may work, not guaranteed. .LINK https://blog.j81.nl #> [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingUserNameAndPasswordParams', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseBOMForUnicodeEncodedFile', '')] param( [Parameter(DontShow)] [Object]$ADCSession = (Get-ADCSession), [Parameter(Mandatory)] [ValidateLength(1, 32)] [string]$Name, [ValidateScript({ $_.Length -gt 1 })] [string]$Rdpip, [ValidateRange(1, 65535)] [double]$Rdpport, [string]$Psk, [ValidateSet('ENABLE', 'DISABLE')] [string]$Rdpredirection, [Switch]$PassThru ) begin { Write-Verbose "Invoke-ADCUpdateRdpserverprofile: Starting" } process { try { $payload = @{ name = $name } if ( $PSBoundParameters.ContainsKey('rdpip') ) { $payload.Add('rdpip', $rdpip) } if ( $PSBoundParameters.ContainsKey('rdpport') ) { $payload.Add('rdpport', $rdpport) } if ( $PSBoundParameters.ContainsKey('psk') ) { $payload.Add('psk', $psk) } if ( $PSBoundParameters.ContainsKey('rdpredirection') ) { $payload.Add('rdpredirection', $rdpredirection) } if ( $PSCmdlet.ShouldProcess("rdpserverprofile", "Update Rdp configuration Object") ) { $result = Invoke-ADCNitroApi -ADCSession $ADCSession -Method PUT -NitroPath nitro/v1/config -Type rdpserverprofile -Payload $payload -GetWarning #HTTP Status Code on Success: 200 OK #HTTP Status Code on Failure: 4xx <string> (for general HTTP errors) or 5xx <string> (for NetScaler-specific errors). The response payload provides details of the error if ( $PSBoundParameters.ContainsKey('PassThru') ) { Write-Output (Invoke-ADCGetRdpserverprofile -Filter $payload) } else { Write-Output $result } } } catch { Write-Verbose "ERROR: $($_.Exception.Message)" throw $_ } } end { Write-Verbose "Invoke-ADCUpdateRdpserverprofile: Finished" } } function Invoke-ADCUnsetRdpserverprofile { <# .SYNOPSIS Unset Rdp configuration Object. .DESCRIPTION Configuration for RDP serverprofile resource. .PARAMETER Name The name of the rdp server profile. .PARAMETER Rdpip IPv4 or IPv6 address of RDP listener. This terminates client RDP connections. .PARAMETER Rdpport TCP port on which the RDP connection is established. .PARAMETER Psk Pre shared key value. .PARAMETER Rdpredirection Enable/Disable RDP redirection support. This needs to be enabled in presence of connection broker or session directory with IP cookie(msts cookie) based redirection support. Possible values = ENABLE, DISABLE .EXAMPLE PS C:\>Invoke-ADCUnsetRdpserverprofile -name <string> An example how to unset rdpserverprofile configuration Object(s). .NOTES File Name : Invoke-ADCUnsetRdpserverprofile Version : v2210.2317 Author : John Billekens Reference : https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/rdp/rdpserverprofile Requires : PowerShell v5.1 and up ADC 13.x and up. ADC 12 and lower may work, not guaranteed. .LINK https://blog.j81.nl #> [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingUserNameAndPasswordParams', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseBOMForUnicodeEncodedFile', '')] param( [Parameter(DontShow)] [Object]$ADCSession = (Get-ADCSession), [ValidateLength(1, 32)] [string]$Name, [Boolean]$rdpip, [Boolean]$rdpport, [Boolean]$psk, [Boolean]$rdpredirection ) begin { Write-Verbose "Invoke-ADCUnsetRdpserverprofile: Starting" } process { try { $payload = @{ name = $name } if ( $PSBoundParameters.ContainsKey('rdpip') ) { $payload.Add('rdpip', $rdpip) } if ( $PSBoundParameters.ContainsKey('rdpport') ) { $payload.Add('rdpport', $rdpport) } if ( $PSBoundParameters.ContainsKey('psk') ) { $payload.Add('psk', $psk) } if ( $PSBoundParameters.ContainsKey('rdpredirection') ) { $payload.Add('rdpredirection', $rdpredirection) } if ( $PSCmdlet.ShouldProcess("$name", "Unset Rdp configuration Object") ) { $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method POST -Type rdpserverprofile -NitroPath nitro/v1/config -Action unset -Payload $payload -GetWarning #HTTP Status Code on Success: 200 OK #HTTP Status Code on Failure: 4xx <string> (for general HTTP errors) or 5xx <string> (for NetScaler-specific errors). The response payload provides details of the error Write-Output $response } } catch { Write-Verbose "ERROR: $($_.Exception.Message)" throw $_ } } end { Write-Verbose "Invoke-ADCUnsetRdpserverprofile: Finished" } } function Invoke-ADCDeleteRdpserverprofile { <# .SYNOPSIS Delete Rdp configuration Object. .DESCRIPTION Configuration for RDP serverprofile resource. .PARAMETER Name The name of the rdp server profile. .EXAMPLE PS C:\>Invoke-ADCDeleteRdpserverprofile -Name <string> An example how to delete rdpserverprofile configuration Object(s). .NOTES File Name : Invoke-ADCDeleteRdpserverprofile Version : v2210.2317 Author : John Billekens Reference : https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/rdp/rdpserverprofile/ Requires : PowerShell v5.1 and up ADC 13.x and up. ADC 12 and lower may work, not guaranteed. .LINK https://blog.j81.nl #> [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = "Low")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingUserNameAndPasswordParams', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseBOMForUnicodeEncodedFile', '')] param( [Parameter(DontShow)] [Object]$ADCSession = (Get-ADCSession), [Parameter(Mandatory)] [string]$Name ) begin { Write-Verbose "Invoke-ADCDeleteRdpserverprofile: Starting" } process { try { $arguments = @{ } if ( $PSCmdlet.ShouldProcess("$name", "Delete Rdp configuration Object") ) { $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method DELETE -Type rdpserverprofile -NitroPath nitro/v1/config -Resource $name -Arguments $arguments #HTTP Status Code on Success: 200 OK #HTTP Status Code on Failure: 4xx <string> (for general HTTP errors) or 5xx <string> (for NetScaler-specific errors). The response payload provides details of the error Write-Output $response } } catch { Write-Verbose "ERROR: $($_.Exception.Message)" throw $_ } } end { Write-Verbose "Invoke-ADCDeleteRdpserverprofile: Finished" } } function Invoke-ADCGetRdpserverprofile { <# .SYNOPSIS Get Rdp configuration object(s). .DESCRIPTION Configuration for RDP serverprofile resource. .PARAMETER Name The name of the rdp server profile. .PARAMETER GetAll Retrieve all rdpserverprofile object(s). .PARAMETER Count If specified, the count of the rdpserverprofile object(s) will be returned. .PARAMETER Filter Specify a filter. -Filter @{ 'name'='<value>' } .PARAMETER ViewSummary When specified, only a summary of information is returned. .EXAMPLE PS C:\>Invoke-ADCGetRdpserverprofile Get data. .EXAMPLE PS C:\>Invoke-ADCGetRdpserverprofile -GetAll Get all rdpserverprofile data. .EXAMPLE PS C:\>Invoke-ADCGetRdpserverprofile -Count Get the number of rdpserverprofile objects. .EXAMPLE PS C:\>Invoke-ADCGetRdpserverprofile -name <string> Get rdpserverprofile object by specifying for example the name. .EXAMPLE PS C:\>Invoke-ADCGetRdpserverprofile -Filter @{ 'name'='<value>' } Get rdpserverprofile data with a filter. .NOTES File Name : Invoke-ADCGetRdpserverprofile Version : v2210.2317 Author : John Billekens Reference : https://developer-docs.citrix.com/projects/citrix-adc-nitro-api-reference/en/latest/configuration/rdp/rdpserverprofile/ Requires : PowerShell v5.1 and up ADC 13.x and up. ADC 12 and lower may work, not guaranteed. .LINK https://blog.j81.nl #> [CmdletBinding(DefaultParameterSetName = "GetAll")] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingPlainTextForPassword', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingUserNameAndPasswordParams', '')] [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseBOMForUnicodeEncodedFile', '')] param( [Parameter(DontShow)] [Object]$ADCSession = (Get-ADCSession), [Parameter(ParameterSetName = 'GetByResource')] [ValidateLength(1, 32)] [string]$Name, [Parameter(ParameterSetName = 'Count', Mandatory)] [Switch]$Count, [hashtable]$Filter = @{ }, [Parameter(ParameterSetName = 'GetAll')] [Switch]$GetAll, [Parameter(ParameterSetName = 'GetAll')] [Parameter(ParameterSetName = 'Get')] [Switch]$ViewSummary ) begin { Write-Verbose "Invoke-ADCGetRdpserverprofile: Beginning" } process { try { if ( $PsCmdlet.ParameterSetName -eq 'GetAll' ) { $query = @{ } Write-Verbose "Retrieving all rdpserverprofile objects" $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpserverprofile -NitroPath nitro/v1/config -Query $query -Summary:$ViewSummary -Filter $Filter -GetWarning } elseif ( $PsCmdlet.ParameterSetName -eq 'Count' ) { if ( $PSBoundParameters.ContainsKey('Count') ) { $query = @{ 'count' = 'yes' } } Write-Verbose "Retrieving total count for rdpserverprofile objects" $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpserverprofile -NitroPath nitro/v1/config -Query $query -Summary:$ViewSummary -Filter $Filter -GetWarning } elseif ( $PsCmdlet.ParameterSetName -eq 'GetByArgument' ) { Write-Verbose "Retrieving rdpserverprofile objects by arguments" $arguments = @{ } $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpserverprofile -NitroPath nitro/v1/config -Arguments $arguments -GetWarning } elseif ( $PsCmdlet.ParameterSetName -eq 'GetByResource' ) { Write-Verbose "Retrieving rdpserverprofile configuration for property 'name'" $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpserverprofile -NitroPath nitro/v1/config -Resource $name -Summary:$ViewSummary -Filter $Filter -GetWarning } else { Write-Verbose "Retrieving rdpserverprofile configuration objects" $response = Invoke-ADCNitroApi -ADCSession $ADCSession -Method GET -Type rdpserverprofile -NitroPath nitro/v1/config -Summary:$ViewSummary -Query $query -Filter $Filter -GetWarning } } catch { Write-Verbose "ERROR: $($_.Exception.Message)" $response = $null } Write-Output $response } end { Write-Verbose "Invoke-ADCGetRdpserverprofile: Ended" } } # SIG # Begin signature block # MIITYgYJKoZIhvcNAQcCoIITUzCCE08CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD9nNvcdQF2Z6Pe # PvAq8en1WdzWxQcsExMXq8IjYEeGg6CCEHUwggTzMIID26ADAgECAhAsJ03zZBC0 # i/247uUvWN5TMA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAkdCMRswGQYDVQQI # ExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoT # D1NlY3RpZ28gTGltaXRlZDEkMCIGA1UEAxMbU2VjdGlnbyBSU0EgQ29kZSBTaWdu # aW5nIENBMB4XDTIxMDUwNTAwMDAwMFoXDTI0MDUwNDIzNTk1OVowWzELMAkGA1UE # BhMCTkwxEjAQBgNVBAcMCVZlbGRob3ZlbjEbMBkGA1UECgwSSm9oYW5uZXMgQmls # bGVrZW5zMRswGQYDVQQDDBJKb2hhbm5lcyBCaWxsZWtlbnMwggEiMA0GCSqGSIb3 # DQEBAQUAA4IBDwAwggEKAoIBAQCsfgRG81keOHalHfCUgxOa1Qy4VNOnGxB8SL8e # rjP9SfcF13McP7F1HGka5Be495pTZ+duGbaQMNozwg/5Dg9IRJEeBabeSSJJCbZo # SNpmUu7NNRRfidQxlPC81LxTVHxJ7In0MEfCVm7rWcri28MRCAuafqOfSE+hyb1Z # /tKyCyQ5RUq3kjs/CF+VfMHsJn6ZT63YqewRkwHuc7UogTTZKjhPJ9prGLTer8UX # UgvsGRbvhYZXIEuy+bmx/iJ1yRl1kX4nj6gUYzlhemOnlSDD66YOrkLDhXPMXLym # AN7h0/W5Bo//R5itgvdGBkXkWCKRASnq/9PTcoxW6mwtgU8xAgMBAAGjggGQMIIB # jDAfBgNVHSMEGDAWgBQO4TqoUzox1Yq+wbutZxoDha00DjAdBgNVHQ4EFgQUZWMy # gC0i1u2NZ1msk2Mm5nJm5AswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAw # EwYDVR0lBAwwCgYIKwYBBQUHAwMwEQYJYIZIAYb4QgEBBAQDAgQQMEoGA1UdIARD # MEEwNQYMKwYBBAGyMQECAQMCMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8vc2VjdGln # by5jb20vQ1BTMAgGBmeBDAEEATBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3Js # LnNlY3RpZ28uY29tL1NlY3RpZ29SU0FDb2RlU2lnbmluZ0NBLmNybDBzBggrBgEF # BQcBAQRnMGUwPgYIKwYBBQUHMAKGMmh0dHA6Ly9jcnQuc2VjdGlnby5jb20vU2Vj # dGlnb1JTQUNvZGVTaWduaW5nQ0EuY3J0MCMGCCsGAQUFBzABhhdodHRwOi8vb2Nz # cC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQsFAAOCAQEARjv9ieRocb1DXRWm3XtY # jjuSRjlvkoPd9wS6DNfsGlSU42BFd9LCKSyRREZVu8FDq7dN0PhD4bBTT+k6AgrY # KG6f/8yUponOdxskv850SjN2S2FeVuR20pqActMrpd1+GCylG8mj8RGjdrLQ3QuX # qYKS68WJ39WWYdVB/8Ftajir5p6sAfwHErLhbJS6WwmYjGI/9SekossvU8mZjZwo # Gbu+fjZhPc4PhjbEh0ABSsPMfGjQQsg5zLFjg/P+cS6hgYI7qctToo0TexGe32DY # fFWHrHuBErW2qXEJvzSqM5OtLRD06a4lH5ZkhojhMOX9S8xDs/ArDKgX1j1Xm4Tu # DjCCBYEwggRpoAMCAQICEDlyRDr5IrdR19NsEN0xNZUwDQYJKoZIhvcNAQEMBQAw # ezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G # A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV # BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0xOTAzMTIwMDAwMDBaFw0y # ODEyMzEyMzU5NTlaMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKTmV3IEplcnNl # eTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1Qg # TmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0IFJTQSBDZXJ0aWZpY2F0aW9uIEF1 # dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIASZRc2DsPb # CLPQrFcNdu3NJ9NMrVCDYeKqIE0JLWQJ3M6Jn8w9qez2z8Hc8dOx1ns3KBErR9o5 # xrw6GbRfpr19naNjQrZ28qk7K5H44m/Q7BYgkAk+4uh0yRi0kdRiZNt/owbxiBhq # kCI8vP4T8IcUe/bkH47U5FHGEWdGCFHLhhRUP7wz/n5snP8WnRi9UY41pqdmyHJn # 2yFmsdSbeAPAUDrozPDcvJ5M/q8FljUfV1q3/875PbcstvZU3cjnEjpNrkyKt1ya # tLcgPcp/IjSufjtoZgFE5wFORlObM2D3lL5TN5BzQ/Myw1Pv26r+dE5px2uMYJPe # xMcM3+EyrsyTO1F4lWeL7j1W/gzQaQ8bD/MlJmszbfduR/pzQ+V+DqVmsSl8MoRj # VYnEDcGTVDAZE6zTfTen6106bDVc20HXEtqpSQvf2ICKCZNijrVmzyWIzYS4sT+k # OQ/ZAp7rEkyVfPNrBaleFoPMuGfi6BOdzFuC00yz7Vv/3uVzrCM7LQC/NVV0CUnY # SVgaf5I25lGSDvMmfRxNF7zJ7EMm0L9BX0CpRET0medXh55QH1dUqD79dGMvsVBl # CeZYQi5DGky08CVHWfoEHpPUJkZKUIGy3r54t/xnFeHJV4QeD2PW6WK61l9VLupc # xigIBCU5uA4rqfJMlxwHPw1S9e3vL4IPAgMBAAGjgfIwge8wHwYDVR0jBBgwFoAU # oBEKIz6W8Qfs4q8p74Klf9AwpLQwHQYDVR0OBBYEFFN5v1qqK0rPVIDh2JvAnfKy # A2bLMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MBEGA1UdIAQKMAgw # BgYEVR0gADBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsLmNvbW9kb2NhLmNv # bS9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDA0BggrBgEFBQcBAQQoMCYwJAYI # KwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2NhLmNvbTANBgkqhkiG9w0BAQwF # AAOCAQEAGIdR3HQhPZyK4Ce3M9AuzOzw5steEd4ib5t1jp5y/uTW/qofnJYt7wNK # fq70jW9yPEM7wD/ruN9cqqnGrvL82O6je0P2hjZ8FODN9Pc//t64tIrwkZb+/UNk # fv3M0gGhfX34GRnJQisTv1iLuqSiZgR2iJFODIkUzqJNyTKzuugUGrxx8VvwQQuY # AAoiAxDlDLH5zZI3Ge078eQ6tvlFEyZ1r7uq7z97dzvSxAKRPRkA0xdcOds/exgN # Rc2ThZYvXd9ZFk8/Ub3VRRg/7UqO6AZhdCMWtQ1QcydER38QXYkqa4UxFMToqWpM # gLxqeM+4f452cpkMnf7XkQgWoaNflTCCBfUwggPdoAMCAQICEB2iSDBvmyYY0ILg # ln0z02owDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpO # ZXcgSmVyc2V5MRQwEgYDVQQHEwtKZXJzZXkgQ2l0eTEeMBwGA1UEChMVVGhlIFVT # RVJUUlVTVCBOZXR3b3JrMS4wLAYDVQQDEyVVU0VSVHJ1c3QgUlNBIENlcnRpZmlj # YXRpb24gQXV0aG9yaXR5MB4XDTE4MTEwMjAwMDAwMFoXDTMwMTIzMTIzNTk1OVow # fDELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G # A1UEBxMHU2FsZm9yZDEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSQwIgYDVQQD # ExtTZWN0aWdvIFJTQSBDb2RlIFNpZ25pbmcgQ0EwggEiMA0GCSqGSIb3DQEBAQUA # A4IBDwAwggEKAoIBAQCGIo0yhXoYn0nwli9jCB4t3HyfFM/jJrYlZilAhlRGdDFi # xRDtsocnppnLlTDAVvWkdcapDlBipVGREGrgS2Ku/fD4GKyn/+4uMyD6DBmJqGx7 # rQDDYaHcaWVtH24nlteXUYam9CflfGqLlR5bYNV+1xaSnAAvaPeX7Wpyvjg7Y96P # v25MQV0SIAhZ6DnNj9LWzwa0VwW2TqE+V2sfmLzEYtYbC43HZhtKn52BxHJAteJf # 7wtF/6POF6YtVbC3sLxUap28jVZTxvC6eVBJLPcDuf4vZTXyIuosB69G2flGHNyM # fHEo8/6nxhTdVZFuihEN3wYklX0Pp6F8OtqGNWHTAgMBAAGjggFkMIIBYDAfBgNV # HSMEGDAWgBRTeb9aqitKz1SA4dibwJ3ysgNmyzAdBgNVHQ4EFgQUDuE6qFM6MdWK # vsG7rWcaA4WtNA4wDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAw # HQYDVR0lBBYwFAYIKwYBBQUHAwMGCCsGAQUFBwMIMBEGA1UdIAQKMAgwBgYEVR0g # ADBQBgNVHR8ESTBHMEWgQ6BBhj9odHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVNF # UlRydXN0UlNBQ2VydGlmaWNhdGlvbkF1dGhvcml0eS5jcmwwdgYIKwYBBQUHAQEE # ajBoMD8GCCsGAQUFBzAChjNodHRwOi8vY3J0LnVzZXJ0cnVzdC5jb20vVVNFUlRy # dXN0UlNBQWRkVHJ1c3RDQS5jcnQwJQYIKwYBBQUHMAGGGWh0dHA6Ly9vY3NwLnVz # ZXJ0cnVzdC5jb20wDQYJKoZIhvcNAQEMBQADggIBAE1jUO1HNEphpNveaiqMm/EA # AB4dYns61zLC9rPgY7P7YQCImhttEAcET7646ol4IusPRuzzRl5ARokS9At3Wpwq # QTr81vTr5/cVlTPDoYMot94v5JT3hTODLUpASL+awk9KsY8k9LOBN9O3ZLCmI2pZ # aFJCX/8E6+F0ZXkI9amT3mtxQJmWunjxucjiwwgWsatjWsgVgG10Xkp1fqW4w2y1 # z99KeYdcx0BNYzX2MNPPtQoOCwR/oEuuu6Ol0IQAkz5TXTSlADVpbL6fICUQDRn7 # UJBhvjmPeo5N9p8OHv4HURJmgyYZSJXOSsnBf/M6BZv5b9+If8AjntIeQ3pFMcGc # TanwWbJZGehqjSkEAnd8S0vNcL46slVaeD68u28DECV3FTSK+TbMQ5Lkuk/xYpMo # JVcp+1EZx6ElQGqEV8aynbG8HArafGd+fS7pKEwYfsR7MUFxmksp7As9V1DSyt39 # ngVR5UR43QHesXWYDVQk/fBO4+L4g71yuss9Ou7wXheSaG3IYfmm8SoKC6W59J7u # mDIFhZ7r+YMp08Ysfb06dy6LN0KgaoLtO0qqlBCk4Q34F8W2WnkzGJLjtXX4oemO # CiUe5B7xn1qHI/+fpFGe+zmAEc3btcSnqIBv5VPU4OOiwtJbGvoyJi1qV3AcPKRY # LqPzW0sH3DJZ84enGm1YMYICQzCCAj8CAQEwgZAwfDELMAkGA1UEBhMCR0IxGzAZ # BgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEYMBYG # A1UEChMPU2VjdGlnbyBMaW1pdGVkMSQwIgYDVQQDExtTZWN0aWdvIFJTQSBDb2Rl # IFNpZ25pbmcgQ0ECECwnTfNkELSL/bju5S9Y3lMwDQYJYIZIAWUDBAIBBQCggYQw # GAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGC # NwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQx # IgQgBBTNgPIYvxxtkED4dfiQToPnt1SM/X8xgJnq4JHAOlAwDQYJKoZIhvcNAQEB # BQAEggEABQDB1b41I5L/Qc2DTJJnVEElbnHdpA97T9QhhgETEKFImZQdEScdd1S7 # ZW4YHN5qte43MmQmsNw9npjmPLciI1Tsb+EZpKch5po5kHFqxMY4XxK1rpLcLTa6 # lAlNdEsja+tNy47Q/bnp/xnY8A3cADHU1T6y4P1KT5/WO2wuPu8lGEGH3vOXOQUC # dpwRfJWMwpOQYX+bBz0TL5cqv+W6SswaT3C+934+NRoQoXdRyBKiJI4nTtrlA7/6 # G+Sa5K12I4Xjmu072bM52f7O6yMTW6lU40zHSXff7YEQ3kkKK4cpDroFRSXT11/Q # x6zwU7d8yejP97CgQdHqgt1RuVjmCg== # SIG # End signature block |