DSCClassResources/Volume/Volume.psm1
[DscResource()] class Volume { [DscProperty(Mandatory)] [string] $VirtualDiskName [DscProperty(Key)] [string]$DriveLetter [DscProperty(Mandatory=$false)] [string]$FileSystemType = "NTFS" [DscProperty(NotConfigurable)] [string]$OperationalStatus # Gets the resource's current state. [Volume] Get() { $ErrorActionPreference = 'Stop' try { $volumeObj = Get-Partition -DiskPath (Get-Disk -FriendlyName $this.VirtualDiskName).path | Where-Object {$this.DriveLetter -eq $_.DriveLetter} | Get-Volume } catch [System.Management.Automation.ActionPreferenceStopException] { throw "No matching disk found" } $this.FileSystemType = $volumeObj.FileSystemType $this.OperationalStatus = $volumeObj.OperationalStatus return $this } # Sets the desired state of the resource. [void] Set() { # Check for Cluster $diskObject = Get-Disk -FriendlyName $this.VirtualDiskName $isClustered = $false if ($diskObject.IsClustered) { $isClustered = $true write-verbose "Disk Resource is clustered. Will set to maintenance mode." Get-ClusterResource -Name "Cluster Virtual Disk ($($this.VirtualDiskName))" | Suspend-ClusterResource } else { write-verbose "Disk Resource is not clustered." } try { Write-Verbose "Partitioning Volume: $($this.DriveLetter)" Get-Partition -DriveLetter $this.DriveLetter | Format-Volume -FileSystem $this.FileSystemType -NewFileSystemLabel $this.VirtualDiskName } catch [System.Management.Automation.ActionPreferenceStopException] { throw "Could not format partition" } if ($isClustered) { Write-Verbose "Disabling Maintenance Mode on Disk: $($this.VirtualDiskName)" Get-ClusterResource -Name "Cluster Virtual Disk ($($this.VirtualDiskName))" | Resume-ClusterResource } } # Tests if the resource is in the desired state. [bool] Test() { $ErrorActionPreference = 'Stop' $volume = $this.Get() if ($volume.OperationalStatus -eq "OK") { return $true } else { return $false } } } |