icinga-powershell-framework/lib/icinga/enums/Get-IcingaProviderEnumData.psm1

70 lines
2 KiB
PowerShell

<#
.SYNOPSIS
Securely reads data from enum providers and returns either a found value
from the provider or the given value, in case it was not found or does not
match our index
.DESCRIPTION
Securely reads data from enum providers and returns either a found value
from the provider or the given value, in case it was not found or does not
match our index
.FUNCTIONALITY
Securely reads data from enum providers and returns either a found value
from the provider or the given value, in case it was not found or does not
match our index
.EXAMPLE
PS> Get-IcingaProviderEnumData -Enum $ProviderEnums -Key 'DiskBusType' -Index 6;
PS> Fibre Channel
.PARAMETER Enum
The Icinga for Windows enum provider variable
.PARAMETER Key
The key of the index of our enum we want to access
.PARAMETER Index
They index key for your provided enum. Can either the a numeric value or string
.INPUTS
System.Object
.OUTPUTS
System.String
.LINK
https://github.com/Icinga/icinga-powershell-framework
#>
function Get-IcingaProviderEnumData()
{
param (
$Enum = $null,
$Key = $null,
$Index = ''
);
if ($null -eq $Enum -Or $null -eq $Key) {
return $Index;
}
if ($Enum -IsNot [hashtable]) {
return $Index;
}
if ($Enum.ContainsKey($Key) -eq $FALSE) {
return $Index;
}
[array]$Keys = $Enum[$Key].Keys;
if (Test-Numeric -number $Keys[0]) {
# Handle Providers with numeric indexes
if ((Test-Numeric -number $Index)) {
# Our index is numeric, return the value if it exists
if ($Enum[$Key].ContainsKey([int]$Index)) {
return $Enum[$Key][[int]$Index];
}
}
} else {
# Handle Providers with string indexes
if ($Enum[$Key].ContainsKey([string]$Index)) {
return $Enum[$Key][[string]$Index];
}
}
# If above rules do not apply, simply return the index as it is
return $Index;
}