????

Your IP : 18.117.132.79


Current Path : C:/Windows/SysWOW64/WindowsPowerShell/v1.0/Modules/Storage/
Upload File :
Current File : C:/Windows/SysWOW64/WindowsPowerShell/v1.0/Modules/Storage/Storage.types.ps1xml

<?xml version="1.0" encoding="utf-8" ?>
<Types>
  <!--

  //
  // Disk
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_Disk</Name>
    <Members>
      <AliasProperty>
        <Name>DiskNumber</Name>
        <ReferencedMemberName>Number</ReferencedMemberName>
      </AliasProperty>
      <ScriptProperty>
        <Name>PartitionStyle</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["PartitionStyle"].Value)
          {
          0 { "RAW" }
          1 { "MBR" }
          2 { "GPT" }
          Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>ProvisioningType</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["ProvisioningType"].Value)
          {
          0 { "Unknown" }
          1 { "Thin" }
          2 { "Fixed" }
          Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
            switch ( $status )
            {
              1 { $_status += "Other" }
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              4 { $_status += "Stressed" }
              5 { $_status += "Predictive Failure" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              8 { $_status += "Starting" }
              9 { $_status += "Stopping" }
              10 { $_status += "Stopped" }
              11 { $_status += "InService" }
              12 { $_status += "No Contact" }
              13 { $_status += "Lost Communication" }
              14 { $_status += "Aborted" }
              15 { $_status += "Dormant" }
              16 { $_status += "Supporting Entity in Error" }
              17 { $_status += "Completed" }
              18 { $_status += "Power Mode" }
              19 { $_status += "Relocating" }
              53264 { $_status += "Online" }
              53265 { $_status += "Not Ready" }
              53266 { $_status += "No Media" }
              53267 { $_status += "Offline" }
              53268 { $_status += "Failed" }
              Default { $_status += "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>HealthStatus</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["HealthStatus"].Value)
          {
          0 { "Healthy" }
          1 { "Warning" }
          2 { "Unhealthy" }
          Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>BusType</Name>
        <GetScriptBlock>
            switch ($this.psBase.CimInstanceProperties["BusType"].Value)
            {
            0 { "Unknown" }
            1 { "SCSI" }
            2 { "ATAPI" }
            3 { "ATA" }
            4 { "1394" }
            5 { "SSA" }
            6 { "Fibre Channel" }
            7 { "USB" }
            8 { "RAID" }
            9 { "iSCSI" }
            10 { "SAS" }
            11 { "SATA" }
            12 { "SD" }
            13 { "MMC" }
            14 { "Virtual" }
            15 { "File Backed Virtual" }
            16 { "Spaces" }
            17 { "NVMe" }
            18 { "SCM" }
            19 { "UFS" }
            Default { "Unknown" }
            }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>UniqueIdFormat</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["UniqueIdFormat"].Value)
          {
            0 { "Vendor Specific" }
            1 { "Vendor Id" }
            2 { "EUI64" }
            3 { "FCPH Name" }
            8 { "SCSI Name String" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OfflineReason</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["OfflineReason"].Value)
          {
            1 { "Policy" }
            2 { "Redundant Path" }
            3 { "Snapshot" }
            4 { "Collision" }
            5 { "Resource Exhaustion" }
            6 { "Critical Write Failures" }
            7 { "Data Integrity Scan Required" }
            Default { $null }
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // Partition
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_Partition</Name>
    <Members>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["OperationalStatus"].Value)
          {
          0 { "Unknown" }
          1 { "Online" }
          3 { "No Media" }
          5 { "Failed" }
          4 { "Offline" }
          Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>Type</Name>
        <GetScriptBlock>
          if ($this.psBase.CimInstanceProperties["MbrType"].Value -gt 0)
          {
            switch ($this.psBase.CimInstanceProperties["MbrType"].Value)
            {
              1 { "FAT12" }
              2 { "Xenix" }
              3 { "Xenix" }
              4 { "FAT16" }
              5 { "Extended" }
              6 { "Logical" }
              7 { "IFS" }
              10 { "OS/2 BootMgr" }
              11 { "FAT32" }
              12 { "FAT32 XINT13" }
              14 { "XINT13" }
              15 { "XINT13 Extended" }
              65 { "PReP" }
              66 { "LDM" }
              99 { "Unix" }
              231 { "Space Protective" }
              Default { "Unknown" }
            }
          }
          else
          {
          switch ($this.psBase.CimInstanceProperties["GptType"].Value)
          {
          "{c12a7328-f81f-11d2-ba4b-00a0c93ec93b}" { "System" }
          "{e3c9e316-0b5c-4db8-817d-f92df00215ae}" { "Reserved" }
          "{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}" { "Basic" }
          "{5808c8aa-7e8f-42e0-85d2-e1e90434cfb3}" { "LDM Metadata" }
          "{af9b60a0-1431-4f62-bc68-3311714a69ad}" { "LDM Data" }
          "{de94bba4-06d1-4d40-a16a-bfd50179d6ac}" { "Recovery" }
          "{e75caf8f-f680-4cee-afa3-b001e56efc2d}" { "Space Protective" }
          "{eeff8352-dd2a-44db-ae83-bee1cf7481dc}" { "S2D Cache" }
          "{03aaa829-ebfc-4e7e-aac9-c4d76c63b24b}" { "S2D Cache Metadata" }
          Default { "Unknown" }
          }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>DiskPath</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["DiskId"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            $this.psBase.CimInstanceProperties["DiskId"].Value
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // VirtualDisk
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_VirtualDisk</Name>
    <Members>
      <ScriptProperty>
        <Name>Usage</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["Usage"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["Usage"].Value)
            {
              0  { "Unknown" }
              1  { "Other" }
              2  { "Unrestricted" }
              3  { "Reserved for ComputerSystem (the block server)" }
              4  { "Reserved by Replication Services" }
              5  { "Reserved by Migration Services" }
              6  { "Local Replica Source" }
              7  { "Remote Replica Source" }
              8  { "Local Replica Target" }
              9  { "Remote Replica Target" }
              10 { "Local Replica Source or Target" }
              11 { "Remote Replica Source or Target" }
              12 { "Delta Replica Target" }
              13 { "Element Component" }
              14 { "Reserved as Pool Contributer" }
              15 { "Composite Volume Member" }
              16 { "Composite LogicalDisk Member" }
              17 { "Reserved for Sparing" }
              18 { "Configuration" }
              19 { "Data" }
              20 { "Journal" }
              21 { "Read Cache" }
              22 { "Cache Log" }
              23 { "Dirty Region Tracking" }
              24 { "Stripe State Tracking" }
              25 { "Snapshot" }
              26 { "Reserve" }
              27 { "Valid Data Tracking" }
              28 { "Cache Lines" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
          <Name>NameFormat</Name>
          <GetScriptBlock>
            if ( $this.psBase.CimInstanceProperties["NameFormat"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
            {
              switch ($this.psBase.CimInstanceProperties["NameFormat"].Value)
              {
                0 { "Unknown" }
                1 { "Other" }
                2 { "VPD83NAA6" }
                3 { "VPD83NAA5" }
                4 { "VPD83Type2" }
                5 { "VPD83Type1" }
                6 { "VPD83Type0" }
                7 { "SNVM" }
                8 { "NodeWWN" }
                9 { "NAA" }
                10 { "EUI64" }
                11 { "T10VID" }
                Default { "Unknown" }
              }
            }
            else
            {
              $null
            }
          </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
            switch ( $status )
            {
              1 { $_status += "Other" }
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              4 { $_status += "Stressed" }
              5 { $_status += "Predictive Failure" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              8 { $_status += "Starting" }
              9 { $_status += "Stopping" }
              10 { $_status += "Stopped" }
              11 { $_status += "InService" }
              12 { $_status += "No Contact" }
              13 { $_status += "Lost Communication" }
              14 { $_status += "Aborted" }
              15 { $_status += "Dormant" }
              16 { $_status += "Supporting Entity in Error" }
              17 { $_status += "Completed" }
              18 { $_status += "Power Mode" }
              19 { $_status += "Relocating" }
              53250 { $_status += "Detached" }
              53251 { $_status += "Incomplete" }
              53275 { $_status += "Suboptimal" }
              53284 { $_status += "No Redundancy" }
              Default { $_status += "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>HealthStatus</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["HealthStatus"].Value)
          {
            0 { "Healthy" }
            1 { "Warning" }
            2 { "Unhealthy" }
            5 { "Unknown" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>ProvisioningType</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["ProvisioningType"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["ProvisioningType"].Value)
            {
              0 { "Unknown" }
              1 { "Thin" }
              2 { "Fixed" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>AllocationUnitSize</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["AllocationUnitSize"].Value -eq [System.UInt64]::MaxValue )
          {
            "Auto"
          }
          else
          {
            $this.psBase.CimInstanceProperties["AllocationUnitSize"].Value
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>MediaType</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["MediaType"].Flags.HasFlag( [Microsoft.Management.Infrastructure.CimFlags]::NullValue ) -eq $false )
          {
            switch ( $this.psBase.CimInstanceProperties["MediaType"].Value )
            {
              0 { "Unspecified" }
              3 { "HDD" }
              4 { "SSD" }
              5 { "SCM" }
              Default { "Unspecified" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>ParityLayout</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["ParityLayout"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["ParityLayout"].Value)
            {
              1 { "Non-rotated Parity" }
              2 { "Rotated Parity" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>Access</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["Access"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["Access"].Value)
            {
              0 { "Unknown" }
              1 { "Readable" }
              2 { "Writeable" }
              3 { "Read/Write" }
              4 { "Write Once" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>UniqueIdFormat</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["UniqueIdFormat"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["UniqueIdFormat"].Value)
            {
              0 { "Vendor Specific" }
              1 { "Vendor Id" }
              2 { "EUI64" }
              3 { "FCPH Name" }
              8 { "SCSI Name String" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>DetachedReason</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["DetachedReason"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["DetachedReason"].Value)
            {
              0 { "Unknown" }
              1 { "None" }
              2 { "By Policy" }
              3 { "Majority Disks Unhealthy" }
              4 { "Incomplete" }
              5 { "Timeout" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>WriteCacheSize</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["WriteCacheSize"].Value -eq [System.UInt64]::MaxValue )
          {
            "Auto"
          }
          else
          {
            $this.psBase.CimInstanceProperties["WriteCacheSize"].Value
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>FaultDomainAwareness</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["FaultDomainAwareness"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["FaultDomainAwareness"].Value)
            {
              1 { "PhysicalDisk" }
              2 { "StorageEnclosure" }
              3 { "StorageScaleUnit" }
              4 { "StorageChassis" }
              5 { "StorageRack" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>ColumnIsolation</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["ColumnIsolation"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["ColumnIsolation"].Value)
            {
              1 { "PhysicalDisk" }
              2 { "StorageEnclosure" }
              3 { "StorageScaleUnit" }
              4 { "StorageChassis" }
              5 { "StorageRack" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptMethod>
        <Name>GetSecurityDescriptor</Name>
        <Script>
          $ConnectionOptions = New-Object Microsoft.Management.Infrastructure.Options.DComSessionOptions
          $CimSession = [Microsoft.Management.Infrastructure.CimSession]::Create("localhost", $ConnectionOptions)
          $Result = $CimSession.InvokeMethod("root/Microsoft/Windows/Storage", $this, "GetSecurityDescriptor", $null)

          $FileSecurity = New-Object System.Security.AccessControl.FileSecurity
          $FileSecurity.SetSecurityDescriptorSddlForm($Result.OutParameters["SecurityDescriptor"].value)
          $FileSecurity
        </Script>
      </ScriptMethod>
      <ScriptMethod>
        <Name>SetSecurityDescriptor</Name>
        <Script>
          param([string]$SecurityDescriptor=$("Parameter missing: -SecurityDescriptor SecurityDescriptor"))
          $ConnectionOptions = New-Object Microsoft.Management.Infrastructure.Options.DComSessionOptions
          $CimSession = [Microsoft.Management.Infrastructure.CimSession]::Create("localhost", $ConnectionOptions)
          $Parameters = New-Object -TypeName Microsoft.Management.Infrastructure.CimMethodParametersCollection
          $SecurityDescriptorParam = [Microsoft.Management.Infrastructure.CimMethodParameter]::Create("SecurityDescriptor",$SecurityDescriptor,"string",0)
          $Parameters.Add($SecurityDescriptorParam)
          $Result = $CimSession.InvokeMethod("root/Microsoft/Windows/Storage",$this,"SetSecurityDescriptor",$Parameters)
        </Script>
      </ScriptMethod>
    </Members>
  </Type>
  <!--

  //
  // StorageFaultDomain
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StorageFaultDomain</Name>
    <Members>
      <ScriptProperty>
        <Name>ClassName</Name>
        <GetScriptBlock>
            if ($this.CimClass -ne $null) { $this.CimClass.CimClassName } else {""}
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>HealthStatus</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["HealthStatus"].Value )
          {
            0 { "Healthy" }
            1 { "Warning" }
            2 { "Unhealthy" }
            5 { "Unknown" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
            switch ( $status )
            {
              1 { $_status += "Other" }
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              4 { $_status += "Stressed" }
              5 { $_status += "Predictive Failure" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              8 { $_status += "Starting" }
              9 { $_status += "Stopping" }
              10 { $_status += "Stopped" }
              11 { $_status += "InService" }
              12 { $_status += "No Contact" }
              13 { $_status += "Lost Communication" }
              14 { $_status += "Aborted" }
              15 { $_status += "Dormant" }
              16 { $_status += "Supporting Entity in Error" }
              17 { $_status += "Completed" }
              18 { $_status += "Power Mode" }
              19 { $_status += "Relocating" }
              53252 { $_status += "Failed Media" }
              53253 { $_status += "Split" }
              53254 { $_status += "Stale Metadata" }
              53255 { $_status += "IO Error" }
              53256 { $_status += "Unrecognized Metadata" }
              53269 { $_status += "Removing From Pool" }
              53270 { $_status += "In Maintenance Mode" }
              53271 { $_status += "Updating Firmware" }
              53272 { $_status += "Device Hardware Error" }
              53273 { $_status += "Not Usable" }
              53274 { $_status += "Transient Error" }
              53276 { $_status += "Starting Maintenance Mode"}
              53277 { $_status += "Stopping Maintenance Mode"}
              53285 { $_status += "Threshold Exceeded"}
              53286 { $_status += "Abnormal Latency"}
              Default { $_status += "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>

  <!--

  //
  // PhysicalDisk
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_PhysicalDisk</Name>
    <Members>
      <ScriptProperty>
        <Name>Usage</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["Usage"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ( $this.psBase.CimInstanceProperties["Usage"].Value )
            {
              0 { "Unknown" }
              1 { "Auto-Select" }
              2 { "Manual-Select" }
              3 { "Hot Spare" }
              4 { "Retired" }
              5 { "Journal" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
            switch ( $status )
            {
              1 { $_status += "Other" }
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              4 { $_status += "Stressed" }
              5 { $_status += "Predictive Failure" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              8 { $_status += "Starting" }
              9 { $_status += "Stopping" }
              10 { $_status += "Stopped" }
              11 { $_status += "In Service" }
              12 { $_status += "No Contact" }
              13 { $_status += "Lost Communication" }
              14 { $_status += "Aborted" }
              15 { $_status += "Dormant" }
              16 { $_status += "Supporting Entity in Error" }
              17 { $_status += "Completed" }
              18 { $_status += "Power Mode" }
              19 { $_status += "Relocating" }
              53252 { $_status += "Failed Media" }
              53253 { $_status += "Split" }
              53254 { $_status += "Stale Metadata" }
              53255 { $_status += "IO Error" }
              53256 { $_status += "Unrecognized Metadata" }
              53269 { $_status += "Removing From Pool" }
              53270 { $_status += "In Maintenance Mode" }
              53271 { $_status += "Updating Firmware" }
              53272 { $_status += "Device Hardware Error" }
              53273 { $_status += "Not Usable" }
              53274 { $_status += "Transient Error" }
              53276 { $_status += "Starting Maintenance Mode"}
              53277 { $_status += "Stopping Maintenance Mode"}
              53285 { $_status += "Threshold Exceeded"}
              53286 { $_status += "Abnormal Latency"}
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>UniqueIdFormat</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["UniqueIdFormat"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["UniqueIdFormat"].Value)
            {
              0 { "Vendor Specific" }
              1 { "Vendor Id" }
              2 { "EUI64" }
              3 { "FCPH Name" }
              8 { "SCSI Name String" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>HealthStatus</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["HealthStatus"].Value )
          {
            0 { "Healthy" }
            1 { "Warning" }
            2 { "Unhealthy" }
            5 { "Unknown" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>BusType</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["BusType"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ( $this.psBase.CimInstanceProperties["BusType"].Value )
            {
              0 { "Unknown" }
              1 { "SCSI" }
              2 { "ATAPI" }
              3 { "ATA" }
              4 { "1394" }
              5 { "SSA" }
              6 { "Fibre Channel" }
              7 { "USB" }
              8 { "RAID" }
              9 { "iSCSI" }
              10 { "SAS" }
              11 { "SATA" }
              12 { "SD" }
              13 { "MMC" }
              14 { "Virtual" }
              15 { "File Backed Virtual" }
              16 { "Spaces" }
              17 { "NVMe" }
              18 { "SCM" }
              19 { "UFS" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>CannotPoolReason</Name>
        <GetScriptBlock>
            $_status = @();
            foreach ( $status in $this.psBase.CimInstanceProperties["CannotPoolReason"].Value )
            {
              switch ( $status )
              {
                0 { $_status += "Unknown" }
                1 { $_status += "Other" }
                2 { $_status += "In a Pool" }
                3 { $_status += "Not Healthy" }
                4 { $_status += "Removable Media" }
                5 { $_status += "In Use by Cluster" }
                6 { $_status += "Offline" }
                7 { $_status += "Insufficient Capacity" }
                8 { $_status += "Spare Disk" }
                9 { $_status += "Reserved by Subsystem" }
                10 { $_status += "Starting" }
                11 { $_status += "Partial SCM" }
                12 { $_status += "Discovery Disabled" }
                32768 { $_status += "Verification in progress" }
                32769 { $_status += "Verification failed" }
                32770 { $_status += "Firmware not compliant" }
                32771 { $_status += "Hardware not compliant" }
                Default { "Unknown" }
              }
            }
            $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>SupportedUsages</Name>
        <GetScriptBlock>
          $_usages = @();
          foreach ( $_usage in $this.psBase.CimInstanceProperties["SupportedUsages"].Value )
          {
            switch ( $_usage )
            {
              1 { $_usages += "Auto-Select" }
              2 { $_usages += "Manual-Select" }
              3 { $_usages += "Hot Spare" }
              4 { $_usages += "Retired" }
              5 { $_usages += "Journal" }
              Default { "Unknown" }
            }
          }
          $_usages;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>MediaType</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["MediaType"].Value )
          {
            0 { "Unspecified" }
            3 { "HDD" }
            4 { "SSD" }
            5 { "SCM" }
            Default { "Unspecified" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>SpindleSpeed</Name>
        <GetScriptBlock>
          $speed = $this.psBase.CimInstanceProperties["SpindleSpeed"].Value;
          if ( $speed -eq [System.UInt32]::MaxValue ) {
            "Unknown";
          }
          else
          {
            $speed;
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // StorageEnclosure
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StorageEnclosure</Name>
    <Members>
      <ScriptProperty>
        <Name>BusType</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["BusType"].Value)
          {
            0 { "Unknown" }
            1 { "SCSI" }
            2 { "ATAPI" }
            3 { "ATA" }
            4 { "1394" }
            5 { "SSA" }
            6 { "Fibre Channel" }
            7 { "USB" }
            8 { "RAID" }
            9 { "iSCSI" }
            10 { "SAS" }
            11 { "SATA" }
            12 { "SD" }
            13 { "MMC" }
            14 { "Virtual" }
            15 { "File Backed Virtual" }
            16 { "Spaces" }
            17 { "NVMe" }
            18 { "SCM" }
            19 { "UFS" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>HealthStatus</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["HealthStatus"].Value )
          {
            0 { "Healthy" }
            1 { "Warning" }
            2 { "Unhealthy" }
            5 { "Unknown" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
          switch ( $status )
          {
          1 { $_status += "Other" }
          2 { $_status += "OK" }
          3 { $_status += "Degraded" }
          4 { $_status += "Stressed" }
          5 { $_status += "Predictive Failure" }
          6 { $_status += "Error" }
          7 { $_status += "Non-Recoverable Error" }
          8 { $_status += "Starting" }
          9 { $_status += "Stopping" }
          10 { $_status += "Stopped" }
          11 { $_status += "InService" }
          12 { $_status += "No Contact" }
          13 { $_status += "Lost Communication" }
          14 { $_status += "Aborted" }
          15 { $_status += "Dormant" }
          16 { $_status += "Supporting Entity in Error" }
          17 { $_status += "Completed" }
          18 { $_status += "Power Mode" }
          19 { $_status += "Relocating" }
          53250 { $_status += "Detached" }
          53251 { $_status += "Incomplete" }
          Default { $_status += "Unknown" }
          }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>SlotOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["SlotOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>PowerSupplyOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["PowerSupplyOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>FanOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["FanOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>TemperatureSensorOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["TemperatureSensorOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>VoltageSensorOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["VoltageSensorOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>CurrentSensorOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["CurrentSensorOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>IOControllerOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["IOControllerOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // StorageNode
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StorageNode</Name>
    <Members>
      <ScriptProperty>
        <Name>NameFormat</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["NameFormat"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["NameFormat"].Value)
            {
              1 { "Other" }
              2 { "IP" }
              3 { "Dial" }
              4 { "HID" }
              5 { "NWA" }
              6 { "HWA" }
              7 { "X25" }
              8 { "ISDN" }
              9 { "IPX" }
              10 { "DCC" }
              11 { "ICD" }
              12 { "E.164" }
              13 { "SNA" }
              14 { "OID/OSI" }
              15 { "WWN" }
              16 { "NAA" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["OperationalStatus"].Value)
          {
            0 { "Unknown" }
            2 { "Up" }
            6 { "Down" }
            8 { "Joining" }
            10 { "Paused" }
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // StoragePool
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StoragePool</Name>
    <Members>
      <ScriptProperty>
        <Name>Usage</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["Usage"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["Usage"].Value)
            {
              0 { "Unknown" }
              1 { "Other" }
              2 { "Unrestricted" }
              3 { "Reserved for ComputerSystem (the block server)" }
              4 { "Reserved as a Delta Replica Container" }
              5 { "Reserved for Migration Services" }
              6 { "Reserved for Local Replication Services" }
              7 { "Reserved for Remote Replication Services" }
              8 { "Reserved for Sparing" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
            switch ( $status )
            {
              1 { $_status += "Other" }
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              4 { $_status += "Stressed" }
              5 { $_status += "Predictive Failure" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              8 { $_status += "Starting" }
              9 { $_status += "Stopping" }
              10 { $_status += "Stopped" }
              11 { $_status += "In Service" }
              12 { $_status += "No Contact" }
              13 { $_status += "Lost Communication" }
              14 { $_status += "Aborted" }
              15 { $_status += "Dormant" }
              16 { $_status += "Supporting Entity in Error" }
              17 { $_status += "Completed" }
              18 { $_status += "Power Mode" }
              19 { $_status += "Relocating" }
              53248 { $_status += "Read-only" }
              53249 { $_status += "Incomplete" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>HealthStatus</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["HealthStatus"].Value)
          {
            0 { "Healthy" }
            1 { "Warning" }
            2 { "Unhealthy" }
            5 { "Unknown" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>ProvisioningTypeDefault</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["ProvisioningTypeDefault"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["ProvisioningTypeDefault"].Value)
            {
              0 { "Unknown" }
              1 { "Thin" }
              2 { "Fixed" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>SupportedProvisioningTypes</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["SupportedProvisioningTypes"].Value )
          {
            switch ( $status )
            {
              0 { $_status += "Unknown" }
              1 { $_status += "Thin" }
              2 { $_status += "Fixed" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>MediaTypeDefault</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["MediaTypeDefault"].Flags.HasFlag( [Microsoft.Management.Infrastructure.CimFlags]::NullValue ) -eq $false )
          {
            switch ( $this.psBase.CimInstanceProperties["MediaTypeDefault"].Value )
            {
              0 { "Unspecified" }
              3 { "HDD" }
              4 { "SSD" }
              5 { "SCM" }
              Default { "Unspecified" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>ReadOnlyReason</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["ReadOnlyReason"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["ReadOnlyReason"].Value)
            {
              0 { "Unknown" }
              1 { "None" }
              2 { "By Policy" }
              3 { "Majority Disks Unhealthy" }
              4 { "Starting" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>RepairPolicy</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["RepairPolicy"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ( $this.psBase.CimInstanceProperties["RepairPolicy"].Value )
            {
              2 { "Sequential" }
              3 { "Parallel" }
              Default { "Parallel" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>RetireMissingPhysicalDisks</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["RetireMissingPhysicalDisks"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ( $this.psBase.CimInstanceProperties["RetireMissingPhysicalDisks"].Value )
            {
              0 { "Unknown" }
              1 { "Auto" }
              2 { "Always" }
              3 { "Never" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>WriteCacheSizeDefault</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["WriteCacheSizeDefault"].Value -eq [System.UInt64]::MaxValue )
          {
            "Auto"
          }
          else
          {
            $this.psBase.CimInstanceProperties["WriteCacheSizeDefault"].Value
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>Version</Name>
        <GetScriptBlock>
          # ScVersionWindows8
          if ( $this.psBase.CimInstanceProperties["Version"].Value -eq 1 )
          {
          "Windows Server 2012"
          }

          # ScVersionWindowsBlueInternal1
          # ScVersionWindowsBlueInternal2
          # ScVersionWindowsBlueInternal3
          # ScVersionWindowsBlueInternal4
          # ScVersionWindowsBlueInternal5
          elseif ( $this.psBase.CimInstanceProperties["Version"].Value -eq 2 )
          {
          "Windows Server 2012 R2 Preview"
          }

          # ScVersionWindowsBlue
          elseif ( $this.psBase.CimInstanceProperties["Version"].Value -eq 3 )
          {
          "Windows Server 2012 R2"
          }

          # ScVersionWindowsThresholdInternal1
          # ScVersionWindowsThresholdInternal2
          # ScVersionWindowsThresholdInternal3
          # ScVersionWindowsThresholdInternal4
          # ScVersionWindowsThresholdInternal5
          # ScVersionWindowsThresholdInternal6
          # ScVersionWindowsThreshold
          # ScVersionWindowsThreshold2
          # ScVersionWindowsRedstone1Internal1
          # ScVersionWindowsRedstone1Internal2
          # ScVersionWindowsRedstone1Internal3
          elseif ( $this.psBase.CimInstanceProperties["Version"].Value -ge 4 -and $this.psBase.CimInstanceProperties["Version"].Value -le 18 )
          {
          "Windows Server 2016 Preview"
          }

          # ScVersionWindowsRedstone1
          elseif ( $this.psBase.CimInstanceProperties["Version"].Value -eq 19 )
          {
          "Windows Server 2016"
          }

          # ScVersionWindowsRedstone3
          elseif ( $this.psBase.CimInstanceProperties["Version"].Value -eq 20 )
          {
          "Windows Server 2016 RS3"
          }

          # ScVersionWindowsRedstone5Internal1
          elseif ( $this.psBase.CimInstanceProperties["Version"].Value -eq 21 )
          {
          "Windows Server 2019 Preview"
          }

          # ScVersionWindowsRedstone5
          elseif ( $this.psBase.CimInstanceProperties["Version"].Value -eq 22 )
          {
          "Windows Server 2019"
          }

          # ScVersionWindows19H1Internal1
          # ScVersionWindows19H1
          # ScVersionWindowsVibranium
          # ScVersionWindowsManganese
          elseif ( $this.psBase.CimInstanceProperties["Version"].Value -le 26 )
          {
          "Windows Server 2022 Preview"
          }

          # ScVersionWindowsIron
          elseif ( $this.psBase.CimInstanceProperties["Version"].Value -eq 27 )
          {
          "Windows Server 2022"
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>FaultDomainAwarenessDefault</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["FaultDomainAwarenessDefault"].Value)
          {
            1 { "PhysicalDisk" }
            2 { "StorageEnclosure" }
            3 { "StorageScaleUnit" }
            4 { "StorageChassis" }
            5 { "StorageRack" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptMethod>
        <Name>GetSecurityDescriptor</Name>
        <Script>
          $ConnectionOptions = New-Object Microsoft.Management.Infrastructure.Options.DComSessionOptions
          $CimSession = [Microsoft.Management.Infrastructure.CimSession]::Create("localhost", $ConnectionOptions)
          $Result = $CimSession.InvokeMethod("root/Microsoft/Windows/Storage", $this, "GetSecurityDescriptor", $null)

          $FileSecurity = New-Object System.Security.AccessControl.FileSecurity
          $FileSecurity.SetSecurityDescriptorSddlForm($Result.OutParameters["SecurityDescriptor"].value)
          $FileSecurity
        </Script>
      </ScriptMethod>
      <ScriptMethod>
        <Name>SetSecurityDescriptor</Name>
        <Script>
          param([string]$SecurityDescriptor=$("Parameter missing: -SecurityDescriptor SecurityDescriptor"))
          $ConnectionOptions = New-Object Microsoft.Management.Infrastructure.Options.DComSessionOptions
          $CimSession = [Microsoft.Management.Infrastructure.CimSession]::Create("localhost", $ConnectionOptions)
          $Parameters = New-Object -TypeName Microsoft.Management.Infrastructure.CimMethodParametersCollection
          $SecurityDescriptorParam = [Microsoft.Management.Infrastructure.CimMethodParameter]::Create("SecurityDescriptor",$SecurityDescriptor,"string",0)
          $Parameters.Add($SecurityDescriptorParam)
          $Result = $CimSession.InvokeMethod("root/Microsoft/Windows/Storage",$this,"SetSecurityDescriptor",$Parameters)
        </Script>
      </ScriptMethod>
    </Members>
  </Type>
  <!--

  //
  // ResiliencySetting
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_ResiliencySetting</Name>
    <Members>
      <ScriptProperty>
        <Name>ParityLayout</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["ParityLayout"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["ParityLayout"].Value)
            {
              1 { "Non-rotated Parity" }
              2 { "Rotated Parity" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>NumberOfColumnsDefault</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["NumberOfColumnsDefault"].Value -eq [System.UInt16]::MaxValue )
          {
            "Auto"
          }
          else
          {
            $this.psBase.CimInstanceProperties["NumberOfColumnsDefault"].Value
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>NumberOfGroupsDefault</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["NumberOfGroupsDefault"].Value -eq [System.UInt16]::MaxValue )
          {
            "Auto"
          }
          else
          {
            $this.psBase.CimInstanceProperties["NumberOfGroupsDefault"].Value
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // StorageProvider
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StorageProvider</Name>
    <Members>
      <ScriptProperty>
        <Name>Type</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["Type"].Value)
          {
            1 { "SMP" }
            2 { "SMI-S" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>RemoteSubsystemCacheMode</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["RemoteSubsystemCacheMode"].Value)
          {
            0 { "Unknown" }
            2 { "Disabled" }
            3 { "Manual-Discovery" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>SupportedRemoteSubsystemCacheModes</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["SupportedRemoteSubsystemCacheModes"].Value )
          {
            switch ( $status )
            {
              0 { $_status += "Unknown" }
              2 { $_status += "Disabled" }
              3 { $_status += "Manual-Discovery" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptMethod>
        <Name>GetSecurityDescriptor</Name>
        <Script>
          $ConnectionOptions = New-Object Microsoft.Management.Infrastructure.Options.DComSessionOptions
          $CimSession = [Microsoft.Management.Infrastructure.CimSession]::Create("localhost", $ConnectionOptions)
          $Result = $CimSession.InvokeMethod("root/Microsoft/Windows/Storage", $this, "GetSecurityDescriptor", $null)

          $FileSecurity = New-Object System.Security.AccessControl.FileSecurity
          $FileSecurity.SetSecurityDescriptorSddlForm($Result.OutParameters["SecurityDescriptor"].value)
          $FileSecurity
        </Script>
      </ScriptMethod>
      <ScriptMethod>
        <Name>SetSecurityDescriptor</Name>
        <Script>
          param([string]$SecurityDescriptor=$("Parameter missing: -SecurityDescriptor SecurityDescriptor"))
          $ConnectionOptions = New-Object Microsoft.Management.Infrastructure.Options.DComSessionOptions
          $CimSession = [Microsoft.Management.Infrastructure.CimSession]::Create("localhost", $ConnectionOptions)
          $Parameters = New-Object -TypeName Microsoft.Management.Infrastructure.CimMethodParametersCollection
          $SecurityDescriptorParam = [Microsoft.Management.Infrastructure.CimMethodParameter]::Create("SecurityDescriptor",$SecurityDescriptor,"string",0)
          $Parameters.Add($SecurityDescriptorParam)
          $Result = $CimSession.InvokeMethod("root/Microsoft/Windows/Storage",$this,"SetSecurityDescriptor",$Parameters)
        </Script>
      </ScriptMethod>
    </Members>
  </Type>
  <!--

  //
  // StorageSubSystem
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StorageSubSystem</Name>
    <Members>
      <ScriptProperty>
        <Name>NameFormat</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["NameFormat"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["NameFormat"].Value)
            {
              1 { "Other" }
              2 { "IP" }
              3 { "Dial" }
              4 { "HID" }
              5 { "NWA" }
              6 { "HWA" }
              7 { "X25" }
              8 { "ISDN" }
              9 { "IPX" }
              10 { "DCC" }
              11 { "ICD" }
              12 { "E.164" }
              13 { "SNA" }
              14 { "OID/OSI" }
              15 { "WWN" }
              16 { "NAA" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>HealthStatus</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["HealthStatus"].Value)
          {
            0 { "Healthy" }
            1 { "Warning" }
            2 { "Unhealthy" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
            switch ( $status )
            {
              1 { $_status += "Other" }
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              4 { $_status += "Stressed" }
              5 { $_status += "Predictive Failure" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              8 { $_status += "Starting" }
              9 { $_status += "Stopping" }
              10 { $_status += "Stopped" }
              11 { $_status += "In Service" }
              12 { $_status += "No Contact" }
              13 { $_status += "Lost Communication" }
              14 { $_status += "Aborted" }
              15 { $_status += "Dormant" }
              16 { $_status += "Supporting Entity in Error" }
              17 { $_status += "Completed" }
              18 { $_status += "Power Mode" }
              19 { $_status += "Relocating" }
              Default { $_status += "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>FaultDomainAwarenessDefault</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["FaultDomainAwarenessDefault"].Value)
          {
            1 { "PhysicalDisk" }
            2 { "StorageEnclosure" }
            3 { "StorageScaleUnit" }
            4 { "StorageChassis" }
            5 { "StorageRack" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
        <ScriptProperty>
          <Name>MaskingValidInitiatorIdTypes</Name>
          <GetScriptBlock>
              $_type = @();
              foreach ( $type in $this.psBase.CimInstanceProperties["MaskingValidInitiatorIdTypes"].Value )
              {
              switch ( $type )
              {
              1 { $_type += "Other" }
              2 { $_type += "Port WWN" }
              3 { $_type += "Node WWN" }
              4 { $_type += "Host Name" }
              5 { $_type += "iSCSI Name" }
              6 { $_type += "Switch WWN" }
              7 { $_type += "SAS Address" }
              Default { $_type += "Unknown" }
              }
              }
              $_type;
          </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
          <Name>MaskingPortsPerView</Name>
          <GetScriptBlock>
              switch ($this.psBase.CimInstanceProperties["MaskingPortsPerView"].Value)
              {
              2 { "One TargetPort per view" }
              3 { "Multiple target ports per view" }
              4 { "All target ports share the same view" }
              Default { "Unknown" }
              }
          </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
          <Name>DataTieringType</Name>
          <GetScriptBlock>
            if ( $this.psBase.CimInstanceProperties["DataTieringType"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
            {
              switch ($this.psBase.CimInstanceProperties["DataTieringType"].Value)
              {
                0 { "Unknown" }
                1 { "Not Supported" }
                2 { "Manual" }
                3 { "Auto" }
                Default { "Unknown" }
              }
            }
            else
            {
              $null
            }
          </GetScriptBlock>
          </ScriptProperty>
          <ScriptProperty>
            <Name>iSCSITargetCreationScheme</Name>
            <GetScriptBlock>
              if ( $this.psBase.CimInstanceProperties["iSCSITargetCreationScheme"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
              {
                switch ($this.psBase.CimInstanceProperties["iSCSITargetCreationScheme"].Value)
                {
                  0 { "Unknown" }
                  1 { "Not Supported" }
                  2 { "Manual" }
                  3 { "Auto" }
                  Default { "Unknown" }
                }
              }
              else
              {
                $null
              }
            </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
          <Name>SupportedHostType</Name>
          <GetScriptBlock>
              $_type = @();
              foreach ( $type in $this.psBase.CimInstanceProperties["SupportedHostType"].Value )
              {
              switch ( $type )
              {
              0 { $_type += "Unknown" }
              1 { $_type += "Other" }
              2 { $_type += "Standard" }
              3 { $_type += "Solaris" }
              4 { $_type += "HPUX" }
              5 { $_type += "OpenVMS" }
              6 { $_type += "Tru64" }
              7 { $_type += "Netware" }
              8 { $_type += "Sequent" }
              9 { $_type += "AIX" }
              10 { $_type += "DGUX" }
              11 { $_type += "Dynix" }
              12 { $_type += "Irix" }
              13 { $_type += "Cisco iSCSI Storage Router" }
              14 { $_type += "Linux" }
              15 { $_type += "Microsoft Windows" }
              16 { $_type += "OS400" }
              17 { $_type += "TRESPASS" }
              18 { $_type += "HI-UX" }
              19 { $_type += "VMware ESXi" }
              20 { $_type += "Microsoft Windows Server 2008" }
              21 { $_type += "Microsoft Windows Server 2003" }
              Default { $_type += "Unknown" }
              }
              }
              $_type;
          </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
          <Name>SupportedDeduplicationObjectTypes</Name>
          <GetScriptBlock>
              $_type = @();
              foreach ( $type in $this.psBase.CimInstanceProperties["SupportedDeduplicationObjectTypes"].Value )
              {
              switch ( $type )
              {
              2 { $_type += "Volume" }
              4 { $_type += "VirtualDisk" }
              8 { $_type += "Partition" }
              16 { $_type += "StoragePool" }
              Default { $_type += "Unknown" }
              }
              }
              $_type;
          </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
          <Name>SupportedDeduplicationFileSystemTypes</Name>
          <GetScriptBlock>
              $_type = @();
              foreach ( $type in $this.psBase.CimInstanceProperties["SupportedDeduplicationFileSystemTypes"].Value )
              {
              switch ( $type )
              {
              0 { $_type += "Unknown" }
              1 { $_type += "Threshold" }
              2 { $_type += "UFS" }
              3 { $_type += "HFS" }
              4 { $_type += "FAT" }
              5 { $_type += "FAT16" }
              6 { $_type += "FAT32" }
              7 { $_type += "NTFS4" }
              8 { $_type += "NTFS5" }
              9 { $_type += "XFS" }
              10 { $_type += "AFS" }
              11 { $_type += "EXT2" }
              12 { $_type += "EXT3" }
              13 { $_type += "ReiserFS" }
              14 { $_type += "NTFS" }
              15 { $_type += "ReFS" }
              32768 { $_type += "CSVFS_NTFS" }
              32769 { $_type += "CSVFS_ReFS" }
              Default { $_type += "Unknown" }
              }
              }
              $_type;
          </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>SupportedFileSystems</Name>
        <GetScriptBlock>
          $_type = @();
          foreach ( $type in $this.psBase.CimInstanceProperties["SupportedFileSystems"].Value )
          {
          switch ( $type )
          {
          0 { $_type += "Unknown" }
          2 { $_type += "UFS" }
          3 { $_type += "HFS" }
          4 { $_type += "FAT" }
          5 { $_type += "FAT16" }
          6 { $_type += "FAT32" }
          7 { $_type += "NTFS4" }
          8 { $_type += "NTFS5" }
          9 { $_type += "XFS" }
          10 { $_type += "AFS" }
          11 { $_type += "EXT2" }
          12 { $_type += "EXT3" }
          13 { $_type += "ReiserFS" }
          14 { $_type += "NTFS" }
          15 { $_type += "ReFS" }
          32768 { $_type += "CSVFS_NTFS" }
          32769 { $_type += "CSVFS_ReFS" }
          Default { $_type += "Unknown" }
          }
          }
          $_type;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>StorageConnectionType</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["StorageConnectionType"].Value )
          {
          0 { "Unknown" }
          1 { "Shared Storage" }
          2 { "Local Storage" }
          Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>SupportedFileServerProtocols</Name>
        <GetScriptBlock>
          $_protos = @();
          foreach ( $p in $this.psBase.CimInstanceProperties["SupportedFileServerProtocols"].Value )
          {
          switch ( $p )
          {
          2 { $_protos += "NFS" }
          3 { $_protos += "SMB" }
          Default { "Unknown" }
          }
          }
          $_protos;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptMethod>
        <Name>GetSecurityDescriptor</Name>
        <Script>
          $ConnectionOptions = New-Object Microsoft.Management.Infrastructure.Options.DComSessionOptions
          $CimSession = [Microsoft.Management.Infrastructure.CimSession]::Create("localhost", $ConnectionOptions)
          $Result = $CimSession.InvokeMethod("root/Microsoft/Windows/Storage", $this, "GetSecurityDescriptor", $null)

          $FileSecurity = New-Object System.Security.AccessControl.FileSecurity
          $FileSecurity.SetSecurityDescriptorSddlForm($Result.OutParameters["SecurityDescriptor"].value)
          $FileSecurity
        </Script>
      </ScriptMethod>
      <ScriptMethod>
                <Name>SetSecurityDescriptor</Name>
                <Script>
                    param([string]$SecurityDescriptor=$("Parameter missing: -SecurityDescriptor SecurityDescriptor"))
                    $ConnectionOptions = New-Object Microsoft.Management.Infrastructure.Options.DComSessionOptions
                    $CimSession = [Microsoft.Management.Infrastructure.CimSession]::Create("localhost", $ConnectionOptions)
                    $Parameters = New-Object -TypeName Microsoft.Management.Infrastructure.CimMethodParametersCollection
                    $SecurityDescriptorParam = [Microsoft.Management.Infrastructure.CimMethodParameter]::Create("SecurityDescriptor",$SecurityDescriptor,"string",0)
                    $Parameters.Add($SecurityDescriptorParam)
                    $Result = $CimSession.InvokeMethod("root/Microsoft/Windows/Storage",$this,"SetSecurityDescriptor",$Parameters)
                </Script>
      </ScriptMethod>
    </Members>
  </Type>
  <!--

  //
  // Volume
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_Volume</Name>
    <Members>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
            switch ( $status )
            {
              1 { $_status += "Other" }
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              4 { $_status += "Stressed" }
              5 { $_status += "Predictive Failure" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              8 { $_status += "Starting" }
              9 { $_status += "Stopping" }
              10 { $_status += "Stopped" }
              11 { $_status += "InService" }
              12 { $_status += "No Contact" }
              13 { $_status += "Lost Communication" }
              14 { $_status += "Aborted" }
              15 { $_status += "Dormant" }
              16 { $_status += "Supporting Entity in Error" }
              17 { $_status += "Completed" }
              18 { $_status += "Power Mode" }
              19 { $_status += "Relocating" }
              53261 { $_status += "Scan Needed" }
              53262 { $_status += "Spot Fix Needed" }
              53263 { $_status += "Full Repair Needed" }
              53267 { $_status += "Offline" }
              Default { $_status += "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>HealthStatus</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["HealthStatus"].Value)
          {
          0 { "Healthy" }
          1 { "Warning" }
          2 { "Unhealthy" }
          Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>DriveType</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["DriveType"].Value)
          {
          0 { "Unknown" }
          1 { "Invalid Root Path" }
          2 { "Removable" }
          3 { "Fixed" }
          4 { "Remote" }
          5 { "CD-ROM" }
          6 { "RAM Disk" }
          Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>FileSystemType</Name>
        <GetScriptBlock>
            switch ($this.psBase.CimInstanceProperties["FileSystemType"].Value)
            {
              0 { "Unknown" }
              2 { "UFS" }
              3 { "HFS" }
              4 { "FAT" }
              5 { "FAT16" }
              6 { "FAT32" }
              7 { "NTFS4" }
              8 { "NTFS5" }
              9 { "XFS" }
              10 { "AFS" }
              11 { "EXT2" }
              12 { "EXT3" }
              13 { "ReiserFS" }
              14 { "NTFS" }
              15 { "ReFS" }
              16 { "exFAT" }
              32768 { "CSVFS_NTFS" }
              32769 { "CSVFS_ReFS" }
              Default { $null }
            }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>DedupMode</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["DedupMode"].Value)
          {
          0 { "Disabled" }
          1 { "GeneralPurpose" }
          2 { "HyperV" }
          3 { "Backup" }
          4 { "NotAvailable" }
          Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // TargetPort
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_TargetPort</Name>
    <Members>
      <ScriptProperty>
        <Name>ConnectionType</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["ConnectionType"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["ConnectionType"].Value)
            {
              1 { "Other" }
              2 { "Fibre Channel" }
              3 { "Parallel SCSI" }
              4 { "SSA" }
              5 { "IEEE 1394" }
              6 { "RDMA" }
              7 { "iSCSI" }
              8 { "SAS" }
              9 { "ADT " }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>Role</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["Role"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["Role"].Value)
            {
              0 { "Unknown" }
              1 { "Initiator" }
              2 { "Target" }
              3 { "Both Initiator and Target" }
            }
          }
          else
          {
            $null;
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
            switch ( $status )
            {
              1 { $_status += "Other" }
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              4 { $_status += "Stressed" }
              5 { $_status += "Predictive Failure" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              8 { $_status += "Starting" }
              9 { $_status += "Stopping" }
              10 { $_status += "Stopped" }
              11 { $_status += "InService" }
              12 { $_status += "No Contact" }
              13 { $_status += "Lost Communication" }
              14 { $_status += "Aborted" }
              15 { $_status += "Dormant" }
              16 { $_status += "Supporting Entity in Error" }
              17 { $_status += "Completed" }
              18 { $_status += "Power Mode" }
              19 { $_status += "Relocating" }
              Default { $_status += "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>HealthStatus</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["HealthStatus"].Value)
          {
            0 { "Healthy" }
            1 { "Warning" }
            2 { "Unhealthy" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>LinkTechnology</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["LinkTechnology"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["LinkTechnology"].Value)
            {
              0 { "Unknown" }
              1 { "Other" }
              2 { "Ethernet" }
              3 { "IB" }
              4 { "FC" }
              5 { "FDDI" }
              6 { "ATM" }
              7 { "Token Ring" }
              8 { "Frame Relay" }
              9 { "Infrared" }
              10 { "Bluetooth" }
              11 { "Wireless LAN" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>PortType</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["PortType"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["PortType"].Value)
            {
              0 { "Unknown" }
              1 { "Other" }
              10 { "N" }
              11 { "NL" }
              12 { "F/NL" }
              13 { "Nx" }
              14 { "E" }
              15 { "F" }
              16 { "FL" }
              17 { "B" }
              18 { "G" }
              50 {"10BaseT" }
              51 { "10-100BaseT" }
              52 { "100BaseT" }
              53 { "1000BaseT" }
              54 { "2500BaseT" }
              55 { "10GBaseT" }
              56 { "10GBase-CX4" }
              94 { "SAS" }
              100 { "100Base-FX" }
              101 { "100Base-SX" }
              102 { "1000Base-SX" }
              103 { "1000Base-LX" }
              104 { "1000Base-CX" }
              105 { "10GBase-SR" }
              106 { "10GBase-SW" }
              107 { "10GBase-LX4" }
              108 { "10GBase-LR" }
              109 { "10GBase-LW" }
              110 { "10GBase-ER" }
              111 { "10GBase-EW" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>UsageRestriction</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["UsageRestriction"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["UsageRestriction"].Value)
            {
              0 { "Unknown" }
              2 { "Front-end only" }
              3 { "Back-end only" }
              4 { "Not restricted" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // InitiatorId
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_InitiatorId</Name>
    <Members>
      <ScriptProperty>
        <Name>Type</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["Type"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["Type"].Value)
            {
              1 { "Other" }
              2 { "PortWWN" }
              3 { "NodeWWN" }
              4 { "Hostname" }
              5 { "iSCSI Name" }
              6 { "SwitchWWN" }
              7 { "SASAddress" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>HostType</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["HostType"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["HostType"].Value)
            {
              0 { "Unknown" }
              1 { "Other" }
              2 { "Standard" }
              3 { "Solaris" }
              4 { "HPUX" }
              5 { "OpenVMS" }
              6 { "Tru64" }
              7 { "Netware" }
              8 { "Sequent" }
              9 { "AIX" }
              10 { "DGUX" }
              11 { "Dynix" }
              12 { "Irix" }
              13 { "Cisco iSCSI Storage Router" }
              14 { "Linux" }
              15 { "Microsoft Windows" }
              16 { "OS400" }
              17 { "TRESPASS" }
              18 { "HI-UX" }
              19 { "VMware ESXi" }
              20 { "Microsoft Windows Server 2008" }
              21 { "Microsoft Windows Server 2003" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null;
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // InitiatorPort
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_InitiatorPort</Name>
    <Members>
      <ScriptProperty>
        <Name>PortType</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["PortType"].Value)
          {
            1 { "Unknown" }
            2 { "Other" }
            3 { "Not present" }
            5 { "Fabric" }
            6 { "Public Loop" }
            7 { "FL Port" }
            8 { "Fabric Port" }
            9 { "Fabric expansion port" }
            10 { "Generic Fabric Port" }
            20 { "Private Loop" }
            21 { "Point to Point" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>ConnectionType</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["ConnectionType"].Value)
          {
            0 { "Other" }
            1 { "Fibre Channel" }
            2 { "iSCSI" }
            3 { "SAS" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
            switch ( $status )
            {
              1 { $_status += "Unknown" }
              2 { $_status += "Operational" }
              3 { $_status += "User Offline" }
              4 { $_status += "Bypassed" }
              5 { $_status += "In diagnostics mode" }
              6 { $_status += "Link Down" }
              7 { $_status += "Port Error" }
              8 { $_status += "Loopback" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>PortSupportedSpeed</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["PortSupportedSpeed"].Value)
          {
            1 { "1 GBit/sec" }
            2 { "2 GBit/sec" }
            4 { "10 GBit/sec" }
            8 { "4 GBit/sec" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>PortSpeed</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["PortSpeed"].Value)
          {
            1 { "1 GBit/sec" }
            2 { "2 GBit/sec" }
            4 { "10 GBit/sec" }
            8 { "4 GBit/sec" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // MaskingSet
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_MaskingSet</Name>
    <Members>
      <ScriptProperty>
        <Name>HostType</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["HostType"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["HostType"].Value)
            {
              0 { "Unknown" }
              1 { "Other" }
              2 { "Standard" }
              3 { "Solaris" }
              4 { "HPUX" }
              5 { "OpenVMS" }
              6 { "Tru64" }
              7 { "Netware" }
              8 { "Sequent" }
              9 { "AIX" }
              10 { "DGUX" }
              11 { "Dynix" }
              12 { "Irix" }
              13 { "Cisco iSCSI Storage Router" }
              14 { "Linux" }
              15 { "Microsoft Windows" }
              16 { "OS400" }
              17 { "TRESPASS" }
              18 { "HI-UX" }
              19 { "VMware ESXi" }
              20 { "Microsoft Windows Server 2008" }
              21 { "Microsoft Windows Server 2003" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
<!--

//
// StorageSetting
//

-->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StorageSetting</Name>
    <Members>
        <ScriptProperty>
            <Name>NewDiskPolicy</Name>
            <GetScriptBlock>
                switch ($this.psBase.CimInstanceProperties["NewDiskPolicy"].Value)
                {
                0 { "Unknown" }
                1 { "OnlineAll" }
                2 { "OfflineShared" }
                3 { "OfflineAll" }
                4 { "OfflineInternal" }
                Default { "OfflineShared" }
                }
            </GetScriptBlock>
        </ScriptProperty>
        <ScriptProperty>
            <Name>ScrubPolicy</Name>
            <GetScriptBlock>
                switch ($this.psBase.CimInstanceProperties["ScrubPolicy"].Value)
                {
                0 { "Off" }
                1 { "IntegrityStreams" }
                2 { "All" }
                Default { "Integrity Streams" }
                }
            </GetScriptBlock>
        </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // StorageJob
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StorageJob</Name>
    <Members>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
            switch ( $status )
            {
              1 { $_status += "Other" }
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              4 { $_status += "Stressed" }
              5 { $_status += "Predictive Failure" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              8 { $_status += "Starting" }
              9 { $_status += "Stopping" }
              10 { $_status += "Stopped" }
              11 { $_status += "In Service" }
              12 { $_status += "No Contact" }
              13 { $_status += "Lost Communication" }
              14 { $_status += "Aborted" }
              15 { $_status += "Dormant" }
              16 { $_status += "Supporting Entity in Error" }
              17 { $_status += "Completed" }
              18 { $_status += "Power Mode" }
              19 { $_status += "Relocating" }
              32772 { $_status += "Failed Media" }
              32773 { $_status += "Split" }
              32774 { $_status += "Stale Metadata" }
              32775 { $_status += "IO Error" }
              32776 { $_status += "Unrecognized Metadata" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>JobState</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["JobState"].Value )
          {
            2 { "New" }
            3 { "Starting" }
            4 { "Running" }
            5 { "Suspended" }
            6 { "Shutting Down" }
            7 { "Completed" }
            8 { "Terminated" }
            9 { "Killed" }
            10 { "Exception" }
            11 { "Service" }
            12 { "Query Pending" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // FileStorageTier
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_FileStorageTier</Name>
    <Members>
      <ScriptProperty>
        <Name>PlacementStatus</Name>
        <GetScriptBlock>
            switch ( $this.psBase.CimInstanceProperties["PlacementStatus"].Value )
            {
              0 { "Unknown" }
              1 { "Completely on tier" }
              2 { "Partially on tier" }
              3 { "Not on tier" }
              Default { "Unknown" }
            }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
          <Name>State</Name>
          <GetScriptBlock>
            switch ( $this.psBase.CimInstanceProperties["State"].Value )
            {
              0 { "Unknown" }
              1 { "OK" }
              2 { "Insufficent Capacity" }
              3 { "In Process" }
              4 { "Pending" }
              Default { "Unknown" }
            }
          </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>DesiredStorageTierClass</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["DesiredStorageTierClass"].Value )
          {
            1 { "Capacity" }
            2 { "Performance" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // StorageTier
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StorageTier</Name>
    <Members>
      <ScriptProperty>
        <Name>Usage</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["Usage"].Value )
          {
            0 { "Unknown" }
            1 { "Data" }
            2 { "Read Cache" }
            3 { "Cache Log" }
            4 { "Dirty Region Tracking" }
            5 { "Stripe State Tracking" }
            6 { "Valid Data Tracking" }
            7 { "Cache Lines" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>ProvisioningType</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["ProvisioningType"].Value )
          {
            0 { "Unknown" }
            1 { "Thin" }
            2 { "Fixed" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>AllocationUnitSize</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["AllocationUnitSize"].Value -eq [System.UInt64]::MaxValue )
          {
            "Auto"
          }
          else
          {
            $this.psBase.CimInstanceProperties["AllocationUnitSize"].Value
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>MediaType</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["MediaType"].Value )
          {
            0 { "Unspecified" }
            3 { "HDD" }
            4 { "SSD" }
            5 { "SCM" }
            Default { "Unspecified" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>TierClass</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["TierClass"].Value )
          {
            0 { "Unknown" }
            1 { "Capacity" }
            2 { "Performance" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>FaultDomainAwareness</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["FaultDomainAwareness"].Value)
          {
            1 { "PhysicalDisk" }
            2 { "StorageEnclosure" }
            3 { "StorageScaleUnit" }
            4 { "StorageChassis" }
            5 { "StorageRack" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>ColumnIsolation</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["ColumnIsolation"].Value)
          {
            1 { "PhysicalDisk" }
            2 { "StorageEnclosure" }
            3 { "StorageScaleUnit" }
            4 { "StorageChassis" }
            5 { "StorageRack" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>NumberOfColumns</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["NumberOfColumns"].Value -eq [System.UInt16]::MaxValue )
          {
            "Auto"
          }
          else
          {
            $this.psBase.CimInstanceProperties["NumberOfColumns"].Value
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>NumberOfGroups</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["NumberOfGroups"].Value -eq [System.UInt16]::MaxValue )
          {
            "Auto"
          }
          else
          {
            $this.psBase.CimInstanceProperties["NumberOfGroups"].Value
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>ParityLayout</Name>
        <GetScriptBlock>
          if ( $this.psBase.CimInstanceProperties["ParityLayout"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
          {
            switch ($this.psBase.CimInstanceProperties["ParityLayout"].Value)
            {
              1 { "Non-rotated Parity" }
              2 { "Rotated Parity" }
              Default { "Unknown" }
            }
          }
          else
          {
            $null
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // PhysicalExtent
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_PhysicalExtent</Name>
    <Members>
      <ScriptProperty>
        <Name>Flags</Name>
        <GetScriptBlock>
          $_flags = $this.psBase.CimInstanceProperties["Flags"].Value
          $_flagsToHex = "{0:x16}" -f $_flags
          '0x' + $_flagsToHex;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
            switch ( $status )
            {
              13      { $_status += "Lost Communication" }
              53254   { $_status += "Stale Metadata" }
              53278   { $_status += "Active" }
              53279   { $_status += "Need Reallocation" }
              53280   { $_status += "Need Regeneration" }
              53281   { $_status += "Regenerating" }
              53282   { $_status += "Not Allocated" }
              53283   { $_status += "Pending Deletion" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // StorageNodeToDisk
  //

  -->
  <Type>
      <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StorageNodeToDisk</Name>
      <Members>
          <ScriptProperty>
              <Name>HealthStatus</Name>
              <GetScriptBlock>
                  switch ($this.psBase.CimInstanceProperties["HealthStatus"].Value)
                  {
                  0 { "Healthy" }
                  1 { "Warning" }
                  2 { "Unhealthy" }
                  Default { "Unknown" }
                  }
              </GetScriptBlock>
          </ScriptProperty>
          <ScriptProperty>
              <Name>OperationalStatus</Name>
              <GetScriptBlock>
                  $_status = @();
                  foreach( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
                  {
                    switch ( $status )
                    {
                    1 { $_status += "Other" }
                    2 { $_status += "OK" }
                    3 { $_status += "Degraded" }
                    4 { $_status += "Stressed" }
                    5 { $_status += "Predictive Failure" }
                    6 { $_status += "Error" }
                    7 { $_status += "Non-Recoverable Error" }
                    8 { $_status += "Starting" }
                    9 { $_status += "Stopping" }
                   10 { $_status += "Stopped" }
                   11 { $_status += "InService" }
                   12 { $_status += "No Contact" }
                   13 { $_status += "Lost Communication" }
                   14 { $_status += "Aborted" }
                   15 { $_status += "Dormant" }
                   16 { $_status += "Supporting Entity in Error" }
                   17 { $_status += "Completed" }
                   18 { $_status += "Power Mode" }
                   19 { $_status += "Relocating" }
                   53264 { $_status += "Online" }
                   53265 { $_status += "Not Ready" }
                   53266 { $_status += "No Media" }
                   53267 { $_status += "Offline" }
                   53268 { $_status += "Failed" }
                   Default { $_status += "Unknown" }
                   }
                  }
                  $_status;
              </GetScriptBlock>
          </ScriptProperty>
          <ScriptProperty>
              <Name>OfflineReason</Name>
              <GetScriptBlock>
                  switch ($this.psBase.CimInstanceProperties["OfflineReason"].Value)
                  {
                  1 { "Policy" }
                  2 { "Redundant Path" }
                  3 { "Snapshot" }
                  4 { "Collision" }
                  5 { "Resource Exhaustion" }
                  6 { "Critical Write Failures" }
                  7 { "Data Integrity Scan Required" }
                  Default { $null }
                  }
              </GetScriptBlock>
          </ScriptProperty>
          <ScriptProperty>
              <Name>StorageNodeObjectId</Name>
              <GetScriptBlock>
                  $this.psBase.CimInstanceProperties["StorageNode"].Value.ObjectId
              </GetScriptBlock>
          </ScriptProperty>
          <ScriptProperty>
              <Name>DiskObjectId</Name>
              <GetScriptBlock>
                  $this.psBase.CimInstanceProperties["Disk"].Value.ObjectId
              </GetScriptBlock>
          </ScriptProperty>
      </Members>
  </Type>
  <!--

  //
  // FileServer
  //

  -->
  <Type>
      <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_FileServer</Name>
      <Members>
          <ScriptProperty>
              <Name>HealthStatus</Name>
              <GetScriptBlock>
                switch ( $this.psBase.CimInstanceProperties["HealthStatus"].Value )
                {
                0 { "Healthy" }
                1 { "Warning" }
                2 { "Unhealthy" }
                5 { "Unknown" }
                Default { "Unknown" }
                }
              </GetScriptBlock>
          </ScriptProperty>
          <ScriptProperty>
            <Name>OperationalStatus</Name>
            <GetScriptBlock>
              $_status = @();
              foreach ( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
              {
                switch ( $status )
                {
                  1 { $_status += "Other" }
                  2 { $_status += "OK" }
                  3 { $_status += "Degraded" }
                  4 { $_status += "Stressed" }
                  5 { $_status += "Predictive Failure" }
                  6 { $_status += "Error" }
                  7 { $_status += "Non-Recoverable Error" }
                  8 { $_status += "Starting" }
                  9 { $_status += "Stopping" }
                  10 { $_status += "Stopped" }
                  11 { $_status += "In Service" }
                  12 { $_status += "No Contact" }
                  13 { $_status += "Lost Communication" }
                  14 { $_status += "Aborted" }
                  15 { $_status += "Dormant" }
                  16 { $_status += "Supporting Entity in Error" }
                  17 { $_status += "Completed" }
                  18 { $_status += "Power Mode" }
                  19 { $_status += "Relocating" }
                  53248 { $_status += "Read-Only" }
                  53248 { $_status += "Incomplete" }
                  Default { "Unknown" }
                }
              }
              $_status;
            </GetScriptBlock>
          </ScriptProperty>
          <ScriptProperty>
            <Name>FileSharingProtocols</Name>
            <GetScriptBlock>
                $_protos = @();
                foreach ( $p in $this.psBase.CimInstanceProperties["FileSharingProtocols"].Value )
                {
                  switch ( $p )
                  {
                    2 { $_protos += "NFS" }
                    3 { $_protos += "SMB" }
                    Default { "Unknown" }
                  }
                }
                $_protos;
            </GetScriptBlock>
          </ScriptProperty>
      </Members>
  </Type>
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_FileShare</Name>
    <Members>
      <ScriptProperty>
        <Name>HealthStatus</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["HealthStatus"].Value )
          {
            0 { "Healthy" }
            1 { "Warning" }
            2 { "Unhealthy" }
            5 { "Unknown" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>OperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
          {
            switch ( $status )
            {
              1 { $_status += "Other" }
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              4 { $_status += "Stressed" }
              5 { $_status += "Predictive Failure" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              8 { $_status += "Starting" }
              9 { $_status += "Stopping" }
              10 { $_status += "Stopped" }
              11 { $_status += "InService" }
              12 { $_status += "No Contact" }
              13 { $_status += "Lost Communication" }
              14 { $_status += "Aborted" }
              15 { $_status += "Dormant" }
              16 { $_status += "Supporting Entity in Error" }
              17 { $_status += "Completed" }
              18 { $_status += "Power Mode" }
              19 { $_status += "Relocating" }
              53264 { $_status += "Online" }
              53265 { $_status += "Not Ready" }
              53266 { $_status += "No Media" }
              53267 { $_status += "Offline" }
              53268 { $_status += "Failed" }
              Default { $_status += "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>ShareState</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["ShareState"].Value )
          {
            0 { "Pending" }
            1 { "Online" }
            2 { "Offline" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>FileSharingProtocol</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["FileSharingProtocol"].Value )
          {
            2 { "NFS" }
            3 { "SMB" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // StorageNodeToPhysicalDisk
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StorageNodeToPhysicalDisk</Name>
    <Members>
        <ScriptProperty>
            <Name>HealthStatus</Name>
            <GetScriptBlock>
                switch ($this.psBase.CimInstanceProperties["HealthStatus"].Value)
                {
                0 { "Healthy" }
                1 { "Warning" }
                2 { "Unhealthy" }
                5 { "Unknown" }
                Default { "Unknown" }
                }
            </GetScriptBlock>
            </ScriptProperty>
        <ScriptProperty>
            <Name>OperationalStatus</Name>
            <GetScriptBlock>
                $_status = @();
                foreach ( $status in $this.psBase.CimInstanceProperties["OperationalStatus"].Value )
                {
                  switch ( $status )
                  {
                    1 { $_status += "Other" }
                    2 { $_status += "OK" }
                    3 { $_status += "Degraded" }
                    4 { $_status += "Stressed" }
                    5 { $_status += "Predictive Failure" }
                    6 { $_status += "Error" }
                    7 { $_status += "Non-Recoverable Error" }
                    8 { $_status += "Starting" }
                    9 { $_status += "Stopping" }
                    10 { $_status += "Stopped" }
                    11 { $_status += "In Service" }
                    12 { $_status += "No Contact" }
                    13 { $_status += "Lost Communication" }
                    14 { $_status += "Aborted" }
                    15 { $_status += "Dormant" }
                    16 { $_status += "Supporting Entity in Error" }
                    17 { $_status += "Completed" }
                    18 { $_status += "Power Mode" }
                    19 { $_status += "Relocating" }
                    53252 { $_status += "Failed Media" }
                    53253 { $_status += "Split" }
                    53254 { $_status += "Stale Metadata" }
                    53255 { $_status += "IO Error" }
                    53256 { $_status += "Unrecognized Metadata" }
                    53269 { $_status += "Removing from pool" }
                    53270 { $_status += "In Maintenance Mode" }
                    53271 { $_status += "Updating firmware" }
                    53272 { $_status += "Device Hardware Error" }
                    53273 { $_status += "Not Usable" }
                    53274 { $_status += "Transient Error" }
                    53276 { $_status += "Starting Maintenance Mode"}
                    53277 { $_status += "Stopping Maintenance Mode"}
                    53285 { $_status += "Threshold Exceeded"}
                    53286 { $_status += "Abnormal Latency"}
                    Default { "Unknown" }
                  }
                }
                $_status;
            </GetScriptBlock>
        </ScriptProperty>
        <ScriptProperty>
            <Name>LoadBalancePolicy</Name>
            <GetScriptBlock>
                if ( $this.psBase.CimInstanceProperties["LoadBalancePolicy"].Flags.HasFlag([Microsoft.Management.Infrastructure.CimFlags]::NullValue) -eq $false )
                {
                    switch ( $this.psBase.CimInstanceProperties["LoadBalancePolicy"].Value )
                    {
                    0 { "Unknown" }
                    1 { "Fail Over" }
                    2 { "Round Robin" }
                    3 { "Round Robin with Subset" }
                    4 { "Least Queue Depth" }
                    5 { "Weighted Paths" }
                    6 { "Least Blocks" }
                    7 { "Vendor Specific" }
                    }
                }
            </GetScriptBlock>
        </ScriptProperty>
        <ScriptProperty>
            <Name>PathState</Name>
            <GetScriptBlock>
                $_state = @();
                foreach ( $state in $this.psBase.CimInstanceProperties["PathState"].Value )
                {
                    switch ( $state )
                    {
                    0 { $_state += "Unavailable" }
                    1 { $_state += "Active/Unoptimized" }
                    2 { $_state += "Standby" }
                    3 { $_state += "Active/Optimized" }
                    4 { $_state += "Failed" }
                    }
                }
                $_state;
            </GetScriptBlock>
        </ScriptProperty>
        <ScriptProperty>
            <Name>StorageNodeObjectId</Name>
            <GetScriptBlock>
                $this.psBase.CimInstanceProperties["StorageNode"].Value.ObjectId
            </GetScriptBlock>
        </ScriptProperty>
        <ScriptProperty>
            <Name>PhysicalDiskObjectId</Name>
            <GetScriptBlock>
                $this.psBase.CimInstanceProperties["PhysicalDisk"].Value.ObjectId
            </GetScriptBlock>
        </ScriptProperty>
    </Members>
  </Type>
 <!--

  //
  // StorageNodeToStorageEnclosure
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StorageNodeToStorageEnclosure</Name>
    <Members>
      <ScriptProperty>
        <Name>HealthStatus</Name>
        <GetScriptBlock>
          switch ($this.psBase.CimInstanceProperties["HealthStatus"].Value)
          {
            0 { "Healthy" }
            1 { "Warning" }
            2 { "Unhealthy" }
            5 { "Unknown" }
            Default { "Unknown" }
          }
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>SlotOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["SlotOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>PowerSupplyOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["PowerSupplyOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>FanOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["FanOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>TemperatureSensorOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["TemperatureSensorOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>VoltageSensorOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["VoltageSensorOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>CurrentSensorOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["CurrentSensorOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>IOControllerOperationalStatus</Name>
        <GetScriptBlock>
          $_status = @();
          foreach ( $status in $this.psBase.CimInstanceProperties["IOControllerOperationalStatus"].Value )
          {
            switch ( $status )
            {
              2 { $_status += "OK" }
              3 { $_status += "Degraded" }
              6 { $_status += "Error" }
              7 { $_status += "Non-Recoverable Error" }
              53257 { $_status += "Not Installed" }
              53258 { $_status += "Off" }
              53259 { $_status += "No Access Allowed" }
              53260 { $_status += "Not Reported" }
              Default { "Unknown" }
            }
          }
          $_status;
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>StorageNodeObjectId</Name>
        <GetScriptBlock>
          $this.psBase.CimInstanceProperties["StorageNode"].Value.ObjectId
        </GetScriptBlock>
      </ScriptProperty>
      <ScriptProperty>
        <Name>StorageEnclosureObjectId</Name>
        <GetScriptBlock>
          $this.psBase.CimInstanceProperties["StorageEnclosure"].Value.ObjectId
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
  <!--

  //
  // DiagnoseResult
  //

  -->
  <Type>
      <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_StorageDiagnoseResult</Name>
      <Members>
          <ScriptProperty>
              <Name>PerceivedSeverity</Name>
              <GetScriptBlock>
                  switch ( $this.psBase.CimInstanceProperties["PerceivedSeverity"].Value )
                  {
                  0 { "Unknown" }
                  2 { "Information" }
                  3 { "Degraded/Warning" }
                  4 { "Minor" }
                  5 { "Major" }
                  6 { "Critical" }
                  7 { "Fatal/NonRecoverable" }
                  }
              </GetScriptBlock>
          </ScriptProperty>
      </Members>
  </Type>
  <!--

  //
  // HealthAction
  //

  -->
  <Type>
    <Name>Microsoft.Management.Infrastructure.CimInstance#MSFT_HealthAction</Name>
    <Members>
      <ScriptProperty>
        <Name>State</Name>
        <GetScriptBlock>
          switch ( $this.psBase.CimInstanceProperties["State"].Value )
          {
          0 { "None" }
          1 { "Scheduled" }
          2 { "Running" }
          3 { "Paused" }
          1024 { "Succeeded" }
          1025 { "Failed" }
          1026 { "Canceled" }
          }
        </GetScriptBlock>
      </ScriptProperty>
    </Members>
  </Type>
</Types>