DSCResources/ArcGIS_NotebookServerUpgrade/ArcGIS_NotebookServerUpgrade.psm1
<#
.SYNOPSIS Resource to aid post upgrade completion workflows. This resource upgrades the Notebook Server Site once Server Installer has completed the upgrade. .PARAMETER Ensure Take the values Present or Absent. - "Present" ensure Upgrade the Server Site once Notebook Server Installer is completed - "Absent" - (Not Implemented). .PARAMETER ServerHostName HostName of the Machine that is being Upgraded .PARAMETER Version Version to which the Server is being upgraded to #> function Get-TargetResource { [CmdletBinding()] [OutputType([System.Collections.Hashtable])] param ( [parameter(Mandatory = $true)] [System.String] $ServerHostName ) Import-Module $PSScriptRoot\..\..\ArcGISUtility.psm1 -Verbose:$false $returnValue = @{ ServerHostName = $ServerHostName } $returnValue } function Set-TargetResource { [CmdletBinding()] param ( [ValidateSet("Present","Absent")] [System.String] $Ensure, [parameter(Mandatory = $true)] [System.String] $ServerHostName, [parameter(Mandatory = $true)] [System.String] $Version ) Import-Module $PSScriptRoot\..\..\ArcGISUtility.psm1 -Verbose:$false #$MachineFQDN = Get-FQDN $env:COMPUTERNAME Write-Verbose "Fully Qualified Domain Name :- $ServerHostName" [System.Reflection.Assembly]::LoadWithPartialName("System.Web") | Out-Null Write-Verbose "Waiting for Server 'https://$($ServerHostName):11443/arcgis/admin'" Wait-ForUrl "https://$($ServerHostName):11443/arcgis/admin" -HttpMethod 'GET' if($Ensure -ieq 'Present') { $Referer = "http://localhost" $ServerSiteURL = "https://$($ServerHostName):11443" [string]$ServerUpgradeUrl = $ServerSiteURL.TrimEnd('/') + "/arcgis/admin/upgrade" $ResponseStatus = Invoke-ArcGISWebRequest -Url $ServerUpgradeUrl -HttpFormParameters @{f = 'json'} -Referer $Referer -LogResponse -HttpMethod 'GET' if($ResponseStatus.isUpgrade -ieq $true ){ Write-Verbose "Making request to $ServerUpgradeUrl to Upgrade the site" $Response = Invoke-ArcGISWebRequest -Url $ServerUpgradeUrl -HttpFormParameters @{ f = 'json' } -Referer $Referer -LogResponse if($Response.status -ieq "success"){ Write-Verbose 'Notebook Server Upgrade Successful' }else{ throw "An Error occurred. Request Response - $Response" } }else{ Write-Verbose 'Notebook Server is already upgraded' } } elseif($Ensure -ieq 'Absent') { Write-Verbose "Do Nothing" } } function Test-TargetResource { [CmdletBinding()] [OutputType([System.Boolean])] param ( [ValidateSet("Present","Absent")] [System.String] $Ensure, [parameter(Mandatory = $true)] [System.String] $ServerHostName, [parameter(Mandatory = $true)] [System.String] $Version ) Import-Module $PSScriptRoot\..\..\ArcGISUtility.psm1 -Verbose:$false [System.Reflection.Assembly]::LoadWithPartialName("System.Web") | Out-Null $result = Check-ServerVersion -Version $Version $Referer = "http://localhost" $ServerUpgradeUrl = "https://$($ServerHostName):11443/arcgis/admin/upgrade" $ResponseStatus = Invoke-ArcGISWebRequest -Url $ServerUpgradeUrl -HttpFormParameters @{f = 'json'} -Referer $Referer -LogResponse -HttpMethod 'GET' if($result) { if($ResponseStatus.isUpgrade -ieq $true ){ $result = $false }else{ $result = $true } }else{ throw "ArcGIS Notebook Server not upgraded to required Version" } if($Ensure -ieq 'Present') { $result } elseif($Ensure -ieq 'Absent') { (-not($result)) } } function Check-ServerVersion(){ [CmdletBinding()] [OutputType([System.Boolean])] param( [string]$Version ) $result = $false $ProdId = Get-ComponentCode -ComponentName "NotebookServer" -Version $Version if(-not($ProdId.StartsWith('{'))){ $ProdId = '{' + $ProdId } if(-not($ProdId.EndsWith('}'))){ $ProdId = $ProdId + '}' } $PathToCheck = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$($ProdId)" Write-Verbose "Testing Presence for Component 'NotebookServer' with Path $PathToCheck" if (Test-Path $PathToCheck -ErrorAction Ignore){ $result = $true } if(-not($result)){ $PathToCheck = "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\$($ProdId)" Write-Verbose "Testing Presence for Component 'NotebookServer' with Path $PathToCheck" if (Test-Path $PathToCheck -ErrorAction Ignore){ $result = $true } } $result } Export-ModuleMember -Function *-TargetResource |