DSCResources/WorkspaceConfiguration.psm1
enum ensure { Absent Present } [DscResource()] class WorkspaceConfiguration { [DscProperty(Key)] [string] $WorkspaceId [DscProperty(Mandatory)] [pscredential] $WorkspaceKey [DscProperty()] [string] $ProxyUri [DscProperty()] [pscredential] $ProxyCredential [DscProperty()] [ensure] $Ensure [DscProperty(NotConfigurable)] [int32] $ConnectionStatus [DscProperty(NotConfigurable)] [string] $ConnectionStatusText # Gets the resource's current state. [WorkspaceConfiguration] Get() { $agentCfg = New-Object -ComObject AgentConfigManager.MgmtSvcCfg $workspace = $agentCfg.GetCloudWorkspace($this.WorkspaceId) $this.WorkspaceId = $workspace.WorkspaceId $this.ProxyUri = $agentCfg.ProxyUrl $this.ConnectionStatus = if ($null -eq $workspace) { -1 } else { $workspace.ConnectionStatus } $this.ConnectionStatusText = $workspace.ConnectionStatusText return $this } # Sets the desired state of the resource. [void] Set() { $agentCfg = New-Object -ComObject AgentConfigManager.MgmtSvcCfg if ($this.ProxyUri) { $agentCfg.SetProxyUrl($this.ProxyUri) } else { $agentCfg.SetProxyUrl('') } if ($this.ProxyCredential) { $agentCfg.SetProxyCredential($this.ProxyCredential.UserName, $this.ProxyCredential.GetNetworkCredential().Password) } $agentCfg.AddCloudWorkspace($this.WorkspaceId, $this.WorkspaceKey.GetNetworkCredential().Password) Restart-Service -Name HealthService -Force } # Tests if the resource is in the desired state. [bool] Test() { $status = $this.Get() if ($this.Ensure -eq 'Absent' -and $null -ne $status.WorkspaceId) { return $false } if ($status.ConnectionStatus -ne 0) { return $false } if ($null -ne $this.ProxyUri -and $this.ProxyUri -ne $status.ProxyUri) { return $false } return $true } } |