Search notes:

PowerShell: Enum

set-strictMode -version latest

enum roshambo {
   rock
   paper
   scissors
}

enum outcome {
   win
   draw
   loss
}

function play-rock-paper-scissors {

   param (
      [roshambo] $player_1,
      [roshambo] $player_2
   )

   if ($player_1 -eq $player_2) { return [outcome]::draw }

   if ( ( $player_1 -eq [roshambo]::rock    ) -and ( $player_2 -eq [roshambo]::scissors ) ) { return [outcome]::win }
   if ( ( $player_1 -eq [roshambo]::paper   ) -and ( $player_2 -eq [roshambo]::rock     ) ) { return [outcome]::win }
   if ( ( $player_1 -eq [roshambo]::scissors) -and ( $player_2 -eq [roshambo]::paper    ) ) { return [outcome]::win }

   return [outcome]::loss

}

play-rock-paper-scissors   rock     rock
play-rock-paper-scissors   rock     paper
play-rock-paper-scissors   rock     scissor

play-rock-paper-scissors   paper    rock
play-rock-paper-scissors   scissor  rock
play-rock-paper-scissors   roc      rock
Github repository about-PowerShell, path: /language/enum/play-rock-paper-scissors.ps1

An enum derives from System.Enum

An enum derives from System.Enum:
enum E {
   foo
   bar
   baz
}

[E].BaseType.FullName
#
#  System.Enum
Github repository about-PowerShell, path: /language/enum/base-class.ps1

Enums with flag characteristics (bit-fields)

[flags()] enum fruitAttribute {
   big         = 0x01
   old         = 0x02
   green       = 0x04
   sweet       = 0x08
}

enum fruitSelection {
   apple
   banana
   cherries
}

write-host "value of big: $([fruitAttribute]::big -as [int])"
write-host "value of old: $([fruitAttribute]::old -as [int])"
write-host "value of green: $([fruitAttribute]::green -as [int])"
write-host "value of sweet: $([fruitAttribute]::sweet -as [int])"

function buy {

    param (
       [fruitSelection] $fruit,
       [fruitAttribute] $attributes
    )

    write-host

    if ($fruit -eq [fruitSelection]::apple   ) { write-host "You're buying an apple" }
    if ($fruit -eq [fruitSelection]::banana  ) { write-host "You're buying a banana" }
    if ($fruit -eq [fruitSelection]::cherries) { write-host "You're buying cherries" }

    write-host "The attributes are:" # Alternatively use $attributes in the string

    if ($attributes -band [fruitAttribute]::big  ) { write-host '  big'    }
    if ($attributes -band [fruitAttribute]::old  ) { write-host '  old'    }
    if ($attributes -band [fruitAttribute]::green) { write-host '  green'  }
    if ($attributes -band [fruitAttribute]::sweet) { write-host '  sweet'  }

  #
  # Alternatively, use hasFlag() to check for existence of a flag:
  #
  # if ($attributes.hasFlag([fruitAttribute]::big  )) { write-host '  big'  }

}

buy  banana   ( [fruitAttribute]::old   -bor [fruitAttribute]::green)
buy  apple    ( [fruitAttribute]::green                             )
buy  cherries ( [fruitAttribute]::green -bor [fruitAttribute]::old -bor [fruitAttribute]::big)
buy  apple    ( [fruitAttribute]::sweet                                                      )
Github repository about-PowerShell, path: /language/enum/flags.ps1
Testing for bits in an enum with the -band operator.

Index